Чем Python будет отличаться от другого интерпретируемого языка?
Это включает в себя расчесывание волос. Интерпретируемые языки и языки «управляемого кода», такие как C #, и языки виртуальных машин (как Java) образуют странный континуум. Есть люди, которые скажут, что все языки «интерпретируются» - даже машинный язык. Ведь электронные схемы процессора «интерпретируют» машинный язык.
Лучшее, что вы можете сделать, это сказать, что «интерпретированный» означает, что есть видимый уровень программного обеспечения, интерпретирующего байт-коды вашего приложения. «не интерпретированный» означает, что ваше программное обеспечение (более или менее) напрямую выполняется базовым оборудованием. «Управляемый код» люди могут свободно расчесывать.
Не могли бы вы сказать мне, что означает "позднее связывание" в контексте Python?
Переменные не объявлены как имеющие тип. Переменная связана с типом как можно позже - с присвоением реального объекта.
Является ли Java интерпретируемым / скомпилированным языком?
Да. Он скомпилирован в байтовые коды. Байт-коды интерпретируются. Я предпочитаю называть это истолкованным.
Однако люди (по очень непонятным причинам) не согласятся. Наличие любого вида «этапа компиляции» - пусть и минимального - всегда смущает людей. Перевод в байт-код практически не имеет отношения к реальному поведению программы во время выполнения. Некоторые люди любят говорить, что интерпретировать могут только только языки, которые полностью свободны от любого признака предварительной обработки "компиляции". Примеров этого уже не так много, поскольку многие языки переводятся из дружественного человеку текста в понятные интерпретатору байтовые коды. Даже в Applesoft Basic (еще в 80-х годах) такой перевод выполнялся по мере ввода кода.
Некоторые JVM делают JIT. Некоторые нет. Некоторые из них являются смесью. Сказать, что JVM только выполняет преобразование байт-кода JIT, неверно. Некоторые JVM делают. Некоторые нет.
Чем он отличается от Python с точки зрения компиляции / исполнения?
Совсем нет. Java VM может выполнять Python. [Для легко запутанного, слово «питон» в этом контексте не может означать «источник питона». Это должно означать байт-код Python.]
Говорят, что в Java нет "позднего связывания". Это как-то связано с тем, что программы на Java чуть быстрее Python?
Может быть. Java-программы часто работают быстрее благодаря JIT-компиляторам, которые переводят байт-код Java в машинный код во время выполнения.
Статическое («раннее») связывание не имеет такого же преимущества для Java, как с действительно скомпилированным языком, таким как C или C ++, где практически отсутствуют какие-либо проверки во время выполнения. Java по-прежнему выполняет такие вещи, как проверка границ массивов, которую С опускает в интересах необработанной скорости.
На самом деле штраф за "позднюю" привязку практически отсутствует. Атрибуты и методы Python разрешаются с помощью простого поиска в словаре. Словарь представляет собой хэш; производительность довольно хорошая. Хеши для имен могут быть помещены в пул «встроенных» строковых литералов, амортизирующих стоимость вычисления хеша.
Для реального удовольствия посмотрите PyPy и RPython. Это интерпретатор Python, который может выполнять JIT-компиляцию. Вы получаете 2-х уровневый переводчик. Ваш код интерпретируется PyPy. PyPy интерпретируется RPython. 1048 **