【Programmer Legends #12】 Lars Bak:仮想マシンの魔術師とJavaScript爆速化革命
1. 序章:Webを「10倍速く」した見えないエンジン
前回【#11】で紹介したBrendan Eichが、1995年にわずか10日間で書き上げたJavaScript。
登場から長らくの間、この言語は「遅い」「Webページにちょっとした動きをつけるだけの不完全なスクリプト」と評価されていました。
しかし2008年、その常識は一夜にして覆されます。
Googleが突如発表したWebブラウザ「Google Chrome」と、その内部で動く全く新しいJavaScriptエンジン「V8」。
V8は従来のJavaScriptの実行速度を10倍〜数十倍以上という次元違いのスピードへと引き上げました。
V8 (JavaScript engine) - Wikipedia
V8 is a JavaScript and WebAssembly engine developed by Google for its Chrome browser.
en.wikipedia.orgこの爆速化革命の恩恵によって、GmailやGoogle Mapsのような重厚なWebアプリがデスクトップアプリ同様に軽快に動き、さらにはブラウザを飛び出してサーバーサイドでJavaScriptを動かすNode.jsが誕生しました。
この「V8エンジン」を生み出し、現代のWebエコシステム全体の速度限界を破った男こそが、Lars Bak(ラース・バック)です。
人は彼を「仮想マシン(Virtual Machine)の魔術師」と呼びます。
Lars Bak - Wikipedia
Lars Bak is a Danish computer programmer known for his work on virtual machines. He is a primary author of the V8 JavaScript engine, HotSpot JVM, and co-created Dart.
en.wikipedia.org2. 伝説の原点:Smalltalk、Self、そして「動的言語を速くする」執念
オーフス大学から始まった仮想マシンへの情熱
デンマークのオーフス大学(Aarhus University)でコンピュータサイエンスを学んだLars Bakは、1980年代からオブジェクト指向言語と仮想マシンの設計に没頭しました。
当時、SmalltalkやSelfといった動的オブジェクト指向言語は
「美しい概念を持つが、実行速度が非常に遅い」
という致命的な問題を抱えていました。
多くの開発者が「速度のためにはC/C++のような静的型付け言語を使うしかない」と諦めていた時代です。
しかしBakは諦めませんでした。
「プログラマーには書きやすく柔軟な言語を使わせるべきだ。遅いという問題は、下層の仮想マシンがスマートに解決すればいい」
彼はスタンフォード大学やSun MicrosystemsのSelfプロジェクトに参加し、実行時にコードを分析して機械語へ変換するJIT(Just-In-Time)コンパイル技術の基礎を築いていきました。
Just-in-time compilation - Wikipedia
Just-in-time (JIT) compilation (also dynamic translation or run-time compilations) is compilation of computer code during execution of a program at run time rather than before execution.
en.wikipedia.orgLongviewとStrongtalk
1994年、Bakは仲間とともにベンチャー企業「Longview Technologies」を設立。 Smalltalkを超高速に動作させる仮想マシン「Strongtalk」を開発します。この時培われた「動的言語のプロパティアクセスを最適化するノウハウ」こそが、のちに世界を激変させる伏線となります。
Lars Bak Profile - GOTO Conference
Biography and speaking history of veteran virtual machinist Lars Bak.
gotocon.com3. Javaを本物に育て上げた「HotSpot JVM」
「Javaは遅い」という汚名を雪いだ男
1997年、Sun MicrosystemsはLongview Technologiesを買収します。当時Sunが抱えていた最大の課題は、登場したばかりのJavaの実行速度が遅すぎることでした。
Sunに入社したLars Bakは、Java仮想マシン(JVM)の再構築チームを率いる技術リードに就任。そこで開発されたのが、今なお巨大サーバーシステムを支え続ける名機「HotSpot JVM」です。
[従来のインタプリタ] ── コードを1行ずつ解釈(遅い)
│
▼
[HotSpot JVM]
├─ 普段は軽量なインタプリタで実行
├─ 実行時に「よく使われるコード(Hot Spot)」をプロファイリング検出
└─ その「Hot Spot」だけをバックグラウンドで最適化マシンコードにJITコンパイル!
この「プログラム全体を一括コンパイルするのではなく、頻繁に走る熱い場所(Hot Spot)を見極めてピンポイントで極限まで最適化する」アプローチにより、JavaはC++に匹敵するスピードを手に入れ、世界中のエンタープライズ領域を制覇することになりました。
4. デンマークの農場から生まれた「V8」とJavaScript革命
Googleからの極秘ミッション
HotSpotを完成させた後、Bakはデンマークに帰り、静かな生活を送っていました。 しかし2006年、Googleから彼のもとに一通のオファーが届きます。
「Webブラウザの中で動くJavaScriptを、根本から爆速にする新しいエンジンを作ってほしい」
当時、Webブラウザの進化は頭打ちになりかけていました。JavaScriptが遅すぎるため、複雑なWebアプリケーションを作るにはFlashやJava Appletなどの外部プラグインに頼るしかなかったのです。
Bakはデンマークの農場にある自宅近くにGoogleの小さなオフィス(Google Aarhus)を立ち上げ、わずか数人の精鋭エンジニアとともにV8エンジンの開発に着手しました。
What is V8? - V8 JavaScript engine
V8 is Google's open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others.
v8.devV8を「バケモノ」にした3つのイノベーション
2008年にリリースされたV8は、従来のJavaScriptエンジンの常識をいくつも破っていました。
- Hidden Classes(隠しクラス) JavaScriptにはクラスがなく、オブジェクトに動的にプロパティを追加できます。通常これは辞書検索(ハッシュマップ)になるため低速です。Bakは実行時に裏で「隠しクラス」を自動生成し、C++の構造体アクセスと同等のメモリマップへ変換する手腕を見せました。
- Direct Machine Code Generation(直接マシンコード生成) 中間的なバイトコードを介さず、JavaScriptのソースコードから直接x86/ARMのマシンコードを生成して実行しました(※初期V8の設計)。
- Efficient Garbage Collection(効率的なGC) UIの動きを止めない、正確かつ高速な世代別ガベージコレクタを実装しました。
[従来のJSエンジン]
ソースコード ──> バイトコード ──> 仮想マシンで解釈実行(遅い)
[初期V8エンジン]
ソースコード ──> JITコンパイラ ──> 直接マシンコード(爆速)
世界への波及:Node.jsとWebの黄金時代
2008年9月、Google ChromeとともにV8がオープンソースとして公開されると、ソフトウェア界に激震が走りました。
翌2009年、エンジニアのRyan Dahl(ライアン・ダール)はV8の圧倒的な速度と非同期I/Oを組み合わせ、ブラウザ外でJavaScriptを動かすNode.jsを発表。 JavaScriptはWebブラウザの枠を完全に飛び出し、フルスタックWeb開発、コマンドラインツール、スマホアプリ(React Native/Electron)までをカバーする万能言語へと躍進したのです。
この怒濤の進化の起点には、常にBakが作ったV8エンジンがありました。
5. 次なるフロンティア:Dart、そしてIoT向け超軽量VMへ
V8でWebを塗り替えたBakの挑戦はそこで終わりませんでした。
Web言語の限界に挑んだ「Dart」
2011年、Bakは同僚のKasper Lundとともに新しいプログラミング言語Dartを発表します。 「JavaScriptの後方互換性の呪縛を超え、大容量アプリケーションを安全かつ高速に開発できるモダンな言語」を目指したものです。
当初はJavaScriptの代替として提案され物議を醸しましたが、のちにGoogleのクロスプラットフォームUIフレームワークFlutterの標準言語として採用され、現在では世界中のモバイル・Webアプリ開発者から愛される言語となりました。
IoTデバイスに仮想マシンを届ける「Toit」
近年、BakはGoogleを離れ、新会社Toitwareを立ち上げました。 マイコン(ESP32など)のような極小のメモリ(数万バイト)しか持たないIoTデバイス上で、安全かつ動的にオブジェクト指向コードを動かす超軽量仮想マシン「Toit」を開発しています。
クラウドからWeb、スマホ、そして小さなセンサーデバイスに至るまで、彼の「仮想マシンでソフトウェアを自由にする」情熱は衰えることがありません。
6. 設計思想:“Virtual Machinist” の美学
Lars Bakのキャリアを一言で表すなら、「徹底的な現場主義のVM職人(Virtual Machinist)」です。
言語の文法を責めるな、エンジンを鍛えよ
プログラミング言語の歴史において、多くの研究者は「より美しい文法」「より厳格な型システム」を追求して新言語を作ろうとします。 しかしBakのアプローチは対照的です。
「プログラマーが愛する言語や、すでに普及している言語を否定してはいけない。言語がどれほど歪で動的であっても、下層の仮想マシンが極限まで賢くなれば、実用的なスピードは出せる。」
Brendan Eichが10日で作ったJavaScriptの歪みや歴史的経緯を文句ひとつ言わずに受け入れ、それを裏から極限まで磨き上げて「世界最強のプラットフォーム」に昇華させた立役者こそがLars Bakなのです。
7. 結び:僕たちが毎日動かしている「見えない心臓」
私たちが日常的にPCやスマホでブラウザを開き、Webサイトを閲覧し、Webアプリを操作するとき、その画面の裏側では常にLars Bakが設計したアルゴリズムが蠢いています。
- Javaの基幹システムを支える HotSpot JVM
- ChromeやEdge、Node.jsで回る V8 Engine
- スマホアプリを動かす Dart / Flutter
彼の名前が表舞台のWebプロモーションや派手なニュースに躍り出ることは滅多にありません。 しかし、彼が創り出した「見えないエンジン」がなければ、現代のWebは今よりもはるかに重く、不便で、退屈な場所だったはずです。
「コードを速くする」という一点に生涯を捧げたデンマークの仮想マシン職人。 彼が打ち立てたイノベーションは、今日も世界のデジタルインフラを静かに、そして爆速で動かし続けています。
出典・参考資料:
- WIRED: “The Story of Google Chrome” (2008)
- GOTO Conference: Lars Bak Speaker Biography
- Google Open Source: V8 JavaScript Engine Architecture
- Wikipedia: Lars Bak / V8 / HotSpot / Dart