четверг, 6 ноября 2014 г.

Ссылка. Python, каким бы я хотел его видеть

http://habrahabr.ru/company/mailru/blog/234747/

Это ещё более интересное. Мне лично.

Перекликается с:

Черновик. Новое виденье определения операторов в скриптовой машине.
Скорее "для себя". Классы в скриптовой машине.

Ну и процитирую:

"

Чёртов интерпретатор

Запуск интерпретатора в Python является очень дорогим процессом. Когда вы запускаете исполняемый файл, вы приводите в действие сложный механизм, который умеет делать чуть более, чем всё. В числе прочих вещей инициализируются встроенные типы данных, механизмы импорта модулей, импортируются некоторые обязательные модули, производится работа с операционной системой для настроийки работы с сигналами и параметрами командной строки, настраивается внутреннее состояние интерпретатора и т.д. И только после окончания всех этих процессов интерпретатор запускает ваш код и завершает свою работу. Так Python работает на протяжении вот уже 25 лет.

Вот как это выглядит в псевдокоде:

/* вызывается единожды */
bootstrap()

/* эти три строки могут быть вызваны в цикле, если хотите */
initialize()
rv = run_code()
finalize()

/* вызывается единожды */
shutdown()

Проблема в том, что у интерпретатора есть огромное количество глобальных объектов, и по факту у нас есть один интерпретатор. Гораздо лучше, с точки зрения архитектуры, было ты инициализировать интерпретатор и запускать его как-то так:

interpreter *iptr = make_interpreter();
interpreter_run_code(iptr):
finalize_interpreter(iptr);

Так работают другие динамические языки программирования, например, Lua, JavaScript и т.д. Ключевая особенность в том, что у вас может быть два интерпретатора, и в этом заключается новая концепция.

Кому вообще может быть нужно несколько интерпретаторов? Вы удивитесь, но даже для Python это нужно, или, по крайней мере, может быть полезно. Среди существующих примеров можно назвать приложения со встроенным Python, такие как веб-приложения наmod_python, — им определённо нужно запускаться в изолированном окружении. Да, в Python есть субинтерпретаторы, но они работают внутри основного интерпретатора, и только потому, что в Python так много всего завязано на внутреннее состояние. Самая большая часть кода для работы с внутренним состоянием Python является одновременно самой спорной: global interpreter lock (GIL). Python работает в концепции одного интерпретатора потому, что существует огромное количество данных, используемых всеми субинтерпретаторами совместно. Всем им нужна блокировка (lock) для единоличного доступа к этим данным, поэтому эта блокировка реализована в интерпретаторе. О каких данных идёт речь?"

--  что сказать? ЗНАКОМО.. :-) Приятно видеть, как другие делают те же ошибки, что и ты:-)

Да и слово "чёртов" - мне КРАЙНЕ не нравится :-)

Комментариев нет:

Отправить комментарий