Все интерпретируемые / динамически типизированные языки хранят все в куче?

Сначала я удивился, почему язык хранит все в куче, когда он требует серьезных затрат производительности. Например, люди Java избегают создавать ненужные объекты, потому что различия в производительности при использовании примитивных типов и объектов значительны. но я обнаружил, что в таких языках, как Python и Javascript, все является объектом, и они являются интерпретируемыми и динамически типизированными языками. Поэтому я хотел знать, является ли куча общей почвой для этих языков.

1 ответ

Решение

И да и нет. Да, простые интерпретаторы и компиляторы байт-кода будут хранить каждый объект в куче; CPython делает это. Нет, существуют интеллектуальные реализации динамических языков, которые могут выполнять экранирующий анализ и преобразовывать некоторые выделения кучи в выделения стека.

Сталин делает это для Scheme, PyPy делает это для Python, и, возможно, есть реализация JavaScript, которая также выполняет эту оптимизацию.

они оба интерпретируются и динамически типизированные языки

Интерпретация - это не особенность языков, а их реализация, как показало сообщество Lisp несколько десятилетий назад. Python в своей эталонной реализации скомпилирован в байт-код, как и Java.

Другие вопросы по тегам