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さんにはなんのお金も渡っていないですよ)