1 ポイント 投稿者 GN⁺ 6 시간 전 | 1件のコメント | WhatsAppで共有
  • 1995年から2035年までのJavaScriptとプログラミングの歴史を、SF・コメディ・真面目な講演という形式でたどる
  • 範囲はJavaScriptだけでなく、プログラミング全般の歴史にまで広がる
  • JavaScriptについて賛成か反対かのどちらかに立たない、中立的な視点を取っている
  • 言語の欠陥を率直に扱いつつも、業界に与えた最終的な影響は非常に肯定的に評価している
  • 核心的なメッセージは、JavaScriptが欠陥にもかかわらずプログラミング業界に大きな肯定的影響を残したという点である

講演概要

  • JavaScriptとプログラミング全般の歴史を1995年から2035年までたどる形式
  • 講演の性格はSF、コメディ、完全に真面目な講演が混ざり合った形
  • JavaScriptを支持したり反対したりする講演ではなく、どちらか一方の立場に整理されない
  • JavaScriptの欠陥は率直に扱われるが、業界に与えた最終的な影響は非常に肯定的に評価されている

1件のコメント

 
GN⁺ 6 시간 전
Hacker Newsのコメント
  • 2020〜2025年に地球規模の災害が来ると正確に予測していたけれど、外したのは災害の種類だけだった、というのが良い(?)
    いかにもJavaScriptらしい

    • NaN%の精度だったと見なせる
  • この人が私たちにこの傑作を残したという話がまだ出ていないのは驚きだ
    まだ見ていないなら手を止めて見ることを勧める。今日いちばんの5分間になることは保証できる
    https://www.destroyallsoftware.com/talks/wat

    • 彼の発表はどれも素晴らしい
      Boundariesはソフトウェアアーキテクチャについて私が見た中で最も洞察に富んだ動画で、今でも複雑なアプリケーションを設計するときにその教訓を思い出す
      状態があちこちに散らばった命令的ロジックに慣れている人に、関数型プログラマのように考える方法を教えてくれる良い入門資料でもある
      https://www.destroyallsoftware.com/talks/boundaries
    • この発表にはいくつか誤りがあり、私が気づいたものを2つだけ挙げる
      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を直接書かなくなる一方で、どこにでもある基盤レイヤーになる状態のことで、実際そうなったと思う

    • Flutterもあり、デスクトップOSだけでなくiOSとAndroidもサポートしている
      開発速度もかなり速い方だと思う
      ただ、Electronやネイティブアプリと比べて性能がどうなのかはよく分からない
      小さなチームなら、速度最適化より実際にリリースすることに合わせるほうがはるかに良い
    • JavaScriptは言ってみれば新しいアセンブリ層
      コンパイラは定義上、人が読めるコードを機械語に変換する
      JavaScriptの利点は、GoogleがV8で限界まで押し進め、NodeJSがバックエンドで魅力的な環境を作った結果、PDFのようにどこにでもあり、一度書けばどこでも使えることにある
      WebAssemblyに対して今まで優位を保ってきた理由もその多用途性であり、WebAssemblyはJavaScriptほど広く行き渡っていない
      最近のJavaScriptは事実上TypeScriptと同義になっており、これはとてつもない飛躍だった。ここでの陰の立役者はAngular 2だったと思う
      Angularは最初からTypeScriptを採用し、ネイティブJavaScript版も提供していたが、正直その版はほとんど使い物にならず、当時は強く批判されていた
      興味深いことに、デフォルトの選択肢としてTypeScriptを前面に出していない最後の避難所がReactだが、NextJSのような主要プロジェクトがデフォルトでTypeScriptに依存している状況なので、ReactJSも結局は崩れるだろう
      イノベーションが別のプロジェクトで先に起きてReactJSが後から追う、というのは今回が初めてではなく、ここでもAngularが先行していると思う
      JavaScriptとPythonを選んでおけば、大きく外すことはあまりない
    • その「死」がJavaScriptが直接書かれない基盤レイヤーになるという意味なら、私が生きている時間線とは違うようだ
      人々は今でも膨大な量のJSを直接書いているし、WebAssemblyもまだWebアプリケーションの一般的な実行環境を支配してはいない
      WebAssemblyの上に何かを構築している企業の例は見つけられるが、Garyが言っていた種類の大転換と混同してはいけない
    • 動画内の話では、JITが十分に良くなって仮想メモリとメモリ保護を不要にした
      そんなことはまったく起きなかった
    • Webサイトで十分なのに、なぜアプリを作る必要があるのか?
      そのためにWebブラウザをいくつも起動する必要はない
  • 数年ごとにもっと良いJavaScriptを発明し、それをまたJavaScriptにトランスパイルする

    • 大規模採用は常に良い設計に勝つ
    • 結局は全部アセンブリコード
      JavaScriptにコンパイルすること自体に本質的な問題はなく、高級言語は純粋なJavaScriptが直接提供しない多くの保証を実装できる
      これまで使ってきたほぼすべての言語の保証は、生のアセンブリでは破られうる
  • 問題は、Wasmの進化速度がここで予測されたほど速くないことだ
    DOM操作がないので、依然としてJSを接着コードとして使う必要があり、そうでなければHTMLとCSSを丸ごと捨てて、Flutterや一部のRust GUIのように、すべてをキャンバスにレンダリングしなければならない
    しかしWebの機能セットを失うのは惜しいことだ

    • Flutterを選ぶ人たちは、すべてのブラウザでキャンバスがもたらす一貫性のほうが、ばらばらに実装されたWeb機能セットを得ることより価値があると考えるだろう
    • DOMとJSは切っても切り離せない
      DOM APIはJSでアクセスされることを前提に設計されており、JSの設計やいくつかの「独特な」特徴も、DOMと一緒に使うために作られたことに部分的に由来している
    • JSはWASMよりはるかに触りやすい
      その場でデバッグできるし、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ブラウザがどんな言語であれ何らかの形のコードを実行するという話にすぎず、そんなことはすでに起きている
      動画は明らかに「驚くべき」可能性を扱っているのに、それが文字通り普段と変わらないあらゆる未来の可能性とも一致すると見るのは無理がある
    • ChromeOSに触れなかった技術的な理由はあるのか?
      純粋な好奇心から聞いている
      それと、私が見たwebOSのスクリーンショットは、スマートTVだけでなく他の場所でも復活してほしいと思わせた
  • Bernhardtの2035年タイムラインは、すでに半分を過ぎている
    JavaScriptはまだ死んでいないが、WebAssemblyの中で自分の弔辞を書いているのは確かにそう見える

    • あなたの家族の何世代もがみな死んだ後でさえ、最後のJS命令はまだ実行されている可能性が高い
      地球規模の核戦争でも起きない限り、JSが大半の人間より長生きする方に賭けるね
    • 毎月複数の顧客企業のサイトをレビューしているが、どれも何らかの形でJavaScriptを使っている
      PHPのように決して死なないだろう
  • JavaScriptは史上最高のプログラミング言語