Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Цепной квайн
 
 автор: Гость   (26.05.2011 в 08:25)   письмо автору
 
 

Один японец написал забавный цепной квайн..

# 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

  Ответить  
 
 автор: Commander   (26.05.2011 в 08:59)   письмо автору
 
   для: Гость   (26.05.2011 в 08:25)
 

:)))

P.S. Интересно, этот код работоспособен? Я бы сам проверил, но лень ставить такую кучу интерпретаторов.

  Ответить  
 
 автор: lightning.say   (26.05.2011 в 11:34)   письмо автору
 
   для: Гость   (26.05.2011 в 08:25)
 

чет терзают смутные сомнения что такой код на такое способен. Вы сами-то проверяли?

  Ответить  
 
 автор: Гость   (26.05.2011 в 12:37)   письмо автору
 
   для: 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, т.к. в противном случае результатный может быть не тот.

  Ответить  
 
 автор: Valick   (26.05.2011 в 11:47)   письмо автору
 
   для: Гость   (26.05.2011 в 08:25)
 

работает или нет это меня не волнует... нахрен он нужен вот что мне интересно :)
или это типа такой вирус (чтоб его ни один антивирус не распознал) запустить который обычный пользователь вряд ли когда-нибудь сможет :)

  Ответить  
 
 автор: cheops   (26.05.2011 в 12:38)   письмо автору
 
   для: Valick   (26.05.2011 в 11:47)
 

Сама концепция интересна. Проблема автоматического перевода с одного языка на другой довольно существенна и регулярно возникает, решается она многими путями, однако, чаще все же требует множества усилий. Такие цепочки это хороший шаг вперед в направлении автоматического перевода.

  Ответить  
 
 автор: Valick   (26.05.2011 в 13:15)   письмо автору
 
   для: cheops   (26.05.2011 в 12:38)
 

ну это Вы загнули)
японец скорее всего делал это в обратном направлении, т.е. уже заранее был известен результат который должен был получиться.
да и автоматический перевод это когда одна программа на одном языке дает результат, при переводе результат сохраняется.
а тут одна программа на одном языке пишет другую программу на другом языке. т,е результат постоянно меняется или я заблуждаюсь?

  Ответить  
 
 автор: cheops   (26.05.2011 в 13:30)   письмо автору
 
   для: Valick   (26.05.2011 в 13:15)
 

Герц в свое время тоже объявил радиоволны - бесполезным эффектом, который вряд ли когда найдет применение в жизни человека. Напомню, говорил это стоя перед прибором передавшим информацию по воздуху без проводов. Да на несколько метров, но думаю многие бы его современники могли его поправить, собственно потом это и сделав, изобретя радио.

Тут тоже самое. У нас тут недавно в IT произошла небольшая революция, резко возросло значение интерпретируемого кода. Код ушел на новый виток абстракции, с одной стороны стали появляться гигантские библиотеки интерпретируемого кода, с другой стороны возросло количество реально используемых интерпретируемых языков. Куда это все выльется, конечно, не известно. Однако, проблема интеграции, пусть она и не стоит так остро, благодаря множеству протоколов, есть и будет и чем дальше, тем больше. Самоконвертирующийся код, если он со временем сможет брать на себя дополнительную нагрузку, может найти довольно много применений и может положить начало единой кроссязыковой библиотеке.

>а тут одна программа на одном языке пишет другую программу на другом языке. т,е результат
>постоянно меняется или я заблуждаюсь?
Тут весь фокус в том, что код замкнут в единый цикл, в конце получается та же самая программа, у вас на каждом этапе одна и та же программа, которая получается из предыдущей и может воспроизвести следующую. Проблема лишь в том, может ли она брать дополнительную нагрузку.

  Ответить  
 
 автор: Valick   (26.05.2011 в 13:53)   письмо автору
 
   для: cheops   (26.05.2011 в 13:30)
 

цикл замкнут - тут возражений нет, но и одинакового результата тоже нет :)
да я и не спорю в целом, ведь РНР к которому мы все привыкли, на выходе дает HTML (и не только)
я просто говорю, что не все так просто как хотелось бы :)
если бы перевод программы с одного языка на другой был таким простым, то как мне кажется давно бы уже придумали суперуниверсальный язык и не надо было бы ничего никуда переводить.

  Ответить  
 
 автор: cheops   (26.05.2011 в 14:08)   письмо автору
 
   для: Valick   (26.05.2011 в 13:53)
 

Да это так, это не просто и не всегда возможно, особенно, когда код эксплуатирует какие-то особенности реализации компилятора или вообще железа. Понятно, что страдает эффективность, но она уже давно страдает, с тех пор, как отказались от массового применения машинных кодов и ассемблера.
Собственно такие проекты уже существовали (в более конечно приземленной форме). Создавались переводчики с Fortran на С++, собственно сам C++ - это надстройка, которая все переводит в чистый C (причем без потери эффективности). Существуют и другие подходы, например, подход Microsoft, которая строит бабель - т.е. объединяет множество языков под одной крышей, схожей философии придерживается GCC. Проблема эта скажем так решается и меня тоже сомнения гложат, что эволюция пойдет по этому пути. Мы уперлись в железо - эффективность перестал расти прежними темпами. Если само железо еще тянет, то сетевая инфраструктура явно нет. Поэтому на передний план снова выходит эффективность, это кстати еще одна причина, почему эра PHP будет завершаться. Все железо закончилось. Снова нужна скорость и эффективность.

  Ответить  
 
 автор: Commander   (27.05.2011 в 10:02)   письмо автору
 
   для: cheops   (26.05.2011 в 14:08)
 

cheops, Вы уже второй раз (это то, что я помню) говорите про то, что эра PHP заканчивается. Можете подробнее рассказать?

  Ответить  
 
 автор: cheops   (27.05.2011 в 15:43)   письмо автору
 
   для: 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-разработчиков на ней ничего не угрожает и не будет угрожать долгие годы.

  Ответить  
 
 автор: Гость   (26.05.2011 в 12:41)   письмо автору
 
   для: Valick   (26.05.2011 в 11:47)
 

Написано для удовольствия, я думаю. Помню тут тред был где на пхп сами себя еле-еле выводили, а тут такое. Я даже не подумал бы что это возможно)

  Ответить  
 
 автор: Valick   (26.05.2011 в 13:24)   письмо автору
 
   для: Гость   (26.05.2011 в 12:41)
 

это типа программный "вечный двигатель" с нулевым коэффициентом полезного действия, что само по себе гениально :))

  Ответить  
 
 автор: Commander   (27.05.2011 в 10:07)   письмо автору
 
   для: Valick   (26.05.2011 в 13:24)
 

>это типа программный "вечный двигатель" с нулевым коэффициентом полезного действия, что само по себе гениально :))

Конечно гениально, ведь это фундамент исскуственного интеллекта.

Правда, это давно уже реализовано, достаточно вспомнить полиморфные вирусы. А на интерпретируемом языке это сделать намного проще. Впрочем, писать полиморфные движки на интерпретируемых языках никому в голову не придет

  Ответить  
 
 автор: lightning.say   (26.05.2011 в 13:50)   письмо автору
 
   для: Гость   (26.05.2011 в 08:25)
 

чеж она на пхп не генерит?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования