once upon a time,

Iris Tradをビール片手に聞くのが好きなエンジニアが、機械学習やRubyにまつわる話を書きます

Kawasaki.rb #005を開催しました #kwskrb

大分たってしまいましたが、2013/10/23にKawasaki.rb #005を行いました。

@mametter さんによるquine-relayの話をしていただきました。
quine-relayとは50言語1が次々に次の言語を生成し、一周してRubyに戻ってくるというコードであります。

togetterによるまとめはこちらになります。
http://togetter.com/li/581020

肝心のスライドは、諸般の事情[^problem]により公開できなさそう、ということですが、
Quineの解説は以下の資料が詳しいです。

http://www.slideshare.net/mametter/ruby-2012

ポイントとしては、"いかに次の言語の文字列をprintするか"というところが大きいようです。
特に、エスケープが増えてしまうと、様々な言語の制限(主に文字数制限)に引っかかってしまい実行できなくなるという問題があるようで、takesakoさんのppencodeやら文字列圧縮などを使い工夫することで、それらをうまく回避しているとのことです。

また、内部ではcode-gen.rbで次の言語でのprint文を書けば、順番に生成するようになっているので、言語を増やしたいとかいう人はpull-requestを送るといいと思います。(D言語とかJSXとか、TypeScriptとか...)
なお、言語の選定基準はDebianのapt-getで導入できる言語、というのを想定していたとのことです。(が、MacではhomebrewがClojureのサポートを打ち切った等の問題が有り、VMでやるのが良さそうです。)

なお、quine-relayは経済効果をも生み出していたようで(!)、Quoraだかredditだかで「quine-relayの解説したらお礼にお金を払うよ!」と言っていた人に解説をした人がいくばくかのお金をもらっていたそうです。
(もちろん、mameさんにはなんのお金も渡っていないですよ)





  1. 有名なBrainfuckやWhitespaceに始まり、果てはVerilogとかINTERCALとか!
    [^problem] :  様々な争いの種が含まれるため