にもじ

JavaとかRubyのめも

RubyでつくるRuby

私の好きな本に「あなたの知らない超絶技巧プログラミングの世界」(著者:遠藤 侑介)があります。
遠藤 侑介さんには他にも「RubyでつくるRuby」という面白そうな著書があることを知り、さっそく購入してみました。

今、3分の2くらい読み進めていますので個人的に感じたことを書いてみます。

私はRubyを学び始めて2か月半くらいですが、レベル的にはピッタリかもしれません。
内容は、RubyRubyインタプリタを作るというものです。
プログラミング言語って、こういう仕組みになっているのか」というのが垣間見え、とっても楽しい世界です。プログラミング言語プログラミング言語で作られているんですね。作る方をホスト言語というらしいです。

余談ですが、プログラミング言語は、プログラマがプログラミングしやすいため仕組みなんだな~、いろいろな目的で、いろいろな言語があるんだなぁという事を最近おもっています。この辺はまつもとゆきひろさんの「コードの未来」という本を読むと面白いかもしれません。
さらに余談ですが、私が本業で使っているRPGというプログラミング言語は、言語マニアを自認されているまつもとゆきひろさんも書籍で一切触れていない(私調べ)ので、 少し寂しいです。もし触れられている文章があるなら読みたいです。

さて、ここまでの成果物をご紹介。

先ずは動かしたいコード。FizzBuzzです。

i = 1
while i <= 30
  if i % 15 == 0
    p("FizzBuzz")
  else
    if i % 5 == 0
      p("Buzz")
    else
      if i % 3 == 0
        p("Fizz")
      else
        p(i)
      end
    end
  end
  i = i + 1
end

もっと違う書き方も、ありますよね。いま作っているインタプリタのサポート範囲内ですのでご容赦お願いします。

先ずは普通にRubyで実行してみます。

1
2
"Fizz"
4
"Buzz"
"Fizz"
7
8
"Fizz"
"Buzz"
11
"Fizz"
13
14
"FizzBuzz"
16
17
"Fizz"
19
"Buzz"
"Fizz"
22
23
"Fizz"
"Buzz"
26
"Fizz"
28
29
"FizzBuzz"

次に、Rubyで作ったRubyインタプリタで実行してみます。

1
2
"Fizz"
4
"Buzz"
"Fizz"
7
8
"Fizz"
"Buzz"
11
"Fizz"
13
14
"FizzBuzz"
16
17
"Fizz"
19
"Buzz"
"Fizz"
22
23
"Fizz"
"Buzz"
26
"Fizz"
28
29
"FizzBuzz"

いかがでしょうか☆