metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-10-28 06:34 pm

Интересное мнение про Haskell

http://neugierig.org/software/blog/2011/10/why-not-haskell.html
http://www.reddit.com/r/programming/comments/lfm1k/why_not_haskell/

У меня на данный момент с хаскелем забавный мозговой тупик: не совсем понимаю, как писать идиоматический код.

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

Вообще, от софта хочется простого: кроссплатформенность(винда/линукс), никаких JRE/Mono/CLI/интерпретаторов питонов/рубей, минимум зависимостей, отсутствие ручной работы с выделением-удалением памяти, нормальные строки, более-менее строгие типы.

[identity profile] tzirechnoy.livejournal.com 2011-10-29 10:14 am (UTC)(link)
Хм. Ну, возьмите C.
Я, кстати, серьёзен -- с типами из пристойного и работающего остались C, Haskell и ocaml. Ах, ну да, говорят, ещё scala есть -- я её не пробовал, очень возможно, что оно того стоит (но под Вашы критэрии не подходит).

Только, рэбе, зачем Вам типы?

PS А идиоматический код пишэтся примерно как везде. Сначала ты идиоматически пишэшь, что тебе нужно (возможно, дажэ без привязки к языку). Потом идиоматически дополняешь это какими-нибудь уточнениями (можно с операторами любимого языка, кстати) до такого, чтобы было понятно и однозначно при чтении человеком. Потом приводишь примерно к синтаксису твоего языка, производя наиболее тривиальные замены слов и операторов на существующие (включая всякий pattern-matching или template generators, если это применимо и удобно). Потом в отдельных файлах дописываешь такие подпорки, чтобы всё остальное, что ещё не компилируется -- было тривиально заменить на вызовы этих подпорок, чтобы оно компилировалось.

PPS Кстати, лично я не люблю хаскель за три вещи.
Во-первых, он, в натуре, сложный, там дофига всякого синтаксического сахара и разных операторов, при этом хрен поймёшь куда смотреть, чтобы понять что оно обозначает. Вот нафиг, например, это do сделали?
Во-вторых, большое количество самых разнообразных операторов с произвольными приоритетами плюс некоторая ленивость приводит к тому, что в нормальном выражэнии потоки информацыи могут идти справа налево, слева направо и снизу вверх.
В-третьих, хаскелевское описание операторов -- это гениально, я впервые вообще понял, как разбор выражэний с операторами работает, что такое приоритеты и всё такое. Но им откровенно злоупотребляют, нормальная программа начинает походить на взрыв на фабрике знаков препинания. А ручной подсчёт скобок в лиспе после разбора хаскеллевских выражэний выглядит детской забавой.

В общем, по сумме: Хаскель сложэн. Для меня сложэн. Вот такой вот я негениальный программист, чо там.

[identity profile] metaclass.livejournal.com 2011-10-29 10:20 am (UTC)(link)
По хаскелю все так и есть, увлечение определением операторов до добра не доводит.

[identity profile] tzirechnoy.livejournal.com 2011-10-29 10:53 am (UTC)(link)
Да, в C ещё можно заюзать небольшое количество классов. Если все классы свои, new/malloc очень редко, только в конструкторах спецыально сделанных классов, только для тяжёлого, с рефкаунтером и правильно переписанным конструктором неглубокого копирования, -- то часто получается няшка, в общем-то. Код вообще без указателей, практически все данные размещаются на стэке, и убиваются по return, про memory management можно забыть как про страшный сон, RAII в полный рост, при этом никакого особого выпендрёжа с классами ввода/вывода, итэраторами, рваными шаблонами и прочей радости, ломающей старенькой но вполне так пристойный вид кода на C.

[identity profile] gds.livejournal.com 2011-10-29 11:32 am (UTC)(link)
похожие впечатления про хаскель.
про do вот расскажу -- удобно как для манаток, так и для edsl. впрочем, не ясно, чем же манатки так отличились, что только для них выделили синтаксис.

[identity profile] theiced.livejournal.com 2011-10-29 02:58 pm (UTC)(link)
1. хаскель простой. ненужный вам синтаксис можно не пользовать. честно, не аргумент.
2. ну расставьте скобки если не уверены, кто вам мешает.
3. ну нет в хаскеле операторов, нету. там вообще есть функи с одним аргументом, типы и тайпклассы ;] но это я ною. а зачем вы в лиспе считаете скобки?

PS. в очередной раз - я не считаю хаскель пригодным для чего то большего чем "дёрнуть-страничку-попарсить-насрать-в-базу".

[identity profile] tzirechnoy.livejournal.com 2011-10-29 03:44 pm (UTC)(link)
1. Да кучка не писатель. Ну, в смысле -- в одиночку сейчас много не напишэшь, заметное время тратится на чтение чужого. И вообще без чужых идей в незнакомом языке как-то тяжко.
2. См.п.1.
3. Ну мало ли, только нотепад на компьютэре. Или вообще через веб смотрю. Но это вообще редкость, было бы часто -- я бы лисп выкинул. А текстового редактора, который бы группировал хаскелевский поток сознания, у меня нет -- потому всё ещё тяжэлее, чем лисп в нотепаде.

[identity profile] theiced.livejournal.com 2011-10-29 03:49 pm (UTC)(link)
1/2. хаскель на уровне "уверенно читаю чужой код лазя раз в 10 минут в доки" осваивается за 2-3 дня.
3. откуда на компьютере нотепад? текстовый редактор для хаскеля внезапно тот же что и для лиспа. и в принципе для всего остального.

[identity profile] metaclass.livejournal.com 2011-10-29 04:22 pm (UTC)(link)
Ребе, вы за два дня можете осилить чтение вот такого:
http://hackage.haskell.org/packages/archive/enumerator/0.4.15/doc/html/src/Data-Enumerator-Internal.html#Iteratee

конкретно, реализация monadic bind для Iteratee мне выносит голову до основания :)

[identity profile] theiced.livejournal.com 2011-10-30 05:09 am (UTC)(link)
ну код там простой, да.

[identity profile] nivanych.livejournal.com 2011-10-30 09:20 am (UTC)(link)
> выносит голову до основания
До основания!
А затем — мы наш, мы новый мир построим!!

[identity profile] tzirechnoy.livejournal.com 2011-10-31 07:13 am (UTC)(link)
Если годами не вылезать из-за своего компьютэра -- то нотепаду взяться, натурально, неоткуда. Но бывают ситуацыи...

И да, у меня вот тот жэ самый редактор, который для лиспа -- ничем не помогает ориентироваться в потоке хаскелевых операторов.