вторник, 25 января 2011 г.

Немного мыслей про будущее платформы Java

Навеяно обсуждениями тем для следующего подкаста Radio-T: http://radio-t.com/temi_dlja_vipuskov/temy-dlya-224/

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


Итак.

Java изначально позиционировалась как платформенно-независимый язык программирования. Подчеркну, не платформа, а именно кроссплатформенный язык.  Такой, чтоб  write once, run anywhere. Т.е. несмотря на то, что архитектура стековой машины JVM и структура байткода позволяла и позволяет портировать другие языки под JVM, сановцы никогда не делали на это акцент. Акцент всегда был на том, что есть JVM, которая работает везде, есть байт-код, который не зависит от архитектуры, нет указателей и прочего прямого доступа к памяти, что круто. А потому пишите на Java (языке) и будет вам счастье.

Сравним это с позиционированием .NET, C# и позицию Майкрософта здесь. Еще когда я учил C# 2.0 по книжке Эндрю Троелсена лет так 5 назад (это было до моего  перехода на Java ;)),  там напротив, было везде написано, что .NET  и его компоненты, в частности среда CLR - это среда для хостинга промежуточного управляемого кода. C#, VB#, managed C++ (который не особо выстрелил, но эксперимент был проведен), и всякие языки портированные под .NET, типа IronPython и иже с ними, а так же новые языки, развиваемые Microsoft Research, типа F#.

При этом, например, Майкрофост кроме того, что быстро развивает "основной" язык, С#, еще и  активно вкладывается а разработку других языков под дотнет. Например, F#, который перенял очень многие концепции из Haskell-а. Код на F# буквально очень похож на код на хаскелле, уверяю!  MSSQL сервер так же умеет хостить CLR и поддерживает, насколько я знаю, написание хранимых процедур на нем.

А теперь вернемся к миру Java. Итак -Java, как платформа и как язык, развивается медленно под сравнению с C#  и .NET, это очевидно. Возможно, это правильно, так как миру Enterprise-а (банки, биржи и т.п.)  важнее стабильность, а не быстрое развитие.

Но тут момент такой. Java как язык, именно как язык, а не платформа, весьма скуден и ограничен. Да, он довольно таки строен, прост, компактен и все такое (я сам джавист), но ограничен, не поддерживает многие концепции (полный список оставляю на пост-обсуждение ;)), не предоставляет языковой поддержки для замыканий, лямбд, работы с коллекциями, регулярными выражениями  и вообще заморожен из-за того, что на него завязано слишком много. Все изменения проходят через JCP, который, как известно, чертовски нетороплив.

С другой стороны, есть Groovy, Scala, для желающих чего-то более необычного - Closure. При этом эти языки написаны и отлаживаются либо группами комьюнити (например, Groovy разрабатывается SpringSource комьюнити), либо на гранты (как Scala, получившая недавно крупный грант Евросоюза). Со стороны Sun/Oracle поддержки тут я не вижу, ну кроме разве что введения инструкции InvokeDynamic в 7 Java, но этого мало. Мало и слишком медленно.

В общем, на мой взгляд, Java имеет огромный шанс еще очень долго держать лидерство как платформа, если вложится в развитие и, главное, продвижение (!) основных альтернативных языков под JVM. Это то, что рекламировали маркетологи .NET как один из мощных плюсов платформы с самого начала.

"Пишите на вашем любимом языке, будь то старая добрая Java,  лаконичный Groovy с его языковым сахаром и метапрограммированием,  изощренная и немного академичная Scala, или Closure (тут без эпитетов, ибо не трогал, не знаю),  - и запускаете на стандартной, надежной, проверенной (миллион эпитетов)  платформе Java".

Как вам?


7 комментариев:

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

    К Джава как языку я бы использовал эпитет "аскетичен". Нужно ли прикручивать к нему всевозможные дополнительные конструкции, есть хороший вариант, что нет. Язык потихоньку обрастает всяческим syntactic sugar, а Scala, например, позволяет написать некоторые вещи, используя другие конструкции.

    Сановцы поддерживали, если помню, jython и jruby. Сейчас что поддерживается не знаю. Надо ли активнее поддерживать новые языки? Для чего? Это все-таки не мейнстрим - смешение нескольких языков.

    ОтветитьУдалить
  2. Ну почему бы и не поддерживать? Тот же груви был разработан специально как возможности питона / руби + близкий к Java синтаксис. Скала - это OCaml + еще немного функциональщины и возможностей параллельного программирования из Erlang-a + объектная модель встраиваемая в Java.

    Т.е. я все таки вижу будущее за такими языками. Насколько я знаю, по крайней мере Scala уже начинает применяться экспериментально в серверных бекэндах. Тот же Twitter, The Guardian..и другие.

    ОтветитьУдалить
  3. Само хорошо вырастает ) меньше возникает годзиллических спецификаций типа ejb 2.0 и связанных с ними блюпринтс )

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

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

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

    ОтветитьУдалить
  4. Миша, платформа Java и язык разрабатываются медленно не потому что там сидит куча ленивых идиотов, кот. просто отрабатывают свои баксы и работают по плану (как это делается в России...). На самом деле причин нескольно. В основном это многообразие платформ на кот. работает Java. Под все платформы необходимо произвести сборку, необходимо провести все run test'ы и отследить целостность покрытия. Обнаруженные баги на каждой платформе пофиксить. В Java куча пакеджэй кот. непосредственно зависят от нативной платформы, на кот. всё это работает и т.д.
    Scala, Groovy, JRuby и пр. развиваются гораздо быстрее потому что - они "всего лишь навсего" работают поверх сущетсвующей jvm и они не заботяться о том как работает java на той или иной платформе. они попросту нацелены на синтаксис и языковые конструкции и не обременены интеграцией с конкретной платформой как сама java. как всегда было, есть и будет - проще что-либо сказать нежели сделать.

    ОтветитьУдалить
  5. Алекс, ты совершенно не понял суть моего комментария...

    Я ничуть не критиковал тех, кто разрабатывает JVM / JRE / JDK. И я отлично понимаю, насколько сложно заставлять все это работать на всех существующих платформах.

    Я говорю про другое. Мне не очень ясно, почему так мало саппорта по стороны Sun/ Oracle тем командам энтузиастов, в основном, кто пишет Groovy / Scala или портирует другие языки на JVM. Почему? Если активно поддерживать разработку Jython, например - это хорошая возможность приманить на платформу Java питоноводов, разве нет?

    ОтветитьУдалить
  6. Я имел виду под "Алекс" - "apupeikis", разумеется.

    ОтветитьУдалить
  7. вот кстати набрел http://tembrel.blogspot.com/2010/12/resigned-from-ec.html

    "But here's a funny thing: To my own surprise, I'm coming to believe something heretical, that it actually is not all that crucial for Java to move forward, at least not to the constituency I felt that I represented on the EC, the tens of thousands of Java developers who don't work for a big company with an Oracle contract"

    ОтветитьУдалить