読者です 読者をやめる 読者になる 読者になる

JavaScript と Scheme について

清水さんの「これがプログラミングの神髄だ! ファイナルファンタジープログラマーが明かす秘密とLispトークバトル!」( http://d.hatena.ne.jp/shi3z/20140123/1390429115 )にある、

もともとJavaScriptLispの方言であるschemeをベースとして開発されたわけだからね。

という記述に関して関連資料のメモ。
(ブレンダン・アイクさんのブログも参照のこと https://brendaneich.com/2008/04/popularity/
『Coders at Work』(邦訳版)

Coders at Work プログラミングの技をめぐる探求

Coders at Work プログラミングの技をめぐる探求

の、ブレンダン・アイクさんの章によれば、
p. 138~

(ピーター・サイベル)あなたが JavaScript を最初に実装した 10 日間に話を戻しましょう。ある時点で誰かがあなたにエイブルソン&サスマン(引用者注: SICP のこと)へと目を向けさせ、最初のアイデアはブラウザに Scheme を持ち込むことだったと伺いました。
アイク Netscape のそのときの関心は、それが Java に似ていなければならないということでした。Lisp のための Algol ふうシンタックスというのを作っている人たちはいましたが、Scheme のコアを持って来ている時間はなかったので、すべて直接やることになりました。その結果としてほかの人たちがしたのと同じ間違い(引用者注: 結局どっちつかずの新しい言語が出来上がってしまったということか、クロックフォードさんの言う数々の Bad Parts のことか?)を犯すことになりました。
 完全な動的スコープというものは入れませんでした。ストールマンEmacs にとって重要なものだとこだわって、Elisp をそれで満たしましたが。JavaScript は概ね静的スコープを持ち、多少変則的なところがあります。非常に動的になる抜け穴があるのです。グローバルオブジェクトと、with 文と、eval です。しかし my 以前の Perl の(以下略)。
 しかし私はずっと Scheme に沿っていたわけではなく、それは急いでいたから(引用者注: Scheme を参考にしたことについてなのか、Scheme に沿ってないことについてなのか?)です。(以下略。この部分にはグローバルオブジェクトを作るべきではなかった、という話がある)
 それらトップレベルの変数をオブジェクトの可変なプロパティにして、別名をつけて裏でいじり回せるようにするのは良いことではありません。静的束縛にすべきでした。そこから関数や入れ子関数の中へと入っていけば、もっと Scheme のようになるからです。fluid-let みたいな豊かな束縛形式があるわけではありませんが。どちらかと言えば set! に近いものです。しかしローカル変数で作るはじめの束縛はレキシカル変数です。

(ピーター・サイベル)だから今ではみんなトップレベル関数でネームスペースを作っているわけですね。
アイク ええ。みんな関数を用意してすぐにそれを呼びます。そうするとプライベート変数に束縛される安全な環境が手に入ります。ダグ(ダグラス・クロックフォード)はこの方式の代表的論者です。Schemer や Lisper の間では知られていたことですが、多くの JavaScript プログラマにとっては学ぶ必要のあることで、ダグたちが彼らの教育に大きな役割を果たしました。あいにくみんなを上級 Scheme プログラマにするということではありませんが、ある程度までは成功していて、(略)、パターンというレベルでは理解するようになっています。