Jython vs Groovy vs JRuby vs …

    Господа, внезапно — сабж!? Вопрос вызван тем, что какое-то довольно продолжительное время я был вдалеке от Java-технологий, писал на C++ и Python (и продолжаю писать), но один из курсов университета (конкретнее — component based software development) будет требовать либо одного из JVM-based языков (Java отпадает за неинтересностью) либо .NET языков (отпадает по определению так как Windows у меня нет и не будет). Немного изучив вопрос, пришел к выводу что:
    1. Преимущества в пользу Jython — по большому счету, это Python, который я хорошо знаю и люблю, с возможностью использовать Java классы. Но, если верить слухам, сейчас он почти не развивается. Хотя опять же, кому верить-то?
    2. Преимущества Groovy — новый язык, активно развивающийся, комбинирующий в себе достоинства многих языков и парадигм (тот же Python и Ruby в них входят). Недостатки — новый язык, активно развивающийся ;-) Сравнительно мало документации и кода по сравнению с Python
    3. Преимущества JRuby… я что-то весь в затруднениях, но все о нем говорят. Полная совместимость с Ruby, да. Но Руби я все равно не знаю, так что учить с нуля, так же как и Groovy.
    А какие еще мнения есть? Я пока еще не совсем понял, что именно мне нужно для этого курса (хотя ясно, что это что-то должно поддерживать хорошую умную компонентную модель для работы в распределенных средах), но язык, в конце концов, вторичен — хочется чего-то интересного, нового и необычного (не сказать “странного”). Кто что думает? Вопрос довольно практический, потому что 18 января надо начинать писать курсовой проект на этом языке, который я выберу — а его надо еще и изучить хотя бы минимально до этого момента ;-)

    Пока начал играться с Groovy и он мне, в принципе, нравится — но возможно, я упускаю что-то существенное, ограничивая себя этим языком?

    Всем хабралюдям заранее спасибо за мнения!
    Поделиться публикацией

    Похожие публикации

    Комментарии 77

      +2
      >Java отпадает за неинтересностью
      >за неинтересностью
      а вот с этого места пожалуйста поподробнее
        0
        Java я знаю и знаю хорошо (по крайней мере, знал хорошо два года назад, вряд ли что-то глобально изменилось с тех пор). Хочется чего-то нового и удивительного.
        –2
        А я считаю все это (Jython, JRuby, Jambi) костылями, на которые в серьезном приложении пологаться нельзя ибо не понятно будут они существовать завтра или нет. Исключение наверное только Groovy.
        [offtop]А вообще в самой java очень много интересных и незнакомых вещей, я вас уверяю ): [/offtop]
          0
          Да много конечно, кто б спорил, но после Python с его syntax sugar на обычную Java смотреть как-то не хочется ;-)

          А вот насчет вашего мнения — мы его примем во внимание! А почему Groovy отдельно стоит?
            0
            наверное потому, что за него всей душой болеют такие дяди, как Oracle
              0
              Не знал. Это причина, да ;)
          +1
          Можете еще посмотреть в сторону Scala (введение на Хабре) — тоже новый, активно развивающийся язык, но немного в другом направлении от того же Groovy.
            0
            Scala да, про нее я забыл.
              +2
              Еще забыли про Clojure. Недавно решил перейти на JVM с одного из эзотерических ЯП (эдакий язык-платформа) и Clojure пока фаворит.
                0
                Да, еще один. Надо будет посмотреть обязательно.
                  0
                  Тоже рекомендую Clojure. Очень емкий, выразительный язык с мощью макросов Лиспа.
                0
                Я тоже за Scala, с Clojure на втором месте.
              0
              Пользуясь случаем — кто-нибудь встречал мануал по написанию ЯП на основе JVM? А то проблема встала, вторые сутки мучаю гугл, а результат, мягко говоря, скромный.
                0
                вам нужен прямо язык с нуля? В чём проблема посмотреть исходники существующих?
                  +1
                  нечто вроде, да.

                  Проблема, как и в любых исходниках — это не проектная документация. Куски понять можно, но причины, по которым они там появились — не всегда.
                • НЛО прилетело и опубликовало эту надпись здесь
                    0
                      0
                      спасибо, полистаю
                    +1
                    я за Groovy. Да и учить его можно и не с нуля. Плюс у него есть разные полезные фреймворки типа Grails/Griffon и GPars/Groovy++
                      0
                      Читаю комментарии и тоже постепенно склоняюсь к этой мысли. И вообще он какой-то клёвый — конструкции типа:
                      theMap = [ key : { it -> println(it) } ]
                      theMap.key(10)
                      меня начинают нереально радовать ;)
                        0
                        а вы ещё mrhaki.blogspot.com/search/label/Groovy%3AGoodness почитайте и все сомнения окончательно отпадут ;)
                          0
                          Я сейчас вот это читаю:

                          www.asert.com.au/pubs/Groovy/Groovy.pdf

                          Довольно толково, кратко и сжато написано, что такое Груви, чем он лучше Джавы и с чем его едят. За ссылку спасибо, обязательно прочитаю.
                            0
                            >www.asert.com.au/pubs/Groovy/Groovy.pdf
                            о, эту презентацию я читал) хорошо написано

                            >За ссылку спасибо, обязательно прочитаю.
                            там клёвых конструкций много-много
                      0
                      Я бы выбрал Groovy
                        –7
                        не хочешь изучить новый язык? ты не программист!
                          +2
                          а еще и не филолог
                          0
                          Мне нравится Scala наличием функциональных возможностей с одной стороны и статической типизацией с другой.

                          Краткий обзор языка можно посмотреть здесь www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf
                            0
                            Скала всем хороша, один минус у нее — чуть больше матана, чем в руби, например; а так же слегка наметилась тенденция «мы захардкодим это в язык». Посмотрим, что дальше будет
                            0
                            Хотите нового и необычного — попробуйте Clojure. Но по-моему лучше не рисковать и писать на старой доброй Java.
                              0
                              Я же не ошибаюсь, когда думаю что Clojure это диалект Лиспа? Если так, то это не для меня — мои многочисленные попытки разобраться с Лиспом закончились грандиозным фейлом (по-моему, у меня просто мозги не хотят функционально работать)
                                0
                                Clojure — это немного другое… Не ощущения плотной стены скобок и списков, как в классических лиспах. Плюс много вкусностей типа Software Transactional Memory, Persistent Data Structures, и т. д.
                                Реально интересно, даже после руби.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                а вы видели Groovy?
                                  0
                                  А где разница? Groovy это практически калька с Ruby.
                                    0
                                    по синтаксическим возможностям groovy действительно может всё, что может ruby и даже, пожалуй, побольше. Но как минимум там нет описанных diggy минусов типа несобираемых/заброшенных библиотек, да и с комьюнити там всё хорошо. Ну и систаксис всё же принципиально ближе к java
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        хм, например?
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            отвечу выборочно:

                                            >do end лучше, чем {}
                                            очень субьективно

                                            >метод без аргументов нельзя писать без (), сюда же — нету "?" в конце методов
                                            можно, только это будет другой метод уже.

                                            >сюда же — нету "?" в конце методов возвращающих логическое значение и "!"
                                            не очень понял, честно говоря. в groovy? — это elvis и safe navigation+можно переопределить true/false для любого класса

                                            >оператор new, вместо «православного» вызова метода .new
                                            groovy.codehaus.org/Newify+transformation

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

                                            >более формальный стиль кодирования, нельзя написать puts 'olala' if x > y
                                            ну вот не факт, что это лучше обычного if

                                            итого различия присутствуют, однако принципиальных плюсов ruby я пока не вижу
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          Сахар то для дебилов?:)
                                          Тогда большинство программистов дебилы, т.к. вместо
                                          сhar *a = "asdf";
                                          char *b = "fdsa";
                                          char *res = (char*)malloc(strlen(a) + strlen(b)+1);
                                          strcpy(res, a);
                                          strcat(res, b);

                                          пишут банальное «asdf» + «fdsa»:)
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          Ну, с мэйнстримовыми библиотеками в Ruby все отлично:) И комьюнити оочень большое, в 2005 году, с появлением Rails, много Java программистов перешли на Ruby. Вон, даже Фаулер:)
                                          А вот русское комьюнити, да, очень слабо развито…

                                          >>по синтаксическим возможностям groovy действительно может всё, что может ruby и даже, пожалуй, побольше.
                                          Про больше интересно, не холивара ради:) Где-то год назад смотрел Groovy, ничего нового не увидел, осталось впечатление, что это просто калька с Ruby, ну, правда заточенная под JVM. Может за это время что-то изменилось.
                                            0
                                            >Про больше интересно, не холивара ради:)

                                            например, AST-трансформации, типа @Singleton/Immutable/Newify/Lazy, разве они есть в ruby? Навскидку могу также припомнить Grape и Power Assert
                                              0
                                              AST трансформации есть. Grape это пакеты для библиотек? rubygems:) А насчет Power Asserts — куча DSL для тестирования, на любой вкус, RSpec, Shoulda, Cucumber и т.д.
                                              Да, похоже в Groovy ничего нового по сравнению с Ruby нет.
                                              Ну, кроме хорошей интегрированности в JVM. Так что Groovy — выбор джавистов:)
                                                0
                                                А можно пример AST для того же singleton или lazy?
                                                  0
                                                  Сейчас посмотрел как @Singleton/Immutable/Newify/Lazy реализованны в Groovy. Похоже это не прямая манипуляция AST, а просто рефлекшены. Ну и @Singleton и т.п. — это просто именнованные рефлекшены. Да, и синглтон, и ленивая инициализация в Ruby есть.
                                                  Про AST я думал что-то по типу этого www.igvita.com/2008/12/11/ruby-ast-for-fun-and-profit/
                                                    0
                                                    >Похоже это не прямая манипуляция AST, а просто рефлекшены.

                                                    ээ… а как рефлекшен на этапе компиляции(!) обеспечит Singleton/Immutable?

                                                    >Да, и синглтон, и ленивая инициализация в Ruby есть.

                                                    то были лишь примеры полезных AST-преобразований, поторых в Ruby всё-таки нету.
                                                      0
                                                      >ээ… а как рефлекшен на этапе компиляции(!) обеспечит Singleton/Immutable?
                                                      Вот на этот нюанс внимания не обратил. Ruby не компиллируется.
                                                      В стандартной библиотеке — только синглтон, остальное расширениями. Но всеравно есть:)
                                                    0
                                                    0
                                                    >Grape это пакеты для библиотек? rubygems:)

                                                    не совсем. rubygems — это скорее maven, а главная же фича grape в том, что можно импортить на лету

                                                    >куча DSL для тестирования, на любой вкус, RSpec, Shoulda, Cucumber и т.д.
                                                    в groovy тоже куча фреймворков для тестирования, но и они не являются фичей языка, в отличие от power assert…
                                                      0
                                                      >главная же фича grape в том, что можно импортить на лету
                                                      Не понял, что значит импортить на лету?

                                                      Фича языка — всмысле возможность в ядре интерпретатора? Библиотека не считается фичей?:)
                                                        0
                                                        >Не понял, что значит импортить на лету?

                                                        можно запустить такой код, имея лишь Groovy, и он скачает все нужные модули на лету:
                                                        groovyconsole.appspot.com/view.groovy?id=19003

                                                        >Фича языка — всмысле возможность в ядре интерпретатора? Библиотека не считается фичей?:)
                                                        да. фичей языка не считается. да и потом, какой из ваших DSL умеет в одну строчку делать, например, такое: groovyconsole.appspot.com/edit/44002
                                                          0
                                                          >можно запустить такой код, имея лишь Groovy, и он скачает все нужные модули на лету:
                                                          >groovyconsole.appspot.com/view.groovy?id=19003

                                                          Такое есть:)
                                                          geminstaller.rubyforge.org/

                                                          В одну строчку, всмысле налету массив на переменные разбить?
                                                          Так это еще проще:)
                                                          a, b, c = [1543, 2654, 3432]


                                                          Что-то уже холивар начинается:)
                                                            0
                                                            >geminstaller.rubyforge.org/

                                                            это не то же самое, сами понимаете. тем более в ruby работа с модулями зачастую может быть совсем нетривиальна (если что-то нужно компилять)

                                                            >В одну строчку, всмысле налету массив на переменные разбить?

                                                            да нет же. нажмите внизу кнопочку «Execute script» и поймёте о чём я
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                          –4
                                          Не рассуждайте как красноглазик, есть mono.
                                            0
                                            Ну есть, но зачем мне костыли если есть масса отличных интересных языков и продуктов и для моей платформы?
                                              –5
                                              mono — для вашей платформы
                                                +2
                                                На маке у моно WinForms кривовато отрисовываются(про линукс не уверен), а если использовать GTK то просто кинуть экзешник виндузятникам проблематично.
                                                  –2
                                                  Mono работает на MacOS? Да. GTK# работает? Да. Причина неиспользования .Net выраженная в топике не корректна. Ошибку вы признавать не хотите. Очень плохо.
                                                    +1
                                                    Скажите, а оно красиво там выглядит? Понимаете, это вам не Линупс и не винда, на Маке приложения должны выглядить нативно иначе они нафиг никому не нужны! Теперь вам понятно, почему нельзя использовать .NET на Маке? (ну или по крайней мере нельзя, пока он не научится делать Cocoa интерфейс).
                                                      –3
                                                      Думаю плевать, если речь о сдаче зачёта/экзамена по курсе component based software development. Это раз.
                                                      Что касается именно Cocoa, то стоит наьбрать в гугле mono cocoa прежде чем говорить от отсутствии чего-либо
                                                      +2
                                                      а вы его сами пытались использовать? Нормальная IDE есть? нормальный Debug там есть? WinForms перестали падать рамномно? GTK# уже стало немного нативнее?

                                                      Короче говоря, мы может и рады его использовать, вот только авторы его ще должны пилить и пилить
                                                        0
                                                        Какую ошибку?:) Вы наверно меня с автором топика перепутали.
                                                        –1
                                                        Какая автору разница как работает GTK под Window?
                                                          +1
                                                          автору разницы никакой, вопрос вообще не о том ;-)
                                                  –1
                                                  Ruby — это идеологический чистый Python(не торчит процендурное прошлое), плюс синтаксис значительно слаще, а Groovy — калька с Ruby.
                                                    +1
                                                    «Groovy — калька с Ruby»

                                                    Хахаха) Кто вам это сказал? Groovy — это расширение синтаксиса Java. У них есть общие синтаксические элементы, но не более.
                                                      0
                                                      Ну, во-первых у них на сайте сказано:
                                                      builds upon the strengths of Java but has additional power features inspired by languages like Python, Ruby and Smalltalk

                                                      Во-вторых все синтаксические конструкции практически идентичны с Ruby, правда, с поправкой на Java синтаксис.
                                                        0
                                                        Калька и inspired одно и то же? Тогда Ruby — однозначно калька с Python, Perl или Smalltalk.

                                                        Что за нахер поправка на Java синтаксис, если он лежал в основе и любой Java код является Groovy кодом? Знаете как делали Groovy? Взяли Java&JDK и добавили:
                                                        — динамическая типизация
                                                        — замыкания
                                                        — сахар для коллекций, регулярок, некоторых операторов(switch, for)

                                                        Тоже самое, что говорить Grails — калька с Rails.
                                                          0
                                                          >Тогда Ruby — однозначно калька с Python, Perl или Smalltalk.
                                                          А кто спорит? По сути языки идентичны, просто каждый следующий язык более синтаксический сладкий. Например d Ruby, в отличие от Python, не торчат процедурные корни, а также итераторы удобнее.

                                                          >если он лежал в основе и любой Java код является Groovy кодом?
                                                          Это и имел в виду:)

                                                          >Тоже самое, что говорить Grails — калька с Rails.
                                                          А что, это не так?
                                                            0
                                                            Grails — набор DSL для:
                                                            — JSP(GSP)
                                                            — Spring MVC(Grails Controllers)
                                                            — Hibernate(GORM)
                                                            Все они появились за несколько лет до Rails. Кстати Grails написан на Java — на Groovy пишется только код самого приложения. Так что в архитектурном плане — это совершенно самобытный проект.
                                                              0
                                                              Я имел ввиду библиотеки появились раньше. Grails DSLs появились позже Rails, а Groovy — раньше, если мне память не изменяет.
                                                    0
                                                    Языки веселее учить вместе с фреймворками, посмотрите — может удасться что-то использовать:

                                                    Groovy — Grails
                                                    Scala — Akka
                                                    Clojure — STM/Incanter
                                                      0
                                                      Lift ещё забыли
                                                      0
                                                      Я рекомендую Ruby, как по мне так очень красивый и элегантный язык, намного интереснее Scala и Groovy.

                                                      Но если уже совсем хочется экзотики, то можно посмотреть на Clojure — такой себе LISP под JVM

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

                                                      Самое читаемое