rustでentrクローンしてみようとした

rustがそろそろ1.0出るってことでしばらく前からいじり始めた。

entrをgoでcloneしたgotrを見てちょっといいお題かも?とか思って書いてみようと思った。

totem3/rustr · GitHub

結果

今んとこできたこと

イベント検知して渡されたコマンドを実行できるようになった。-c で画面をクリアするところまで。

けど後で書くけど、エディタで編集するとダメという残念仕様になってる。

更には本家はplatform非依存(多分?)だけどこれはinotify使えないとダメなのでlinux(でかつinotify使えるバージョン)限定

これの開発中entrでcargo buildを回し続けてたけど、代わりに自分が書いたclone使えるかっていうと使えないというレベル。

entrの-dとか-rオプションがなんなのかよくわからんかったので実装してない。

あと排他処理とか実装してないのでひどい。

その他感想?

やはり本家はよくできてるなーと。

inotifyをわかってないので原因わかってないけど、エディタで編集すると単純にinotify使うだけだと監視し続けられないのかな??その後のイベント検出しなくなる(DELETE_SELFが飛ぶからかな?)

けどentrはうまくやってるっぽい。

inotify? fsnotify?

軽い気持ちで書き始めて後で気付いたけどinotifyとかさっぱりわかってなかった。

inotifyとfsnotifyの違いがわかってなくて、fsnotifyのつもりでinotify-rsを使っててmacで動かない理由がしばらくわからなかった

macではkqueueというのがあるのね。go-fsnotifyではmacではkqueueをラップしてた。

fsnotify-rsmacとかlinuxの部分を作ってやろうと思ってffiと数日戦った。

けど、macのkqueueでkeventがeventを待ってくれずすぐ変な値を返してきてうまくいかず、cの知識もrustの知識もないのでどこがいけないのかよくわからず断念した

ownership難しいな

rustについてはやはりownershipが難しい。

ちょっとstructにしてみようとかthreadで使ってみようとか思うと途端に扱いが難しくなる(気がした)

'staticじゃないとダメだと言われたり、does not live long enoughが解決できなかったり

大体はとりあえず&を付けてみたりしてなんとかなるところあるけど、それ全くわかってないしちょっと複雑になると太刀打ちできなくなる

RcとかArcとかRwLockとかその辺ちゃんと使えるようになる必要があるかなー

Go便利

参考にGoのコードをたくさん読んで、Goいいなと思った