ФЯ - преимущества?
Что такое immutable-ность кода?
Если нужно, что-то изменить, то создается новая копия с измененным состоянием, а не меняется старая
ps
например, если надо изменить элемент в массиве, то
создается новая копия массива с измененным элементом.
замечу, что это только логическая концепция - при компиляции такой код может превращаться и в более эффективный (с изменением уже существующих данных)
Тогда надо говорить прозрачность по ссылкам. Это более общее понятие, из него следует создание нового объекта вместо модифицирования.
каюсь, не силен - в официальной терминологии.
Еще в ФЯ используется широко pattern matching. Не могу сказать, что это основной плюс, но вот в императивные языки его добавить бы не помешало.
Что он умеет?
Вызов функции вставить можно?
Без особого порядка:
1. Прозрачность по ссылкам.
2. "ILP."
3. Малая модульность.
4. Формальная проверка.
5. Естественность и простота абстракций.
6. Сборка мусора.
---
"Narrowness of experience leads to narrowness of imagination."
Rob Pike
Просто сравни объём одного и того же кода на лиспах и емелях.
---
...Я работаю антинаучным аферистом...
В Лисп его можно реализовать на макросах. В On Lisp есть пример.
В императивных языках его нужность может быть незаметна, поскольку встроенные типы данных там примитивные, а для пользовательских язык не расширить, но при желании можно было бы его ввести в той или иной форме.
Выглядит это примерно так:
match expr with
( (Node n1)::tail, 10, { name = "xxx"; ...}) -> do something with n1
Надо будет поискать.
---
"Расширь своё сознание!"
мне казалось, что главное в паттерн matching не мапинг одних имен на другие, а
выбор нужного варианта действий
и как раз для выбора нужного варианта - вызов функции был бы полезен.
например, в тех же C++-шаблонах - вызов подобия функции (на этапе компиляции) довольно частое явление.
И это тоже важно, конечно. Но идея деконструкции сложной переменной стоит во главе угла.
---
...Я работаю антинаучным аферистом...
прямое следствие иммутабельность
отказать
> 2. "ILP."
следствие иммутабельности + простота концепции + алгоритмы анализа
тоже самое есть в других языках, есть даже в C++ и реализуется с помощью keyword-ов const, mutable
отказать
> 3. Малая модульность.
это скорее вопрос стиля
отказать
> 4. Формальная проверка.
следствие иммутабельности + простота концепции + алгоритмы анализа
частично или полностью есть и в других концепциях
отказать
> 5. Естественность и простота абстракций.
очень спорно
для математика-теоретика может быть
для практика - точно нет.
> 6. Сборка мусора.
есть и при других подходах
отказать
Математику и физику учат в школе куда больше, чем
программирование. Тем более --- ОО программирование.
Вспоминаем убойный пример и заменяем вектор скорости на доход,
исчисляемый в денежных единицах за время, ковектор количества
движения --- на время.
ОО по-прежнему сидит в луже, ФП работает без изменений.
---
"Расширь своё сознание!"
Ключевые слова: IL.
---
"Narrowness of experience leads to narrowness of imagination."
Rob Pike
Оставить комментарий
Dasar
Правильно я понимаю, что первичные плюсы ФЯ - это immutable-ность кода и простота "элементной схемы" (есть только функция).Первичное следствие:
Соответственно и первое, и второе - за счет свой простоты - позволяют писать простые компиляторы, а также позволяет использовать сложные схемы анализа и оптимизации структуры кода.
Следствием сложных схем оптимизации - является автоматическая статическая типизация, оптимальность кода и т.д.
Я правильно выделил первичные плюсы?
или есть еще что-то?