Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 19
Текст из файла (страница 19)
Эта реализация имеет бесшовную интеграцию с Java. Поскольку программный код на языке Python транслируетсяв байт-код Java, во время выполнения он ведет себя точно так же, как настоящая программа на языке Java. Сценарии на языке Jython могут выступатьв качестве апплетов и сервлетов, создавать графический интерфейс с использованием механизмов Java и так далее. Более того, Jython обеспечивает поддержку возможности импортировать и использовать Java-классы в программномкоде Python. Тем не менее поскольку реализация Jython обеспечивает болеенизкую скорость выполнения и менее устойчива по сравнению с CPython, онапредставляет интерес скорее для разработчиков программ на языке Java, которым необходим язык сценариев в качестве интерфейса к Java-коду.IronPythonТретья (и к моменту написания этих строк самая новая) реализация языка Python – это IronPython.
Она предназначена для обеспечения интеграциипрограмм Python с приложениями, созданными для работы в среде Microsoft.NET Framework операционной системы Windows, а также в Mono – открытомэквиваленте для операционной системы Linux. Платформа .NET и среда выполнения языка C# предназначены для обеспечения взаимодействий междупрограммными объектами – независимо от используемого языка программирования, в духе более ранней модели COM компании Microsoft. РеализацияРазновидности модели выполнения71IronPython позволяет программам на языке Python играть роль как клиентских, так и серверных компонентов, доступных из других языков программирования .NET.Модель реализации IronPython очень напоминает Jython (и фактически разрабатывается одним и тем же автором) – она подменяет два этапа на рис. 2.2 справа на эквиваленты среды .NET.
Кроме того, как и Jython, основной интересIronPython представляет для разработчиков, которым необходима интеграция Python с компонентами .NET. Поскольку разработка ведется компаниейMicrosoft, от IronPython, кроме всего прочего, можно было бы ожидать существенной оптимизации производительности. К моменту написания этих строкреализация IronPython еще продолжала разрабатываться. За дополнительнойинформацией обращайтесь к ресурсам Python или попробуйте самостоятельнопоискать в Сети.1Средства оптимизации скорости выполненияВсе три реализации, CPython, Jython и IronPython, реализуют язык Pythonпохожими способами: исходный программный код компилируют в байт-коди выполняют полученный байт-код с помощью соответствующей виртуальноймашины.
Но кроме них существуют и другие реализации, включая динамический компилятор Psyco и транслятор Shedskin C++, которые пытаются оптимизировать основную модель выполнения. Знание этих реализаций не является для вас обязательным на этой стадии изучения языка Python, тем не менее,краткий обзор их реализации модели выполнения поможет пролить свет намодель выполнения в целом.Динамический компилятор PsycoСистема Psyco – это не другая реализация языка Python, а компонент, расширяющий модель выполнения байт-кода, что позволяет программам выполняться быстрее. В терминах схемы на рис. 2.2 Psyco – это расширение PVM,которое собирает и использует информацию о типах, чтобы транслироватьчасти байт-кода программы в истинный двоичный машинный код, которыйвыполняется гораздо быстрее.
Для такой трансляции не требуется вносить изменения в исходный программный код или производить дополнительную компиляцию в ходе разработки.Грубо говоря, во время выполнения программы Psyco собирает информациюо типах объектов и затем эта информация используется для генерации высокоэффективного машинного кода, оптимизированного для объектов этоготипа. После этого произведенный машинный код замещает соответствующиеучастки байт-кода и тем самым увеличивает скорость выполнения программы.В результате при использовании Psyco существенно уменьшается общее времявыполнения программы. В идеале некоторые участки программного кода под1Jython и IronPython – это полностью независимые реализации языка Python, которые компилируют исходный программный код для различных архитектур временивыполнения.
Из программ для CPython также можно получить доступ к программным компонентам Java и .NET: например, системы JPype и Python for .NET позволяют коду, исполняемому интерпретатором CPython, обращаться к компонентам Javaи .NET.72Глава 2. Как Python запускает программыуправлением Psyco могут выполняться так же быстро, как скомпилированныйкод языка C.Поскольку эта компиляция из байт-кода производится во время выполнения программы, обычно Psyco называют динамическим (just-in-time, JIT)компилятором. Однако в действительности Psyco немного отличается от JITкомпиляторов, которые, возможно, некоторые читатели видели в языке Java.В действительности Psyco – это специализированный JIT-компилятор; онгенерирует машинный код, оптимизированный для типов данных, которыефактически используются в программе.
Например, если один и тот же участокпрограммы использует различные типы данных в разное время, Psyco можетгенерировать различные версии машинного кода для поддержки каждой изкомбинаций.Применение Psyco показывает существенное увеличение скорости выполнения программного кода Python. Согласно информации, которая приводитсяна домашней странице проекта, Psyco обеспечивает увеличение скорости «от2 до 100 раз, обычно в 4 раза, при использовании немодифицированного интерпретатора Python, неизменного исходного текста, всего лишь за счет использования динамически загружаемого модуля расширения на языке C».При прочих равных условиях наибольший прирост скорости наблюдается дляпрограммного кода, реализующего различные алгоритмы на чистом языкеPython, – именно такой программный код обычно переносят на язык C с целью оптимизации.
При использовании Psyco необходимость в таком переносетеряет свою остроту.До сих пор Psyco не является стандартной частью Python – его нужно загружать и устанавливать отдельно. Кроме того, он до сих пор находится на экспериментальной стадии развития, поэтому вам нужно будет следить за его разработкой. В действительности, когда я пишу эти строки, Psyco все еще можнозагрузить и установить, но похоже, что большая его часть будет поглощена более новым проектом «PyPy», который представляет собой попытку переписатьPVM на языке Python с целью обеспечения высокой степени оптимизации, какв Psyco.Пожалуй, самым большим недостатком Psyco является то обстоятельство, чтов настоящее время он способен генерировать машинный код только для архитектуры Intel x86, впрочем, на этой архитектуре работают такие операционныесистемы, как Windows, Linux и даже Mac.
За дополнительной информациейо расширении Psyco и других попытках реализации JIT-компилятора обращайтесь на сайт http://www.python.org. Кроме того, вы можете посетить домашнюю страницу проекта Psyco, которая в настоящее время размещается по адресу http://psyco.sourceforge.net.Транслятор Shedskin C++Shedskin – это еще одна система, которая реализует нетрадиционный подходк выполнению программ на языке Python. Она преобразует исходный код наязыке Python в исходный код на языке C++, который затем может быть скомпилирован в машинный код. Кроме того, эта система реализует платформонезависимый подход к выполнению программного кода Python.
К моменту написания этих строк система Shedskin еще находилась на экспериментальнойстадии развития и ограничивала программы Python неявным использованиемРазновидности модели выполнения73статических типов, что является ненормальным явлением для программ наязыке Python, поэтому мы не будем углубляться в описание этой системы. Темне менее, по предварительным результатам, у нее имеется немалый потенциал,чтобы выиграть гонку за скоростью как у стандартной реализации Python, таки у расширения Psyco, и это весьма многообещающий проект.
Сведения о текущем состоянии проекта вы можете самостоятельно найти в Сети.Фиксированные двоичные файлыИногда, когда пользователи спрашивают про «настоящий» компилятор языкаPython, в действительности они просто ищут способ создавать из своих программ на языке Python самостоятельные исполняемые файлы. Это необходимо скорее для упаковки и распространения программ, чем для их исполнения,но эти две стороны взаимосвязаны между собой. При помощи инструментовсторонних разработчиков, которые можно загрузить из Сети, вы можете превратить свои программы на языке Python в настоящие исполняемые файлы,которые в мире Python известны как фиксированные двоичные файлы (frozenbinaries).Фиксированные двоичные файлы объединяют в единый файл пакета байт-кодпрограмм, PVM (интерпретатор) и файлы поддержки, необходимые программам. Существуют разные реализации такого подхода, но в конечном результате получается единственный исполняемый файл (например, файл с расширением .exe в Windows), который легко можно передать заказчику.
Такую модельможно представить, если на рис. 2.2 объединить байт-код и PVM в единый компонент – фиксированный двоичный файл.На сегодняшний день существует три основных инструмента создания фиксированных двоичных файлов: py2exe (для Windows), PyInstaller (напоминаетpy2exe, но также работает в Linux и UNIX и способен производить самоустанавливающиеся исполняемые файлы) и freeze (оригинальная версия). Вам придется загружать эти инструменты отдельно от Python, но они распространяются совершенно бесплатно. Кроме того, они постоянно развиваются, поэтомусвежую информацию об этих инструментах смотрите на сайте проекта Python(http://www.python.org) или ищите с помощью поисковых систем.