Как стать автором
Обновить

Комментарии 21

Каждый ***** по своему…
на самом деле интерес к хаскелу действительно возрос)
По-моему он всегда одинаковый, но всегда кажется, что действительно возрос :-D
не сломайте глаза, выужено их архивов без форматирования, изначально было в виде лямбды
{import IO; import Network; main= do{so
какой то неуверенный хайлайт кода, может поярче?
И чуть крупнее :-)
НЛО прилетело и опубликовало эту надпись здесь
Сначала полностью RWH прочтите, осмыслите, а потом возвращайтесь. То, что вы не смогли осилить язык, не означает, что он плох.
НЛО прилетело и опубликовало эту надпись здесь
Конечно, он неидеален. Знаете высказывание Страусступа? «There are only two types of programming languages: those, everyone bitches and those nobody uses.»

Но это не значит, что он «выворачивает подход» и имеет «нечеловеческий» вид. Вы ведь не говорите, что использование дрели извращает подход к нормальному забиванию гвоздей?
НЛО прилетело и опубликовало эту надпись здесь
Это не моя статья :) И вряд ли имеет смысл говорить о том, какой подход «лучше». «Лучше» — понятие очень субьективное и нечеткое. Для кого лучше? Лучше для чего?
Хаслекль не единстевнный функциональный язык, система типов, и компилятор очень навороченный и программа по сути = виртуальная машина которая упаковывается в экзешник с вашим приложением. АТД и лень тоже интересны, НО то что он ЧИСТО ФУНКЦИОНАЛЬНЫЙ и для множества простых вещей нужно работать с монадами ЕГО ГРОБИТ. Erlang, F#, Scala гораздо более человечны. Точно такой же сервер на эрланге описан в блоге Joe Armstrong, и его исходники гораздо понятнее человеку не знакомому с эрлангом или с функциональным программированием в принципе.
Я придерживаюсь прямо противоположного мнения. Чего стоит впихивание в языки всяких конструкций для асинхронного ввода-вывода, тогда как это всё выражается в терминах монад.
А не получится, как с C++?
В C++ как раз намешано очень много.

А так сами сравните, десяток вложенных foreach или
do
    fileName <- enumDirectory "."
    line <- readLines fileName
    word <- words line
    if word == "bla" then ... else ...


Куча проверок на null или
do
    f <- findSmth
    r <- doSmthWith f
    return (f, r)


Вызывать на каждом ходу BeginSmth с передачей callback'а, или
do
    f <- download "file1"
    g <- download "file2"
    return (length f == length g)


Вот с чем действительно у Хаскеля непорядок, так это с трансформерами монад. Они не вписываются органично и потому ExceptionalT String (StateT Int IO) a смотрится жутко.
Я немного не про это. Я про то, что идеологически С++ тоже пытался включить в себя только необходимейший минимум, а остальное реализовать средствами языка. Boost доказал, что это возможно, но, зачастую, какой ценой.
Протокол, к слову, очень простой. Клиент шлёт случайные ключи, сервер в ответ подтверждает соединение, отсылая md5 от конкатенации этих ключей.

Если бы так было бы просто, они бы эти ключи не добавляли=)
Клиент шлет два ключа + случайное тело запроса. Сервер выкидывает из ключа все кроме цифр, получившееся десятеричное число делит на кол-во пробелов в ключе. Новое число разбивается на байты и записывается как строка. Объединяется с подобным числом от другого ключа и с телом запроса клиента… и для всей этой байтной мути еще и md5 высчитывается. Вообщем знают толк в извращениях.
Кстати создание ответа клиенту намного интереснее чем передача сообщений :D
Отлично, ну просто замечательно. :)

Правда, мне непонятно, зачем нужен трюк с fixIO: не могу найти вхождений [s] в [\s -> ...]. Что я не замечаю?
Это результат исправлений :) Можно убрать. До этого я ссылку передавал в onAccept.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории