Какие интерпретируемые языки имеют ручное управление памятью? Я не помню, чтобы когда-либо слышал об этом.
Не существует такой вещи, как интерпретируемый язык . Язык не компилируется и не интерпретируется. Язык просто это . Язык - это набор абстрактных математических правил. Интерпретация или компиляция - это черты языковой реализации , они не имеют ничего общего с языком . Каждый язык может быть реализован либо компилятором, либо интерпретатором; большинство современных высокопроизводительных языковых реализаций фактически используют и и переключаются между ними в зависимости от того, какая из них быстрее в конкретном контексте.
Является ли C компилируемым языком? Есть интерпретаторы C там. Является ли Python интерпретируемым языком? Все 8 текущих реализаций Python используют компилятор.
Итак, поскольку каждый язык может иметь интерпретируемую реализацию, C и C ++ являются примерами интерпретируемых языков с ручным управлением памятью. (И это не просто теоретическое состязание по расколу волос: являются на самом деле интерпретаторами C и C ++. Операционная система реального времени VxWorks даже содержит одно право в ядре, и НАСА однажды использовало этот интерпретатор исправить неисправный модуль ядра на космическом корабле.)
Другим примером была бы самая первая версия Lisp от 1958 года: она имела ручное управление памятью (на основе подсчета ссылок), но только через пару месяцев была заменена версией с автоматическим управлением памятью, которую она использовала с тех пор. Хотя, опять же, любой язык может быть реализован с помощью компилятора или интерпретатора, поэтому я не знаю, имела ли эта версия интерпретируемую или скомпилированную реализацию. (На самом деле, я не уверен, был ли он реализован вообще .)
Если вы немного ослабите свои критерии и поймете, что управление памятью является лишь частным случаем общего управления ресурсами, то вы обнаружите, что в значительной степени все языки, хотите ли вы назвать их скомпилированными или интерпретировать или что-то еще целиком, иметь некоторую форму ручного управления ресурсами как минимум для некоторого вида ресурса (файловые дескрипторы, соединения с базой данных, сетевые соединения, кэши, ...).