kubo39's blog

ただの雑記です。

Gotanda.pm #8

参加して発表もしてきました。(発表用のスライド、どこかにあげてもらったんだけどどこか忘れた。。資料はよしなに扱ってもらってよいです。

いろいろ発表聴いてたんですがずっとトイレ行きたすぎて全然集中できなかった。。あとLTってまじめな内容だと5分て厳しいですね、という感想を抱くなど。

発表内容はPerlからD言語呼び出す方法、みたいな感じでしたが、雑すぎてあまりよくなかった。。反省。。

まあ extern(C) ある言語は普通にFFI経由でもC拡張経由でも呼び出せますよね、という話なんですが、GCヒープ使うときとか例外とかはちょっと意識しないといけないとこがあるという感じです。

一応お試しみたいなのは置いてます、がフィボナッチくらいは書いたほうがよかったか。。 https://github.com/kubo39/d-and-perl

ついでにスライドで書ききれなかったことをさらっと。

FFI経由

この方法のメリットはXSを書かなくていいことかなと。結局C拡張経由ってようはXS書かなきゃならんので、それはちょっと厳しい。

デメリットあげるなら、FFI経由するオーバヘッドですねえ。Dの世界とPerlの世界をいったりきたりするとけっこう気になってくるかもしれない。

XS

静的リンクライブラリをリンクする方法もオブジェクトファイルをリンクする方法もそうですが、XS内から呼び出す場合は普通に関数callのオーバヘッド以外はかからない(はず)。

もちろんXSを書かなければならないのがデメリットと言えると思いますが。

Dの世界でPerlにさわる

SV構造体とかD言語内でごにょごにょするという世界観です。どのへんで定義してるかわからないですが、XSの世界ってプリプロセッサマクロと正規表現による置換の世界なのでできたとしてもメンテできねえだろ、、という気持ちになったので触らなかった。。できなくはないと思うので読者への課題としたい。

D言語で拡張を書くメリット

いろいろありますが、

  • C言語より強力な型チェックの機能
  • GCやscope文のようなリソース開放の仕組み
  • 邪悪なプリプロセッサマクロの代替が使える(static ifやversion)
  • テンプレートの恩恵を受けられる

個人的にに安全にプログラミングを書くために求めている機能が使えるのが魅力だと思っています。

それはとくにマルチスレッドプログラミングにおいて顕著なのですが、Perlの世界で協調して扱えるかはよくわかってないので

  • Thread-Local Storage
  • immutable
  • sharedが型であること
  • 標準ライブラリ std.parallelismとstd.concurrency

このあたりのキーワードにとどめておくことにしましょう。