Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Интерпретатор языка Python, написанный на языке Python

Оригинал: A Python Interpreter Written in Python
Автор: Allison Kaptur
Дата публикации: July 12, 2016
Перевод: Н.Ромоданов
Дата перевода: февраль 2017 г.

Creative Commons

Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.

Эллисон – инженер в компании Dropbox, где она помогает поддерживать одну из крупнейших в мире сетей с клиентскими программами, написанными на языке Python. Перед тем, как оказаться в Dropbox, она была посредником в Recurse Center, центре переобучения в Нью-Йорке. На конференциях PyCon North America она рассказывает о внутреннем устройстве интерпретатора языка Python и ей нравятся всякие странные ошибки. Ее блоги размещены на akaptur.com.

Введение

Byterun является интерпретатором языка Python, реализованным на языке Python. Хотя я участвовала в разработке ByteRun, я была удивлена и обрадована, когда обнаружила, что основная структура интерпретатора языка Python достаточно просто соответствует ограничению в 500 строк. В этой главе мы рассмотрим эту структуру интерпретатора и расскажем о ней достаточно подробно с тем, чтобы вы могли изучать ее дальше. Цель главы не в том, чтобы объяснить все, что известно об интерпретаторах – подобно многим другим интересным темам в программировании и информатике, для глубокого понимания этой темы могут потребоваться годы обучения.

Интерпретатор Byterun был написан Недом Батчелдером (Ned Batchelder) и мной на основе работы Пола Шварца (Paul Swartz). Структура этого интерпретатора похожа на структуру первой реализации языка Python - CPython, поэтому понимание интерпретатора Byterun поможет вам разобраться с интерпретаторами в целом и с интерпретатором CPython в частности. Если вы не знаете, каким интерпретатором языка Python вы пользуетесь, то это, вероятно, интерпретатор CPython. Несмотря на свои небольшие размеры, интерпретатор Byterun может запускать самые простые программы на языке Python [1].

Интерпретатор языка Python

Прежде чем мы начнем, давайте сузим понятие того, что мы будем подразумевать под понятием "интерпретатором языка Python". Понятие "интерпретатор" при обсуждении языка Python может использоваться в различных смыслах. Иногда понятие интерпретатор относится к Python REPL, интерактивной командной строке и приглашению, которое вы получите, когда в командной строке наберете команду python. Иногда, когда говорят о выполнении кода на языке Python от самого начала до конца, понятие "интерпретатор языка Python" будет более или менее взаимозаменяемо с понятием "язык Python". В этой главе, понятие "интерпретатор" имеет более узкое значение: это последний шаг в процессе выполнения программы на языке Python.

Перед тем как интерпретатор примет на себя эстафету, необходимо выполнить три других действия: лексический анализ, синтаксический анализ и компиляция. Вместе эти шаги преобразуют исходный код, написанный программистом, из текстовых строк в структурированные объекты кода, содержащий инструкции, которые может понять интерпретатор. Работа интерпретатора заключается в том, что он должен брать эти объекты кода и следовать указанным в них инструкциям.

Вы удивитесь, узнав, что компиляция вообще является одним из шагов в выполнении кода на языке Python. Язык Python часто называют "интерпретируемым" языком точно таким, как язык Ruby или язык Perl, в отличие от таких "компилируемых" языков, как C или Rust. Тем не менее, эта терминология не столь точна, как это может показаться. В наиболее известных интерпретируемых языках, в том числе и в языке Python, действительно, есть стадия компиляции. Причина того, что язык Python называется "интерпретируемым", в том, что на шаге компиляции делается меньше работы (а интерпретатор выполняет больше работы), чем в компилируемом языке. Далее в этой главе будет рассказано о том, компилятор языка Python имеет гораздо меньше информации о поведении программы, чем компилятор языка С.

Интерпретатор языка Python, написанный на языке Python

Byterun является интерпретатором языка Python, который написан на самом языке Python. Это может показаться странным, но это не более странно, чем писать компилятор языка С на языке С. На самом деле широко используемый компилятор gcc для языка С написан на самом языке C. Вы можете написать интерпретатор языка Python практически на любом языке программирования.

Написание интерпретатора языка Python на самом языке Python обладает как преимуществами, так и недостатками. Самым большим недостатком будет скорость выполнения программы: выполнение кода с помощью интерпретатора Byterun происходит гораздо медленнее, чем его выполнение с помощью интерпретатора CPython, который написан на языке C и тщательно оптимизирован. Но интерпретатор Byterun был разработан первоначально как учебное упражнение, так что для нас скорость не так важна. Самым большим преимуществом использования языка Python является то, что гораздо проще реализовывать лишь интерпретатор, а не весь остальной контекст времени выполнения, в частности, реализовывать систему объектов. Например, в случае, когда необходимо создать класс, интерпретатор Byterun может воспользоваться "реальным" языком Python. Еще одним преимуществом является то, что интерпретатор Byterun понять проще, отчасти потому, что он написан на языке высокого уровня (Python!), который, как многие считают, читается легче. Мы также убрали из интерпретатора Byterun всю оптимизацию периода интерпретации, отдав предпочтение ясности и простоты над скоростью.

Перейти к следующей части статьи.