- Основные реализации Python: характеристика и преимущества
- Основные реализации Python
- 1. CPython
- 2) Jython
- 3) IronPython
- 4) PyPy
- 5) Cython
- Заключение
- Подробное описание языка Python для начинающих
- Что такое Python, как язык программирования
- Высокоуровневый
- Интерпретируемый
- Объектно-ориентированный
- Императивный
- Строго (сильно) типизированный
- Общего назначения
- Динамическая типизация
- Отличительные особенности языка Python
- Интроспекция
- Мультиплатформенность
- Встроенные паттерны проектирования
- Обширный набор стандартных библиотек
- Читаемость языка
- Заключение
- P.S.
Основные реализации Python: характеристика и преимущества
В этой статье мы расскажем вам о CPython, Jython, IronPython, PyPy и Cython. Поговорим об их основных отличиях и преимуществах.
Область компьютерных наук является, пожалуй, самой популярной в наши дни. И она всё ещё продолжает расти и развиваться. То, что представляют из себя компьютерные науки сейчас, совсем не похоже на то, чем они были в самом начале. Благодаря Computer Science, теперь есть возможность создавать вещи, которые волшебным образом меняют жизни миллионов людей! Такой разительный прогресс позволил создать искусственный интеллект, глубокое обучение и многие другие концепции, которые раньше считались невозможными.
Языки программирования в целом являются одним из наиболее стремительно развивающихся элементов компьютерных наук. Но развиваются они неравномерно. Возьмем к примеру Python. Это высокоуровневый язык программирования, который очень вырос со времени своего выхода в свет и сейчас используется в самых разных сферах. В результате он выделяется даже на фоне других успешно развивающихся языков.
Стоит отметить, что сам по себе Python довольно многообразен и используется в различных реализациях. Это и будет темой нашей статьи: мы рассмотрим разные способы реализации этого языка, существующие на данный момент.
Основные реализации Python
Мы уже несколько раз использовали термин «реализация». Но что под этим подразумевается? Говоря о реализации, мы имеем в виду то, как был написан интерпретатор – какие языки были использованы и какова главная задача конкретно этого интерпретатора.
А теперь давайте разберем некоторые реализации Python.
1. CPython
CPython – это, по сути, дефолтный и наиболее распространенный интерпретатор (реализация) языка Python, написанный на C. Это изначальная версия языка, которую пользователи скачивают с официального сайта – Python.org.
Лучше всего CPython можно описать как некую смесь интерпретатора и компилятора, так как написанный вами код преобразуется в байт-код. Под байт-кодом мы понимаем программный код, который компилируется и преобразуется в низкоуровневый язык, который, в свою очередь, может быть использован как набор инструкций для интерпретатора. Именно этот байт-код и выполняется на виртуальной машине CPython.
Поскольку это «родная» реализация Python, CPython наиболее совместим с пакетами и модулями языка. Эта реализация будет наилучшим выбором, если вам нужно написать код, полностью соответствующий стандартам Python.
2) Jython
Jython – это ещё одна реализация Python. Она была написана на Java и работает на Java-платформах. Как и в CPython, исходный код конвертируется в байт-код – набор инструкций для интерпретатора. Jython работает на виртуальной машине, которая использует то же окружение, что и Java. Данная реализация обеспечивает удобную работу с Java-программами. Вы легко сможете вызывать и использовать свои функции и классы Java непосредственно из Jython. Это дает пользователям Python доступ к огромнейшей экосистеме библиотек и фреймворков, имеющихся в Java. И наоборот.
3) IronPython
Если Jython был разработан для пользователей Java, то IronPython — популярная реализация, написанная на C#. Её разработали для работы на платформе .NET. Она создает мост во вселенную .NET, дающий пользователям Python доступ к функциям и классам C#, библиотекам и фреймворкам .NET прямо из IronPython. Данная реализация отлично подходит для многопоточных программ. Вы можете её найти на официальном сайте — ironpython.net.
4) PyPy
Эта реализация написана на самом Python и является альтернативой CPython. PyPy был написан с учетом всех особенностей языка Python, поэтому он наиболее совместим с CPython. Это позволяет запускать веб-фреймворки, такие как Django и Flask. PyPy использует концепцию JIT-компиляции (Just-in-time), которая позволяет компилировать исходный код прямо во время выполнения программы. Это делает PyPy в несколько раз быстрее CPython. Многие пользователи последнего жаловались именно на низкую скорость выполнения. Таким образом, PyPy полностью улучшает эту часть CPython.
5) Cython
В отличие от других реализаций Python, упомянутых выше, Cython не является интерпретатором Python. Это, скорее, надмножество языка Python, которое дает возможность пользователям компилировать программы на языке C.
Вообще, объединенная мощь Python и C — самое потрясающее в Cython. Благодаря ей Cython можно использовать для написания расширений C, а также для преобразования Python-кода в C. Таким образом, Cython сохраняет удобство и комфорт, за которые все так любят Python, устраняя многие ограничения последнего.
Заключение
Python за годы своего активного развития очень расширился. Различные реализации этого языка удовлетворяют нужды разных пользователей. Если вы планируете писать код на Python на профессиональном уровне, высока вероятность, что со временем вы столкнетесь с несколькими из упомянутых реализаций. И когда это произойдет, нужно уметь распознать, с чем именно вы столкнулись, и почему для данного кода выбрана именно такая реализация Python.
Подробное описание языка Python для начинающих
Начинать изучение чего-либо не имея базового представления о фундаментальных основах — глупо. И принцип «по ходу разберёмся» здесь не работает так как «по ходу» вы просто не уйдёте дальше простых домашних проектов.
Изучать программирование «до того, как это стало мэйнстримом» было намного сложнее, чем сейчас, по одной просто причине: никто не разжёвывал и не делил информацию на важную «вам это никогда не понадобится», не было обучающих экспресс уроков и интенсивов, где за 4 часа пишут свой пет-проект. Сейчас мы имеем большой массив так называемых разработчиков которые успешно выполняют поставленные им задачи, но матчасть знают поверхностно.
Именно поэтому давайте пробежимся по фундаменту такого простого но, как оказалось, загадочного языка Python. Пристегните ремни, господа.
Что такое Python, как язык программирования
В целом Python можно описать одним предложением:
Высокоуровневый, интерпретируемый, объектно-ориентированный, императивный, строго типизированный язык общего назначения, который имеет динамическую типизацию.
Теперь пойдём последовательно по каждому из пунктов.
Высокоуровневый
Языки программирования делятся на высокоуровневые и низкоуровневые. Низкоуровневые языки — языки, близкие к машинному коду или его конструкциям (например, байт-кодам). Классикой таких языков являются C, Assembler, Forth.
Высокоуровневые языки — соответственно разрабатываются для удобства использования и скорости написания программы. В них применяются определённые абстракции — структуры данных, набор вспомогательных функций и так далее. Это такие языки как Python, JS, PHP, Go,
Интерпретируемый
Языки делятся на интерпретируемые(Python, JS, PHP, R, Ruby) и компилируемые (С, С++, Pascal). В первом случае программа выполняется специальной программой — интерпретатором, во втором программа сначала преобразуется в понятные компьютеру исполняемые файлы.
Объектно-ориентированный
Все языки также разделяются на процедурные, функциональные и объектно-ориентированные в зависимости от того, с помощью каких конструкций создаётся программа и как происходит её выполнение.
В объектно-ориентированных языках основа это классы и экземпляры классов это равносильно типу и объекту этого типа. Выполнение условных задач или же просто работа программы строится на взаимодействии различных классов.
Python хоть и является объектно-ориентированным языком но также поддерживает и процедурное программирование это значит, что программу можно написать без единого класса.
В основе функциональных языков лежит отличная от предыдущих вычислительная система, называемая лямбда-исчисление, которая, тем не менее, эквивалентна машине Тьюринга, о чём доказана соответствующая теорема (спасибо моему преподавателю за этот абзац).
Императивный
Языки программирования также могут быть разделены на импертивные и декларативные. В императивном языке программист будет указывать последовательность команд для выполнения (это все языки программирования которые мы считаем «языками программирования» простите за тавтологию).
Декларативные же языки в свою очередь ожидают от нас описания результата, который мы хотим получить в ходе выполнения запроса. Яркий пример декларативного языка это SQL (Stucted Query Language) или же структурированный язык запросов. Именно в нём мы описываем конкретный результат выполнения программы а не последовательность команд. Декларативными языками еще называют HTML, CSS, SVG, VRML, SQL, lex/VACC.
Для понимания определений императивного и декларативного языка зададим задачу: построить дом.
Императивный: Пойти в магазин —> Купить материалы —> Подготовить площадку —> Произвести строительство —> Заселиться.
Декларативный: Я хочу новый дом.
Строго (сильно) типизированный
Что касается типизации. В сильно типизированном языке интерпретатор, при выполнении команд, не станет неявно приводить типы в отличии от слабо типизированных языков, в котором приведения типа могут происходить неявно.
Общего назначения
Языки делятся на языки общего назначения (Python, Java, Kotlin, C, Ruby) и специализированные (например предметно-ориентированные языки или DSL)
DSL(предметно-ориентированный язык) — компьютерный язык, специализированный для конкретной области применения (в противоположность языку общего назначения, применимому к широкому спектру областей и не учитывающему особенности конкретных сфер знаний). Построение такого языка и/или его структура данных отражают специфику решаемых с его помощью задач. Является ключевым понятием языково-ориентированного программирования. Примеры таких языков Perl, SQL, HTML, Haskell, Verilog, AutoLisp
Динамическая типизация
Динамическая типизация предполагает, что в процессе выполнения команды переменная может содержать объекты различных типов. То есть мы объявляем переменную не указывая явно, какой тип данных в ней будет содержаться, и в процессе выполнения программы в одной переменной может побывать как текст так и число, а может и булево значение.
Статическая типизация предполагает, что при задании переменной сразу указывается тип данных, который она может содержать.
Отличительные особенности языка Python
Интроспекция
В программировании это это способность программы получать различную информацию об объектах во время работы программы. Если конкретно, то вы можете узнать какому классу принадлежит объект, с каким типом данных вы работаете в данный момент (помните про динамическую типизацию?) или список атрибутов и методов, доступных для указанного объекта
Примеры полезных функций интроспекции в Python:
Мультиплатформенность
Нет, ну Java тоже, да. Но Python не отстает, он идёт, что называется, в коробке с Linux и SQL Server, интерпретатор Python можно легко поставить на Windows, не забыли про macOS, и iOS. Да вообще везде работает, в 8 раз медленней чем Swift на iOS, но работает.
Встроенные паттерны проектирования
В Python существуют свои встроенные паттерны проектирования, лучшим примером для понимания служат Декоратор и Итератор.
Декоратор позволяет расширять функциональность без наследования. Чтобы разобраться в паттерне Итератор, следует просто изучить механизм работы итераторов и генераторов языка (о них я писал здесь)
Обширный набор стандартных библиотек
При использовании Core Python вы получаете «в коробке» большой набор полезных стандартных библиотек. Примером может служить библиотека для работы с БД SQLite, а также json, math, re, random, csv, html и много других.
Читаемость языка
Форматирование текста в Python является частью его синтаксиса и да, это те самые отступы (пробелы, табуляция кому как нравится), которые позволяют повышать читаемость кода.
Заключение
Python — красивый, лаконичный и многофункциональный язык. Он применяется в совершенно не сочетающихся между собой сферах деятельности, способен в одиночку создавать проекты и не смотреть на возможности конкурентных языков.
Частой проблемой, встречающейся среди разработчиков-любителей является поверхностность в изучении Python. Обучающие материалы, которые вы (мы) встречаете в интернете перефразируются сотни раз и скрывают важные, полезные черты и особенности языков программирования.
Очень важно восполнять белые пятна в своих знаниях не только в начале своего обучения но и на протяжении всей своей карьеры иначе завтра фраза «дай дорогу молодым» станет для вас актуальной, и вы окажетесь за бортом.
P.S.
Язык Python назван в честь комик-группы Монти Пайтон а не в честь змеи.
Создатель языка Гвидо Ван Россум
PEP — Python Enhancement Proposals.
PEP-8 — набор правил как стоит писать код.