Навеяно обсуждениями тем для следующего подкаста 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".
Как вам?