開発
「ECMA-262 Edition 5.1を読む」を買いました
yahata
Node.jsのv0.11.xでJavaScriptのyieldが使えるのを思い出したので、軽く遊び始めました。
非同期処理が同期的に書けるなんて、黒魔術すぎる…。
JavaScriptといえば先日、竹迫 良範氏の著書であるECMA-262 Edition 5.1を読むという書籍を買いました。
ECMA-262はECMAScriptの仕様を記した仕様書であり、全てのJavaScriptの父であります。
言語仕様を知るということは、つまり究極的には「頭の中でコードを実行できる」という事であり、トライアンドエラーでのデバッグをせずに済むようになります。
これは究極も究極です。バグのある箇所を読んで言語仕様的に不具合が無ければ、あとはライブラリやエンジンのバグであることが確定するのです。
特にライブラリにバグが含まれていると、こっちはライブラリに対して完全に信頼を置いて使っているもんですから、バグの発見が遅れてしまいがちです。
そんな場合でも、ライブラリの内部構造が読めるようになっておくととても有利です。
ただしブラウザで動くJSはECMAScriptの完全なサブセットではありません。ブラウザで動くJSにはECMAScriptの世界の他に、DOMの世界が含まれています。
JSが2つの世界にまたがって動作するのは非常に厄介で、メモリリークを引き起こしたり、デバッグを困難にしたりします。
最近のブラウザには素晴らしいデバッグツールが組み込まれているため、これらの問題をうまく解決に導いてくれますが、それでも言語仕様を把握しておくことで足がかりが掴みやすくなります。
言語仕様のような、モノの根元の部分を知りたいという欲求は誰もが持つものだと思います。
自分もその根元の部分を使って、JavaScriptエンジンであるV8を読むとか、ECMAScriptとDOMのエンジンを自作してブラウザを作るとか、JavaScriptの抽象構文木を使って新言語を作るとか、いろいろやってみたいと思っています。
webの進化というのは速いもんで、1年前には無名だったライブラリも今や知らない方がおかしい程に成長していたり、この前勉強したばかりの技術なのにもう代替が出てきたり、常に勉強し続けて行かないと置いて行かれそうです。
そんな中で勉強したい技術・しなければいけない技術、もどんどん移り変わって行くのですが、とりあえずその根元にある言語仕様さえ抑えておけばなんとか付いて行くことができるのです(それでもギリギリですが…)。
webの進化の表面を流れる無数のライブラリにキャッチアップするのは、はっきり言って無理です。
それよりもその根元にある言語仕様を学ぶことで、webの進化に置いて行かれないようにしたいところです。
担当:八幡(chromebook、買った!!)