ФЯ - преимущества?

Dasar

Правильно я понимаю, что первичные плюсы ФЯ - это immutable-ность кода и простота "элементной схемы" (есть только функция).
Первичное следствие:
Соответственно и первое, и второе - за счет свой простоты - позволяют писать простые компиляторы, а также позволяет использовать сложные схемы анализа и оптимизации структуры кода.
Следствием сложных схем оптимизации - является автоматическая статическая типизация, оптимальность кода и т.д.
Я правильно выделил первичные плюсы?
или есть еще что-то?

Papazyan

Что такое immutable-ность кода?

Dasar

> immutable-ность кода?
Если нужно, что-то изменить, то создается новая копия с измененным состоянием, а не меняется старая
ps
например, если надо изменить элемент в массиве, то
создается новая копия массива с измененным элементом.
замечу, что это только логическая концепция - при компиляции такой код может превращаться и в более эффективный (с изменением уже существующих данных)

Papazyan

Тогда надо говорить прозрачность по ссылкам. Это более общее понятие, из него следует создание нового объекта вместо модифицирования.

Dasar

каюсь, не силен - в официальной терминологии.

Papazyan

Еще в ФЯ используется широко pattern matching. Не могу сказать, что это основной плюс, но вот в императивные языки его добавить бы не помешало.

Dasar

насколько - этот паттерн match-инг мощный?
Что он умеет?
Вызов функции вставить можно?

Ivan8209

На ВМК это не преподают?
Без особого порядка:
1. Прозрачность по ссылкам.
2. "ILP."
3. Малая модульность.
4. Формальная проверка.
5. Естественность и простота абстракций.
6. Сборка мусора.
---
"Narrowness of experience leads to narrowness of imagination."
Rob Pike

Ivan8209

Это очень хороший плюс.
Просто сравни объём одного и того же кода на лиспах и емелях.
---
...Я работаю антинаучным аферистом...

Papazyan

В Лисп его можно реализовать на макросах. В On Lisp есть пример.

Papazyan

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

match expr with
( (Node n1)::tail, 10, { name = "xxx"; ...}) -> do something with n1

Ivan8209

А это, кстати, мысль!
Надо будет поискать.
---
"Расширь своё сознание!"

Dasar

> связывает переменные с разными их частями
мне казалось, что главное в паттерн matching не мапинг одних имен на другие, а
выбор нужного варианта действий
и как раз для выбора нужного варианта - вызов функции был бы полезен.
например, в тех же C++-шаблонах - вызов подобия функции (на этапе компиляции) довольно частое явление.

Papazyan

И это тоже важно, конечно. Но идея деконструкции сложной переменной стоит во главе угла.

Ivan8209

Оба действия совмещаются.
---
...Я работаю антинаучным аферистом...

Dasar

> 1. Прозрачность по ссылкам.
прямое следствие иммутабельность
отказать
> 2. "ILP."
следствие иммутабельности + простота концепции + алгоритмы анализа
тоже самое есть в других языках, есть даже в C++ и реализуется с помощью keyword-ов const, mutable
отказать
> 3. Малая модульность.
это скорее вопрос стиля
отказать
> 4. Формальная проверка.
следствие иммутабельности + простота концепции + алгоритмы анализа
частично или полностью есть и в других концепциях
отказать
> 5. Естественность и простота абстракций.
очень спорно
для математика-теоретика может быть
для практика - точно нет.
> 6. Сборка мусора.
есть и при других подходах
отказать

Ivan8209

Насчёт "5" --- бесспорно.
Математику и физику учат в школе куда больше, чем
программирование. Тем более --- ОО программирование.
Вспоминаем убойный пример и заменяем вектор скорости на доход,
исчисляемый в денежных единицах за время, ковектор количества
движения --- на время.
ОО по-прежнему сидит в луже, ФП работает без изменений.
---
"Расширь своё сознание!"

Ivan8209

2. В плюсах --- фигня, а не ILP.
Ключевые слова: IL.
---
"Narrowness of experience leads to narrowness of imagination."
Rob Pike
Оставить комментарий
Имя или ник:
Комментарий: