'временное помутнение сознания, когда еще никто не знал, как правильно', и Python/Algol, внесшие стройность и логичность. Есть, конечно, и множество отличий]. Лаконичные и логичные, легко читаемые программы на Питоне способствовали его широчайшему распространению, поскольку это легкий язык интеграции всего (Google и NASA), встраиваемый в крупные пакеты (от программы 3D-моделирования Blender до игры Civilization IV), язык для преподавания (см. в предыдущей статье о MIT) и, естественно, язык для веба. Успех Питона открыл дорогу другим 'стройным скриптам': легкой Lua - во встраиваемые скрипты, и Ruby - во все остальные области. В каковых 'всех областях' вскоре вспыхнула supernova фреймворка для веб-разработки Ruby on Rails. 'Руби на Рельсах' со всеми своими последователями, критиками, отрицателями и фанатами - уже сам совершенно отдельный крупный тренд.

Важно здесь, что культура скриптов ('скриптовая парадигма') подразумевает допустимость и даже обязательность разных 'ухищрений' для удобства программиста. И это именно та 'дырка', через которую в широкие массы пошли необычные идеи. То есть в большой степени это вопрос 'подачи': если функция- как-значение - это не 'новая парадигма с серьезной теоретической базой, своей терминологией и новым синтаксисом', а 'фишечка такая, чтобы удобней' - то элементы функционального подхода в Питоне оказываются вполне естественными и понятными. А поглощение и использование этой 'фишечки', естественно, порождает какие-то вопросы (все-таки идея 'новая'), на которые (сюрприз, сюрприз!) могут дать ответы те самые 'оторванные от жизни теоретики', занимающиеся функциональным программированием (ах, вот как это называется!) уже лет сорок. И вот пожалуйста: замыкания, продолжения, ленивые вычисления - более или менее прижившиеся элементы 'обычных скриптов'.

То же самое - с концепциями 'программа - это данные, изменяемые в любой момент' (здравствуй, Lisp) и 'все в программе суть объекты, обменивающиеся сообщениями' (здравствуй, Smalltalk). Время программиста и его fun - главная ценность; ради этих 'высоких идеалов' можно и идейные столпы пошатать.

Забавно, что в этом стремительном выходе скриптов на передний план главное назначение 'языка сценариев' - написание одноразовых программ сомнительного качества - как-то потерялось. Что породило забавные казусы 'самоопределения' - тем паче, что и другие типично скриптовые свойства (вроде интерпретируемости) многим сегодняшним 'скриптам' несвойственны (Python, как Java, компилируется в байт-код и выполняется на виртуальной машине; виртуальные машины для Perl и Ruby сейчас разрабатываются соответствующими сообществами и находятся в районе 'альфа' и 'бета' версий).

Платформа 200N

Цитата

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

Д. Хеймер Ханссен,

создатель ruby on rails

Очередная 'дырка в заборе' мэйнстрима - как ни странно, Microsoft. Шаткое положении как-бы- лидера - только и успевай крутиться, и Джаву надо переджавить, и с поднимающими голову скриптами совладать, и Гуглу настучать, и Виндов побольше продать - поневоле вынуждает к инновационности и нос-по-ветру. Отсюда - появление во второй версии C# анонимных делегатов (они же - переменные- функции) и связанных с этим элементов функционального программирования; отсюда же - подъязык LINQ, вводящий в C# 3.0 декларативную нотацию, подобную SQL.

Но важнее даже не это, а принципиальная изначальная многоязычность .Net’а и, соответственно, поощряемые и приветствуемые попытки существующие языки на микрософтовскую платформу портировать и новые, невиданные, создать. Эффект симбиоза ново-старых языковых идей и платформы промышленного качества понятен: для платформы выгода в том, что даются новые инструменты программистам и 'импортируется' сообщество соответствующего языка; для самого языка становятся доступными богатые библиотеки .Net’а (особенно актуально для языков с привкусом 'академичности', зачастую страдающих от отсутствия элементарных библиотек для индустриальных задач) и - огромное количество готовых пользователей [Все эти выкладки в большой степени относятся и к платформе Java. Понятно, что изначально платформа была 'одноязычной', но сейчас (не в последнюю очередь - в результате 'гонки платформ' с Microsoft) Sun уделяет много внимания развитию и поддержке других языков на своей платформе].

Одной из целей .Net’а было облегчение интеграции кода на разных языках, а значит, многоязычные проекты на этой платформе более распространены, и теоретически можно основную часть проекта оставить на C#, алгоритмически сложную часть написать на каком-нибудь Haskell.Net или F# (ML-подобный язык), а разные быстрые тесты и служебные задачи, требующие 'быстрого и грязного' кода, решать, к примеру, на IronPython.

Понятно, что чем дальше отстоит портируемый язык от традиционных, тем сложнее его бесшовная интеграция с другими языками платформы. Отсюда - некоторые интересные проекты, которые революционные (для мэйнстрима) идеи скрещивают с естественной объектной моделью и привычным синтаксисом платформ Java/.Net. Таких проектов уже немало: к примеру, для .Net’а - питонообразный Boo и многоконцептуальный Nemerle, совмещающий традиционный ОО-подход с функциональными возможностями и выводом типов в духе ML и синтаксическими макросами вроде Lisp’овых [Из не- Lisp’образных языков Nemerle, кажется, единственный, предоставляющий средства такого уровня]; для Java - объектно-функциональный гибрид Scala и Ruby-подобный Groovy [Это не считая экспериментальных языков, являющихся расширениями-надмножествами C# и Java (C-omega, Pizza/PJ) и использующихся в основном для обкатки идей, которые впоследствии войдут (или не войдут) в основной язык].

О широкой известности и применимости таких языков говорить рано, но кое-какие предположения об их судьбе сделать можно.

Языки рода Boo и Groovy, чьи авторы стоят на позициях 'скриптовых' (в смысле лаконичности программ и богатого набора 'фенечек'), на позицию 'скриптов в рамках платформы' как раз и метят. Их роль - быть 'клеем' между компонентами, инструментом для 'условно одноразовых' программ (тестов для отладки компонентов на 'серьезных' языках) и вообще инструментом для 'гибких' подходов. В этом контексте их будущее видится относительно безоблачным, как и будущее 'портированных' IronPython/Jython, JRuby/RubyCLR.

Nemerle и Scala - это совсем другой коленкор, 'модернизм в миниатюре'. С их 'продвинутыми' идеями связаны те же надежды и проблемы, что некогда были характерны для Haskell, Lisp, Smalltalk - 'вроде и круто, но больно хитро'. Можно предположить, что и судьба 'больно хитрых' языков сложится похожим образом и они станут генераторами идей для C#/Java и прибежищем немногих 'понимающих'. Впрочем, расстояние от этого 'мини-модернизма' до мэйнстрима не так уж велико, а компонентный подход накладывает меньше ограничений на взаимодействие разноязыковых модулей; так что 'продвинутые' языки может ждать и более счастливая судьба. Остается пожелать им удачи.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату