Re[4]: Какой функциональный язык стоит изучать?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.03.07 10:17
Оценка: 12 (1) +1 -1 :)
Здравствуйте, Mirrorer, Вы писали:

VD>>car/cdr/

M>Так уж исторически сложилось..

Ага. И не стоит при этом называть язык простым. Многим просто запомнить эти "слова" тяжело.

M>Ну ок. Ну сделали бы они head/tail было бы значительно лучче ?


Ага. К тому же в современных ФЯ для работы со списками исползуется удобный синтаксический сахар и использовать ключевые слова не нужно.

M>Да и caddr кстати короче писать чем head(tail(tail ))


Да, ды, несомнено короче. Ну, куда уж там каким нибудь:
x : y : t



Ладно, защищать "синтаксис" Лиспа занятие неблагодарное. Он не интуитивен, хреново запоминается и очень низкоуровневый. Тут с тобой только лиспоманы согласятся, ну, и любители бессмысленных споров.

M>Префиксная ?


Да.

M>Ну да она специфична.


Она в первю очередь непривычна, а значит мешает обучению.

M>А в случае с XML это не напрягает ?


А XML стал ЯП и его предлагаю как первый язык?

M>Тем более что при программировании нетривиальных макросов придется работать с AST.


Да, да, притягивание за ужи разной муры типа макросов — это главное когда речь идет о первом ЯП для обучения ФП.
Продолжайте судрь в том же духе. Вам ведь совершенно по фиг что и о чем говорить.

M>Тем не менее я считаю что на практике лучше применять что-то другое. Scheme он отлично подходит для обучения ФП.


Да, да. Без знания caddr мир останется тусклым и безликим. Ты меня убедил. Ничто кроме простого и нтуитивно-понтяного мега-на-фиг-в-реальной-жизни-не-упавшего-языка не подходит. Признаю, был не прав.

M>А по поводу Хаскеля. Он хорош для обученя ФП в том смысле что он pure


Да, не. Ты меня убедил. Схема лучше всего. Ведь мир ФП не даром считается миром сумашедших ученых и извращенцев. Нельзя разочаровывать людей. В прочем Хаскель действително имеет некоторые приемущества. Так у него офигительные введения. Они мега-круты, так как могут отбить желание иметь дело с ФП почти у любого.

M>(ну или что-то типа того ) Человек который его начинает изучать не сможет реализовать программу в императивном стиле.


Ой ли? Берем IO-монаду и захриначиваем мега-императивный код.
И что характерно его можно захреначить на любом ЯП. Ведь императивный стиль не может не поддерживаться языком пригодным для написания программ для современного компьютера.

M> Ему придется плеваться на то что все не так, как он привык, и он на своей шкуре почувствует где ФП дает какой-то плюс, а где удобне было бы попользоваться старым добрым императивом. Обучение ФП на основе Хаскела это что-то типа обучения плаванию путем выбрасывания на середине озера. Злобно но эффективно.


Хороший подход в обучении. Сам научился так плавать (упав с лодки).

M>Альтернативой может быть изучение ФП на основе не pure языков типа OCaml или Nemerle. Но человек с опытом императивного программирования будет поначалу все время думать по императивному. Поэтому путь до просветления и понимания обласит применимости ФП фишек в таком случае будет долше. ИМХО естественно.


Ну, вот мы и дошли до действительно интересного момента.
Я начал работать над проектом Интеграции Немерла с VS 2005 в гордом одиночестве (кстати, твое сообщение украло у меня 15 минут от работы над ней, хорошо, что я пареллельно поел ). Потом ко мне начали подключаться другие программисты. Не все из них много сделали для проекта, но у них у всех была одна интересная особенность! Они все были "императивными программистами" (преимущественно с C++/C#-прошлым).

Так вот, я имел возможность наблюдать, как многие из них постигали ФП на практике. Обычно, мелких подсказок, а то и просто чтение нашей (с Туленцывым) статьи, хватало, чтобы они постепенно изменяли свой подход в кодировании. Сначала это был чисто императивный стиль. Постепенно в нем появлялись те или иные приемы из ФП. И что самое приятное и забавное одновременно большинство из них ссали кипятком, когда открывали для себя те или иные аспекты (т.е. это не было нудным обучением, это были приятные мелкие открытия). Происходило это потому, что ФП давал им не какой-то там идеологический булшит как это принято в мире ФП, а практически сокращал и упрощал их код! Вместо цикла преобразующего список в строку они постепенно перешли к вызову пары функций. Вместо тонны if-ов к использованию сопоставления с образцом. В местах, где ООП давал не лучший результат, стали использовать варианты (алгебраические типы данных) и сопоставление с образцом. Со временем они освоили "другой" полиморфизм (отличный от виртуальных функций и наследования) и другие аспекты ФП.

Остается вопрос, стали ли они при этом функциональными программистами? На мой взгляд — нет. Они стали программистами, освоившими функциональный стиль программирования. Это конечно плохо для тех, кто пытается ваять лагерь непримиримых функциональщиков, готовых забрасывать функциональные озера трупами ни в чем не повинных императивщиков. Но они явно стали более продуктивными.

Так что конечно Nemerle (не могу сказать за OCaml, так как серьезных проектов на нем не вел, но по идее и он тоже) это ужасный язык с точки зрения настоящих функциональщиков. Он можно сказать вероломный.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.