kiyoka.2008_06_29 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2008_06
55455455555555555555555555555555443
5

[プログラミング言語] Rubyの構文が柔軟すぎる(複雑すぎる)件

5

ちょっと思う所があって、Rubyの構文を調べてみた。

4

そんな中Rubyソースコード完全解説EXTがWebで公開されているのを知った。

5

こんなものが公開されているとは...青木峰郎さんに感謝。

5

さて、話をRuby構文に戻す。

4

第10章 パーサEXTのrubyの文法(概要)のあたりを読むと、すごいことが分かってくる。

5

以下引用

5
 Rubyに存在するあらゆる構文は括弧で囲むと primaryになってしまう、即ちメソッドの引数にも代入の右辺にもできるということで
5
 ある。これはとんでもない事実だ。実際に確かめてみよう。
5
p((class C; end))
5
p((def a() end))
5
p((alias ali gets))
5
p((if true then nil else nil end))
5
p((1 + 1 * 1 ** 1 - 1 / 1 ^ 1))
5
 
5
 このファイルを-cオプション付きでrubyにかける。 -cは構文チェックをするオプションだ。
5
 
5
% ruby -c primprog.rb
5
Syntax OK
5
 
5
 実に信じ難いことだが、本当に通ってしまった。どうやら勘違いではないようである。
5

 

5

なぬー。

5

実際は、後で構文木の構築を行う際にエラーになるパターンもあるだろうが、このパーサのルールはトンデモない。

5

Pythonと比べてRubyがPerlの如き柔軟性を感じさせる理由はこのへんかもしれない。

5

YARVのプレゼンで、ささださんがRubyは何でも式に成ってしまうので最適化という面では

5

非常に苦労するという話をされていたが、どうやら、このことだったのか…

5

 

5

ちょっと実験でRubyっぽいサブセット構文のパーサを試作してみようと思ったが、

5

Rubyっぽいだけで結局Rubyの本質が抜け落ちたものに成りそうで、やめた。

5

練習としてはいいと思うけど。

5

 

4

Rubyソースコード完全解説EXTの他の章も読んでみるといい。Rubyの奥行きはかなり深い。

4

 

3

...comment disabled...