> Он интерпретирует промежуточный (не выполняемый аппаратным процессором) код, то есть ои
> интерпретатор. Читайте типы интерпретаторов.
> https://ru.wikipedia.org/wiki/%D0%98%D0%...Так этот код уже не исходник на питоне. Это байт-код среды выполнения. Среда выполнения не выполняет инструкции языка Python.
Если ты интерпретируешь не питон, то интерпретируемым является не питон. Логично?
Интерпретируемым в данном случае является язык байт-код - машинный язык виртуальной машины PVM, но не исходный код на языке Python.
Так же как язык байт-код в JVM не связан с исходником на языке Java, потому что он мог быть получен из Kotlin, или Scala, или ещё какого-то транслирующегося в байт-код JVM.
Кстати, а Java у вас тоже интерпретируемый язык?
Или она компилируемая, хотя там выполняется всё тот же (промежуточный, не выполняемый аппаратным процессором) байт-код в виртуальной среде выполнения? Если она всё же - интерпретируемый язык, то что значит буква c в слове javac.
А если она компилируемая, то почему питон интерпретируемый, если его интерпретация работает аналогично Java и есть та же буква в .pyc?
Для Си тоже интерпретаторы пишут.
Машинный код тоже интерпретируется процессором.
Любой язык выполняется строка за строкой, любой язык интерпретируется, даже естественные.
Давайте все языки тогда называть интерпретируемыми.
А что в питоне происходит? Как раз анализируется и транслируется весь текст. Не построчно, а целиком.
А что касается выполнения? Анализируется питоновская инструкция, или инструкция байт-кода?
Вот поэтому придумали всякую ересь вроде интерпретаторов компилирующего типа, компиляторов интерпретирующего типа.
Но это как раз и говорит о том, что язык не является ограниченным в одном типе.
Поэтому питон не является интерпретируемым языком.
Что касается реализации Питона, то она указывает на то, что он является компилируемым.
Далее читаем:
> Алгоритм работы простого интерпретатора:
> 1. прочитать инструкцию;
Интерпретатор Питона должен читать инструкцию на Питоне, чтобы интерпретировать язык Питон.
Но PVM читает инструкцию уже на байт-коде. Байт-код это не Питон, это такой машинный код для виртуальной среды исполнения. Можете считать её упрощённым процессом-виртуальным процессором.
И кому-то захотелось в статье сделать питон каким-то ограниченным языком, поэтому он добавил условие - "без выполнения"? Без выполнения чего? Инструкции чьей?
Вы попробуйте подумать над интерпретацией языков и поймёте, что интерпретация отвечает за выполнение одной строки кода языка чётко прописанными процедурами с передачей параметров, а не предварительной его полной трансляции в другой язык, а затем построчного анализа и выполнения этого нового языка.
А это определение в вики объявляет интерпретируемой только среду исполнения, поскольку команда запуска виртуальной машины (как и её прерывание) и передача на её виртуальный конвейер инструкций байт-кода могут быть выполнены лишь на её уровне. К языку непосредственно оно никакого отношения не имеет.
Ну, я согласен, что интерпретатор питона является интерпретатором :), но причём тут питон, если произошла трансляция в другую форму?
Автор статьи сам до конца не понимает, чем компиляция, интерпретация и трансляция отличаются друг от друга.
> Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина).
С Питоном работает компилятор, интерпретатор Питона уже не видит. Но интерпретируемый - Питон. Замечательная логика.
> Причём исходный код для такого интерпретатора не обязательно должен иметь текстовый формат или быть байт-кодом, который понимает только данный интерпретатор, это может быть машинный код какой-то существующей аппаратной платформы.
Ещё лучше. Мы будем анализировать и выполнять левый язык, в который сумели транслироваться, но будем называться интерпретатором того языка из которого транслировались путём компиляции.
А чего ещё ждать в наше время. Перевернуть определения и подменить понятия - характерная черта современности.
Хотите увидеть как работает настоящий интерпретатор? Типа "простой интерпретатор".
Тогда скачайте его и проверьте как там анализируется одна строка кода и её параметры передаются подпрограмме (никогда не меняющейся). Меняются только данные в памяти, но не подпрограммы связанные с ключевыми словами языков, подпрограммам передаются адреса переменных. И, конечно же, там нет никакой компиляции.
Скачайте, хоть Бейсик, хоть Фокал, или поставьте эмулятор старого бытового компьютера с прошитым в ПЗУ интерпретатором. Что угодно. А потом отладчиком пройдитесь.
Только не называйте тормозной интерпретатор недоассемблера интерпретатором питона.
"промежуточный (не выполняемый аппаратным процессором) код" кодом Питона не является.
Допустим, ваш компилятор переводит Питон-код не в байт-код, а в си++ (чтобы было понятней, что он промежуточный и не выполняется), для аналогичной машины содержащей процедуры машинного кода, связанные с ключевыми словами си++, без компиляции. Он интерпретировался? Ещё нет. Только скомпилировался. Далее машина будет интерпретировать C++-код построчно. От этого C++ станет интерпретируемым языком? Или языки всё же не должны делиться жёстко на эти два типа?
Потому что в этом случае у вас будет работать интерпретатор си++-кода, и все учебники которые называют его компилируемым, можно будет переписывать. Вот только беда, компилятор тоже никто не отменял.
Не нравится c++, возьмите basic, pascal, c#...
Никогда интерпретация не зависела от условия запускается ли интерпретатор автоматом после компилятора (даже звучит еретично). Главное условие интерпретации состояло в том - одна строка исходного кода обрабатывается за раз, или весь код сначала переводится в другую форму. В питоне не обрабатывается одна строка, а код переводится в другую форму.
Вот лучше почитайте вместо википедии:
https://leanpub.com/insidethepythonvirtualmachine/read#leanp...
Прямо первое предложение.
Как видите, на самом деле всё совсем наоборот. И оказывается, питон компилируемый. Только не сам язык, а его реализация. Язык же может быть и тем и другим.
Просто айти заполонили 12-летние эксперты, которые никак не перешагнут 13-летний барьер.
Самое странное, что они догадываются что там под капотом и признают, что питон компилируется, а интерпретируется совсем другой язык, но продолжают поддерживать современные противоречащие самим себе толкования.