Как было показано ранее, поддержка расширения и встраивания в Python дает возможность использовать его в многоязыковых системах. Без наличия хороших средств интеграции даже самый лучший язык быстрой разработки приложений оказывается «изолированным боксом», не слишком полезным в современных условиях ведения разработки. Но средства интеграции Python позволяют применять его в гибридных, многокомпонентных приложениях. Одним из последствий является то, что системы могут одновременно использовать преимущества быстрой разработки на Python и высокой скорости выполнения традиционных языков, таких как C.
Несмотря на то, что Python можно использовать как самостоятельный инструмент, тем не менее, он не навязывает такой режим. Напротив, Python поощряет интегрированный подход к разработке приложений. Поддерживая произвольное смешивание Python с традиционными языками, Python стимулирует целый ряд парадигм разработки в диапазоне от чистого прототипирования до чистой эффективности. В абстрактном виде это показано на рис. 21.3.
|
Рис. 21.3. «Ползунок» режима разработки
На левом краю спектра мы оптимизируем скорость разработки. При перемещении к правому краю оптимизируется скорость выполнения. Для каждого проекта оптимальная пропорция лежит где-то посередине. Python позволяет не только выбрать правильную пропорцию для проекта, но и изменять ее позднее произвольным образом при изменении потребностей:
Идем вправо
Разработку проектов можно начинать на Python с левого конца шкалы и постепенно перемещаться вправо, модуль за модулем, по мере необходимости оптимизируя конечный продукт.
Идем влево
Такая гибкость режима разработки важна в практических условиях. Python оптимизирован по скорости разработки, но одного этого недостаточно. Сами по себе ни C, ни Python не решают проблемы узкого места разработки; объединившись, они могут достичь значительно большего. Как показано на рис. 21.4, помимо самостоятельного использования одно из наиболее частых применений Python заключается в разбиении систем на клиентские составляющие, получающие преимущества простоты использования Python, и серверные модули, требующие производительности статических языков типа C, C++ или FORTRAN.
Рис. 21.4. Гибридная архитектура
Как при добавлении клиентских интерфейсов в существующие системы, так и при разработке их с начала такое разделение труда может открыть пользователям доступ к системе, не раскрывая ее внутреннего устройства.
При разработке новых систем также можно сначала целиком написать их на языке Python, а затем при необходимости оптимизировать конечный продукт, перенося критические для производительности компоненты на компилируемые языки. А так как модули Python и C выглядят для клиентов одинаково, переход на компилированные расширения оказывается прозрачным.
Не во всех ситуациях имеет смысл создавать прототипы. Иногда лучше заранее разделить систему на клиентскую часть на Python и серверную на C/C++. От прототипирования также мало пользы при доработке имеющихся систем. Но там, где его можно применять, прототипирование на раннем этапе может оказаться очень полезным. Путем предварительного создания прототипа на Python можно быстрее показать результаты. Вероятно, еще важнее то, что конечные пользователи могут активнее участвовать в ранних стадиях процесса разработки, как показано на рис. 21.5. В результате получаются системы, точнее соответствующие исходным требованиям.
По поводу потопления «Титаника»
Проще говоря, Python в действительности представляет собой больше, чем язык; он предполагает определенную философию разработки. Понятия создания прототипов, быстрой разработки и гибридных приложений, разумеется, не новы. Но хотя преимущества таких способов разработки широко признаны, существовал недостаток инструментов для применения этих принципов на практике без потери мощности программирования. Это один из главных пробелов, которые заполняет архитектура Python: Py thon предоставляет простой, но мощный язык для быстрой разра бот ки при ло же ний наря ду со средст ва ми ин те гра ции, необходимыми для применения его в практических условиях разработки.
Такое сочетание делает Python уникальным среди аналогичных инструментов. Например, Tcl служит хорошим инструментом интеграции, но не является развитым языком; Perl является мощным языком системного администрирования, но слабым инструментом интеграции. А тесное соединение в Python мощного динамического языка и интеграции открывает дорогу к более быстрым способам разработки. Благодаря Python больше не нужно выбирать между быстрой разработкой и быстрым выполнением.
С учетом высокой стоимости создания программного обеспечения важно уметь выбирать между скоростью разработки и скоростью выполнения. Хотя машинное время дешевле времени программистов, нельзя полностью игнорировать эффективность программ.
Но имея такой инструмент, как Python, вообще не приходится выбирать между двумя целями. Так же как плотник не станет забивать гвоздь с помощью цепной пилы, так и разработчики программного обеспечения теперь достаточно вооружены, чтобы использовать нужный инструмент для решаемой в данный момент задачи: Python — если важна скорость разработки, компилируемые языки — если доминирует эффективность, и сочетание того и другого, когда цели не определены так однозначно.
Более того, нам не требуется жертвовать повторным использованием программного кода или полностью переписывать продукт перед поставкой, когда используется быстрая разработка с помощью Python. Быстрая разработка не отменяет преимуществ при эксплуатации:
Повторное использование Python
Так как Python является объектно-ориентированным языком высокого уровня, он способствует написанию повторно используемого программного обеспечения и правильно спроектированных систем.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011