ПРОГРАММИРОВАНИЕ   

Компании-производители соревнуются в создании динамических языков, упрощающих написание приложений

Три года назад, когда Джим Хьюгенин, разрабатывавший в ту пору ПО с открытым исходным кодом, заявил, что создает открытый динамический язык, который будет работать на тогда еще сравнительно новой платформе Microsoft .Net, все подумали, что он рехнулся. Как-никак считалось, что .Net и открытое ПО несовместимы. Но сегодня этим занимаются все, а Джим Хьюгенин работает на Microsoft.

Так что добро пожаловать в мир динамического программирования, где все - языки, компании-производители и договоренности между ними - далеко от стабильности. Динамические языки обладают гибкостью, позволяющей разработчикам писать код легко и быстро.

"Для начала я намеревался объяснить Microsoft, сколь ужасна .Net для динамических языков", - сказал Джим Хьюгенин, который создал язык IronPython и сегодня руководит в Редмонде (США) работой над Microsoft CLR (Common Language Runtime). И дальше он пояснил, что стал трудиться над IronPython - реализацией языка Python для .Net в виде проекта с открытым исходным кодом - лишь потому, что считал это лучшим способом попасть на работу в Microsoft.

И вот стартовала настоящая гонка за то, чтобы успеть раньше других взять на вооружение так называемые динамические языки. Microsoft принимает JavaScript и начинает поддерживать PHP и Python. Sun включает JavaScript в платформу Java. IBM создает EGL (Enterprise Generation Language), который генерирует код COBOL и Java. Технология Ruby on Rails позволяет с помощью языка Ruby создавать приложения с такой скоростью, с какой реализуются их прототипы. Цель всех этих языков - упростить процесс разработки. Наградой победителю станет лояльность нового поколения программистов.

9 сентября на конференции EclipseWorld в Бостоне программисты получили возможность познакомиться с обновленным проектом интегрированной среды разработки Eclipse PHP IDE. Специалисты фонда Eclipse Foundation трудятся над созданием среды PHP IDE для платформы Eclipse. Как и другие производители инструментальных платформ, Eclipse Foundation спешит поддержать динамические языки.

Привлекательность динамических языков понятна: по мере того как системы становятся все сложнее, разработчики ищут простые способы программирования. Одним из веских свидетельств этого стремления является растущая популярность таких облегченных моделей программирования, как LAMP (Linux, Apache, MySQL и PHP/Python/Perl) и Ruby on Rails. Обе они базируются на динамических языках.

"LAMP представляет собой нечто вроде ответной реакции на растущую сложность Java, - пояснил Уэйн Дюкуэйн, директор по разработке ПО компании Grandview Systems. - Платформа J2EE (Java 2 Platform, Enterprise Edition) становится слишком непростой средой".

JavaScript, Perl, PHP, Python и Ruby принадлежат к наиболее популярным динамическим языкам. Их называют динамическими потому, что написанные на них программы могут изменять свою структуру в процессе исполнения. Более того, особенностью таких языков является динамический контроль типов данных, который представляет собой процесс классификации включенных в программу переменных в зависимости от содержащихся в них типов данных (строка, целое число, число с плавающей запятой и т. д.). Многие популярные статические языки, например Java, Cи/C++ и C#, поддерживают строго определенные типы данных. Их сторонники утверждают, что это обеспечивает наличие четких правил, полезных для выявления ошибок.

Динамические языки производят проверку типов данных в процессе исполнения программы, а статические - на этапе компилирования. Различие между двумя категориями языков заключается в том, что им требуется разное количество времени для обнаружения ошибок. Если проверка происходит в процессе компилирования, то во время исполнения программы не возникнет ошибок, вызванных несоответствием типов данных. Если же проверка откладывается до момента исполнения программы, то разработчик должен предусмотреть механизм обработки неожиданных ошибок.

Но хотя использование в статических языках строго определенных типов данных позволяет компиляторам и интерпретаторам выявлять больше ошибок на ранних этапах разработки, прежде чем они станут причиной сбоев, сторонники динамических языков утверждают, что менее жесткая типизация данных дает возможность создавать более компактные и простые программы.

"Я думаю, что динамические языки действительно представляют новое крупное явление в написании приложений", - считает Джон Лем, главный консультант и партнер компании ObjectSharp Consulting.

Гонка

Вместо того чтобы объявить войну этим языкам, такие производители платформ, как Sun Microsystems и Microsoft, соревнуются в реализации наиболее полной их поддержки на своих платформах. Sun стремится обеспечить поддержку динамических языков виртуальной машиной Java (Java Virtual Machine, JVM), а Microsoft - в среде CLR. По мнению наблюдателей, тот, кто первым добьется успеха, завоюет сердца программистов, которым необходимы более эффективные способы работы.

Sun и Microsoft способны предложить стабильную безопасную платформу, на которой смогут работать динамические языки и, возможно, вспомогательные инструменты для тестирования, отладки и компилирования. Хотя сегодня таких инструментов в арсенале производителей нет, у них, во всяком случае, имеются их отдельные компоненты. Программисты считают, что сообществу разработчиков открытого ПО потребуется длительное время на создание таких элементов.

Корпорация Sun предпринимает различные меры для расширения поддержки динамических языков. Например, обеспечивает их поддержку на платформе Java и упрощает разработчикам написание программ на динамических языках с использованием своей интегрированной среды разработки NetBeans в рамках проекта, носящего название Coyote.

Грэхем Гамильтон, вице-президент Sun и один из членов команды разработчиков платформы Sun, сообщил, что его компания реализует поддержку JavaScript в Java Standard Edition 6, а в Java SE 7, вероятно, расширит поддержку динамических языков: "JavaScript - прекрасный язык, и он действительно очень широко распространен. Масса людей овладела им главным образом потому, что он используется в браузерах".

Между прочим, по словам Грэхема Гамильтона, Sun вносит изменения и в JVM, чтобы в будущем она могла использовать новые языки.

"Динамический контроль типов данных масштабируется только до определенного предела". - Эндерс Хейлсберг

Джилад Браха, компьютерный теолог из Sun, также рассказал, что компания расширяет поддержку динамических языков не только для того, чтобы удовлетворить спрос со стороны пользователей, но и чтобы способствовать расширению сообщества разработчиков, использующих платформу Java. Он отметил, что Sun в настоящее время предлагает поддержку некоторых динамических языков на платформе Java, в том числе таких, как Jython, Kawa, Groovy и ECMAScript.

Как заявил Джилад Браха, Sun твердо намерена обеспечить расширенную поддержку динамических языков, добавив байт-код под названием invokedynamic и "горячую" замену (hot-swapping), предоставляющую возможность изменять код программы на лету. Оба этих направления являются элементами Java Specification Request 292 - документа, призванного обеспечить работу языков сценариев на JVM как ее собственных.

Более того, директор по Web-технологиям корпорации Sun Тим Брей в своем недавнем блоге похвалил Ruby, назвав этот язык неотразимо привлекательным для программистов, знакомых с Perl и Java.

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

Кроме того, Брюс Снайдер считает, что не всем и не для любых проектов нужен компилирующий язык.

Некоторые утверждают, что Java значительно выиграет от поддержки динамических языков. Марк Флери, основатель компании JBoss, ставшей теперь подразделением Red Hat, подтвердил: "Сценарии всегда были важной частью программирования. Java - это случай острой зависти по отношению к Ruby, которая улетучится в тот момент, когда Java приобретет черты динамической системы".

Инициатива Microsoft

Что касается лагеря .Net, то Microsoft тем временем 31 июля - 2 августа, провела в своем кампусе симпозиум Lang.Net, значительная часть которого была посвящена расширению поддержки динамических языков на платформе корпорации.

И действительно, Джим Хьюгенин сообщил, что Microsoft работает над тем, чтобы включить поддержку динамических языков поверх CLR на различных уровнях и фазах: "Мы усиленно пытаемся вместо создания спецификации представить библиотеку динамического языка и руководство по его использованию". Он также добавил, что имеющийся в Microsoft опыт работы с IronPython показывает пример того, как следует реализовывать другие динамические языки на платформе .Net.

Кроме того, как считает Джим Хьюгенин, если Microsoft удастся дополнить этот набор библиотеками для Ruby, Perl и Python, программисты смогут пользоваться совместимыми языками и выбирать тот из них, который лучше всего подходит для конкретной работы. "Я думаю, что действительно происходит такая демократизация программирования", - заявил он. И подчеркнул, что динамические языки придадут новый импульс демократизации программирования, которая началась с появлением Microsoft Visual Basic.

Определения для динамических языков

Динамические языки сегодня в моде. Вот наиболее известные из них.

- JavaScript. Динамический язык сценариев, разработанный в Netscape и используемый преимущественно в Web-сайтах и Web-приложениях. JavaScript представляет собой ключевой компонент технологии AJAX (Asynchronous JavaScript and XML).

- Perl. Динамический процедурный язык программирования, основанный на языке Cи. Он применяется для решения самых разнообразных задач, в том числе для системного администрирования, создания Web-приложений, программирования сетей, разработки ГИП и многого другого.

- PHP. Первоначально появился в качестве небольшого набора скриптов Perl и представляет собой язык сценариев для создания динамических Web-страниц. Используется преимущественно в серверных приложениях.

- Python. Динамический язык программирования, в котором упор делается на возможности разработчика, а не компьютера. Python применяется в сервере приложений Zope и в системах обмена файлами Mnet и BitTorrent. Кроме того, он широко используется в Google.

- Ruby. Сочетает синтаксис в духе Perl и объектно-ориентированные черты, напоминающие Smalltalk. Некоторые особенности роднят его с Python и другими языками. На основе Ruby создана популярная среда разработки Web-приложений Ruby on Rails.

 

- Другие динамические языки. Eiffel, Erlang, Lisp, Microsoft Windows PowerShell, Prolog, Smalltalk, TCL и VBScript.

А пока Microsoft ведет на своем портале для разработчиков CodePlex проект по созданию компилятора языка PHP для .Net Framework. Проект носит имя Phalanger и разрабатывается на условиях Microsoft Shared Source License. Руководители корпорации заявляют, что его главная цель - обеспечить полную функциональность существующих скриптов PHP при работе с .Net без каких-либо модификаций.

"JavaScript является прекрасным и одним из наиболее распространенных языков". - Грэхем Гамильтон

Предпринимаются и другие попытки использования динамических языков в рамках .Net. Одна из них - это проект Квинслендского технологического университета из Австралии под названием Gardens Point Ruby.Net Compiler. Его целью является разработка компилятора Ruby для использования с CLR. Другая попытка - это RubyCLR Джона Лема, т.е. создание моста между языком Ruby и CLR.

Помогает закон Мура

Так чем же вызвана вся эта шумиха вокруг динамических языков? Джон Лем полагает, что их развитию способствуют высокая производительность процессоров и закон Мура. Считается, что написанные на этих языках программы работают медленно. Но, как утверждает Джон Лем, увеличение скорости процессоров устраняет эту проблему.

Вице-президент компании Novell Мигель де Икаса отметил, что более быстрые компьютеры с более производительными процессорами и большой оперативной памятью делают динамические языки пригодными для решения задач, которые прежде были им не под силу: "Я считаю, что динамические языки всегда занимали важное место в комплекте разработчика и таковыми и останутся". Помимо всего прочего Мигель де Икаса является учредителем проекта Mono, цель которого - создание варианта .Net с открытым исходным кодом. "Perl, Ruby, Python, Visual Basic, а в свое время даже TCL (Tool Command Language) всегда имели ярых приверженцев", - подчеркнул он.

Между тем, как утверждает архитектор ПО Microsoft и отец языка C# Эндерс Хейлсберг, дни императивного программирования, когда компьютеру выдаются инструкции, сочтены. Оно должно уступить место декларативному программированию, предполагающему описание результата, а не способа его получения. Такой стиль программирования особенно эффективен, если разработчикам необходимо использовать преимущества многоядерных процессоров.

По словам Эндерса Хейлсберга, в Microsoft разрабатывается внутренний проект под названием PLinq, который представляет собой параллельную реализацию технологии языка LINQ (Language Integrated Query) ее же разработки. LINQ позволяет создавать единые запросы к объектам, базам данных и данным на языке XML. И хотя PLinq дает возможность писать код точно так же, он предназначается для многопроцессорных систем. Запросы расщепляются и выполняются на нескольких процессорах.

При этом, как считает Эндерс Хейлсберг, несмотря на то что динамические языки обладают большим потенциалом, им не хватает масштабируемости: "Динамический контроль типов данных масштабируется только до определенного предела. Если вы работаете над действительно крупным проектом, осуществлять такой контроль проблематично".

Джон Лем в свою очередь заявил, что пока слишком рано делать выводы о масштабируемости динамических языков: "У нас просто нет достаточного опыта создания крупных систем с их помощью".

Инженер из компании Google Седрик Бест сформулировал свое мнение так: "Динамические языки страдают от некоторых внутренних ограничений, которые делают их непригодными для создания "большого ПО". Я считают, что они, безусловно, набирают вес, но никогда не заменят такие "корпоративные" языки, как Java, C# или C++. Тем не менее некоторые их особенности постепенно просачиваются в "корпоративные" языки, что не может не радовать".

Скридхар Йенгар, известный инженер из корпорации IBM, ставит ряд дополнительных вопросов относительно широкомасштабного развертывания приложений, написанных на динамических языках. "Одна из проблем, связанных с динамическими языками, заключается в том, как их проверить и как убедиться, что ваше приложение надежно работает, - заметил он. - Все эти проверки довольно трудно произвести применительно к статическим языкам. И во много раз сложнее, когда речь идет о динамических".