今日ちょっと話してて、golang は dll みたいな仕組み持ってたりするのかな?と思った。それができれば別途ビルドしたプラグインを実行時に差し込める。
2014-01-17 23:44:03CGOでできそう? / “Big Sky :: Go言語でDLLの読み込み” http://t.co/wWmzwG9kr6
2014-01-17 23:48:05@sonots それやるとそもそもGo言語のビルドのうれしさが無くなるので,やるならRubyみたいなのをGoでラップした方が良いよね,みたいな話は前したことある
2014-01-17 23:49:01@sonots pluginsというディレクトリにそれっぽいコードはありますが、そこからは @moriyoshit に聞かないとわからないですね。
2014-01-17 23:51:45@repeatedly GoからRubyのコードを呼べるような仕組みを作るということでしょうか。それで既存のプラグインが動くなら強いですね。
2014-01-17 23:52:26@sonots http://t.co/Va8rjn5dft これを読むと、それをやろうとしているようにしか見えないですw
2014-01-17 23:55:09@sonots それやるとこういう問題が出てくる.まぁ出来なくはないけどね > https://t.co/vELUtzvm4N
2014-01-17 23:55:11@kuenishi @sonots それよむ限り,GoからCのコードは動的に呼べるけど,Goそのものをdllにすることは出来ない?多分全部にランタイムが同梱されているイメージなんですが
2014-01-17 23:56:38@repeatedly libPythonとかlibrubyをリンクしてevalさせちゃえばできそうじゃない? ABIが違うのでgoのコードをプラグイン化するのはfork+spawnとかじゃないと無理ね
2014-01-17 23:58:39@Jxck_ さっき懇親会でちょっと話してた fluentd の golang 実装についてなのですが、プラグインを単体でビルドして dll みたいな感じで動的に差し込める仕組みを golang で実現しようとしたら、CGO というものを使うのが一般的なのでしょうか?
2014-01-18 00:00:14いやしかしRubyもPythonもlibpthreadを使ってるので、それをGoのランタイムに入れるとものすごいことになりそうな気がするおz
2014-01-18 00:00:47@sonots あー、そういうのは出来ない気がしますが、その辺は詳しくないんで正直わからないです。まさしく @moriyoshit さんが詳しいかと。
2014-01-18 00:04:47@kuenishi @repeatedly Go でやるなら、 Heka みたいに Lua で、 fluentd の out_exec_filter 相当の処理を書けるようにして、あとは全部プラグインはビルド時に組み込みで良いと思います。クロスコンパイルだって楽だし。
2014-01-18 00:06:34@methane あー、どっちかというとプラグインの配布のことを考えていました。ユーザさんが、追加したいプラグインに加えて本体のソースコードをおとしてきて自分でビルドしないといけないのかな、と。
2014-01-18 00:17:16