какой смысл в eval?
Смысл функциональных языков - это создание алгоритмов путём комбинирования функций как элементов языка.
Повышать абстракции. В ООП парадигме у нас есть объект, его методы и все. Это потолок. В ФП у нас нет ограничений. Мы можем повышать абстракции до бесконечности. Например, существует код на лиспе, который может исполнять код на Си. Т.е. этот код добавит ключевые слова в язык, опишет поведения стека и все-все-все так, что после этого куска кода можно будет писать код на самом обычном Си.
Только оно будет тормозить
Да, будет. Это такая плата за возможности. Такая же плата, как и за любое повышение абстракции: Си исполняется не так эффективно, чем ассемблерный код, написанный живым человеком, Си++ не так эффективно (из-за ООП), как чистый Си и контроль за каждым байтом. Так же и ФП дает прирост в возможностях за плату в виде невозможности написать компилятор
1. Чтобы такое сделать, eval не требуется. Тут нужна какая-то синтаксическая гибкость (если хочешь прямо встраивать код не в виде строковых литералов), ну а дальше вместо транслятора в наш язык с последующим eval-ом напрямую интерпретируем. 2. Как я уже говорил, некоторая форма eval в С++ и С есть. По твоему определению этого достаточно, чтобы они стали ФП?
> Си исполняется не так эффективно, чем ассемблерный код, написанный живым человеком Ни Си, ни ассембли не исполняются
> Си++ не так эффективно (из-за ООП) citation needed, шаблоны например несут скорее отрицательную стоимость (потому что компилятор старательно соптимизирует каждый инстанс). > невозможности написать компилятор То есть хаскель это не ФП?
сдается мне, средний пропагандист асма не сможет написать код лучше современного компилятора
Написать компилятор ФП языка, который не будет включать в себя компилятор/интерпретатор этого ФП языка невозможно.
ну окей, программы на языке Х (например программы на C++, которым нужен eval) будут тянуть с собой копию компилятора, в чем проблема?
логично компилятор должен включать в себя компилятор
Не в чем. Просто оно будет работать медленно, потому что ты во время исполнения будешь вынужден компилировать / интерпретировать. Это плата за ФП.
какое отношение все это имеет к C++? Нравится ФП - идите в чатик по ФП
тут какое-то очень спефическое определение ФП. ФП признается язык, в котором есть eval.
Верно. Функциональный стиль программирования это всего лишь создание инструкций и передача их кому следует, выполнение которых позволит принимающей стороне получить в итоге то, что ей надо. То есть, если кому то нужен объект колобок, то мы не передаем ему готовый экземпляр колобка, а передаем ему рецепт, как его сделать (возьми муку, соль, арендуй у кого нибудь русскую печь, испеки, вынь, поставь на окно).
Не, это точно что-то не то.
Если тебе надо что касаемо FP, ты меня спроси серьёзно, а то тут токсичный угар...
Обсуждают сегодня