JavaScriptの誕生と死 (2014)
(destroyallsoftware.com)- 1995年から2035年までのJavaScriptとプログラミングの歴史を、SF・コメディ・真面目な講演という形式でたどる
- 範囲はJavaScriptだけでなく、プログラミング全般の歴史にまで広がる
- JavaScriptについて賛成か反対かのどちらかに立たない、中立的な視点を取っている
- 言語の欠陥を率直に扱いつつも、業界に与えた最終的な影響は非常に肯定的に評価している
- 核心的なメッセージは、JavaScriptが欠陥にもかかわらずプログラミング業界に大きな肯定的影響を残したという点である
講演概要
- JavaScriptとプログラミング全般の歴史を1995年から2035年までたどる形式
- 講演の性格はSF、コメディ、完全に真面目な講演が混ざり合った形
- JavaScriptを支持したり反対したりする講演ではなく、どちらか一方の立場に整理されない
- JavaScriptの欠陥は率直に扱われるが、業界に与えた最終的な影響は非常に肯定的に評価されている
1件のコメント
Hacker Newsのコメント
2020〜2025年に地球規模の災害が来ると正確に予測していたけれど、外したのは災害の種類だけだった、というのが良い(?)
いかにもJavaScriptらしい
この人が私たちにこの傑作を残したという話がまだ出ていないのは驚きだ
まだ見ていないなら手を止めて見ることを勧める。今日いちばんの5分間になることは保証できる
https://www.destroyallsoftware.com/talks/wat
Boundariesはソフトウェアアーキテクチャについて私が見た中で最も洞察に富んだ動画で、今でも複雑なアプリケーションを設計するときにその教訓を思い出す
状態があちこちに散らばった命令的ロジックに慣れている人に、関数型プログラマのように考える方法を教えてくれる良い入門資料でもある
https://www.destroyallsoftware.com/talks/boundaries
Array(16)を呼んだあと区切りが16個あると言っているが、実際には15個しかないのでBatmanジョークが少し崩れているまた、
{}+[]を使ってオブジェクトにリストを足していると説明し、その後[]+{}が[object Object]になるのとは結果が違うと茶化しているが、実際には({}+[])と書いてもやはり[object Object]になるなぜ
{}+[]が違うのかは謎として残しておく。ヒント:Gurer vf ab bowrpg gurer.JavaScriptは実際にコンパイル対象になったし、当時の動画ではasm.jsだったが、今ではWebAssemblyが出てきた
実際に実装され、ネイティブに近い速度で動いているのを見ると、予測はかなり当たっていたように思える
私は主にTypeScriptを使っているし、ElectronのおかげでWeb技術がデスクトップアプリとしてパッケージ化され、Webの文法が一般的なプログラムの中にも入り込んだ
Electronは重くていまいちだと言われることもあるが、Mac・Windows・Linuxを一度にサポートする最速の方法でもある
ここで言う「死」とは、JavaScriptを直接書かなくなる一方で、どこにでもある基盤レイヤーになる状態のことで、実際そうなったと思う
開発速度もかなり速い方だと思う
ただ、Electronやネイティブアプリと比べて性能がどうなのかはよく分からない
小さなチームなら、速度最適化より実際にリリースすることに合わせるほうがはるかに良い
コンパイラは定義上、人が読めるコードを機械語に変換する
JavaScriptの利点は、GoogleがV8で限界まで押し進め、NodeJSがバックエンドで魅力的な環境を作った結果、PDFのようにどこにでもあり、一度書けばどこでも使えることにある
WebAssemblyに対して今まで優位を保ってきた理由もその多用途性であり、WebAssemblyはJavaScriptほど広く行き渡っていない
最近のJavaScriptは事実上TypeScriptと同義になっており、これはとてつもない飛躍だった。ここでの陰の立役者はAngular 2だったと思う
Angularは最初からTypeScriptを採用し、ネイティブJavaScript版も提供していたが、正直その版はほとんど使い物にならず、当時は強く批判されていた
興味深いことに、デフォルトの選択肢としてTypeScriptを前面に出していない最後の避難所がReactだが、NextJSのような主要プロジェクトがデフォルトでTypeScriptに依存している状況なので、ReactJSも結局は崩れるだろう
イノベーションが別のプロジェクトで先に起きてReactJSが後から追う、というのは今回が初めてではなく、ここでもAngularが先行していると思う
JavaScriptとPythonを選んでおけば、大きく外すことはあまりない
人々は今でも膨大な量のJSを直接書いているし、WebAssemblyもまだWebアプリケーションの一般的な実行環境を支配してはいない
WebAssemblyの上に何かを構築している企業の例は見つけられるが、Garyが言っていた種類の大転換と混同してはいけない
そんなことはまったく起きなかった
そのためにWebブラウザをいくつも起動する必要はない
数年ごとにもっと良いJavaScriptを発明し、それをまたJavaScriptにトランスパイルする
JavaScriptにコンパイルすること自体に本質的な問題はなく、高級言語は純粋なJavaScriptが直接提供しない多くの保証を実装できる
これまで使ってきたほぼすべての言語の保証は、生のアセンブリでは破られうる
問題は、Wasmの進化速度がここで予測されたほど速くないことだ
DOM操作がないので、依然としてJSを接着コードとして使う必要があり、そうでなければHTMLとCSSを丸ごと捨てて、Flutterや一部のRust GUIのように、すべてをキャンバスにレンダリングしなければならない
しかしWebの機能セットを失うのは惜しいことだ
DOM APIはJSでアクセスされることを前提に設計されており、JSの設計やいくつかの「独特な」特徴も、DOMと一緒に使うために作られたことに部分的に由来している
その場でデバッグできるし、LLMに突っ込んでみることもできるし、ラッパーもないので、触って実験して作業するのがずっと簡単だ
2014年にCanadian Undergraduate Software Engineering Conference(CUSEC)で、Gary Bernhardtがこの発表をライブでやっているのを見た
PNaClはその前年に登場したばかりで、GoogleはChromeとChromeOSの中でOpenSSHやRDPクライアントをクロスコンパイル・実行・サンドボックス化するのに使っており、Mozilla/Firefox側はそれへの対抗としてasm.jsを提案していた
当時はただ面白かっただけだが、今見るとそのアイデアのかなり多くが生き残ったのは驚きだ
Gary BernhardtのWatライトニングトークは、私が最も好きな発表だった
この投稿タイトルの発表より、わずか2年前のものだ
[1]: https://www.destroyallsoftware.com/talks/wat
ほとんどすべてが筋書き通りに起きた
あとは、完全にブラウザ技術ベースの別のOS、あるいはWASM OSを待てばいい
webOSとFirefox OSは、少なくとも20年は時代を先取りしていた
WASMはその命題を裏づけるのではなく、反証している
その命題とは、JavaScript互換のソースが未来の基盤になるというものであり、一般的なJavaScriptがひどい基盤であるにもかかわらず、その互換サブセットを効率よく解釈するよう高度に最適化されたJavaScriptエンジンが未来の汎用プラットフォームになりうる、という主張だ
WASMは、低レベルターゲットになるよう設計されたJavaScript互換ではない新しい基盤を作ることで、これを根本から退けている
WASMがその命題を確認していると言うのは、みんながブラウザ内にRustインタープリタを持つ未来がその命題を確認していると言うのと同じくらい奇妙だ
そう主張するなら、結局のところWebブラウザがどんな言語であれ何らかの形のコードを実行するという話にすぎず、そんなことはすでに起きている
動画は明らかに「驚くべき」可能性を扱っているのに、それが文字通り普段と変わらないあらゆる未来の可能性とも一致すると見るのは無理がある
純粋な好奇心から聞いている
それと、私が見たwebOSのスクリーンショットは、スマートTVだけでなく他の場所でも復活してほしいと思わせた
Bernhardtの2035年タイムラインは、すでに半分を過ぎている
JavaScriptはまだ死んでいないが、WebAssemblyの中で自分の弔辞を書いているのは確かにそう見える
地球規模の核戦争でも起きない限り、JSが大半の人間より長生きする方に賭けるね
PHPのように決して死なないだろう
JavaScriptは史上最高のプログラミング言語だ