JavaScriptとLisp

55
JavaScriptとLisp 2010.06.19 #jstudy 2010.06.20 加筆修正 @taiju

description

 

Transcript of JavaScriptとLisp

Page 1: JavaScriptとLisp

JavaScriptとLisp

2010.06.19 #jstudy2010.06.20 加筆修正

@taiju

Page 2: JavaScriptとLisp

自己紹介

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

Page 3: JavaScriptとLisp

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

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

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

ブログ等

Page 4: JavaScriptとLisp

目次

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

Page 5: JavaScriptとLisp

目次

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

Page 6: JavaScriptとLisp

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

Page 7: JavaScriptとLisp

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

Page 8: JavaScriptとLisp

目次

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

Page 9: JavaScriptとLisp

ブラウザに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

Page 10: JavaScriptとLisp

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

Page 11: JavaScriptとLisp

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

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

Page 12: JavaScriptとLisp

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

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

Page 13: JavaScriptとLisp

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

Page 14: JavaScriptとLisp

目次

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

Page 15: JavaScriptとLisp

浮かび上がる真実

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

Page 16: JavaScriptとLisp

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

Page 17: JavaScriptとLisp

LiveScript

Page 18: JavaScriptとLisp

LiveScript

Page 19: JavaScriptとLisp

Lispの文字が!!

Page 20: JavaScriptとLisp

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

Page 21: JavaScriptとLisp

ていません。

Page 22: JavaScriptとLisp

目次

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

Page 23: JavaScriptとLisp

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

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

Page 24: JavaScriptとLisp

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

Page 25: JavaScriptとLisp

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に似てるとか言うのが 許されるのは小学生までだよねー」

Page 26: JavaScriptとLisp

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できるよ。」

Page 27: JavaScriptとLisp

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

Page 28: JavaScriptとLisp

目次

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

Page 29: JavaScriptとLisp

それJavaScriptでできるよ

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

Page 30: JavaScriptとLisp

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

Page 31: JavaScriptとLisp

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ってのが重要だよね。」

Page 32: JavaScriptとLisp

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

Page 33: JavaScriptとLisp

それJavaScriptでできるよ

Page 34: JavaScriptとLisp

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

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

Page 35: JavaScriptとLisp

(foo a b c)

Page 36: JavaScriptとLisp

それJavaScriptでできるよ

Page 37: JavaScriptとLisp

Lisp (foo (a b c))

JavaScript foo(a, b, c)

Page 38: JavaScriptとLisp

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

Page 39: JavaScriptとLisp

それJavaScriptでできるよ

Page 40: JavaScriptとLisp

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

JavaScript p1 ? e1 : p2 ? e2 : en

Page 41: JavaScriptとLisp

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

Page 42: JavaScriptとLisp

それJavaScriptでできるよ

Page 43: JavaScriptとLisp

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

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

Page 44: JavaScriptとLisp

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

Page 45: JavaScriptとLisp

それJavaScriptでできるよ

Page 46: JavaScriptとLisp

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

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

Page 47: JavaScriptとLisp

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

Page 48: JavaScriptとLisp

目次

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

Page 49: JavaScriptとLisp

まとめ

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

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

Page 50: JavaScriptとLisp

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

Page 51: JavaScriptとLisp

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

Page 52: JavaScriptとLisp

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

Page 53: JavaScriptとLisp

今日は父の日ですね

Page 54: JavaScriptとLisp

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

Page 55: JavaScriptとLisp

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