November 2021

S M T W T F S
 123456
78910111213
1415161718 1920
21222324252627
282930    

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Thursday, June 30th, 2011 01:11 pm
Умные, а особенно профессиональные френды. Особенно - профессиональные там, откуда аббревиатура в заголовке. Вопрос.

Достался мне на доработку (порядка половины функциональности) LAMP-сайт. "И эти еще из лучших", то есть с кодом можно спокойно работать. Залез я туда, и задумался. А вообще есть у нас реальная альтернатива PHP для _сравнительно_ простых, но обязательно хотящих странного динамических сайтов?

Достоинства PHP (применительно к моей задаче), то есть то, чем очень не хотелось бы поступиться при поиске альтернативы:


  1. ЛЕГКИЙ (по этому параметру не проходит mod_perl, например) вместе с клиентом к мысклю и http-клиентом (надо запрашивать у стоящего на локалхосте Яндекс-сервера результаты поиска);

  2. простое шаблонирование;

  3. при этом универсальное (см. слово "странного" выше);

  4. простые же ручки к мысклю и к запросу HTTP и разбору ответов - разбор XML не критичен, задача позволяет сделать и более простой формат, но приветствуется, потому как XML - это уже готовый формат для неоднородных данных;

  5. перловые регулярные выражения (pcre годится) и отсутствие проблем с их локализацией (и вообще с локализацией строк - lc, uc, ucfirst должны работать с кириллицей);

  6. ну, понятно, urlencode/urldecode, мы же все-таки веб-сайт строим.



Наиболее критичны "легкий", "странное", регексы.

Недостатки PHP, обнаруженные на моей задаче:


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

  • претензия к системе шаблонирования: один перевод строки - и уже не поменяешь код HTTP response. Из чего следует, что приходится вручную делить код на то, что выполняется (и может содержать рантайм-ошибки), засасывать все необходимые (или хуже того, которые _могут_ понадобиться) данные заранее (см. предыдущий пункт), и на то, что потом из засосанного уже строит страницу



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

Сервер подразумевается все-таки выделенным, но в норме - виртуальной машиной, отсюда требования к весу. В норме Debian. То есть доставить тот или иной модуль к базовому языку подразумевается возможным.
Tags:
Thursday, June 30th, 2011 10:26 am (UTC)
А почему бы не начать вот отсюда?
http://www.haskell.org/haskellwiki/Web/Frameworks
Исходя из того, чтобы взять язык, который тебе в данный момент наиболее удобен и привычен, и выбрать для него наиболее подходящий из существующих фреймворков в данной предметной области.
Thursday, June 30th, 2011 10:53 am (UTC)
Задумался о человеке, который будет поддерживать этот проект после Рана.

... The hinge of armoring is important internal source ...

Thursday, June 30th, 2011 11:00 am (UTC)
Если бы вы действительно хотели поддерживать эттт сайт, то вы пришли бы ночью, в масках, и привели бы с собой ЧЕЛОВЕКА. © Марк Твен.
Thursday, June 30th, 2011 01:31 pm (UTC)
я вот задумался. Повезёт человеку. Может быть я даже не прочь бы быть таковым, если совсем никакой работы не будет. А так -- этих хаскелюг сейчас, особенно за деньги, как говна по весне.

Касаемо проекта -- посчитаем время приблизительно.
Сколько занимает пиление нетривиальной похапэшной программы -- известно, но обязательно учитываем тестирование (там, где типизация делает гарантированный результат зачастую, в похапэ следует либо проверять, либо положиться на случай/память), и обязательно учитываем лёгкость внесения изменений и вообще рефакторинга (там, где опять же помогает строгая типизация), и учитываем лёгкость написания заведомо корректного кода. (понятно, что далеко не весь код корректный, но можно сравнить 10 строк кода на х-е и 5 экранов кода на похапэ и оценить лёгкость поиска ошибок при знании обоих языков.)
С другой стороны, учитывая современные туториалы, изучение х-я занимает примерно: 3 дня до уровня "я понимаю и могу исправить простые штуки", пару недель до уровня "я понимаю продакшон-код и могу почти всё исправить", месяц до уровня "я могу писать любой свой код без ограничений". Кроме того, время на изучение амортизируется в случае наличия нескольких задач, требующих знание данного языка, и есть синергетический эффект: изученное для одного из проектов скорее всего пригодится в другом.
Мой вывод: использовать х-ь однозначно. И это при том, что я -- никак не фоннат языка и его принципов.
Thursday, June 30th, 2011 01:23 pm (UTC)
Мне уже лет десять упорно кажется, что обработка HTTP-запросов должна идеально ложиться на функциональную модель.
Thursday, June 30th, 2011 01:32 pm (UTC)
и она таки идеально ложится, проверено. Разве что iteratees для обработки тела (ну и вообще, для ввода-вывода).
Thursday, June 30th, 2011 01:43 pm (UTC)
Какой там ввод-вывод? На входе у нас имеется строка (URI) и два списка строк - переменные querysring и http-заголовки.
На выходе - число (статус) и строка (сформированная страница).

Или речь идет о запросах в БД в процессе формирования страницы?
Thursday, June 30th, 2011 01:56 pm (UTC)
не всегда выгодно сформированную страницу пихать в строку, иногда лучше оформить её чем-то вида "генератора контента", даже несмотря на необходимость проставлять "Connection: close" и закрывать соединение. Но даже это не всего идеально: иногда лучше дать "генерирующей стороне" полный контроль над выводом тела, дав, фактически, "доступ к IO-монаде", если в терминах хаскеля.

Про ввод-вывод -- это я в целом имел ввиду, но конкретно тут только "ввод" нужен, и только для разбора тела POST-запроса (а там, может, и вывод понадобится -- например, во временный файл сохранить для дальнейших разборок). И там может быть разный transfer-encoding, который удобно разбирать через iteratees -- фактически пишется один iteratee для обработки внутреннего, раскодированного потока, а далее, при нужде, его обвешивают нужными преобразователями из внешнего потока во внутренний, возможно вложенно.
Friday, July 1st, 2011 07:07 am (UTC)
Так вроде ж давно положили, кому оно надо. См., например, ерланговый web machine. Оно ещё и полный граф обработки запроса рисует красиво.