Open3

ecma262を読んでいく

Jerome_1010Jerome_1010

学習目的で https://tc39.es/ecma262/ を読んでいき、気になった点などを雑多にまとめていく。2024がもうすぐリリースされそうに見えるので https://ecma-international.org/publications-and-standards/standards/ecma-262/ ではなくこちらを読む。
2024がリリースされたら https://ecma-international.org/publications-and-standards/standards/ecma-262/ を読む。

読み始めた時点のバージョンは ft ECMA-262 / December 6, 2023

Jerome_1010Jerome_1010

*まとめ途中です

Introduction

https://tc39.es/ecma262/multipage/

1st

That Ecma Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262, in April 1998.

Ecam StandardがISOに届け出られていたことを知らなかった。今でも言語仕様はISOに届け出るんだろうか?それともある特定の分野で使われるような言語のみ?

最初期の定義では言語仕様として何を提供していたのか気になってきた。(Rustが何を1stリリースに乗せるか色々話があったのを知り、それもあって気になっている)

3rd

The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation of future language growth.

The third editionで正規表現やtry catchなどが盛り込まれたらしい。

4th

After publication of the third edition, ECMAScript achieved massive adoption in conjunction with the World Wide Web where it has become the programming language that is supported by essentially all web browsers.

4thがリリースされていないのは知っているが、その背景としてはWWWの発展と共にJSが広まったその急激な変化や混乱があるように思える...その部分は知らなかった

5th

Such features include accessor properties, reflective creation and inspection of objects, program control of property attributes, additional array manipulation functions, support for the JSON object encoding format, and a strict mode that provides enhanced error checking and program security.

当たり前に使っているproperty accessorが追加されたのはこの頃。2009年の12月にEcma General Assemblyで採択された。

2009年なのでまだNode.jsは生まれてない。https://ja.wikipedia.org/wiki/Node.js

6th

6thのリリースは2015年。
5thが公開準備中の中で、6thの開発は2009年に集中して始まったが、6th自体は3rdから及ぶ15年間の集大成のようなものらしい。

実際挙げられている機能を見ていると

Some of its major enhancements included modules, class declarations, lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns, and proper tail calls.

ということで、どれも今では普通に使っている/お世話になっているもの。

2016

1年単位でのリリースになり、定義もGitHubで公開されるようになった。Arrayincluesが追加された。

https://github.com/tc39/proposal-Array.prototype.includes

2017

asyncが追加されたのはここ。Shared MemoryAtomicsも追加されたとのことだがわからなかったので調べてみる。

並行処理なんもわからん...

https://github.com/tc39/proposal-ecmascript-sharedmem

2018

https://github.com/tc39/proposal-async-iteration

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/AsyncIterator
が導入された。