A-Listers

140字に収まらない海外テックネタヘッドライン

C言語より高速なJavaScriptによるバイナリ操作が話題

with one comment

JavaScriptなどのスクリプト言語は動作が遅く、最適なパフォーマンスを得るにはC/C++で実装しなければならないという常識に挑んだ先進的な講演が話題になっています。この話題の発端は2012年10月7日から10月8日までベルリンで開催されたJSConf.euでFelix Geisendörfer氏が行った講演です。

左側がFelix氏

彼の講演の題材はnode.jsからMySQLに接続する為のバインディングのパフォーマンスに着目しています。2010年当時、node.jsにはMySQLのバインディングが存在しておらず、増井さん作のnode-mysqlモジュールが開発中の状態でした。このモジュールはJavaScriptでバイナリを解析しておりJavaScriptのみで開発されていました。この状況を受けてFelix氏が新たにnode-mysqlモジュールを新規に開発を始めました。このモジュールもJavaScriptでMySQLのプロトコルを処理しています。

続いて発表されたのがOleg Efimov氏のmysql-libmysqlclientバインディングです。こちらの場合はその名の通りC言語で実装されたlibmysqlを利用しておりパフォーマンスが大きく向上しています。

この圧倒的な性能差はちょっとした最適化で埋まるものではなさそうです。これにはFelix氏も心が折れかけ、「マテ、V8 ってコードをアセンブラにするんだろ?それってめちゃめちゃ速いんじゃないか?それになんだかんだいっても Node ならどんな問題でも解決できるんじゃないの?なに騙されてたの?(But wait … wasn’t V8 supposed to turn my code into assembly? And was it not supposed to be insanely fast? And wasn’t node going to solve all of my problems anyway? Had I been lied to?)」弱気になりつつも、気合を入れ直します。そして才気溢れるFelix氏はNode.jsの底力を信じてパーサーの改良を努力し、なんとlibmysqlを越えるパフォーマンスを実現します。

素晴らしい改善です。しかしなんと更に彗星の如く現れたバインディングがさらに圧倒的なパフォーマンスを見せつけます。それがBrian White氏が公開したnode-mariasqlです。

この性能差にはFelix氏の心も折れかけ、「もうCのバインディングに勝つなんて無理だよ…( maybe it’s time to finally give up and accept that I cannot compete with a well engineered C binding.)」と弱音を吐きかけますが、彼の更なる努力がJavaScript実装でmariasqlを越えるパフォーマンスを引き出します。

彼のパーサーの再実装から得られた知見は元記事の後半部分に記載されています。V8の特性に配慮したJavaScriptを書くことでの極限のパフォーマンスを実践したい方にとっては参考になるのではないでしょうか。というか、彼スゴすぎますね。

via:https://github.com/felixge/faster-than-c

Written by yandod

2012/10/10 @ 11:24

カテゴリー: Uncategorized

Tagged with ,

1件のフィードバック

Subscribe to comments with RSS.

  1. […] C言語より高速なJavaScriptによるバイナリ操作が話題を読んでまとめると […]


コメントを残す