Квайн — компьютерная программа, которая выдаёт на выходе точную копию своего исходного текста. Японский рубист Юсукэ Эндо (Yusuke Endoh) создал нечто невероятное. Quine Relay — программа на Ruby, которая генерирует код программы на Scala, которая генерирует код программы на Scheme, которая генерирует… и так далее на 50-ти языках программирования, пока программа на REXX снова не генерирует изначальный код на Ruby.
Для проверки кода нужно сначала установить в системе все необходимые окружения. Под Ubuntu это можно сделать такой командой:
$ apt-get install algol68g bash beef boo clisp clojure1.4 coffeescript \ fp-compiler g++ gauche gawk gcc gforth gfortran ghc gnat gnu-smalltalk \ gobjc golang groovy icont intercal iverilog jasmin-sable llvm lua5.2 \ make mono-devel mono-mcs nodejs ocaml octave open-cobol openjdk-6-jdk \ parrot perl php5-cli pike7.8 python r-base regina-rexx ruby1.9.3 scala \ swi-prolog tcl8.5 ucblogo valac
Затем запускаем программу с каждым интерпретатором/компилятором, по очереди.
$ ruby QR.rb > QR.scala $ scalac QR.scala && scala QR > QR.scm $ gosh QR.scm > QR.bash $ bash QR.bash > QR.st $ gst QR.st > QR.tcl $ tclsh QR.tcl > QR.unl $ ruby unlambda.rb QR.unl > QR.vala $ valac QR.vala && ./QR > QR.v $ iverilog -o QR QR.v && ./QR -vcd-none > QR.ws $ ruby whitespace.rb QR.ws > QR.adb $ gnatmake QR.adb && ./QR > QR.a68 $ a68g QR.a68 > QR.awk $ awk -f QR.awk > QR.boo $ booi QR.boo > QR.bf $ beef QR.bf > QR.c $ gcc -o QR QR.c && ./QR > QR.cpp $ g++ -o QR QR.cpp && ./QR > QR.cs $ mcs QR.cs && mono QR.exe > QR.clj $ clojure QR.clj > QR.cob $ cobc -x QR.cob && ./QR > QR.coffee $ coffee QR.coffee > QR.lisp $ clisp QR.lisp > QR.fs $ gforth QR.fs > QR.f $ gfortran -o QR QR.f && ./QR > QR.f90 $ gfortran -o QR QR.f90 && ./QR > QR.go $ go run QR.go > QR.groovy $ groovy QR.groovy > QR.hs $ runghc QR.hs > QR.icn $ icont -s QR.icn && ./QR > QR.i $ ick -b QR.i && ./QR > QR.j $ jasmin QR.j && java QR > QR.java $ javac QR.java && java QR > QR.ll $ llvm-as QR.ll && lli QR.bc > QR.logo $ ucblogo QR.logo > QR.lua $ lua QR.lua > QR.makefile $ make -f QR.makefile > QR.il $ ilasm QR.il && mono QR.exe > QR.js $ nodejs QR.js > QR.m $ gcc -o QR QR.m && ./QR > QR.ml $ ocaml QR.ml > QR.octave $ octave -qf QR.octave > QR.pasm $ parrot QR.pasm > QR.pas $ fpc QR.pas && ./QR > QR.pl $ perl QR.pl > QR.php $ php QR.php > QR.pike $ pike QR.pike > QR.prolog $ swipl -q -t qr -f QR.prolog > QR.py $ python QR.py > QR.R $ R --slave < QR.R > QR.rexx $ rexx ./QR.rexx > QR2.rb
В результате, итоговый код QR2.rb не отличается от первоначального QR.rb.
ссылка на оригинал статьи http://habrahabr.ru/post/186782/
Добавить комментарий