1. Чистые функции + кэширование значений в качестве подарка, что влечет почти ненужность тривиальной оптимизации.
Чистота помогает ещё и в нетривиальной — пишутся правила, по которым компилятор может заменять одни куски на другие (хотя корректность правил у, например, компилятора хаскеля GHC, лежит на писателе — компилятор их не проверяет).
взаимосвязанных и удобных плюшек, которых обычно не наблюдается
Ничего, языки тянутся к ним всё сильнее.
Кстати, я не понимаю, почему в ФП нет состояния у программы? Есть же! Она же как-то исполняется.
Во время исполнения есть, а в коде доступа нет. С другой стороны, do-нотация хаскеля даёт «иллюзию» императивного кода и состояний, хотя на деле эта нотация просто чуть более наглядным образом строит значение какой-то монады. И даже значения типов
IO a выполнятся только где-то там вне
main, куда она какое-то такое значение передаст, и выполнится, конечно, только оно.
позволю себе сказать, что там все - функция. Одного аргумента, причем
Или нуля! Ну и можно вообразить себе ф. язык без карринга.
А, чего воображать — те же лиспы.
Второй вопрос - а где на практике применяются функциональные языки? Мне почему-то кажется, что у них сильно ограниченная область применения будет.
Какая-то фирма англоязычная, как-то связанная с самолётами, попадалась несколько месяцев назад, гордо говорящая, что они пишут на CL, и потому их код надёжен (потому что они ещё и пишут его аккуратно, конечно, но язык помогает).
-- Пт сен 19, 2014 03:28:01 --Но вот когда придёт
Xaositect, будет ещё лучше. А то у меня какие-то пространные слова; когда пишу на хаскеле или читаю про него, как-то не думаю о том чтобы делать заметки на будущее и сохранять интересные или проясняющие, или просто на конкретику, ссылки. Совершенно не знаю монаду
ST или как делать и правильно использовать многопоточность. Для реального применения это важно, и стоило бы об этом рассказать, думаю.