Все интерпретируемые / динамически типизированные языки хранят все в куче?
Сначала я удивился, почему язык хранит все в куче, когда он требует серьезных затрат производительности. Например, люди Java избегают создавать ненужные объекты, потому что различия в производительности при использовании примитивных типов и объектов значительны. но я обнаружил, что в таких языках, как Python и Javascript, все является объектом, и они являются интерпретируемыми и динамически типизированными языками. Поэтому я хотел знать, является ли куча общей почвой для этих языков.
1 ответ
И да и нет. Да, простые интерпретаторы и компиляторы байт-кода будут хранить каждый объект в куче; CPython делает это. Нет, существуют интеллектуальные реализации динамических языков, которые могут выполнять экранирующий анализ и преобразовывать некоторые выделения кучи в выделения стека.
Сталин делает это для Scheme, PyPy делает это для Python, и, возможно, есть реализация JavaScript, которая также выполняет эту оптимизацию.
они оба интерпретируются и динамически типизированные языки
Интерпретация - это не особенность языков, а их реализация, как показало сообщество Lisp несколько десятилетий назад. Python в своей эталонной реализации скомпилирован в байт-код, как и Java.