|
|
|
| Один японец написал забавный цепной квайн..
# ruby
l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t.size/2)};5.times{s=s.dump[r]};puts\"# python\\nprint(\\\"# perl\\\\nprint(\\\\\\\"# lua"+l*4+"nprint("+l*7+"\"(* ocaml *)"+l*8+"nprint_endline"+l*15+"\"-- haskell"+l*16+"nimport Data.List;import Data.Bits;import Data.Char;main=putStrLn("+l*31+"\"/* C */"+l*32+"n#include<stdio.h>"+l*32+"nint main(void){char*s[501]={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c(tail(init(show("+l*31+"\"/* Java */"+l*32+"npublic class QuineRelay{public static void main(String[]a){String[]s={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c("+l*31+"\"brainfuck"+l*64+"n++++++++[>++++<-]+++++++++>>++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2("+l*31+"\"110"+l*31+"\"++g(length s)++"+l*31+"\"22111211100111112021111102011112120 012"+l*31+"\"++concatMap("+l*32+"c->let d=ord c in if d<11then"+l*31+"\"21002"+l*31+"\"else"+l*31+"\"111"+l*31+"\"++g d++"+l*31+"\"22102"+l*31+"\")s++"+l*31+"\"21002111010120211222211211101000120 211021120221102111000110120211202"+l*31+"\"))))))++"+l*31+"\","+l*63+"\""+l*64+"n"+l*63+"\"};int i=0;for(;i<94;i++)System.out.print(s[i]);}}"+l*31+"\")))))++"+l*31+"\",0};int i=0;for(;s[i];i++)printf("+l*63+"\"%s"+l*63+"\",s[i]);puts("+l*63+"\""+l*63+"\");return 0;}"+l*31+"\");c s=map("+l*32+"s->"+l*31+"\""+l*63+"\""+l*31+"\"++s++"+l*31+"\""+l*63+"\""+l*31+"\")(unfoldr t s);t[]=Nothing;t s=Just(splitAt(if length s>w&&s!!w=='"+l*31+"\"'then 501else w)s);w=500;f 0=Nothing;f x=Just((if x`mod`2>0then '0'else '1'),x`div`2);g x= reverse (unfoldr f x);h p c=let d=ord c-48in(d,replicate(abs(p-d))(if d< p then '<'else '>')++"+l*31+"\"."+l*31+"\");s="+l*31+"\"# ruby"+l*32+"n"+l*31+"\"++"+l*31+"\"l=92.chr;eval s=\"+(z=l*31)+\"\\\"\"+s+z+\"\\\""+l*31+"\"++"+l*31+"\""+l*32+"n"+l*31+"\""+l*15+"\""+l*7+"\")"+l*4+"n\\\\\\\")\\\")\"########### © Yusuke Endoh, 2009 ###########\n"
|
Запускать надо так:
ruby QuineRelay.rb > QuineRelay.py
python QuineRelay.py > QuineRelay.pl
perl QuineRelay.pl > QuineRelay.lua
lua QuineRelay.lua > QuineRelay.ml
ocaml QuineRelay.ml > QuineRelay.hs
runghc QuineRelay.hs > QuineRelay.c
gcc -Wall -o QuineRelay QuineRelay.c && ./QuineRelay > QuineRelay.java
javac QuineRelay.java && java QuineRelay > QuineRelay.bf
beef QuineRelay.bf > QuineRelay.ws
wspace QuineRelay.ws > QuineRelay.unl
unlambda QuineRelay.unl > QuineRelay2.rb
Исходная программа на руби генерит прогу на питоне, которая генерит прогу на перле, которая генерит прогу на Lua, которая генерит прогу на окамле, которая генерит прогу на хаскелле, которая генерит прогу на Ц, которая генерит прогу на яве, которая генерит прогу на брейнфаке, которая генерит прогу на Whitespace, которая генерит прогу на Unlambda, которая генерит исходную прогу снова на руби.
(с) http://habrahabr.ru/blogs/crazydev/74827 | |
|
|
|
|
|
|
|
для: Гость
(26.05.2011 в 08:25)
| | :)))
P.S. Интересно, этот код работоспособен? Я бы сам проверил, но лень ставить такую кучу интерпретаторов. | |
|
|
|
|
|
|
|
для: Гость
(26.05.2011 в 08:25)
| | чет терзают смутные сомнения что такой код на такое способен. Вы сами-то проверяли? | |
|
|
|
|
|
|
|
для: lightning.say
(26.05.2011 в 11:34)
| | сам проверил цепочку
ruby QuineRelay.rb > QuineRelay.py
python QuineRelay.py > QuineRelay.pl
perl QuineRelay.pl > QuineRelay.lua
дальше уже слишком много телодвижений бы понадобилось. Если пройти по ссылке что я привел , то там дана ссылка на все промежуточные варианты, но она по какой-то причине не работает.
Если кто-то соберется проверить цепочку - берите "исходник" на руби у первоисточника http://d.hatena.ne.jp/ku-ma-me/20090916/p1, т.к. в противном случае результатный может быть не тот. | |
|
|
|
|
|
|
|
для: Гость
(26.05.2011 в 08:25)
| | работает или нет это меня не волнует... нахрен он нужен вот что мне интересно :)
или это типа такой вирус (чтоб его ни один антивирус не распознал) запустить который обычный пользователь вряд ли когда-нибудь сможет :) | |
|
|
|
|
|
|
|
для: Valick
(26.05.2011 в 11:47)
| | Сама концепция интересна. Проблема автоматического перевода с одного языка на другой довольно существенна и регулярно возникает, решается она многими путями, однако, чаще все же требует множества усилий. Такие цепочки это хороший шаг вперед в направлении автоматического перевода. | |
|
|
|
|
|
|
|
для: cheops
(26.05.2011 в 12:38)
| | ну это Вы загнули)
японец скорее всего делал это в обратном направлении, т.е. уже заранее был известен результат который должен был получиться.
да и автоматический перевод это когда одна программа на одном языке дает результат, при переводе результат сохраняется.
а тут одна программа на одном языке пишет другую программу на другом языке. т,е результат постоянно меняется или я заблуждаюсь? | |
|
|
|
|
|
|
|
для: Valick
(26.05.2011 в 13:15)
| | Герц в свое время тоже объявил радиоволны - бесполезным эффектом, который вряд ли когда найдет применение в жизни человека. Напомню, говорил это стоя перед прибором передавшим информацию по воздуху без проводов. Да на несколько метров, но думаю многие бы его современники могли его поправить, собственно потом это и сделав, изобретя радио.
Тут тоже самое. У нас тут недавно в IT произошла небольшая революция, резко возросло значение интерпретируемого кода. Код ушел на новый виток абстракции, с одной стороны стали появляться гигантские библиотеки интерпретируемого кода, с другой стороны возросло количество реально используемых интерпретируемых языков. Куда это все выльется, конечно, не известно. Однако, проблема интеграции, пусть она и не стоит так остро, благодаря множеству протоколов, есть и будет и чем дальше, тем больше. Самоконвертирующийся код, если он со временем сможет брать на себя дополнительную нагрузку, может найти довольно много применений и может положить начало единой кроссязыковой библиотеке.
>а тут одна программа на одном языке пишет другую программу на другом языке. т,е результат
>постоянно меняется или я заблуждаюсь?
Тут весь фокус в том, что код замкнут в единый цикл, в конце получается та же самая программа, у вас на каждом этапе одна и та же программа, которая получается из предыдущей и может воспроизвести следующую. Проблема лишь в том, может ли она брать дополнительную нагрузку. | |
|
|
|
|
|
|
|
для: cheops
(26.05.2011 в 13:30)
| | цикл замкнут - тут возражений нет, но и одинакового результата тоже нет :)
да я и не спорю в целом, ведь РНР к которому мы все привыкли, на выходе дает HTML (и не только)
я просто говорю, что не все так просто как хотелось бы :)
если бы перевод программы с одного языка на другой был таким простым, то как мне кажется давно бы уже придумали суперуниверсальный язык и не надо было бы ничего никуда переводить. | |
|
|
|
|
|
|
|
для: Valick
(26.05.2011 в 13:53)
| | Да это так, это не просто и не всегда возможно, особенно, когда код эксплуатирует какие-то особенности реализации компилятора или вообще железа. Понятно, что страдает эффективность, но она уже давно страдает, с тех пор, как отказались от массового применения машинных кодов и ассемблера.
Собственно такие проекты уже существовали (в более конечно приземленной форме). Создавались переводчики с Fortran на С++, собственно сам C++ - это надстройка, которая все переводит в чистый C (причем без потери эффективности). Существуют и другие подходы, например, подход Microsoft, которая строит бабель - т.е. объединяет множество языков под одной крышей, схожей философии придерживается GCC. Проблема эта скажем так решается и меня тоже сомнения гложат, что эволюция пойдет по этому пути. Мы уперлись в железо - эффективность перестал расти прежними темпами. Если само железо еще тянет, то сетевая инфраструктура явно нет. Поэтому на передний план снова выходит эффективность, это кстати еще одна причина, почему эра PHP будет завершаться. Все железо закончилось. Снова нужна скорость и эффективность. | |
|
|
|
|
|
|
|
для: cheops
(26.05.2011 в 14:08)
| | cheops, Вы уже второй раз (это то, что я помню) говорите про то, что эра PHP заканчивается. Можете подробнее рассказать? | |
|
|
|
|
|
|
|
для: Commander
(27.05.2011 в 10:02)
| | PHP очень популярен, особенно в России. Однако уже год или два наблюдаю если не тенденцию вниз, то по крайней мере застой и даже некий отток (главным образом новичков из отрасли). Сначала я его связывал с уменьшением интенсивности публикации наших книг и уменьшением активности тут на форуме. Потом, посмотрев соседние ресурсы и заметив там схожие тенденции, заинтересовался как обстоит дело вообще - стал следить за большим количеством признаков. В общем можно сказать, что в данный момент интерес к PHP падает и идет размывание его ниши.
Во-первых смещается акцент в сторону клиента, разработчики спешат перевалить как можно больше вычислений на браузер и машину клиента. Это правильно и это единственно возможный путь дальнейшего прогресса, иначе все наши сайты и услуги под себя подомнут большие корпорации. Понятно, что смещение функциональности в сторону JavaScript, CSS, Flash оттягивает ресурсы и силы от серверного компонента.
С другой стороны, проекты укрупняются, об этом говорят тенденции последних 5 лет. А у PHP есть критический в данный момент недостаток - он плохо подходит для больших проектов. Малые сайты редко меняются и в них вкладывают все меньше и меньше средств. С появлением блогосферы, проблема личного сайта вообще отошла на второй план (а это и была основная ниша малых сайтов). Т.е. проекты укрупняются. PHP это не тот инструмент, при помощи которого удобно делать крупные проекты.
Собственно информация по популярности языков открытая, глядите сами http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html. Это не значит, что PHP завтра перестанет существовать, а все разработчики останутся без работы. Я с трудом представляю себе разработчика, который успешен в одном языке программирования и не может адаптироваться к другому (так бывает, но не по причине того, что разработчик не может применить свой опыт в новых условиях). Тем более, что IT-рынок в мире и IT-рынок в России прилично отличаются (иногда процентные вклады отличаются в разы). Однако, есть поводы пораскинуть мозгами и внести коррективы в бизнес и собственную профессиональную подготовку.
Это одна сторона медали. Другая: инертность рынка, множество серверов, специалистов, компаний, в том числе и хост-компаний, тонны кода в момент не развернешь - на это нужны годы. Кроме того, часто бывает отскоки - резко уходят специалисты из области, на них также резко возрастает спрос, код-то никуда не девается, поэтому все время идут осцилляции возрастания популярности и падения (в С++ такое часто бывает).
PS В любом случае этот форум и PHP мы собираемся поддерживать до упора :))), поэтому площадке и поддержки PHP-разработчиков на ней ничего не угрожает и не будет угрожать долгие годы. | |
|
|
|
|
|
|
|
для: Valick
(26.05.2011 в 11:47)
| | Написано для удовольствия, я думаю. Помню тут тред был где на пхп сами себя еле-еле выводили, а тут такое. Я даже не подумал бы что это возможно) | |
|
|
|
|
|
|
|
для: Гость
(26.05.2011 в 12:41)
| | это типа программный "вечный двигатель" с нулевым коэффициентом полезного действия, что само по себе гениально :)) | |
|
|
|
|
|
|
|
для: Valick
(26.05.2011 в 13:24)
| | >это типа программный "вечный двигатель" с нулевым коэффициентом полезного действия, что само по себе гениально :))
Конечно гениально, ведь это фундамент исскуственного интеллекта.
Правда, это давно уже реализовано, достаточно вспомнить полиморфные вирусы. А на интерпретируемом языке это сделать намного проще. Впрочем, писать полиморфные движки на интерпретируемых языках никому в голову не придет | |
|
|
|
|
|
|
|
для: Гость
(26.05.2011 в 08:25)
| | чеж она на пхп не генерит? | |
|
|
|
|