Навеяно обсуждениями тем для следующего подкаста 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".
Как вам?
Не очень я люблю писать суперглубокомысленные посты, но вот потянуло же. Разовью мысль которая была озвучена в комментариях к подкасту.
Итак.
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".
Как вам?
Джава достаточно давно существует именно как платформа, потому как множество других языков давно и комфортно поселились на ней. Даже с имеющейся поддержкой на уровне JVM.
ОтветитьУдалитьК Джава как языку я бы использовал эпитет "аскетичен". Нужно ли прикручивать к нему всевозможные дополнительные конструкции, есть хороший вариант, что нет. Язык потихоньку обрастает всяческим syntactic sugar, а Scala, например, позволяет написать некоторые вещи, используя другие конструкции.
Сановцы поддерживали, если помню, jython и jruby. Сейчас что поддерживается не знаю. Надо ли активнее поддерживать новые языки? Для чего? Это все-таки не мейнстрим - смешение нескольких языков.
Ну почему бы и не поддерживать? Тот же груви был разработан специально как возможности питона / руби + близкий к Java синтаксис. Скала - это OCaml + еще немного функциональщины и возможностей параллельного программирования из Erlang-a + объектная модель встраиваемая в Java.
ОтветитьУдалитьТ.е. я все таки вижу будущее за такими языками. Насколько я знаю, по крайней мере Scala уже начинает применяться экспериментально в серверных бекэндах. Тот же Twitter, The Guardian..и другие.
Само хорошо вырастает ) меньше возникает годзиллических спецификаций типа ejb 2.0 и связанных с ними блюпринтс )
ОтветитьУдалитьВ рамках языков было бы интересно больше фреймворковых разработок, как в джаве. Которые бы упростили типичные задачи и красиво поддерживались средствам языка. Типа JPA в Java.
И руби начинает применяться ) и питон тоже - traq, например ) и уже много лет. Но тем не менее это не мейнстрим. Хотя границы мейнстрима и расширяются немного благодаря этим языкам.
А будущее за тем, что позволит меньше времени тратить на разработку полезной функциональности и/или делать это более дешевой рабочей силой. Не уверен, что дело именно и в основном в языках - скорее в мощности инфраструктуры вокруг языка.
Миша, платформа Java и язык разрабатываются медленно не потому что там сидит куча ленивых идиотов, кот. просто отрабатывают свои баксы и работают по плану (как это делается в России...). На самом деле причин нескольно. В основном это многообразие платформ на кот. работает Java. Под все платформы необходимо произвести сборку, необходимо провести все run test'ы и отследить целостность покрытия. Обнаруженные баги на каждой платформе пофиксить. В Java куча пакеджэй кот. непосредственно зависят от нативной платформы, на кот. всё это работает и т.д.
ОтветитьУдалитьScala, Groovy, JRuby и пр. развиваются гораздо быстрее потому что - они "всего лишь навсего" работают поверх сущетсвующей jvm и они не заботяться о том как работает java на той или иной платформе. они попросту нацелены на синтаксис и языковые конструкции и не обременены интеграцией с конкретной платформой как сама java. как всегда было, есть и будет - проще что-либо сказать нежели сделать.
Алекс, ты совершенно не понял суть моего комментария...
ОтветитьУдалитьЯ ничуть не критиковал тех, кто разрабатывает JVM / JRE / JDK. И я отлично понимаю, насколько сложно заставлять все это работать на всех существующих платформах.
Я говорю про другое. Мне не очень ясно, почему так мало саппорта по стороны Sun/ Oracle тем командам энтузиастов, в основном, кто пишет Groovy / Scala или портирует другие языки на JVM. Почему? Если активно поддерживать разработку Jython, например - это хорошая возможность приманить на платформу Java питоноводов, разве нет?
Я имел виду под "Алекс" - "apupeikis", разумеется.
ОтветитьУдалитьвот кстати набрел 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"