組み込み用のプログラミング言語といえばLuaがよく使われるけど、最近はmrubyやsquirrelもあって選択肢が広がってきた感があるのでどういう特徴があるのかを知るためにベンチマークをやってみた。
今回対象にしたのは以下。
ここでのベンチマークは言語自体のスピードの比較ではなく、どちらかというと組み込む際に必要なオーバーヘッドやホスト言語側での処理にかかる部分に重点を置いた。
ベンチマークの処理では、関数呼出し比較用のecho
関数と、テーブル操作比較用のinvert
関数を組み込み言語側に実装して、それを繰り返し呼び出すようにした。
また、なるべく公平になるように、組み込み言語側の関数は初期化時にグローバルスコープ(組み込み言語側のグローバルスコープ)に登録しておき、すべて同じインターフェースから呼ぶようにした。
使用したコードは以下。そのうち別の言語とか追加するかもしれない。
https://github.com/taksatou/embench
https://gist.github.com/taksatou/8de85bbfe79548864cf5#file-result-md
LD_PRELOAD
で切り替えたLispには'p'という接尾辞がつく名前の関数があるが、この'p'はpredicateのこと。
ところが、HaskellやOCamlにも'p'という接尾辞がつく関数があって、そちらはprimeの意味で使うらしい。
シングルクオート(ダッシュ)記号は英語だとprimeというので、例えばfoo'
という名前の関数はfoo
という名前のヘルパー関数的なもの、ということになる。
ちなみに、OCamlだとシングルクオートが識別子につかえるのでfoo'という名前の関数も結構あるらしい。
まぎらわしい、かと思ったけど使う文脈が違うし意外とそうでもないか。
]]>