#:g1: Common Lisp以外の言語でcl-benchを走らせてみる

Posted 2022-02-20 23:37:47 GMT

表題のとおりなのですが、cl-benchというCommon LispのベンチをCommon Lisp以外の言語で走らせて、Common Lispと比較するのも面白いかなと思ったので試してみました。

今回試したのは、GoDとCommon Lispの各処理系の比較ですが、全部移植するのも大変なので10種類程度の移植となっています。

言語をまたいでベンチをとってみての感想

まだ全部のベンチを移植して比較してみたわけではないので、第一感というところですが、

—あたりの印象をもちました。
インライン展開については、fibackermannあたりは関数呼び出しの速度比べですが、DやGoと同じ程度にインライン展開されるようにするには、結構書き方を調整しないと駄目だと思います。ちなみにD(dmd)のコンパイルオプションでは-inlineを付けていますが、つけない場合は結構遅くなります。

また、cl-benchには、型の指定や扱いがちぐはぐなコードがあったりもするなという印象です。
integerの配列と型指定しているのに、listオブジェクトを検索していたりしますが、コンパイラが賢ければnilに置き換えられてもおかしくなさそうです。
(なお、他の言語では要素の型を合せて比較しないと色々と面倒)

まとめ

あたり前ですが、今時の言語のGoなどは今時の処理に使われそうな処理が速いという印象です。 翻ってCommon Lispですが、やはり記号処理に強いのかなと思いました。
記号処理に強いCommon Lispというのを活かすのは、なかなか難しそうですが色々模索してみたいところです。
また、Common Lispと競合しそうなところで、Juliaあたりとも比較してみたいと思っています。

(2022-02-22 04:42) Juliaにも同様のものを移植し計測してみました。
(2022-02-23 16:55) Rustにも同様のものを移植し計測してみました。

ベンチ結果


HTML generated by 3bmd in LispWorks 8.0.0

comments powered by Disqus