Python против Groovy против Ruby? (на основе критериев, перечисленных в вопросе)

Учитывая перечисленные ниже критерии, какой из Python, Groovy или Ruby вы бы использовали?

  • Критерии (важность из 10, 10 являются наиболее важными)
  • Богатство доступных API / библиотек (например, математика, построение графиков, работа в сети) (9)
  • Возможность встраивания в настольные (java / C++) приложения (8)
  • Легкость развертывания (8)
  • Возможность взаимодействия с DLL / общими библиотеками (7)
  • Возможность создавать графические интерфейсы (7)
  • Сообщество / Поддержка пользователей (6)
  • Портативность (6)
  • Управление базой данных (3)
  • Язык / семантика (2)

Вы исключаете jRuby и jython? Они действительно мешают обсуждению переносимости и семантики.

Michael Easter 23.12.2009 17:17

Если язык / семантика оценивает только 2, я предполагаю, что можно предложить любой язык.

David Thornley 23.12.2009 20:09

Думаю, вы упустили один критерий: - Знакомство в команде проекта (10)

Greg Hewgill 03.11.2008 04:55

Для небольших проектов добавьте lua в список

Dima Tisnek 15.12.2012 02:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
35
4
35 329
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Я знаю, что этого нет в вашем списке, но хотя бы посмотрите на perl.

  • Богатство API / библиотек для потопления корабля.
  • Работает на большем количестве систем, чем думает большинство людей.
  • Хорошо работает с двоичными библиотеками.
  • Имеет огромное сообщество.
  • Переносимость, см. Выше.
  • Манипуляции с базой данных: другие способы сделать это. (Выберите свой любимый модуль)
  • И один из самых выразительных / лаконичных языков.

Обратной стороной perl для тех, кто с ним не знаком, является отсутствие организации множества модулей. По крайней мере, насколько мне известно, нет удобного способа найти наиболее подходящий из ряда доступных модулей для конкретной задачи. Тот факт, что существует так много вариантов, замечателен, но должен быть лучший способ проанализировать все это на предмет модулей, которые считаются готовыми к производству и / или широко используемыми, и / или полнофункциональными, и / или легкими, и / или совместимыми. с различными выпусками Perl (например, некоторые новые версии модулей поддерживают только Perl 5.10).

intuited 06.06.2010 00:31

@intuited Perl - не мой любимый язык, но у вас все наоборот. Я знаю Perl - это единственный язык, на котором легче всего найти подходящие модули. CPAN (search.cpan.org) имеет множество способов определения пригодности: автоматические тесты, выполняемые на новых представлениях на многих платформах ОС; рейтинги и комментарии; разумные соглашения об именах и пространствах имен и т. д. CPAN лучше организован, чем RubyGems и PyPI.

Mark Thomas 04.08.2010 15:54

@Mark Thomas: Похоже, над функциональностью сайта cpan можно поработать. До сих пор я не знал о рейтинговой системе dlsip, которая отображается, когда вы просматриваете категории, потому что она не отображается, когда вы выполняете текстовый поиск, как я обычно делаю. Это чрезвычайно полезный набор данных, но я не понимаю, почему он не отображается постоянно. Фактически, это, кажется, единственный контекст, в котором отображается является - он даже не отображается, когда вы переходите на страницу модуля.

intuited 04.08.2010 22:57

@Mark Thomas: Я все еще ищу страницу «расширенного поиска», которая позволит мне искать модули, соответствующие определенным критериям из dlsip, рейтингов пользователей, номера версии и т. д. Есть ли это где-нибудь? __________ Конечно, PyPI не имеет такой функциональности, хотя столбец «Оценка» в результатах поиска PyPI, по крайней мере, не очень полезен. Тенденция разработки модулей Python во многих случаях сводится к стандартной библиотеке, что делает ее несколько менее важной. Также полезно, что «Статус производства» модуля обычно указывается на странице этого модуля.

intuited 04.08.2010 23:06

Пункты, которые были оценены, имеют более высокий приоритет, и оценка их рейтинга влияет на порядок оцениваемых пунктов. знак равно

Kent Fredric 08.08.2010 12:39
Ответ принят как подходящий

Думаю, будет сложно провести объективное сравнение. Лично я предпочитаю Python. Чтобы удовлетворить один из ваших критериев, Python с самого начала разрабатывался как встраиваемый язык. Он имеет очень богатый C API, а интерпретатор разбит на модули, чтобы упростить вызов из C. Если Java является вашей средой хоста, вам следует взглянуть на Jython, реализацию Python внутри среды Java (виртуальная машина и библиотеки).

Такое сложение оценок по функциям - не лучший способ выбрать язык программирования. Вам лучше выбрать то, что вы знаете лучше всего. Если вы не знаете ни одного из них, попробуйте их немного. Если вы имеете в виду действительно конкретный проект, возможно, некоторые языки программирования будут лучше, но если у вас есть только общие предпочтения, вы никогда не придете к консенсусу.

Тем не менее, Python довольно гибкий, он самый популярный в вашем списке, поэтому проще всего решать любые проблемы, которые у вас есть, с помощью поиска, поэтому я бы рекомендовал Python.

Чтобы замутить воду ...

Groovy предоставляет вам доступ к Java. Java имеет чрезвычайно богатый набор API / библиотек, приложений и т. д.

Groovy встраивается, хотя проще всего в Java.

DLL / библиотеки (если вы говорите о не-Groovy / Java) могут быть несколько проблематичными, хотя есть способы и некоторые API-интерфейсы, которые могут помочь.

Я немного занимался программированием на Python, но, будучи более знакомым с Java, Groovy мне дается намного проще.

У Python есть все девять критериев. Он получил 56 баллов.

Я уверен, что в Ruby есть все, что есть в Python. Вроде библиотек меньше. Таким образом, он набирает 51 балл.

Я не знаю, есть ли у Groovy все возможности.

Поскольку Python 56, а Ruby 51, Python едва ли превосходит Ruby.

Однако я думаю, что такое решение все же может сводиться к некоторым субъективным вопросам, выходящим за рамки этих девяти критериев.

При всем уважении, я не думаю, что Ruby имеет такое же количество библиотек, как Python, не говоря уже о Groovy. Если я, например, возьмите пакеты Ubuntu (включая multiverse, что означает в основном пакеты Debian), там 920 имен пакетов с Python и 464 с Ruby. В Groovy нет сторонних библиотек.

J S 29.11.2008 05:27

Обновление: я посмотрел на Rubyforge и PyPI, и похоже, что эта оценка подтверждается тем, что у Python почти в два раза больше библиотек, чем у Ruby.

J S 29.11.2008 05:35

Обновление два года спустя: в списке больше RubyGems, чем пакетов PyPI. Но это не соревнование по ссанию. И Ruby, и Python достаточно зрелы, чтобы иметь отличные библиотеки практически для всего, чем вы хотите заниматься.

Mark Thomas 04.08.2010 15:44

Perl? Ой.

Как кто-то заметил, Perl похож на большой взрыв на фабрике пунктуации. Его краткость является преимуществом нет, если результирующий код не самодокументируется.

Использовал Groovy для решения некоторых служебных задач, легко приступил к работе. Полный доступ к библиотекам Java, плюс некоторые интересные дополнения к ним, например, перечисление файлов в каталоге с помощью закрытия:

// process all files printing out full name (. and .. auto excluded)

new File(basedir).eachFile{ f->

    if (f.isFile()) println f.canonicalPath
}

"Perl - это слишком много знаков препинания / строк" # отличительная черта номер 1 того, кто его не пробовал.

Kent Fredric 13.12.2009 10:32

@Kent Fredric: В основном согласен, хотя я бы сказал, что «изучил», а не «попробовал». На это нужно время, но то же самое с любым языком. По какой-то причине многие люди, кажется, считают любой язык, в котором не используются те же условные обозначения, что и уже известный, как неполноценный. Во всяком случае, казалось бы логичным, что пунктуация - это Полегче, которую следует запомнить, поскольку (возможно, по иронии судьбы), как только вы поймете, как она используется, обычно есть только одно сопоставление, которое имеет смысл, в отличие от языков, в которых используются слова (которые имеют синонимы) для тех же концепций.

intuited 06.06.2010 00:38

Проблема при выполнении «служебных задач» с Groovy заключается в том, что в Java нет низкоуровневых методов, таких как chmod, chown, fork и т. д.

Kedare 25.06.2011 23:10

"chown tmp / foo" .execute ()? - groovy-lang.org/groovy-dev-kit.html#process-management

Kalpesh Soni 25.06.2015 23:38

попробуйте Groovy ... в нем есть все необходимые вам функции. Вы можете использовать существующую java lib без каких-либо изменений в ее классах. в основном .. Groovy - это java ++, он более динамичен и интересен для изучения (как и Ruby)

Мне не нравится синтаксис Ruby или Python, поэтому я оставлю их позади. Groovy похож на синтаксис C / C++, поэтому он мне нравится lol :)

Groovy? Я просто беру это в руки; попробуйте это (внутри Groovyconsole):

File.metaClass.invokeMethod = { String name, args ->
    System.out.print ("Call to $name intercepted...");
    File.metaClass.getMetaMethod(name, args).invoke(delegate, args);
}

new File("c:/temp").eachFile{
    if (it.isFile()) println it.canonicalPath
}

Первый код - АОП. Все вызовы любого метода объекта File будут перехвачены. Никаких дополнительных инструментов не требуется. Это выполняется для существующего класса Java динамически.

Во втором блоке вы удаляете закрывающий параметр 'f'. Являясь всего лишь одним параметром, по умолчанию используется встроенная переменная «it», доступная для контекста закрытия.

Вот что вы получите:

"Вызов isFile перехвачен ... C: \ temp \ img.jpg"

и т.п.

Из ваших критериев я бы выбрал JRuby:

  • Богатство доступных API / библиотек (например, математика, построение графиков, работа в сети) (9)

Все, к чему у JVM есть доступ, это много

  • Возможность встраивания в настольные (java / C++) приложения (8)

Отличный фреймворк Панели обезьян, который позволяет вам создавать графический интерфейс Swing в вашем конструкторе графического интерфейса, а затем подключать его с помощью чистого кода Ruby.

  • Легкость развертывания (8)

Rawr может упаковать ваше приложение как исполняемую банку

  • Возможность взаимодействия с DLL / общими библиотеками (7)

Общие библиотеки Java легко, C через jna + libffi

  • Возможность создавать графические интерфейсы (7)

Swing просто работает. Не уверен, насколько легко использовать QtJambi, но это определенно возможно.

  • Сообщество / Поддержка пользователей (6)

Много. У Ruby отличное сообщество.

  • Портативность (6)

Везде работает JVM

  • Управление базой данных (3)

Все библиотеки баз данных ruby ​​и все библиотеки java

  • Язык / семантика (2)

Здесь рубин явно опережает groovy и python. С самого начала в языке были приняты по-настоящему красивые дизайнерские решения, что проявляется в последовательности и мощи стандартной библиотеки. Блоки, в частности, делает его использование приятным.

Поработав со всеми тремя из них, могу сказать следующее:

  • Python

    • имеет очень зрелые библиотеки
    • библиотеки документированы
    • к документации можно получить доступ из вашего отладчика / оболочки во время выполнения через строки документации
    • вы можете разрабатывать код без IDE
  • Рубин

    • имеет несколько отличных библиотек (хотя некоторые из них плохо документированы)
    • Механизмы инстроспекции Ruby великолепны. Они упрощают написание кода (даже если документация недоступна)
    • вы можете разрабатывать код без IDE
  • Groovy

    • вы можете извлечь выгоду из всего, что предлагает Java
    • синтаксис несколько вдохновлен Ruby
    • сложно писать код без IDE. У вас нет возможности отлаживать данные с вашей консоли (это то, что вы легко можете сделать в Python / Ruby), а доступным плагинам Groovy предстоит многое наверстать. Я написал несколько приложений, используя Groovy, и по мере их увеличения я сожалею, что не перешел на Ruby / Python (отладка была бы НАМНОГО проще). Если вы будете разрабатывать только IDE, Groovy - отличный язык.

Как бы вы оценили зрелость библиотек Java и Python?

intuited 06.06.2010 00:41

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

Geo 06.06.2010 16:28

Другие вопросы по теме