Javascript History
概要
90年代にプロトタイプベースのオブジェクト指向スクリプト言語として登場し、IE11 3.0に標準搭載され、その手軽さから広く普及した。 その後、ブラウザによる仕様の違いを解決するために、国際標準化団体Ecmaインターナショナルにより言語仕様が標準化されている。 その言語仕様をEcmaScriptと呼び、Javascriptの実行環境がEcmaScriptの言語仕様に準拠しているため、JavascriptとEcmaScriptを混同して呼ばれることもある。 主にウェブブラウザで使用されているプログラミング言語であったが、近年はサーバーサイドでの実行環境が誕生し、クラスベース機能も取り込まれるなど成長している。
プロトタイプベースのオブジェクト指向スクリプト言語
プロトタイプベースとは、インスタンスベースとも呼ばれ、オブジェクト指向プログラミング(OOP)のスタイルの一つであり、オブジェクトの生成に既存オブジェクトのクローン(複製)を用いるスタイルを指している。 Smalltalk方言のSelfがプロトタイプベースOOPの原点となっている。元祖クラスベースの設計は理論面では整っていたが、実践面では甚だ複雑として開発陣からも不評になり、 その改善策として設計された。 現在では、C++/Python発のクラスベース設計が多くの言語で採用されており、Self発のプロトタイプベースは少数派になっている。のみならずプロトタイプベースの代表格JavaScript、EcmaScriptではクラスベース構文が導入されるに到っており、TypeScriptはクラスベースとプロトタイプベースの折衷にされている。プロトタイプベースはやや汎用性に欠けてオブジェクト指向の主流にはなり得なかったという結論になる。
オブジェクトの構築は、クローン方式かエクスニヒロ方式で行われる。クローン(clone)は既存オブジェクトを複製する方式であり、複製後にプロパティ/メソッドの自由な取り付け取り外しもできる。エクスニヒロ(ex nihilo)はプロパティ無しメソッド無しの空オブジェクトを生成(または複製)する方式であり、生成後にプロパティ/メソッドの自由な取り付けができる。構造体に似た書式でプロパティ/メソッドを初期設定して生成する方式もエクスニヒロに分類されている。クラス概念がないのでテンプレート処理的なオブジェクト構築は不可であるが、クラスベース構文が導入された言語では代替的に可能にされており、それはエクスニヒロの方で解釈されている。 Javascriptでクラスベースを利用する場合には、エクスニヒロ方式で解釈がされる。
時系列
- 1995年
- NetScapeによりJavaScript誕生。はじめはLiveScriptの名称だった。
- 1996年
- IE 3.0にJavaScript の派生言語JScriptが搭載されるが、お互いに非互換性であった。
- 後のFlashとなるFuture Splash Playerが登場し、流行する。
- 1997年
- JScriptとJavaScriptの互換性問題を解決するため、NetScapeがECMAへ標準化を依頼。EcmaScript 初版がリリースされる。
- 1998年
- EcmaScript 2.0
- 1999年
- IE 5.0で、XMLHttpRequest(XHR)の原型となるActiveXが登場
- EcmaScript 3.0
- 正規表現
- try/catch例外処理など
- 2000年
- ブラウザ間互換性が確率され普及しはじめるが、無駄なアニメーション、セキュリティ問題などで、Javascriptは敬遠される。
- EcmaScript 4.0の仕様が決まらずJavascript標準化の流れが停滞する。
- ECMA Scriptを元にしたAction ScriptがFlashに組み込まれ、Flash需要が高まる。
- 2005年
- Google MapとGmail(Ajax)の登場で、Javascript大流行する。XHRによる非同期通信技術が一般的になる。
- prototype.jsなどのJSライブラリがこの年以降登場する。よりリッチな表現が可能になる。
- 2006年
- DOM操作、イベント、アニメーション、Ajaxなどが簡単に使用できるjQueryの初版がリリースされる。
- JSONの国際標準化の仕様が初めて規定される。
- 2008年
- Google Chrome(V8エンジン)が誕生し、Javascript実行速度が改善される。
- 2009年
- MozillaによりServerJSのプロジェクトが立ち上げられる。(後のCommonJS)
- V8環境で動くサーバーサイドJavascriptのNode.jsが誕生する
- EcmaScript 5.0
- strictモード
- JSONライブラリサポート
- getter, setterなど追加
- jQuery、Ajaxが持つ課題を解決するためにアーキテクチャを持つフレームワークがこの年以降登場し始める。
- Backborn.js
- Angular.js
- Ember.js
- 2010年
- AppleがFlashの問題点を指摘し、HTML5を推奨する。iPhone, iPadでFlashサポートしないことが発表される。
- 2011年
- アドビがFlashの開発中止を発表。
- XHRのロングポーリング問題を解決するため代替プロトコルとしてWebSocketが登場。
- 2012年
- 静的型付けとクラスベースオブジェクト指向を加えたTypeScriptがMicrosoftから登場する
- 2013年
- Node.jsパッケージマネージャーnpmがCommonJSの積極サポートを辞めると発信する。
- React.jsの初版が登場する。JSX構文が登場する。
- 2014年
- HTML5の正式仕様が勧告される。
- Vue.jsの初版が登場する。
- 2015年
- EcmaScript 6.0
- let, const, Map, Set, WeakMap, WeakSet, Symbol, Promise
- クラス、モジュール、イテレータ、ジェネレータ、アロー関数、テンプレートリテラル、分割代入、可変長引数
- 他、多数機能追加
- Node.js製のトランスパイラBabelが登場する。
- ES6以降の新しい構文での記述をES5以下の古い記述へ変換可能になる。
- Polyfillを利用することで、Promiseのように完全に新規追加された機能も古い環境で利用可能になる。
- EcmaScript 6.0
- 2016年
- EcmaScript 7.0
- べき乗演算子
- Array.prototype.includes
- EcmaScript 7.0
- 2017年
- EcmaScript 8.0
- 非同期関数 (async/await)
- Object.getOwnPropertyDescriptors
- String.padStart/padEnd
- Object.values/entries
- SharedArrayBufferとAtomics
- EcmaScript 8.0
- 2018年
- Node.jsの開発者により新たな実行環境Denoが発表される。
- EcmaScript 9.0
- オブジェクトに対するスプレッド構文、非同期イテレーション
- 2019年
- EcmaScript 10.0
- Array.prototype.flat、Array.prototype.flatMap、Object.fromEntries
- EcmaScript 10.0
- 2020年
- パッケージマネージャーnpmの開発元をgithubが買収