組み込み用プログラミング言語のパフォーマンス比較
April 21, 2015 at 01:10 AM | categories: v8, lua, lisp, programming, ruby |組み込み用のプログラミング言語といえばLuaがよく使われるけど、最近はmrubyやsquirrelもあって選択肢が広がってきた感があるのでどういう特徴があるのかを知るためにベンチマークをやってみた。
今回対象にしたのは以下。
- Lua - v5.1
 - LuaJIT - v2.0.2
 - squirrel - v3.0.7
 - V8 - v3.30
 - mruby - v1.1.0
 - ecl (Embeddable Common-Lisp) - v15.3.7
 
ここでのベンチマークは言語自体のスピードの比較ではなく、どちらかというと組み込む際に必要なオーバーヘッドやホスト言語側での処理にかかる部分に重点を置いた。
ベンチマークの処理では、関数呼出し比較用のecho関数と、テーブル操作比較用のinvert関数を組み込み言語側に実装して、それを繰り返し呼び出すようにした。
また、なるべく公平になるように、組み込み言語側の関数は初期化時にグローバルスコープ(組み込み言語側のグローバルスコープ)に登録しておき、すべて同じインターフェースから呼ぶようにした。
使用したコードは以下。そのうち別の言語とか追加するかもしれない。
https://github.com/taksatou/embench
結果
echo 100000 回実行
 
invert 100000 回実行
 
https://gist.github.com/taksatou/8de85bbfe79548864cf5#file-result-md
備考
- control は同等の処理をホスト言語側で実装したもの
 - LuaJITは
LD_PRELOADで切り替えた - eclはechoが遅くてやるきを失ったのでinvertのほうは省略
 
所感
- Luaがパフォーマンスと組み込みやすさの点でやはり一番使いやすい。LuaJITをつかうとさらに数割速くなる。
 - squirrelは言語機能的にはluaのスーパーセットという感じで、パフォーマンスもluaと同じ程度。ただしドキュメントはあまりない。
 - V8はマルチスレッド環境や大規模なものには向いてるかもしれない。組み込みはちょっとめんどくさい。
 - mrubyはechoだと意外と健闘しているがテーブル操作は速くない。組み込みはLuaと同じくらい簡単。
 - eclにはもうちょっとがんばってほしい。組み込み方法に問題があるのかもしれない。
 
About Me
| 
         | 
        
        mojavy | 
    
Recent posts
95/5 Mbps とは
(August 30, 2015 at 04:22 PM)組み込み用プログラミング言語のパフォーマンス比較
(April 21, 2015 at 01:10 AM)最近読んだ本
(April 05, 2015 at 01:23 PM)Phabricatorを使ったワークフローについて
(March 02, 2015 at 08:55 PM)dnsimpleでダイナミックDNSをつかう
(December 23, 2014 at 08:02 PM)www2014のアドテク関連のResearch Trackメモ
(October 06, 2014 at 09:05 PM)flappymacs がMELPAに登録されました
(July 16, 2014 at 01:07 AM)EmacsでFlappy Birdっぽいもの書きました
(July 10, 2014 at 08:01 PM)
Recent Popular posts
Popular posts
Categories
- C (rss) (3)
 - R (rss) (1)
 - adtech (rss) (1)
 - advent calendar (rss) (2)
 - algorithms (rss) (2)
 - android (rss) (2)
 - aws (rss) (1)
 - blog (rss) (2)
 - blogofile (rss) (3)
 - books (rss) (1)
 - c++ (rss) (1)
 - chef (rss) (4)
 - common lisp (rss) (10)
 - debian (rss) (2)
 - dns (rss) (1)
 - elasticsearch (rss) (1)
 - elf (rss) (1)
 - elisp (rss) (1)
 - emacs (rss) (5)
 - english (rss) (1)
 - game (rss) (2)
 - gearman (rss) (1)
 - git (rss) (1)
 - github (rss) (1)
 - gitlab (rss) (1)
 - golang (rss) (2)
 - history (rss) (1)
 - impress.js (rss) (1)
 - internet (rss) (1)
 - ios (rss) (3)
 - jekyll (rss) (1)
 - jenkins (rss) (1)
 - linux (rss) (4)
 - lisp (rss) (2)
 - ltsv (rss) (1)
 - lua (rss) (1)
 - mac (rss) (3)
 - mach-o (rss) (1)
 - memo (rss) (2)
 - mustache (rss) (1)
 - note (rss) (1)
 - objective-c (rss) (4)
 - os (rss) (1)
 - osx (rss) (2)
 - others (rss) (1)
 - paco (rss) (1)
 - pdf (rss) (1)
 - php (rss) (2)
 - postfix (rss) (1)
 - programming (rss) (12)
 - project management (rss) (1)
 - python (rss) (5)
 - quicklinks (rss) (6)
 - raspberry pi (rss) (2)
 - redmine (rss) (1)
 - reveal.js (rss) (1)
 - ruby (rss) (10)
 - sbcl (rss) (2)
 - security (rss) (1)
 - shell (rss) (2)
 - smtp (rss) (1)
 - solr (rss) (1)
 - statistics (rss) (2)
 - tips (rss) (10)
 - tmux (rss) (3)
 - toml (rss) (1)
 - tools (rss) (1)
 - twitter (rss) (1)
 - ubuntu (rss) (1)
 - unix (rss) (5)
 - v8 (rss) (1)
 - web (rss) (7)
 - xcode (rss) (1)
 - zeromq (rss) (2)
 
Archives
- August 2015 (1)
 - April 2015 (2)
 - March 2015 (1)
 - December 2014 (1)
 - October 2014 (1)
 - July 2014 (3)
 - March 2014 (6)
 - February 2014 (4)
 - November 2013 (3)
 - October 2013 (4)
 - September 2013 (2)
 - July 2013 (2)
 - June 2013 (2)
 - May 2013 (1)
 - April 2013 (6)
 - March 2013 (3)
 - February 2013 (8)
 - January 2013 (5)
 - December 2012 (1)
 - November 2012 (6)
 - October 2012 (7)
 - August 2012 (1)
 - July 2012 (9)
 - June 2012 (1)
 - April 2012 (1)
 - December 2011 (2)
 - November 2011 (2)