Журнал «Компьютерра» № 8 от 27 февраля 2007 года | страница 43
Одной из целей .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 и прибежищем немногих «понимающих». Впрочем, расстояние от этого «мини-модернизма» до мэйнстрима не так уж велико, а компонентный подход накладывает меньше ограничений на взаимодействие разноязыковых модулей; так что «продвинутые» языки может ждать и более счастливая судьба. Остается пожелать им удачи.