LINUX.ORG.RU

Mojolicious 1.0

 , , ,


0

2

Спустя примерно 5 лет разработки, увидел свет первый релиз веб-фреймворка нового поколения для Perl — Mojolicious 1.0 (Snowflake).

Mojolicious даёт разработчику возможность отказаться от монструозных веб-фреймворков с излишне сложной структурой, уродливым API и кучей зависимостей в пользу изящных и компактных решений. Mojolicious — это попытка вернуть толику искусства в сферу веб-программирования.

Основными достоинствами Mojolicious являются:

  • Архитектура MVC («Модель - представление - управление»)
  • Чистое, переносимое объектно-ориентированное API на Perl'е, без каких-либо недокументированных функций и имеющее из зависимостей только сам Perl
  • Полная реализация HTTP 1.1 стека и ВебСокетов
  • Встроенный механизм асинхронного ввода/вывода с поддержкой epoll, kqueue и UNIX domain sockets
  • Автоматический детектор CGI, FastCGI и PSGI
  • Парсер JSON и XML/HTML5
  • Плагины, Perl-шаблоны, управление сессиями, тестовый фреймворк, интернационализация, полная поддержка юникода и многое другое.

Кроме этого, благодаря гранту, который выделил Perl Foundation, проект обзавёлся шикарной документацией.

Простота и удобство Mojolicious проявляются даже в его установке. Чтобы установить целый веб-фреймворк, достаточно выполнить всего один однострочник:

curl -L cpanmin.us | perl - http://latest.mojolicio.us

>>> Подробности

★★★★★

Проверено: mono ()
Последнее исправление: INFOMAN (всего исправлений: 4)
Ответ на: комментарий от AVL2

> функциональное программирование было во многом придумано для работы с текстом. В хаскеле даже спецом создали монаду буфер, чтобы памяь не жрать.

А можно ссылку на hackage, где эта монада упоминается?

И как, интересно, монада может не дать жрать память..? Вообще-то обычно они занимаются прямо противоположным.

rtvd ★★★★★
()
Ответ на: комментарий от tailgunner

> Те Фортран и Лисп тоже умерли. Кстати, Фортран очень сильно ограничивает программиста.

Лисп

Lisp 1.5 рипнулся, но CL живее всех живых.

lispfan
()
Ответ на: комментарий от rtvd

Ну, в общем, вот такие вольности в интерпретации и напрягают. Плюс у нас были замечены всякие необъяснимые тормоза, когда, вроде, ответ уже отдан, а результата в браузере приходится ждать долго. Поскольку у нас Play! в этом месте работает в виде тоненькой обёрточки над (быстрой) базой и приложению требуется действительно быстрый, change-as-you-type отклик от сервера.

AlexM ★★★★★
()
Ответ на: комментарий от rsync

>сам то понимаешь что пишешь? именно потому что применение математических операторов к строкам некорректно (например математическое сложение коммутативно, а строковое нет и так далее) в перле для строк отдельные операторы выделены - конкатенация и набор сравнений.

Ага, то есть мы, значит, создаем операторы под каждый типа данных.

сложение для целых, с плавающей точкой, для строк и под каждый тип объекта - все разные символы.

типа

+ это для целых

.+. для флоат

=+= для строк

Эт здорово. Продолжайте...

AVL2 ★★★★★
()
Ответ на: комментарий от AlexM

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

ну жаба, жаба же...

AVL2 ★★★★★
()
Ответ на: комментарий от AlexM

> отклик от сервера.

..., то пришлось поползать с бубном по коду. Правда, в 1.1 вылечили.

AlexM ★★★★★
()
Ответ на: комментарий от AVL2

Ага, то есть мы, значит, создаем операторы под каждый типа данных.

сложение для целых, с плавающей точкой, для строк и под каждый тип объекта - все разные символы.

нелогично. ибо сложение чисел с плавающей точкой такая же математическая операция как и сложение целых.

rsync ★★
()
Ответ на: комментарий от AVL2

> Например, http://hackage.haskell.org/package/text

монада позволяет работать с грязным содержимым в чистой обертке.

Ну и где же там монада? Там разве что моноиды есть.

<flame>

Кстати, не вижу ничего грязного в юникодных строчках.

И в хаскеле требуются грязные хаки лишь для того, чтобы их реализовать - то проблема ли это строчек или хаскелю пора лечиться? :)

</flame>

rtvd ★★★★★
()
Ответ на: комментарий от AVL2

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

ну жаба, жаба же...

Знаешь, что мешает плохому танцору? Ага, жаба.

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

>Ну и где же там монада? Там разве что моноиды есть.

у нас io уже без монад работает?

Кстати, не вижу ничего грязного в юникодных строчках.

грязное, это не юникодные строчки, а нарушение священных принципов чистоты, богомерзкие переменные, буфера, кишащие заспинными изменениями вместо создания новых копий и т.д.

И в хаскеле требуются грязные хаки лишь для того, чтобы их реализовать - то проблема ли это строчек или хаскелю пора лечиться? :)

хаскел говорит - все чистое клади к чистому, а для грязного есть монады и операция =>.

AVL2 ★★★★★
()
Ответ на: комментарий от rsync

>нелогично. ибо сложение чисел с плавающей точкой такая же математическая операция как и сложение целых.

разные. тип результата разный, преобразования операндов разные.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>>нелогично. ибо сложение чисел с плавающей точкой такая же математическая операция как и сложение целых.

разные. тип результата разный, преобразования операндов разные.

То есть ты и сам предлагаешь, чтобы операции сложения целых и плавающих чисел были разными? %)

tailgunner ★★★★★
()
Ответ на: комментарий от AVL2

> + это для целых

.+. для флоат

=+= для строк

Эт здорово. Продолжайте...

Ocaml?

+ для int, +. для real и так далее.

rtvd ★★★★★
()
Ответ на: комментарий от AVL2

>>Ну и где же там монада? Там разве что моноиды есть.

у нас io уже без монад работает?

Не надо стрелки переводить. Ты сказал, что там есть магическая монада «буфер», что дескать не дает программе жрать память. Такой монады там нет. IO там есть, что скрыто в потрохах. И используется через полухачные peformUnsafeIO. Так где твоя монада «буфер»?

Кстати, не вижу ничего грязного в юникодных строчках.

грязное, это не юникодные строчки, а нарушение священных принципов чистоты, богомерзкие переменные, буфера, кишащие заспинными изменениями вместо создания новых копий и т.д.

Воистину так. В черное духовенство податься не пробовали? :) Хорошо проповедываете.

И в хаскеле требуются грязные хаки лишь для того, чтобы их реализовать - то проблема ли это строчек или хаскелю пора лечиться? :)

хаскел говорит - все чистое клади к чистому, а для грязного есть монады и операция =>.

Ага. И unsafe операции, извращающие этот принцип. А без них все твои ByteString, Text и компания идут лесом.

rtvd ★★★★★
()
Ответ на: комментарий от AVL2

разные. тип результата разный, преобразования операндов разные.

сложение плавающих чисел не вводит в заблуждение читающего код, ибо он знает что такое сложение со школьной скамьи, это сложение работает так как он ожидает (коммутативно итп)

а вот сложение строк читающего код вводит в заблуждение, ибо как минимум нарушает основной закон о сложении, который первым изучают в школе «от перемены мест слагаемых сумма не меняется»

когда я вижу в сишном коде код вида

string_result = string1 + string2;

мне хочется убить того кто это писал.

И на самом деле очень мало языков, которые не грешат подобным.

rsync ★★
()
Ответ на: комментарий от rsync

Вы не можете в сишном коде такого видеть, т.к. в си просто нет строк.

Что делать школоте с операцией умножения и, например. с матрицами, где она самая не коммутативна? Может, теперь везде запретить использование мат. операторов трактование которых выходит за рамки уровня 5го класса?

string1 + string2 аналогично не вводит никого в заблуждение, всем интуитивно понятно что может значить сложение двух строк. Проблемы с пониманием таких конструкций возникают если операнды не являются простыми тривиальными объектами.

mashina ★★★★★
()
Ответ на: комментарий от rsync

>сложение плавающих чисел не вводит в заблуждение читающего код, ибо он знает что такое сложение со школьной скамьи

и сколько таки будет 1+1.5?

вот я точно знаю, что

1 + 1.5 = 2 1 .+. 1.5 = 2.5

AVL2 ★★★★★
()
Ответ на: комментарий от VeroLom

>Оно под lighttpd будет работать?

а куды оно денется? в лайти отличный православный fastcgi

AVL2 ★★★★★
()
Ответ на: комментарий от rtvd

>Не надо стрелки переводить. Ты сказал, что там есть магическая монада «буфер», что дескать не дает программе жрать память.

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

смотри монады reader, stream, реализацию faststring без копирования при создании строки в строку etc

Ага. И unsafe операции, извращающие этот принцип. А без них все твои ByteString, Text и компания идут лесом.

именно. посему грязное обернуто и вынесено отдельно.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>>Не надо стрелки переводить. Ты сказал, что там есть магическая монада «буфер», что дескать не дает программе жрать память.

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

Не виляй. Ты сказал дословно вот это: «В хаскеле даже спецом создали монаду буфер, чтобы памяь не жрать.». Где твоя «монада буфер, чтобы память не жрать»? Нет ее.

смотри монады reader, stream, реализацию faststring без копирования при создании строки в строку etc

Мне смотреть не надо, я уже все давно видел и не только.

Ага. И unsafe операции, извращающие этот принцип. А без них все твои ByteString, Text и компания идут лесом.

именно. посему грязное обернуто и вынесено отдельно.

Оно было бы «обернуто и вынесено», если бы была просто монада. А поскольку ею пользуются хаком (performUnsafeIO и компания), то это скорее «обернуто и закинуто под ковер». Так сказать, «в лучших традициях» пафосного ФП.

Еще забавляет то, как в haskell происходит выделение памяти. В то время как в честном Cшном malloc четко описано, что происходит если памяти нет, но в документации к соответсвующим функциям в haskell это вообще никак не описано. Красота. И для полного триумфа определен nullPtr вместо того, чтобы воспользоваться красотой алгоритмических типов данных и определить указатель как-то так:

data Ptr = NullPtr | SafePtr SafePtr

date SafePtr = SPtr# SafePtr#

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

>Где твоя «монада буфер, чтобы память не жрать»? Нет ее.

Мне смотреть не надо, я уже все давно видел и не только.

ну чего тогда спрашиваешь?

А поскольку ею пользуются хаком (performUnsafeIO и компания), то это скорее «обернуто и закинуто под ковер». Так сказать, «в лучших традициях» пафосного ФП.

иногда приходится идти на компромисы.

В то время как в честном Cшном malloc четко описано,

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

И для полного триумфа определен nullPtr

это тоже компромисс. В идеале пойнтеры в таком языке излишни. Тока не прожить без них. Пока...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> Си не предоставляет бесконечных чисел и вообще является простым отображением машинных комманд в мнемоники.

Это особый, уличный Си. Даже ассемблер отображает _мнемоники_ в машинные команды, а не наоборот %)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Это особый, уличный Си. Даже ассемблер отображает _мнемоники_ в машинные команды, а не наоборот %)

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

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>>Где твоя «монада буфер, чтобы память не жрать»? Нет ее.

Мне смотреть не надо, я уже все давно видел и не только.

ну чего тогда спрашиваешь?

Сначала ты начал плести про могучую монаду «буфер». Я заинтересовался, т.к. про такую монаду я не слышал. Спросил тебя, думая что может я чего-то не знаю. Ты начал писать про Data.Text. Выяснилось, что ты солгал и никакой монады там нет. Фактически, там вообще нет ничего, кроме хачно используемой монады IO.

А поскольку ею пользуются хаком (performUnsafeIO и компания), то это скорее «обернуто и закинуто под ковер». Так сказать, «в лучших традициях» пафосного ФП.

иногда приходится идти на компромисы.

Ага. Только s/иногда/всегда/, если не хочется выжирать память круче жабки и тормозить хуже интерпретируемого питона.

В то время как в честном Cшном malloc четко описано,

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

Я тебе про Фому, а ты мне про Ерему.

Не надо рассказывать байки про бесконечные числа. Тебе сказали ясно и по-русски: в Си хотя бы не стыдятся признать, что выделение памяти может не состояться. А в haskell - нет. Стыдливость это или лень - вопрос открытый.

Что до твоего оффтопа про бесконечные числа, то ты спорол чушь.

В haskell нет чисел, бесконечных с практической точки зрения. Ни числа пеано, ни всякие там Integer не являются действительно бесконечными из-за очевидных ограничений железа. Но если нужно что-то вроде Integer, то в С это есть. И не знать про это - позор.

И для полного триумфа определен nullPtr

это тоже компромисс. В идеале пойнтеры в таком языке излишни. Тока не прожить без них. Пока...

Адов бред. Наличие указателей не означает необходимости в столь убогой реализации, втупую слизанной с С. Что в свою очередь слизал по-моему из Ada. В haskell могли сделать и более безопасную реализацию. Но видимо слишком сильна у некоторых людей тяга к отстреливанию себе пальцев. И даже незаряженный ствол на предохранителе не спасает. Умельцы всегда найдут способ себя оправить к праотцам.

rtvd ★★★★★
()
Ответ на: комментарий от mashina

>string1 + string2 аналогично не вводит никого в заблуждение, всем интуитивно понятно что может значить сложение двух строк

скажите, а что думают незаблуждающиеся, когда встречают конструкцию c=a+b в теле какой-нибудь функции с аргументами (a,b) в языке без типизации скаляров, например javascript. Наверное с астралом советуются или бегут проверять все вызовы данной функции. Особенно смешно, что при наличии в наборе строковых данных javascript для '+' делает конкатенацию, а для '-' числовую разницу.

Весело смотреть в js как сортируют данные вида prefix+число, наверное для начала превращают в двухэлементный список ибо рекомендуемая для числовой сортировки function () {return a-b} дает совсем не тот результат.

Вопрос на самом деле не в коммутативности операции сложения, а в том, что она придает значение содержимому скаляра, в то время как конкатенация вслепую склеивает скаляры. Те же матрицы по своей сути прямогугольные таблицы с числами, поэтому '+' для них это некая операция над элементами, причем от того что элементы оказались int/long/float/double/итд ничего принципиально не меняется. А вот '.' это тупое соединение в одну большую таблицу. Картинку нарисовать или и так понятно?

Альтернативой введения дополнительных операторов является статическая типизация скаляров. Но про смысл подобного в скриптовых языках отдельный разговор.

angra
()
Ответ на: комментарий от rtvd

>Сначала ты начал плести про могучую монаду «буфер». Я заинтересовался, т.к. про такую монаду я не слышал. Спросил тебя, думая что может я чего-то не знаю. Ты начал писать про Data.Text. Выяснилось, что ты солгал и никакой монады там нет. Фактически, там вообще нет ничего, кроме хачно используемой монады IO.

есть чистый stringbuffer и есть куча оптимизированных под разные случаи в том числе и монад. тот же faststring.

Ага. Только s/иногда/всегда/, если не хочется выжирать память круче жабки и тормозить хуже интерпретируемого питона.

http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=ghc&lang2=...

В haskell нет чисел, бесконечных с практической точки зрения. Ни числа пеано, ни всякие там Integer не являются действительно бесконечными из-за очевидных ограничений железа.

ну тогда вообще ничего не надо. Остаемся на бейсиковых peek и poke. Все равно везде очевидные ограничения железа...

Наличие указателей не означает необходимости в столь убогой реализации, втупую слизанной с С. Что в свою очередь слизал по-моему из Ada. В haskell могли сделать и более безопасную реализацию.

угу, после чего начнется удвоеный вой на тему «в Си хоть указатели честные! а тут тормозные и нечестные!»

AVL2 ★★★★★
()
Ответ на: комментарий от angra

>когда встречают конструкцию c=a+b в теле какой-нибудь функции с аргументами (a,b) в языке без типизации скаляров, например javascript.

смотрят на тип(смысл) переменной С. Если ты, к примеру в строку складываешь случайным образом суммы чисел и строк или в число = строка+строка, значит ты сам себе злобный буратино...

а вообще скриптовые языки или сделаны для одно-двухстрочников или требуют такой же типизации или самоорганизации кодера

Альтернативой введения дополнительных операторов является статическая типизация скаляров.

или функции tointeger() или (int)var

AVL2 ★★★★★
()

> Спустя примерно 5 лет разработки, увидел свет первый релиз веб-фреймворка нового поколения для Perl ...

Закопать сразу после рождения. Perl уже мертв, и фреймворки для него пейсать все равно что некрофильством заниматься.

anonymous
()

> Mojolicious даёт разработчику возможность отказаться от монструозных веб-фреймворков с излишне сложной структурой, уродливым API...

и тут же:

Архитектура MVC


смешно. закапывайте!

matumba ★★★★★
()
Ответ на: комментарий от yaws

ыыыыы :) только что написал в точности этот же момент.

matumba ★★★★★
()
Ответ на: комментарий от AVL2

>>Сначала ты начал плести про могучую монаду «буфер». Я заинтересовался, т.к. про такую монаду я не слышал. Спросил тебя, думая что может я чего-то не знаю. Ты начал писать про Data.Text. Выяснилось, что ты солгал и никакой монады там нет. Фактически, там вообще нет ничего, кроме хачно используемой монады IO.

есть чистый stringbuffer и есть куча оптимизированных под разные случаи в том числе и монад. тот же faststring.

Значит faststring это уже монада? Ссылку на package, где faststring реализована как монада продемонстрировать слабо?

Судя по всему, товарищ, Вы просто не знаете что такое монада. Но пальцы гнуть перед всеми так сладко...

Ага. Только s/иногда/всегда/, если не хочется выжирать память круче жабки и тормозить хуже интерпретируемого питона.

http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=ghc&lang2=...

Ты хоть раз код этих программ видел? Это мягко говоря изврат. А классически написанный код будет тормозить и жрать память в три рыла.

В haskell нет чисел, бесконечных с практической точки зрения. Ни числа пеано, ни всякие там Integer не являются действительно бесконечными из-за очевидных ограничений железа.

ну тогда вообще ничего не надо. Остаемся на бейсиковых peek и poke. Все равно везде очевидные ограничения железа...

Виляешь дальше? Приведи конкретный пример, где в haskell есть бесконечные числа, которых нет в C.

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

Наличие указателей не означает необходимости в столь убогой реализации, втупую слизанной с С. Что в свою очередь слизал по-моему из Ada. В haskell могли сделать и более безопасную реализацию.

угу, после чего начнется удвоеный вой на тему «в Си хоть указатели честные! а тут тормозные и нечестные!»

Ога. Вой будет, если их будет реализовывать очередное «особо одаренное» дитя вроде AVL2. При нормальной реализации никакого ущерба скорости не будет.

rtvd ★★★★★
()
Ответ на: комментарий от matumba

>> Архитектура MVC

смешно. закапывайте!

Любители скриплетиков на LOR? Ложись в ямку первым.

rtvd ★★★★★
()

зачем оно, если есть java ee 6?

JFreeM ★★★☆
()
Ответ на: комментарий от rtvd

>Значит faststring это уже монада?

ни разу. я пишу по сути проблемы. В faststring в частности есть функции, позволяющие лишний раз не копировать строки и снизить таким образом оверхед.

И таки да, монады показаны для таких применений. Тебе не хватает монад? Ну так напиши! Хаскель тебе в руки...

Ты хоть раз код этих программ видел? Это мягко говоря изврат. А классически написанный код будет тормозить и жрать память в три рыла.

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

И имей в виду, что числа Пеано идут лесом.

и хто тут виляет? Сказал бы просто - не нужно. Нет, надо наукообразно растечься...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>>Значит faststring это уже монада?

ни разу. я пишу по сути проблемы. В faststring в частности есть функции, позволяющие лишний раз не копировать строки и снизить таким образом оверхед.

Тогда зачем ты лжешь про какую-то монаду буфер?

Ты хоть раз код этих программ видел? Это мягко говоря изврат. А классически написанный код будет тормозить и жрать память в три рыла.

классически, это без хвостовых рекурсий и с зацеплением данных даже в итераторах?

Ты Haskell в глаза не видел? Нормальные люди пользуются всякими там scan, map и fold а не пишут явную рекурсию. И это - классика.

И имей в виду, что числа Пеано идут лесом.

и хто тут виляет? Сказал бы просто - не нужно.

Еще раз.. Приведи пример твоих мифических «бесконечных чисел» в хаскель, которых нет в С. Пока не приведешь - считаю тебя лжецом и неучем.

rtvd ★★★★★
()
Ответ на: комментарий от angra

скажите, а что думают незаблуждающиеся, когда встречают конструкцию c=a+b в теле какой-нибудь функции с аргументами (a,b) в языке без типизации скаляров, например javascript. Наверное с астралом советуются или бегут проверять все вызовы данной функции.

Вообще там речь шла о типизированном языке (плюсах?) и коммунтативности. Но можно обсудить и динамические языки...

Проверять код не нужно, достаточно просто вставить проверки типов на входе (через спец. функции или нативные конструкции). Не знаю как это делается именно в JS, наверное через typeof(). Можно делать явное приведение через конструкторы типов - int(), str(), ... в выражениях. Методы написания понятного когда есть в динамических языках, но не везде они достаточно развиты и не везде принято их использовать (к сожалению). В этом плане динамический язык сложнее, требует большей дисциплины от человека и понимание проблем масштабируемости и чтения кода другими людьми.

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

Те же матрицы по своей сути прямогугольные таблицы с числами, поэтому '+' для них это некая операция над элементами, причем от того что элементы оказались int/long/float/double/итд ничего принципиально не меняется. А вот '.' это тупое соединение в одну большую таблицу. Картинку нарисовать или и так понятно?

Матрица прямоугольная таблица не по сути, а только по форме. По сути это мат. объект с определённым набором операций. Причём из этих операций с интуитивным смыслом совпадают только операции сложения и вычитания и нет никакой операции '.'. Тем более я в качестве примера дал операцию умножения.

Ну да ладно. Пусть, допустим, оператор конкатенации для матрицы в вашем понимании существует, как именно должно выполняться 'тупое соединение' двух матриц? Да, нарисуйте, пожалуйста, картинку.

Альтернативой введения дополнительных операторов является статическая типизация скаляров. Но про смысл подобного в скриптовых языках отдельный разговор.

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

mashina ★★★★★
()
Ответ на: комментарий от DNA_Seq

> Знаешь чем написание рассказа отличается от написания инструкции? При написании рассказа рассчитываешь что читатель процентов 70 додумает самостоятельно а при написании инструкции пытаешься сформулировать так чтоб читатель не подумал ничего сверх того что там описано.

и почему гуманитариев так и тянет в программисты? я понимаю, когда инженер, на досуге, стихи пишет и либо никому их не показывает, либо только самым близким. а эти... «ты их в дверь, они - в окно». да еще и поучать начинают.

anonymous
()
Ответ на: комментарий от anonymous

Ты не путай, гуманитарии пишут на дотнете и жабе, но чаще на с/с++. И вообще программирование процентов на 70 гуманитарное занятие

ЗЫ Если бы ты не страдал ГСМ или хотя бы знал что такое Perl то понял бы аналогию

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от anonymous

все параллельное программирование недетерминировано в классическом смысле ибо использует бесконечные циклы

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от anonymous

И вообще какое отношение это имеет к синтаксису который собственно в ветке и обсуждается? На перле можно написать например print reverse <>, просто и понятно. Сколько строчек займет реализация оного на си?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

> все параллельное программирование недетерминировано в классическом смысле ибо использует бесконечные циклы

в огороде - бузина, а в киеве - дядька

хорошо, приведите «отрывок из рассказа» на перле, демонстрирующий то, о чем вы так много и путанно говорили

anonymous
()
Ответ на: комментарий от DNA_Seq

> Если бы ты не страдал ГСМ или хотя бы знал что такое Perl то понял бы аналогию

меня так и тянет сказать: «сынок, ...». но я не буду больше делать этого по определенным причинам

anonymous
()
Ответ на: комментарий от anonymous

Определенные причины как я понял это твое терминальное ФГМ?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

> Я уже привел - print reverse <>

и вот ЭТО декларировалось как «написание рассказа»? я, конечно, не претендую на звание лучшего литературного критика, но это никак не вяжется с тем, что, в моем понимании, является «повествовательным изложением».

у вас есть хоть что-нибудь хоть как-нибудь поддерживающее вашу точку зрения по поводу нашего спора?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.