自己紹介@プログラミング言語処理系が好きな人の集まり Google slide: https://docs.google.com/presentation/d/1Dw2ULrcGf2ajrBM6u8VzoAXJLYJh3GDFj3gzSkwD_YA/edit?usp=sharing
@udzura作ったり作ろうとしているものの話@プログラミング言語処理系が好きな人の集まり 定例ミートアップ#2
View Slide
Uchio Kondo@udzuraRubyist。Rustに爆ハマり中。低レイヤプログラミングワナビです。好きなLinuxシステムコール:unshare(2), open_by_handle_at(2)
作ってるものPuruaPure Rust で実装した Luahttps://github.com/udzura/purua
Purua についてPUre-RUst-luAgopher-lua という実装を大きく参考している。ただ、今のところVMを実装しておらず(tree-walkで実行)Opcodeもないそもそも何も分からないので全て手探り
動くものフィボナッチ数の計算(関数定義、呼び出し、if文だけでこんなに苦しいだなんて)
めちゃくちゃ遅い。まあ最適化とかは遠い将来で...Purua (185c5e6e72101342fba08c98307f888f97432269)Ruby (ruby 2.7.1p83 [x86_64-darwin19])
動くもの #2イテレータが動くようになった(えらい)Luaのイテレータの仕様を何も知らなかったので大変だった。
動くもの #3RustからLuaの関数も定義可能になっている(と言うより先にそっちを書いた)。Result 使えます!嬉しくないですか。
細かい話はブログに書いていたhttps://udzura.hatenablog.jp/entry/2021/05/08/150858
Puruaの今後* そもそもLuaと言える状態じゃないので残った機能を頑張って実装。luatest? というやつが走るようにしたい。* クロージャの実装が辛そうなので怯えている* そもそも、VMを作りたい。* LuaのVMはレジスタ型だと聞いて、難しそう... ってなっている。* crafting interpreterなどを読んでまずはスタック型から...
作りたいものtl;drC言語以外で書けるeBPFプログラムのコンパイラを作りたい。
(e)BPF...って?カーネルで高速にフィルタリングするやつ(雑)。cとeがある。元々パケットフィルタ用途だが、カーネルの情報なんでもフィルタ集計できるように。カーネル内で動くのでカーネルの機能が使える。
言語・環境としてのeBPF* 64bit固定長の命令* 10個のレジスタがある* R10はフレームポインタ* 512バイトのスタック
eBPF の仕様の話は僕の説明よりmmisonoさんの記事の方がいいと思う「BPFのアーキテクチャ、命令セット、cBPFとeBPFの違い」https://www.atmarkit.co.jp/ait/articles/1812/10/news016.html
BPF を「使う」には* BCCのような軽量言語向けのSDKを使う場合* Python, Lua, Ruby(拙作)などある* その場で動的にCコードを生成してコンパイルする感じ* libbpf + CO-RE を使う* C/C++, Go, Rust など、BPFプログラムをバイナリに組み込む* カーネルバージョンに関わらずある程度動かせるように
BPF プログラムを「作る」には* C コンパイラの bpf ターゲットを使う。* Clang$ clang -O1 -g -c -target bpf \foo.bpf.c -o foo.bpf.o* GCC も対応するようになったらしい
BPFプログラムを動かす例左のようなCコードを書く。あるcgroupに所属するプロセスの、デバイスタイプごとのアクセス可否をフィルタリングするBPF-target bpf でコンパイルするとdev_cgroup.o ができる
コンパイルされたBPFプログラムobjdump などで命令を確認できる対応する命令をbpf-docsやlinux/bpf_common.h, linux/bpf.hなどを眺めて確認する
ロードした結果cgroupに所属しているときはurandomにアクセスできないcgroupから外れるとできる
BPFの現況カーネル側のBPFプログラムは、実質的にC言語で書く以外選択肢がない(*)(そのプログラムをロードして情報を取得する外側については言語を問わない。libbpfのようなライブラリもある)(*) 選択肢の詳細 https://www.atmarkit.co.jp/ait/articles/1812/26/news010.htm l
C以外で書けるようにしたい
コンパイラを書く...ってコト❓