`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Языки Java-платформы. Прагматичный период

Статья опубликована в №43 (753) от 30 ноября

+77
голосов

О какой бы прикладной междисциплинарной области ИТ ни шла речь, изучения и использования платформы Java не избежать.

Java – всепроникающая технологическая основа систем сверхширокого диапазона – от унылой, но категорически необходимой прагматики страховых компаний до возвышенно-научных сверхпроизводительных вычислений. Именно поэтому любые, даже небольшие колебания в Java-мире становятся причиной активной реакции в самых разных цехах ИТ-сообщества. К слову, междисциплинарный и всепроникающий характер платформы Java проявляется в изобилии печатных периодических профессиональных Java-изданий, которых, например, в пресловутой стране «где много диких обезьян», Бразилии, порядка десятка (только тех, которые нашел автор статьи). Ну что же, раз у нас диких обезьян мало, придется обойтись двумя полосами этого текста.

Буквально в двух словах – мы будем говорить о Java и как об экосистеме (или сверхинфраструктуре), и как об основном выразительном средстве главного создателя новых ценностей в этой экосистеме (программиста) – о языке. Фундаментальное изменение ИТ-ландшафта (слияние корпораций Oracle и Sun) стало настоящим потрясением экосистемы Java, где одной из главных ценностей является стабильность. Слишком уж велика эта экосистема (Java – действительно целый мир, выходить за пределы которого практически ни в одном реальном случае у серьезного разработчика нет внятно объяснимой потребности). Теперь, когда шум и пыль от вулканического процесса слияния улеглись, можно позволить себе спокойно рассмотреть языковый Java-ландшафт и его интересные детали. Почему именно языковый? Потому что никаких тектонических изменений в фундаментальной части Java-экосистемы, слава здравому смыслу, не предвидится. Никто на это не решится. Так что и виртуальная машина, и сопутствующий ей технологический инструментарий, и необъятные библиотеки и фреймворки, и, наконец, высокоуровневый инструментальный набор – все это остается областями надежных инвестиций. Эволюционное спокойное развитие в них гарантируется самым надежным – вовсе не комитетами и сообществами, а бизнес-интересами Oracle (кто может усомниться в умении Oracle долго и успешно играть на корпоративном поле?). Термоядерные гигатонны прекрасного повторно используемого кода никуда не денутся, и инженерный подход к проектированию ПО, огромной заслугой в становлении которого мы обязаны именно экосистеме Java (да, в ней, как и в инженерии, принято сначала искать готовые реализации нужного, а не начинать работу «с полного нуля»), останется работающим инженерным подходом. Но программисты (и инженеры) – не только высококвалифицированные ремесленники, им еще не чуждо и чувство прекрасного, проявляющееся в том неформальном, что принято называть «изяществом конструкций» (в частности, кода). Собственно говоря, этим стремлением к изяществу во многом и объясняется резкий рост интереса к альтернативным в экосистеме Java языкам в этот период изменений. А что рост интереса есть – можно не сомневаться, он ярко проявляется в активности интернациональных сетевых Java-сообществ, например Open Source проектов, и в переводе больших разработок с серьезной предысторией промышленных применений в класс Open Source. Более того, это уже не первый всплеск интереса к альтернативным языкам для Java-платформы, и у него есть свои специфические четкие черты.

Первое, что бросается в глаза, – новая волна интереса к альтернативным языкам отличается завидной прагматичностью. В Java-экосистеме уже есть самая разная языковая экзотика – от собственного удачного Lisp-аналога (Clojure) и нескольких Haskell-подобных разработок с отложенными вычислениями (интересующимся рекомендую обратить внимание на сочетание языка CAL и фреймворка Open Quark с великолепной инструментальной поддержкой, openquark.org) до реализаций идей аспектно-ориентированного и основанного на модели взаимодействующих «актеров» программирования. При этом практически все популярные за пределами Java-экосистемы языки также реализованы в самом широком диапазоне – от уникального во всех смыслах Forth до также противоположного ему во всех смыслах Ada. Недавнее минимальное расширение системы команд виртуальной машины Java поддержкой языков с динамической типизацией существенно улучшило реализации чуть ли не всего мыслимого «скриптового» и модного в период популярности гибкой методологии разработки ПО (agile development). Но вот что характерно – подавляющее большинство что экзотических языков проектов, что адаптаций сторонних языков для Java-платформы – дела, по сути, давно минувших дней. Вокруг каких-то реализаций образовались серьезные сообщества (это касается Clojure, например), какие-то уходят в небытие, какие-то просто существуют. Период экзотики и адаптаций, похоже, закончился. Реально полезные и интересные конструкции и даже целые концептуальные системы вполне реализуемы в соответствии с инженерным подходом, принятым в Java-мире, – на уровне повтор-но используемых компонентов. Языковые же инструменты... с их эволюцией становятся все интереснее и интереснее.

В какой-то мере переломным проектом (это домысел автора, но не спешите его критиковать) в истории развития языков для Java-платформы стала система Scala. Прекрасный, амбициозный и красивый в реализации проект Scala – пожалуй, одно из самых ярких событий в «языкостроении» в последнее время (а вот это уже далеко не только мнение автора). И все же, все же. Scala – очень большой язык. С исключительными выразительными возможностями, с активной поддержкой чуть ли не всех реально работающих парадигм программирования (объектно-ориентированной, функциональной и «актерской»), с фундаментальной возможностью расширения и построения ориентированных на конкретные прикладные области «над-языков», с изящным синтаксисом и четкой семантикой. Но очень большой. И для слишком многих программистов – сложный (в большинстве случаев, правда, признающие его сложность программисты не столько критикуют Scala, сколько сетуют на нехватку времени на его освоение). Одним из проявлений сложности Scala был довольно продолжительный период развития инструментальных средств. Правда, его уже можно считать пройденным этапом – сегодня поддержку Scala в той или иной степени совершенства обеспечивают де-факто стандартные в Java-мире интегрированные среды разработки (Eclipse, IntelliJ IDEA, NetBeans). Сложность Scala – вопрос, безусловно, ответ на который в какой-то мере персональный (и для очень многих не являющаяся препятствием), но и она сыграла свою важную роль. Не готовые сражаться с ней в реальных проектах программисты хотят «почти того же, но малой кровью». Вот этот мотив, пожалуй, можно назвать движущей силой новой волны языков для Java-платформы. Автору одновременно нравятся и Scala, и этот прагматичный мотив, и языковые разработки «новой волны интереса» (которые на самом деле совсем не новые, нов интерес к ним), да и старый добрый язык Java, приятных улучшений которого мы дождемся в июле следующего года, с выходом Java 7. И особенно нравится, что в Java-мире находится место для всего этого.

Для короткого примера уделим буквально несколько слов яркому представителю «новой волны интереса» – языку Gosu. В нем любопытно многое. И даже если вы не напишете ни строчки кода на нем, советую к нему присмотреться. В первую очередь к мотивации разработчиков. Тем более что тайны из нее они не делают. Gosu – язык не новый, ему почти восемь лет, но в публичный доступ он попал буквально на днях. За длительную историю корпоративной разработки язык «дорос» до пригодности к практическому применению при разработке ПО для страховых компаний. Ключевые задачи, которые ставили перед собой разработчики, – сохранение «знакомости» синтаксиса Java с добавлением разумного количества «синтаксического сахара», реализация необходимых заимствований из функционального программирования (и наконец-то кто-то переименовал совершенно нелепое в императивной семантике «замыкание», closure, во внятный «блок»), и в заключение главное – создание развитой системы типов в языке со статической типизацией. В традиционном Java все типы (кроме базовых, конечно) являются потомками единственного java.lang.Class. И если программисту требуются возможности метапрограммирования, например, или создания специфической иерархии классов, за пределы возможностей java.lang.Class в Java ему не выйти. В языках с динамической типизацией этой проблемы нет, но в них есть масса других серьезных проблем. Разработчики Gosu создали изящную и простую архитектуру, объединяющую достоинства динамических и статических языков. В ее основе – открытый программисту механизм загрузки настраиваемых базовых типов, позволяющий потенциально реализовать даже динамическую типизацию, не выходя за пределы языка (то есть в фундаментально статически типизованном языке – средствами самого языка). В терминах Gosu этот механизм называется «инжекцией типов», и он, очевидно, позволяет сохранить возможность контроля за типами на этапе компиляции. При этом Gosu позволяет во время исполнения осуществлять контроль за параметризованными типами (так называемые «овеществленные параметризованные типы», reified generics), и вот этой возможности нет даже в Scala, где, казалось бы, есть все. При этом Gosu – язык на удивление похожий на малословный Java без всяческих «удивляющих» неожиданностей синтаксиса.

На самом деле, даже если читатель еще не догадался, речь в статье шла вовсе не о «новом наилучшем языке для Java-платформы». Это было бы просто смешно. Хороших языков в мире Java много (достаточно упомянуть молодой Fantom, кроме своих достоинств еще и прокладывающий мостик между мирами Java и .NET). Очень трудно представить себе, что Java как язык «сбросит с трона» молодая разработка. Но. То действительно ценное, что появляется в новых языках для платформы, вполне может «перекочевать» в официальный ее язык. И это – один из важнейших элементов эволюционного развития одной из самых больших и красивых программных систем. Ну а прагматичность очередного витка развития языков – хорошая почва для продолжения традиций стабильности.

Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365

+77
голосов

Напечатать Отправить другу

Читайте также

Отличная статья. Спасибо за наводку, в свободное время праздников почитаю о Gosu. С наступающим!

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT