JavaScriptとLisp

Post on 19-Jan-2015

3.813 views 1 download

Tags:

description

 

Transcript of JavaScriptとLisp

JavaScriptとLisp

2010.06.19 #jstudy2010.06.20 加筆修正

@taiju

自己紹介

var profile = { name : ‘Taiju Higashi’, twitter : ‘@taiju’, hatenaid : ‘id:jdg’, job : undefined};

あと味http://d.hatena.ne.jp/jdg/

はじめての正規表現http://higashizm.sakura.ne.jp/reg/

はじめてのjQueryhttp://higashizm.sakura.ne.jp/jquery_first/

ブログ等

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

Lispとは?■世界で2番目に古いプログラミング言語■関数型言語に分類される■丸括弧だらけで読みにくいとよく言われる■仕様が小さいのでいろんな実装(方言)がある■SchemeとCommon Lispが二大流派■今はGauche、Clojureが熱いらしい■Emacs使っている人にはおなじみ■Shibuya.lispというコミュニティがある■古いのに新しいという不思議な感じ

全然説明になってないですね><

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

ブラウザにLispを載せるつもりだった

原文Brendan's Roadmap Updates: Popularityhttp://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html

訳文JavaScriptはSICPの影響を受けて開発したヤドカリデンキ商会(第一倉庫)http://d.hatena.ne.jp/yad-EL/20081002/p1

JavaScriptの産みの親、ブレンダン・アイクさんの記事より

Brendan Eich“I was recruited to Netscape with the promise of "doing Scheme" in the browser.

超意訳「Netscapeに入ればブラウザで Scheme(Lisp)がヤレると聞いて」

Brendan Eich"Whether that language should be Scheme was an open question, but Scheme was the bait I went for in joining Netscape.

超意訳「むしゃくしゃしてやった、 答えは見つかっていない」

ブレンダン・アイクさんは、Lispみたいな言語をブラウザに載せたかったようです。

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

浮かび上がる真実

これらを調べていくうちに、私は、隠された”真実”を見つけてしまったのです。

開発当初、”JavaScript”は“LiveScript”という名称で呼ばれていたことを思い出してください。

LiveScript

LiveScript

Lispの文字が!!

ここで浮かび上がった驚愕の真実は、JavaScript通の間ではアイク・コードという名称で呼ばれ

ていません。

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

Cの皮を被ったLisp原文The World's Most Misunderstood Programming Languagehttp://www.crockford.com/javascript/javascript.html

訳文世界で最も誤解されたプログラミング言語 - id:brazilhttp://d.hatena.ne.jp/brazil/20050829/1125321936

JavaScript: The Good Partsの著者で、JSONの産みの親、ダグラス・クロックフォードさんの記事より

Douglas Crockford"JavaScript's C-like syntax, including curly braces and the clunky for statement, makes it appear to be an ordinary procedural language. This is misleading because JavaScript has more in common with functional languages like Lisp or Scheme than with C or Java.

超意訳「JavaScriptはCに似てるとか言うのが 許されるのは小学生までだよねー」

Douglas Crockford"It has arrays instead of lists and objects instead of property lists. Functions are first class. It has closures. You get lambdas without having to balance all those parens.

意訳「リストの代わりに配列があるし、 プロパティリストの代わりにオブジェクトがあって、 関数はファーストクラスだし、 クロージャもあるもの。 煩わしい括弧いらずでlambdaをGETできるよ。」

ダグラス・クロックフォードさんも、JavaScriptとLispに多くの共通点があることを認識しているようです。

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

それJavaScriptでできるよ

原文The Little JavaScripterhttp://www.crockford.com/javascript/little.html

同じく、ダグラス・クロックフォードさん。The Little Schemerという名著(洋書)に触発されて、「それJavaScriptでできるよ」ってなことを言ってる記事。

Douglas Crockford"JavaScript has much in common with Scheme. It is a dynamic language. It has a flexible datatype (arrays) that can easily simulate s-expressions. And most importantly, functions are lambdas.

意訳「JavaScriptはScheme(Lisp)にすごく似てる。 ダイナミックだし、配列でS式の表現できるし、 そもそもfunction=lambdaってのが重要だよね。」

(define foo (lambda (a b c) (body)))

それJavaScriptでできるよ

Lisp (define foo (lambda (a b c) (body)))

JavaScript var foo = function(a, b, c) { return body; };

(foo a b c)

それJavaScriptでできるよ

Lisp (foo (a b c))

JavaScript foo(a, b, c)

(cond (p1 e1) (p2 e2) ... (else en))

それJavaScriptでできるよ

Lisp (cond (p1 e1) (p2 e2) ... (else en))

JavaScript p1 ? e1 : p2 ? e2 : en

(and p1 p2 ... pn)(or p1 p2 ... pn)

それJavaScriptでできるよ

Lisp (and p1 p2 ... pn) (or p1 p2 ... pn)

JavaScript (p1 && p2 ... && pn) (p1 || p2 ... || pn)

(quote (a b c)) (quote (a . (b . (c . nil))))

それJavaScriptでできるよ

Lisp (quote (a b c)) (quote (a . (b . (c . nil))))

JavaScript [‘a’, [‘b’, [‘c’]]

LispのコードはJavaScriptで再現することができるようです。

目次

1. Lispとは?2. ブラウザにLispを載せるつもりだった3. 浮かび上がる真実4. Cの皮を被ったLisp5. それJavaScriptでできるよ6. まとめ

まとめ

JavaScriptはLispに似て、すごく柔軟で強力な言語になりました。JavaScriptにLispの特徴を取り入れたのは

大成功だったように思います。

JavaScriptに限らずLL言語全般に言えることですが、

特にJavaScriptは、なんだかんだで関数が肝だし、スコープの単位は関数です。クロージャや無名関数を多用するところはLispの文化を色濃く継承しているように思います。

Lispを学ぶと、JavaScriptにおける”納得”や”発見”を得られるのではと思います。

今日は父の日ですね

ブレンダン・アイク(お父)さん、こんな素晴らしくて楽しい言語を産んでくれてありがとう!!

ご清聴ありがとうございました。