Существуют ли современные языки, не поддерживающие рекурсию? - PullRequest
0 голосов
/ 15 ноября 2018

Существует много разговоров о безцикловых (функциональных) языках программирования, но я не слышал ни о каких современных рекурсивных языках программирования.Я знаю, что COBOL не поддерживает (или не поддерживал) рекурсию, и я думаю, что то же самое для FORTRAN (или, по крайней мере, у них будет странное поведение), но есть ли современные языки?

Естьменя интересует несколько причин ...

  1. Из того, что я понимаю, нет рекурсивного алгоритма, для которого не существует итеративной реализации, которая, по крайней мере, так же эффективна (как вы можете просто "симулировать" рекурсию).итеративно, при управлении стеком внутри цикла).Таким образом, a) нет прироста производительности и b) нет прироста возможностей при использовании рекурсии.
  2. Рекурсия может иметь худшую производительность, чем итерация для таких вещей, как наивные рекурсивные реализации чисел Фибоначчи.Людям нравится отмечать, что рекурсия может быть такой же быстрой, когда оптимизируются компиляторы, и это касается хвостовой рекурсии, но из моего понимания алгоритмы хвостовой рекурсии всегда тривиально преобразовать в циклы.Таким образом, существует в) потенциальная потеря производительности из-за рекурсии.
  3. Академикам, похоже, есть что-то для рекурсии, но опять же большинство из них не может / не может написать какой-либо продуктивный код.C ++ (или объектная ориентация в целом) является живым доказательством того, как академические идеи могут проникнуть в деловой мир / компании, будучи в основном непрактичными.Интересно, является ли рекурсия только еще одним примером этого?(Я знаю, что это серьезная тема, но большинство опытных разработчиков программного обеспечения, о которых я слышал, согласны, по крайней мере, до некоторой степени).
  4. Ранее я писал рекурсивные алгоритмы в продуктивных системах, но не могувспомните время, когда я действительно извлек выгоду из использования рекурсии.Рекурсивные алгоритмы d) могут или не могут обеспечить преимущества читабельности кода в некоторых случаях.Я не уверен в этом ...
  5. Большинство (всех?) Современных операционных систем полагаются на определенные соглашения стека вызовов.Поэтому, если вы хотите вызывать любую внешнюю библиотеку из вашей программы, ваш язык программирования / компилятор должен соответствовать соглашению стека вызовов системы.Это облегчает принятие рекурсии для языков программирования / компиляторов.Однако, если бы вы создали рекурсивный язык, вам вообще не понадобился бы стек вызовов, который имел бы интересные эффекты с точки зрения управления памятью ...

Так что я не ненавижу рекурсию... Мне просто интересно, проводился ли в недавнем прошлом рекурсивный языковой эксперимент и каковы его результаты, как мне кажется, практическим экспериментом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...