Программизм. Haskell. |
[Aug. 9th, 2006|07:11 pm] |
Возникла небольшая задачка помимо основной работы -- решил ее использовать, чтобы пощупать Хаскель. Совершенно неожиданное впечатление -- оказывается, это для меня write-only язык. То есть, все эти монады (по крайней мере, IO), включая mapM и foldM, а также активно поощряемый языком currying очень удобны в использовании и позволяют писать программы компактно и с удовольствием. Но вот столь же легко эти программы читать, даже если я только что их написал, не получается. Интересно, приходит ли более легкое восприятие с опытом. |
|
|
Comments: |
у меня не получалось. я всегда читаю их с достаточным трудом
"Может быть, если бы мы писали программы с детства, к зрелым годам мы научались бы их читать" (кто-то известный)
| From: | polter |
Date: | August 10th, 2006 - 07:37 am |
---|
| | | (Link) |
|
Странно. А я вот как-то не знаю языка более читабельного. Когда вместо десяти функций одна строчка - на чтение и понимание этой строки все равно уйдет времени меньше, чем.
| From: | gogabr |
Date: | August 10th, 2006 - 12:32 pm |
---|
| | | (Link) |
|
Вот это уже для меня странная точка зрения. Вроде бы, языки, известные компактностью кода (APL, Forth, Perl) известны и тем, что код этот очень трудно читать.
| From: | polter |
Date: | August 10th, 2006 - 12:43 pm |
---|
| | | (Link) |
|
Перл-то тут при чем. Перл компактностью не отличается как раз. Ну и синтаксис чудовищный.
А от АПЛ и фортом хаскель отличается строгой статической типизацией и очень простой выч. моделью. никаких монад-диад, стэк-эффектов и тп. только комбинаторы и все. жесткое отличие инфиксных и префиксных функций, явная композиция и все такое. Честно говоря я лично не знаю даже в чем там можно заблудиться. Хотя, все это может быть личным восприятием, не знаю.
Те write-only программы на Haskell, которые я видел (и иногда даже писал) были обязаны своим write-only свойствам двум вещам:
1)Не используем data constructors, все суем в tuples и lists, не боимся вещей вроде [[(Int,[(Int, String, String)])]]
2)Стараемся обойтись минимальным количеством функций, впихивая в них побольше кода
При следовании этим двум принципам, получается замечательный write-only код. | |