先日、ロンドンで開催されたFullStack conferenceにおいて、JavaScriptを開発したBrendan Eich氏と、JSONを開発して"JavaScript: The Good Parts"の著者であるDouglas Crockford氏がJavaScriptの将来について語った。Eich氏のカンファレンスのトークの中で、主にフォーカスしていたのは機能のイテレートと改善に関するものであった。Crockford氏は、JavaScriptが導くソフトウェアエンジニアリングの次のパラダイムとして、グローバルに分散された安全な非同期プログラミングにフォーカスした。
Crockford氏は、単一のアドレス空間を持つ単一のマシンの古いアーキテクチャに積まれているため、JavaScriptを含めた現在の全てのプログラミング言語が不必要に難しいと指摘する。だが、JavaScriptは関数やオブジェクトでこのような面白いことをするため、Crockford氏は、JavaScriptが他の言語よりもこの移行に役に立つと考えている。
Eich氏のJavaScriptに対する最大の後悔は、ユーザーの問題に対するよりよい解決策を考えるよりも、言語の最初のリリース直後に求められたことに答えたことであった。例えば、型強制==等価比較演算子で、12 == '12'のようにすることで、HTTPを使ってサーバーにデータをプッシュする処理が容易になる。
Crockford氏は、次に来ることを明確に把握するのではなく、「ダメな整形手術」に注力しすぎる可能性に対面していると指摘する。
10年前と比べて、この言語は少ない方がよいのですが、良い部分はより良くなりました。
Eich氏はこの数年でなにがどう変わって、古いものがどう新しくなったかについて話した。例えばE4Xはこの言語に受け入れられなかったが、Reactユーザーは「E4XからXMLの悪い部分を除いた」JSXを好んでいる。
Eich氏の講演の中で、asmとWebAssemblyの価値を強調したことが重要である。静的型付けを持つJavaScriptのサブセットであるasm.jsソースコードは、ネイティブに近い速度で実行できる。asmがJIT(just in time)からAOT(ahead of time)にコンパイルを切り替えることによって、AST(abstract syntax tree:抽象構文木)が直接、マシンコードを生成できるようになる、パフォーマンスが改善する。
WebAssemblyはasm.jsで生成されたものより、より早く読み込まれる。WebAssemblyは分離プロセスで実行されるため、JavaScriptよりも多彩な構文を持つが、まだ同じJavaScript仮想マシンの一部である。
Eich氏は来年の早い段階で、言語に来る最もエキサイティングな機能を紹介した:
- TC39 BigInt - TypedArraysをサポートし、任意の制度の整数を処理できる新しい値型
- 動的import() - デフォルトではES Moduleを静的にインポートして、プリフェッチもできる
- Array.prototype.flat / flatMap - 配列の平坦化、およびflattenとsmooshgateに対する解決策
- さらなる破棄 - 任意のオブジェクトと配列に対する
- クラスのプライベートメソッドとアクセッサ - Eich氏によると#シンボルプレフィックスは、少し議論の余地があり、使われないかもしれない
- 非同期イテレーション - awaitシンタックスに対して
- RegExpのいくつかの改善
これらを含む全ての提案情報は、TC39提案の完全なリストを見てほしい。
Crockford氏は、私たちの強い前提と、私たちの進歩にどのような影響を耐えているのかに疑問を投げかけことに時間を費やした。例えば、0または1からカウントを始めて、全てが0から始まるべきだと信じているのはなぜか。
これまでにSafariのみがこの仕様を実装してきた末尾呼び出しと末尾呼び出し最適化が不十分であることがES2015実装の最大の失望だとCrockford氏は指摘する。Crockford氏によると、末尾呼び出しは、末尾再帰をサポートし、継続値渡しと同様に、イテレーションに対する関数的な代替であり、ES2015に追加された最も重要な機能であるという。
Crockford氏は、純粋な関数は言語であることが最も重要であり、純粋な関数に影響を与えるものは考慮されるべきではないと考えている。
JavaScriptには、Crockford氏が嫌いな多くの点がある。例えば、同期の見た目によって開発者が本質的に非同期を理解することをブロックするので、彼はasync/awaitが嫌っている。
Crockford氏は、シンプルさについて「標準はよりシンプルであり、同意する必要がなく、相互運用性を可能にする可能性が高い」と説明する。彼はJSONを例に挙げて、JSONは構文であると説明した。これは振る舞いについてはなにも言わず、シンプルに理解できて、使用できる。JSONの全仕様は名刺の裏に収まる。
Crockford氏は、neoと呼ばれる、新しい言語とトランスパイラを開発中で、Crockford氏の新しく良い部分が配信され、新しい言語は、彼が定義した良いJavaScriptにトランスパイルされる。これは「How JavaScript Works」というタイトルの本と一緒にリリースする予定だ。
質問に回答している中で、Eich氏は、従来のJavaScriptとWebAssemblyの間にあって、JavaScriptの全てに対するするバイナリー構文ツリーを提供するbinary-ast提案について尋ねられた。
Eich氏は、binary-astは実用的なアプローチの可能性があるが、最初の実装と、後続のパフォーマンスメトリックを通じて、そのメリットが確信できることを待っている。Mozillaは初期実装に取り組んでいる。潜在的なリスクとして、もうひとつのセキュリティ攻撃区分が含まれており、コードベースを最適化するためのツールと規律に頼るのではなく、より大きなJavaScriptコードベースに書くことを開発者に促すだけである。
TypeScriptのような型システムについて尋ねられた時、Eich氏は動的プログラミングの利便性が便利であり、途中で取得しない型システムはよいアイディアだと述べた。Eich氏は「人々は型システムを気にしなかった」と述べている。
TypeScriptは素晴らしい厳格なJSのスーパーセットでした。全てのJSプログラムはTSプログラムです。Anders Hejlsberg氏は一流です。
CrockfordもまたTypeScriptについて尋ねられたが、あまり好意的でない意見であった: 「これは私の課題を解決しない」。TypeScriptの主なベネフィットのひとつであるインターフェイス定義は「Things間のインターフェイスがよくエラーが発生する」が、これらのエラーを回避するためであるという彼の以前の宣言とは多少矛盾している。
Eich氏はReactのようなものを標準化する可能性について答えた。DojoやPrototypeのような早期のライブラリは、それ以降のバージョンの言語に組み込まれた概念を持っていたが「Reactのようなライブラリを標準化することは消してない」と強調した。その代わり、ライブラリの本質的な部分をコア言語に組み込むことがされている。Eich氏は、型システムのようなツール時ソリューションなどは、早期に標準化することでトラブルが発生する可能性があると指摘した。
Eich氏は、RxJS ObservablesをもとにしたObservables提案について彼の意見を求められた。彼は、仕様は停滞しており、言語に組み込むことは難しく、Observablesが言語に追加されるかどうかはわからないと答えた。彼はObservables提案のスーパーセットであるWHATWGのstreams仕様 については言及しなかったが、これら2つの仕様の競合がObservables提案の進捗を妨げている可能性がある。
最後にEich氏は機械学習について質問され、ディープラーニングが便利だが、因果関係については説明されず、現在はカーブフィッティングアルゴリズムの高度な形式に過ぎないことに留意した。
この会議のビデオは無料登録で見ることができる:
- JavaScript: 次の時代 (Eich)
- JavaScriptの仕組み: プレビュー (Crockford)
Rate this Article
- Editor Review
- Chief Editor Action