Pull to refresh

Comments 21

на самом деле интерес к хаскелу действительно возрос)
По-моему он всегда одинаковый, но всегда кажется, что действительно возрос :-D
не сломайте глаза, выужено их архивов без форматирования, изначально было в виде лямбды
{import IO; import Network; main= do{so
какой то неуверенный хайлайт кода, может поярче?
> надеюсь, у кого-нибудь дополнительный интерес к Haskell пробудило, или поубавило скептицизма относительно бесполезности функциональных приблуд.

на самом деле, нифига подобного.
я, имея, за плечами половину «real world haskell», потерял нить уже через пару абзацев.
подумалось: ну нифига ж себе, какой оказывается геморрой написать простой сервер на хаскеле.

на самом деле, хаскель просто выворачивает наизнанку весь подход к программированию. прочитав упомянутые 8 глав RWH, я всё же вернулся к питону — там есть элементы ФП, но в более «человеческом» виде.
Сначала полностью RWH прочтите, осмыслите, а потом возвращайтесь. То, что вы не смогли осилить язык, не означает, что он плох.
UFO just landed and posted this here
Конечно, он неидеален. Знаете высказывание Страусступа? «There are only two types of programming languages: those, everyone bitches and those nobody uses.»

Но это не значит, что он «выворачивает подход» и имеет «нечеловеческий» вид. Вы ведь не говорите, что использование дрели извращает подход к нормальному забиванию гвоздей?
> То, что вы не смогли осилить язык, не означает, что он плох.

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

Articles