Статус: Офлайн
Реєстрація: 29.01.2007
Повідом.: 236
Реєстрація: 29.01.2007
Повідом.: 236
Есть такая статья Пола Грэма «Разрушение стереотипов», в которой описан его опыт использования языка Lisp (ещё одного функционального языка программирования) в новой компании. В ней он использует аналогию, которую он назвал «Парадокс Blub».
В ней говорится примерно следующее:
Если любимым языком у программиста является язык Blub, который находится где-то посередине «спектра мощности», то он может сравнить его только с языками, которые находятся в нижней части спектра. Он может взглянуть на язык COBOL и сказать: «Как кто-нибудь что-нибудь может делать на этом языке — у него же нет функции X. — X присутствует в языке Blub.» Тем не менее, для программиста будет непростой задачей просмотреть другую часть спектра. Если он начнет изучать языки, которые находятся в верхней части спектра, то они покажутся ему «непонятными», так как программист на языке Blub думает «на языке Blub» и, скорее всего, не видит полезности разнообразных функциональных возможностей более мощного языка программирования. Само собой разумеется, что это по индуктивности наводит на мысль о том, что, чтобы иметь возможность сравнивать все языки, надо поместить себя на верхушку спектра мощности. Моё мнение, что функциональные языки, по определению, ближе к вершине спектра мощности, чем императивные.
Одной из причин того почему «массы» не используют язык Haskell, является то, что люди считают, что их язык делает «всё, в чем они нуждаются». И конечно он делает, потому что они думают «на языке Blub». Языки программирования — не технология — это образ мышления. И если вы не думаете на языке Haskell, вам будет трудно увидеть полезность языка Haskell — даже если язык Haskell предоставит вам возможность писать приложения лучше за короткий промежуток времени.
Будем надеяться, что эта статья помогла вам сломать в себе парадокс Blub. Даже если вы еще не способны «думать на языке Haskell», я надеюсь, что вы, по крайней мере, осведомлены об ограниченности ваших рамок мышления, продиктованных вашим текущим «любимым» языком программирования, и что у вас теперь есть стимул для их расширения путём изучения чего-нибудь нового. Если вы предались изучению функционального языка программирования (для достижения лучшего взгляда на спектр мощности), то я убежден, что язык Haskell — это ваш лучший выбор.
Как чисто фунциональный да. Хотя мне Lisp больше понравился по чистоте синтаксиса. Я предлагаю нечто более интересное. И по синтаксису тоже. Надо только въехать в концепцию реализации. Я здесь пару слов скажу, а то в основном людям лень читать длинное.
Концепция реализации заключается в возможности изменять значения, а так же добавлять функционал в конкретный объект. Замечу, что добавление функционала это и создание новых свойств и операторы. Делается это обычно в фигурных скобках. Хотя это не обязательно. Допустимы и круглые (но тогда объекты необходимо разделять запятой) и квадратными (тогда объекты допускают параллельное вычисление). Так в цикле
For I:=0 To N
{ Dim L:=0: Integer
Name=: "Цикл демонстрационный"
L+:=I
}
Оператор For тоже является объектом класса For. Здесь то, что в фигурных скобках является реализацией этого объекта и состоит в том, что мы добавляем в этот объект свойство L. Как и любой объект этот объект может иметь свойство Name и этому свойству присваивается значение "Цикл демонстрационный". Вот заметим отличие. Значения свойств присваиваются последовательностью знаков "=:". Далее, к новому свойству L суммируется значение I. И для этого присвоения применяется знак ":=". Этот оператор "L+:=I" представляет собой фунциональное наполнение объекта.
Заметим, что этот объект класса For и с именем "Цикл демонстрационный" можно будет найти как в оттранслированном виде и использовать для анализа при сопровождении и оптимизации, а в тексте программы можно из него выйти по имени оператором Exit "Цикл демонстрационный".
Т.е. на вид реализация ничем не отличается от обычного создания формы с присваиванием значения ее размеров.
New F: Form {Size=:20;150 }
Хотя это коренным образом отличается от такого варианта.
New F: Form
Size:=20;150
В первом варианте значения свойств Size будут сохранены в формате представления объекта класса Form и соответственно с этими значениями будет создан. Во втором примере эти значения будут присвоены командами Move при выполнении.
Здесь продемонстрирована реализация объектов первого уровня создаваемым синтаксисом языка. Реализация понятий и логического представления осуществляется в других скобках, и реализацию значений см. документ.