• Like
JavascriptでRubyの作り方
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

JavascriptでRubyの作り方

  • 4,976 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,976
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
6
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Javascript で Ruby の作り方 2009/7/23 中谷秀洋@サイボウズ・ラボ
  • 2. JSRuby • JavaScript で実装した Ruby – http://coderepos.org/share/wiki/JSRuby – http://labs.cybozu.co.jp/blog/nakatani/2008/01/j avascript_ruby_jsruby_01.html – http://labs.cybozu.co.jp/blog/nakatani/2008/01/_ jsruby.html • Hash未サポートだったり、実装率低め • 非同期実行やJavascriptオブジェクト(DOMな ど)の操作サポート
  • 3. これを聞けば
  • 4. 初心者でも (文芸部でも)
  • 5. JavaScript で Ruby が 書けるように!!
  • 6. 第1部 「パーサ」
  • 7. プログラムを 機械が扱える形式に 変換
  • 8. LRとかLLとか LTとかDQとか
  • 9. いろんな方法が あるけど
  • 10. 初心者は 「再帰降下法」で 十分
  • 11. 文芸部にもわかる「再帰降下」 • 演算子かな? • 代入式かな? • メソッドかな? • 変数かな? • という関数がいっぱい • パースの現在位置ポインタを渡す • お互いを呼び合う
  • 12. 遅い
  • 13. 複雑な構文に 対応できない
  • 14. でも かんたん
  • 15. 一般に
  • 16. パーサができたら 7割終わり
  • 17. ちなみに
  • 18. Lispの 何が嬉しい?
  • 19. パーサが 一瞬で書ける
  • 20. 第2部 「コンパイラ」
  • 21. パーサの結果を 実行により適した形式に 変換
  • 22. 構文木 ↓ バイトコード
  • 23. 構文木のまま 実行しちゃえば コンパイラいらないよ!
  • 24. 第3部 「インタプリタ」
  • 25. プログラム(変換後)を 解釈&実行する
  • 26. 仕様通りに 実装していくだけ
  • 27. ということで Rubyの仕様は……
  • 28. ……
  • 29. ん?
  • 30. Rubyに「仕様」は ありません(でした)
  • 31. orz
  • 32. 今は
  • 33. RubySpec
  • 34. 膨大(><
  • 35. JRubyのテストセットは もう少しコンパクト
  • 36. ってことは Rspecが動くことが 目標?
  • 37. 第4部 「Rubyスペシャル」
  • 38. Ruby の シンタックスは
  • 39. 人に優しく
  • 40. 機械に厳しい
  • 41. つまり
  • 42. パーサーを書くのが 超大変(><
  • 43. 頭が痛い例 > def a(x); 3 - x; end > a -1 # a(1の符号反転) => 4 > a = 3 > a -1 # a 引く 1 => 2 • a がどういうオブジェクトであるかによって、後 の演算子の評価が変化する(一項 or 二項)
  • 44. 引数も パース時には 決まらない
  • 45. 悩ましい例 > def a(x); x; end > [a -1, 2, 3] # [a(-1), 2, 3] => [-1, 2, 3] > def a(x, y); x+y; end > [a -1, 2, 3] # [a(-1, 2), 3] => [1, 3] • Ruby1.9からは超改善されて、だいぶ普通に なった(1.8.5? あたりにもバックポート)
  • 46. 対策
  • 47. 柔軟な構文木
  • 48. 柔軟なインタプリタ
  • 49. あとは気合い!
  • 50. これで
  • 51. 明日から JavaScriptで Rubyが書けるように なりましたね!!!
  • 52. iVoca よろしくね! http://ivoca.31tools.com/