В каких интерпретируемых языках имеется ручное управление памятью? Я не помню, чтобы когда-либо слышал об этом.
Нет такой вещи, как язык . Язык не компилируется и не интерпретируется. Язык только is. Язык - это совокупность абстрактных математических правил. Интерпретация или компиляция являются признаками языка осуществления, они имеют ничего, чтобы сделать с языком. Каждый язык может быть реализован либо компилятором, либо интерпретатором; самые современные высокопроизводительные языковые реализации фактически используют как, так и переключаться между ними, в зависимости от того, какой из них быстрее в конкретном контексте.
Есть ли скомпилированный язык? Там есть переводчики С. Является ли Python интерпретированным языком? Все 8 текущих реализаций Python используют компилятор.
Итак, поскольку каждый язык может иметь интерпретируемую реализацию, C и C++ - примеры интерпретируемых языков с ручным управлением памятью. (И это не просто теоретический конкурс по расщеплению волос, там - это на самом деле интерпретаторы C и C++. Операционная система VxWorks в реальном времени даже содержит одно прямое ядро, и NASA когда-то использовало этот интерпретатор для исправления ошибок модуль ядра на космическом корабле.)
Другим примером будет первая версия Lisp с 1958 года: она имела ручное управление памятью (на основе подсчета ссылок), но она была заменена всего на пару месяцев позже версией с автоматическое управление памятью, которое оно использовало с тех пор. Хотя снова любой язык может быть реализован либо с помощью компилятора, либо с помощью интерпретатора, поэтому я не знаю, имела ли эта версия интерпретируемую реализацию или скомпилированную. (На самом деле, я не уверен, было ли это реализовано вообще.)
Если вы немного расслабите свои критерии и понимаете, что управление памятью является лишь частным случаем общего управления ресурсами, то вы найдете, что в значительной степени все языки, хотите ли вы называть их скомпилированными или интерпретированными или что-то совсем другое, имеет некоторую форму управления ресурсами вручную, по крайней мере, вид ресурсов (файловые дескрипторы, подключения к базе данных, сетевые подключения, кеши, ...).
Кстати, что вы подразумеваете под термином? java так же «интерпретируется» как Python, PHP или Javascript в эти дни байт-кода. Может быть, вы бы более точно упоминали «динамически типизированные» языки? – jsbueno
Все, что выполняется интерпретатором, будь то какая-то промежуточная форма или простой байт-код. В частности, что-то вроде php/java/perl/python/ruby, которое не позволит вам уничтожить ваше адресное пространство. –
C# не содержит указателей. –