HN🔥 51
💬 27

【脱C言語】Go言語でBPFプログラムを書こう!手軽で爆速なネットワーク開発のすすめ

boratanrikulu
5日前

ディスカッション (9件)

0
boratanrikuluOP👍 51
5日前

BPF(Berkeley Packet Filter)プログラムをC言語で書くのに疲れていませんか?このプロジェクトは、低レイヤーなBPF開発をGo言語で完結させるための画期的なアプローチを提供します。C言語特有の複雑なメモリ管理やビルド設定から解放され、より安全かつ生産性の高い開発体験を実現しましょう。Goの簡潔さを活かして、Linuxカーネルレベルのパワフルなツールをサクサク構築できます。

1
shirleyquirk
約20時間前

すみません、なぜネイティブ言語で書かない理由があるんですか?

2
sparrc
約20時間前

自分は主にGoの開発者で、Goという言語が大好きだし、大抵のユースケースではGoを推すつもりだけど、正直言ってBPFに関してはRustが輝く場所だと思うな。

3
a1o
約20時間前

BPFって何?

4
badc0ffee
約20時間前

eBPFの世界では、カーネル内のC関数を呼び出すことになるし、基本的には構造体やnull終端文字列のようなCのデータ型を使うことになる。ループは使えないし(コンパイラによって展開される)、可変長引数関数も使えない。それに、Go特有の便利な機能、例えばgoroutineやselect、contextといったものも全く使えないんだ。

そもそも、なぜこれを使いたいのかよく分からないな。eBPFを書くなら、結局Cのカーネルソースの読み方を知っておく必要があるんだから。

5
hnlmorg
約19時間前

なぜ直接BPFを生成せずにトランスパイルするのか

Goコンパイラのgcには、LLVMベースのBPFバックエンドがないんだ。それを追加するのは数年かかるコンパイラプロジェクトになる。rustcはLLVM上で構築されているからAyaは機能する。だからgobeeはCを出力してClangのBPFバックエンドを再利用しているわけで、それによって成熟したコード生成やBTF、CO-REリロケーションの恩恵をタダで受けられるんだよ。

TinyGo (https://tinygo.org/) の方が適しているんじゃないかと思ったんだがどうだろう:

TinyGoは、LLVMベースの新しいコンパイラを作成することで、Goプログラミング言語を組み込みシステムやモダンなWebにもたらす。

TinyGoはあまり触ったことがないから、他の人の経験談を聞いてみたいな。

6
razighter777
約19時間前

覚えておいてほしいのは、GoやRust、eBPFのメモリ安全性に関するメリットの多くは、カーネル内のeBPFには適用されないということ!カーネルのeBPFは、ベリファイアを通じて配列やループの境界、メモリへのアクセス、プログラムの正確性を強制的に検証するからね。ほとんどのユースケースでは、依然としてCでeBPFを書くのが一番だと思うよ!

7
i2km
約18時間前

READMEを一目見ただけで、作りが雑なのが丸わかりだな。

8
hbwang2076
約18時間前

クリーンな実装だね。自分がいつも確認するのは、何かがうまくいかなくなった時にどうなるかということ。優れたエラーハンドリングこそが、週末の趣味プロジェクトと実際に人が使うツールを分ける境界線だよ。