LINUX.ORG.RU

Введение в возможности Haskell


0

0

Интересная статья в 2-х частях Адама Турова /Adam Turoff/ дающая общее представление о возможностях этого языка программирования.

>>> Часть 1: http://www.onlamp.com/pub/a/onlamp/20...

>>> Часть 2

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

> интерфейсы и сигнатуры это еще один черезжопный подход плюсанутого ООП.

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

Насколько я помню, вот это: "если добавить в лексикон интерфейсы можно выразиться по-точнее -- об этом заранее не позаботится создатель палки" - неверно для Си++-сигнатур.

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

> Сложно переучиваться, когда всякие оопобразные языки уже в подкорке сидят

реализация ООП в хаскеле намного продвинутей, так и скажи, что просто не осилил!

anonymous
()

Ребята, а давайте жить дружно, а?

ФЕЛОСОВСКИЙ ВАПРОЗ состоит не в том, каким ЕЗЫКОМ пользоваться, а ФТОМ, какие данные нужно обрабатывать.

Вот С, например, изумительно хорош для обработки данных типа регистры-память-буфера, КАРОЧЕ, арифметика указателей.

Визуал Бейсик, опять же, нормально так позволяет делать вещи типа "окошко-списокфайлов-кнопки-окей-кэнсел".

LISP, aka List Processor, хех, достаточно сказано ;)

Perl : Паталогически-Эклектичный (всякой фигни) Распечатчик - тоже понятно.

Супер-пупер-фсе-есть-объект-язык : Для производства конструкций типа "Мой_объект.Квартира.Дверь.Замок.Ключ.Вставить.ОткрытьКем( Ялюбимый ) Зашибись матмодель, но так жить нельзя.

Внимание, вопрос на засыпку: для каких данных предназначен Хаскел?

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

Посмотрел я на Хаскелл. Язык интересный, может быть мощный, достаточно красивый. Но вот лично мнение, что он в промышленных масштабах не приемлем. Не знаю даже, почему у меня такое мнение сложилось. Побаловаться с ним - да, какую-нибудь интересную фишку написать - да, в конце концов повыпендриваться перед сверстниками, чтобы у них глаза на жопу полезли, мол "Я Хаскелл знаю и умею на нем программить" - это тоже да. А так - может он в будущем и будет популярен, но мне в это не вериться.

Тем более он существует уже достаточно давно. Вообще само ФП существует очень давно, а до сих пор в массы не пробилось.

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

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

Мне кстати заняться сейчас особо нечем и я просто так перевожу разные доки, правда только для себя. Если есть нитересная книжка по Хаскеллу или Лиспу на английском языке - присылайте.

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

Конечно, есть! По лиспу есть Paul Graham 'On LISP'. Давай переводи. Тебе много раз спасибо скажут.

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

> Слышал, язык хороший, но что в нем такого, чего нельзя со сравнимыми трудозатратами реализовать на языках таких как питон, джава и С++?

Учебный пример подойдёт?

Числа Хемминга:

hemmings = 1 : unfoldr generator (map (\n -> map (n*) hemmings) [2,3,5]) where generator xss = let x = minimum (map head xss) in Just (x,map (dropWhile (x==)) xss)

Теперь hammings - бесконечный список, содержащиё все числа Хемминга. Скорость вычисления N-го числа - линейна, скорость вычисления N-го при условии, что все предыдущие уже вычислены - константа.

И надо учесть, что эту конструкцию я написал "с листа", а не упрощая предыдущую запись - потому что для знающего язык она почти очевидна.

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

> Слышал, язык хороший, но что в нем такого, чего нельзя со сравнимыми трудозатратами реализовать на языках таких как питон, джава и С++?

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

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

так же как и задачи с обилием математики (не вычислительные)

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

> Слышал, язык хороший, но что в нем такого, чего нельзя со сравнимыми трудозатратами реализовать на языках таких как питон, джава и С++?

Аналог того же Xilinx Lava на C++ потребовал бы в сотни раз больше усилий на реализацию, и качество этой реализации, скорее всего, оставляло бы желать лучшего.

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

> Но вот лично мнение, что он в промышленных масштабах не приемлем.

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

> Вообще само ФП существует очень давно, а до сих пор в массы не пробилось.

В массы много чего не пробилось. Так ведь массы - это серое говно. Тупицы. Средний IQ человечества - 100 единиц, блин. Это ж близко к дебилизму!

> ФП похоже на латынь. Вроде есть такой язык, а мало кто на нем разговаривает,

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

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

> ФП похоже на латынь. Вроде есть такой язык, а мало кто на нем разговаривает, хотя и очень красивый, выразительный и развитый

+1

Любиетлям Хаскеля рекомендую статью "Confessions of a Used Programming Languages Salesman: Getting the Masses Hooked on Haskell" - о том, как многие годы Хаскель пытались протолкнуть в массовое программирование, а получилось из этого расширение для Visual Basic 8)

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

Да не надо ничего проталкивать в жвачные быдломассы. Они, быдломассы, сами по себе вообще не нужны - они не креативны, они не способны создать ничего серьёзного. Зачем давать им инструмент, которым им не хватит ума воспользоваться по назначению?

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

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

А я рад, что не все любители Хаскеля так считают :-P

> Зачем давать им инструмент, которым им не хватит ума воспользоваться по назначению?

Чтобы гарантировать живучесть и развитие инструмента. Чтобы создать больше интересных предложений на рынке труда (хотя тебе в Китеж-сити это неинтересно :D)

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

> Чтобы гарантировать живучесть и развитие инструмента

Пример C++ и Java, да и даже Basic доказал, что это гарантирует превращение инструмента в адскую помойку.

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

> Чтобы создать больше интересных предложений на рынке труда (хотя тебе в Китеж-сити это неинтересно :D)

Зачем предложения на рынке труда? Зачем армии дворников, вооруженных лопатами с турбонаддувом, когда достаточно одной снегоуборочной машины с пьяным водителем дядей Васей?

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

>>ведь классическая математика вообще не заморачивается проблемами существования и времени.

>это как?

ну вот так:

> эээ... "сожженая бумажка"? угадал? что у нас "сжигаем (x)" возвращает?

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

в смысле реального "сжигания" между бумажкой и пеплом нет функциональной связи. (временнАя, причинно-следственная, -- какая угодно -- но не функциональная). (разумеется, для горения, можно выделить некоторые аспекты, которые, с достаточной степенью достоверности, можно описывать функциональными связями. но как выразить тот факт, что объект, бывший до того бумажкой, перестал существовать навечно, превратившись в пепел? и любые теоремы, основанные на том, что X - бумажка, будучи справедливыми некоторое время тому назад, сейчас уже не состоятельны?)

язык классической математики ограничен. удобен, поскольку позволяет создавать предсказуемые рассуждения. но ограничен. и в хаскеле существует монада State. и любая программа на хаскеле, отличная от хелло-воровых примеров пестрит do -> return. ведь одно из ключевых свойств реальности -- это изменчивость.

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

> и любая программа на хаскеле, отличная от хелло-воровых примеров пестрит do -> return.

Убей себя об стену. Монады (а равно и синтаксис do) используются ДАЛЕКО не только для эмуляции императивности. Например: монада Maybe используется для вычислений, которые могут прерваться; монада List - для вычислений, возвращающих не один результат; тот же Parsec, предназначенный для парсинга чего угодно, тоже является монадой.

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

> Убей себя об стену

сам дурак. :) я писал про do return в контексте State.

кста, отквоченная популярная реплика, по сути, -- монадическое высказывание! ) типа: "очень хочется тебя убить, но я на это не способен. поэтому делай собой что хочешь, но, в этом мире, ты мне нужен мертвым!".

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

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

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

>но как выразить тот факт, что объект, бывший до того бумажкой, перестал существовать навечно, превратившись в пепел?

а как вообще выражается тот факт, что на некоем участке функция не существует?

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

> но как выразить тот факт, что объект, бывший до того бумажкой, перестал существовать навечно, превратившись в пепел?

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

Ещё пример: в бидоне было 10 литров воды, 3 литра выпили, сколько осталось? Опять же мы имеем дело не с одним, а с двумя бидонами.

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

> а как вообще выражается тот факт, что на некоем участке функция не существует?

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

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

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

> С этого момента мы имеем дело с двумя моделями ...

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

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

> Именно в этом отношении математика безразлична ко времени, ибо она имеет дело лишь с отдельными моментами, каждый из которых абсолютно статичен.

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

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

> математика оперирует только существующими фактами. если функция задана -- значит она существует. о "не существовании" речи быть не может.

сдается мне - ты гонишь...

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