id:mizukmb です。こんにちは。
昨日紹介した 📖ステッカー帳 に引き続き、 RubyKaigi2018 でお配りするノベルティを紹介します。
来る RubyKaigi2018 にて、 Misoca ではノベルティとして Ruby 0.49 のソースコードが入ったフロッピーディスク を配ります。
こちらの紹介と、 Ruby 0.49 のビルド方法や実際に動かしてみた内容について書きたいと思います。
フロッピーディスク 💾
外観はこんな感じで、 RubyKaigi2018 仕様のジャケットと一緒にケースに入っています。ケースは自立するので飾ることができます。かっこ良いですね。
こちらのフロッピーディスクですが、実際に読み込むことができ、中には Ruby 0.49 のソースコードが入っています。
Ruby 0.49 はこちらで公開・配布されています。 ftp://ftp.ruby-lang.org/pub/ruby/1.0/
Ruby 0.49 をビルドしてみる
実際に Ruby 0.49 をビルドします。以下の環境で試しました。
- MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
フロッピーディスクを読み込む
会社にフロッピーディスクドライブを内蔵した PC が無かったため、 Amazon で外付けドライブを購入します。
ドライバにフロッピーディスクを入れると、「ウィーン, カシャ...カシャ...」という音と共に読み込まれます。オフィスで作業していたところ、懐しさからかこの音を聞きに多くの社員が私のデスクに立ち寄ってました。
読み込みに成功すると、 ruby
というディレクトリがあると思います。これが ruby 0.49 のソースコードになります。適当なローカルストレージにコピーしてください。
macOS High Sierra でビルド
Ubuntu で Ruby 0.49 をビルドしている記事があるので、こちらを参考にしながら macOS でもビルドします。
現環境ではそのままビルドできないようです。有志が公開しているパッチをあてて make できるようにします。
上記パッチは 32bit バイナリを想定されているようなので、クロスコンパイルできる gcc を用意します。
macOS に標準搭載されている llvm-gcc ではクロスコンパイルできないので非 llvm な gcc をインストールします。
こちらの記事を参考に gcc-7.2.0 をインストールしました。 1
gcc の make に非常に時間がかかりました (2時間半くらい) 。気長に待ちます。
その後、以下のようにパッチを当てて Ruby 0.49 を make します。
$ cd /path/to/ruby # 事前にフロッピーディスクから ruby ディレクトリを適当な場所にコピーしてください $ curl https://raw.githubusercontent.com/charliesome/historical-rubies/master/ruby-0.49.patch -LO $ patch -p1 < ruby-0.49.patch $ ./configure $ make CFLAGS="-w -Wno-return-type -m32" CC=/path/to/built/bin/gcc7.2.0 # gcc のパスは適宜変更してください (snip) -n Loading ruby ... done rm parse.c $ ./ruby -v ruby - version 0.49 (18 Jul 94)
18 Jul 94
というのが時代を感じますね。ちなみに94年といえば私はまだ1歳で当時の事は何も覚えていません。
Ruby 0.49 で遊ぼう
ビルドに成功したので遊んでみます。素朴な fizzbuzz を実行します。
こんな感じに書いてみました。
class FizzBuzz def self.call(num) for n in 1..num case 0 when n % 15 print('FizzBuzz') when n % 5 print('Buzz') when n % 3 print('Fizz') else print(n) end end end end FizzBuzz.call(15)
実行結果
$ ./ruby scripts/fizzbuzz.rb 12Buzz4FizzBuzz78BuzzFizz11Buzz1314FizzBuzz
for n in 1..num ~ end
は 1.upto(num)
とか書けそうですが動きませんでした。
$ cat upto.rb num=10 1.upto(10) do |n| print(n) end $ ./ruby upto.rb upto.rb:3: syntax error upto.rb:5: syntax error
恐らく upto
メソッドが無いからだと思われますが、エラーメッセージから得られる情報が少ないのでソースコードを見る必要がありそうですね。
他にもソースコードの sample/
ディレクトリに、テスト用に書かれたと思われるサンプルコードがいくつかあるので、そちらも実際に動かしたり眺めたりしてみると良さそうですね。
🙌RubyKaigiで会いましょう
フロッピーディスクは RubyKaigi 2018 に参加する社員が持ち歩いてますので、声を掛けていただければお渡しします。会場やドリンクアップで弊社員とお会いした時は是非お手に取ってみてください 💾
📖ステッカー帳もご用意しましたので、そちらもよろしくお願いします。
それでは RubyKaigi 2018 で会いましょう!
One more thing
当たりフロッピーディスクがいくつかあるらしい…… 👀
お楽しみに!