Всё он правильно приплёл, в функциональных языках изменение состояния (щяс придерутся к терминологии и скажут, что изменяемого состояния там бывает, наплевав на то, что вообще не имеется в виду доступный для изменений программистом конкретный участок памяти) описывается эффектами в явном виде, а Common Lisp и Scheme оными не являются. Из лиспов вообще только Clojure обладает сколь-либо заметными свойствами функционального языка.
В ФП функции трактуются в математическом смысле, то есть как вычисление выражений с параметрами. В процедурном функции - набор каких-то последовательных действий, которые могут изменять некое состояние.
Во-вторых, смена состояния - понятие растяжимое. f(old) -> new меняет состояние? А print(universe_with_fewer_on_your_screen, line) -> universe_with_more_lines_on_your_screen?
Спрячь за (какую-нибудь хрень) монаду, (хрень) монаду объяви «элементарной», и (концы в воду) пусть реализация языка разбирается, что делать с «элементарщиной». А язык - чистый и пушистый.
Единственный настоящий функциональный язык который применяется это Elm. Все остальное просто закос с нарушением тех или иных принципов. Процедурные это FORTRAN, C, КОБОЛ, Бейсик и прочее легаси.
Да, на Си с коллбеками можно писать функциональный код. Только надо ещё предусмотреть возможность передавать произвольный контекст коллбеку (обычно через void*).
Другой вопрос, что это будет довольно многословно. Поэтому, обычно, на C так не пишут.
Джон Бэкус. Можно ли освободить программирование от стиля фон-Неймана?
Говновопрос (для нежных и ранимых - неактуально).
Должно быть:
можно ли писать не в стиле фон-Неймана с не меньшей скоростью выполнения кода? (я помню, что в наше время скорость работы программы - ничто, скорость работы софтописательской конторы - всё, но всё-же хотелось бы «более оптимального» выходного кода);
можно ли писать не в стиле фон-Неймана с аналогичной «близостью к железу»?
Ну то есть понятно, да. Соорудим компилятор с хитрыми костылями и распорками, чтобы компилил код хотя бы не медленнее того, что полвека назад генерил однопроходный паскаль.
можно ли писать не в стиле фон-Неймана с аналогичной «близостью к железу»
ЛИСП божественный язык, поэтому ЛИСП есть всё. Сказать что ЛИСП функциональный — всё равно что сказать, что бог это пузатый мужик с бородой. (Т.е. оскорбительная пошлость и богохульство).
Нужно ли писать в стиле фон-Неймана на распределенных гомогенных системах, на гетерогенных системах? Умеем ли, вообще? А сколько платят? А ФРС баксы печатает на фон-Неймане?
Программа как последовательность утверждений, объединенных в подпрограммы (с ограничением на прямую передачу управления) vs программа как композиция функций (с ограничением на присваивание значений именам).
В чистом виде не применяется на реальных проектах нигде, а значит вопрос смысла не имеет. В чисто ФП языках часто куча обходных методов для решения задач не в чистом ФП стиле, так же как чистых процедурных языков сейчас просто нет, если брать реальные проекты, а не академические для галочки хренотени.
Люди используют те или иные подходы тогда, когда им они нужны. Тот же С едва ли можно назвать чисто процедурным, потому что при некотором желании вытворять там можно всё что угодно.
А реальность она не от этой теоретической дичи, она от того, как работают компьютеры. И вот там этой дичи нет. Есть инструкции, есть работа с памятью и всё. Все языки так или иначе прежде всего ЯП в смысле программирования компьютера, а не в смысле теории засидевшегося на стуле и сошедшего с ума математика.
Сперва сам озвуч про что ты(вы) сам(и)? Переиначил(и) вопрос из книжки, не изучив даже её содержание?
А я про то, что современный IT-ширпотреб занимается исключительно тем, что подгоняет всё под одну гребенку - фон-Нейман, сам при этом почти везде не фон-Нейман. Любой изврат за ваши деньги.
В процедурном программировании ты описываешь какие действия нужно выполнить чтобы получить нужный тебе результат.
В функциональном программировании ты описываешь что такое нужный результат.
Процедурный подход оставляет меньше свободы выбора для компилятора, так как прописано больше деталей. Функциональный подход позволяет реализовать более высокий уровень оптимизации и композиции.
Не интересует. Интересует возможность писать «числодробилки и ОС-и» (условно) не «на си с фортраном», а на чём-то «не фон-Неймановском» без потерь скорости вычислений.
Вопрос был попыткой узнать что-то новое (если оно есть) без глубокого погружения в тему :) Но скорее всего - риторический ))