Преимущества Java над Ruby/JRuby

Я изучаю Java. Я научился и использовал Ruby. Книги Ruby всегда говорят о преимуществах Ruby над Java. Но должны быть некоторые преимущества, поэтому многие люди (особенно компании) используют Java, а не Ruby. Скажите, пожалуйста, абсолютные (а не философские!) Преимущества Java над Ruby.

Ответы

Ответ 1

Я не очень хорошо знаю Ruby, но могу угадать следующие моменты:

  • Java имеет дополнительную документацию (книги, блоги, учебники и т.д.); общее качество документации очень хорошее.
  • В Java есть дополнительные инструменты (IDE, инструменты сборки, компиляторы и т.д.).
  • Java имеет лучшие возможности рефакторинга (из-за системы статического типа, я думаю)
  • Java имеет более широкое распространение, чем Ruby
  • Java имеет хорошо определенную модель памяти
  • Насколько я знаю, Java лучше поддерживает потоки и юникод (JRuby может помочь здесь)
  • Общая производительность Java довольно хороша на позднем этапе (из-за горячей точки, нового сборщика мусора G1 и т.д.).
  • В настоящее время Java имеет очень привлекательный и дешевый серверный хостинг: appengine

Ответ 2

  • Многие другие разработчики Java, чем с Ruby.
  • Многие существующие библиотеки в Java (что также помогает JRuby).
  • Static typechecking (можно увидеть как преимущество и как недостаток).
  • Существующая кодовая база, которая должна быть поддерживается.
  • Хорошая поддержка инструментов.
  • Более глубокие документы и учебные пособия.
  • Больше опыта с передовыми методами и подводные камни.
  • Более коммерческая поддержка. Это интересно для компаний.

Многие из этих преимуществ являются результатом того, что Java-экосистема более зрелая, чем у Ruby. Многие из этих пунктов являются субъективными, такими как статические и динамические типирования.

Ответ 3

Расскажите об абсолютных... преимуществах Java над Ruby

Программисты редко должны разбираться в абсолютах.

Я посмею и скажу, что статическая типизация (Java), как правило, является преимуществом по сравнению с динамической типизацией (Ruby), поскольку она помогает распознавать ошибки намного быстрее и без необходимости потенциально сложных модульных тестов 1).

Продуманный разумно, система сильного типа с проверкой статического типа может быть реальной экономией времени.


1) Я не против модульного тестирования! Но хорошее тестирование модулей сложно, и компилятор может помочь в уменьшении количества необходимых тестовых случаев.

Ответ 4

Причина № 1. Там много устаревшего кода Java. Ruby - новый, не так много программистов, которые его знают и даже меньше, кто хорош в этом. Аналогично, для Java существует гораздо больше кода библиотеки, чем Ruby.

Таким образом, могут быть технические причины, по которым Ruby лучше Java, но если вы запрашиваете бизнес-причины, Java по-прежнему бьет его.

Ответ 5

виртуальная машина Java, у которой было более десяти лет улучшений, включая:

  • компиляция только во времени в компиляторе HotSpot (JIT - компиляция байтового кода в собственный код)
  • множество алгоритмов сбора мусора и параметры настройки
  • консоль поддержки runtime для профилирования, управления и т.д. вашего приложения ( JConsole, JVisualVM и т.д.)

Ответ 6

Мне нравится это сравнение (найдено по ссылке, предоставленной Markus! Спасибо!)... Спасибо всем... Я также ожидаю еще нескольких дискретных преимуществ

Java-Ruby Comparison


И его Великий!!

Ответ 7

Язык.

Мое мнение таково, что специфические свойства самого языка Java приводят нас к мощным возможностям IDE и инструментов. Эти возможности особенно ценны, когда вам приходится иметь дело с очень большой базой кода.

Если я попытаюсь перечислить эти свойства, это будет:

  • конечно, сильная статическая типизация
  • грамматика языка является грамматикой LALR (1) - поэтому легко построить парсер
  • полные имена (пакеты)

Что мы имеем в IDE до сих пор, например Eclipse:

  • отличные возможности изучения очень больших баз кода. Вы можете однозначно найти все ссылки, назвать hierarhy, занятия классов или публичных и защищенных членов - это очень полезно, когда вы изучаете код проекта или собираетесь что-то изменить.
  • очень полезный редактор кода. Я заметил, что когда я пишу код в java-редакторе Eclipse, я на самом деле печатаю только имена калз или методов, а затем нажимаю Ctrl + 1, а редактор генерирует много вещей для меня. И особенно хорошо, что затмение побуждает вас сначала писать часть кода и даже до того, как код будет полностью написан. Таким образом, вы вызываете вызов метода перед созданием метода, а затем редактор генерирует для вас метод stub. Или вы добавляете дополнительные аргументы в метод или конструктор в том месте, где вы его вызываете, - и редактор меняет подпись для вас. И enev более сложные вещи - вы передаете некоторый объект методу, который принимает некоторый интерфейс, - и если класс объекта не реализует этот интерфейс - редактор может сделать это за вас... и так далее. Там много интересного.

Существует множество инструментов для Java. В качестве примера одного отличного инструмента я хочу упомянуть Maven. На самом деле, я считаю, что повторное использование кода действительно возможно только тогда, когда у нас есть такой инструмент, как Maven. Инфраструктура, построенная вокруг нее, и интеграция с IDE делают возможным очень интересный thinsg. Пример: у меня установлен плагин m2eclipse. У меня есть новый пустой проект в Eclipse. Я знаю, что есть класс, который мне нужно использовать (на самом деле использовать) где-то в репозиториях, скажем, например, StringUtils. Я пишу в своем коде "StringUtils", редактор Eclipse говорит мне, что в проекте нет такого класса и подчеркивает его красным. Я нажимаю Ctrl + 1 и вижу, что есть возможность искать этот класс в публичном репозитории (фактически в индексе, а не в самом репозитории). Некоторые библиотеки были найдены, я выбираю один из них в определенной версии, и инструмент загружает банку, настраивает мой проект calsspath, и я alredy получил все, что мне нужно.

Итак, все о производительности программистов.

JVM.

Мое мнение таково, что JVM (особенно Sun SunSpot) - одна из самых интересных программ в настоящее время. Конечно, ключевым моментом здесь является производительность. Но текущая реализация HotSpot JVM исследует самые передовые способы достижения такой действительно высокой производительности. Он исследует все возможные преимущества компиляции по статике "точно в срок", собирает статистику использования кода перед компиляцией JIT, оптимизирует, когда это возможно, виртуальные вызовы, может встраивать намного больше вещей, которые может использовать статический компилятор, и так далее. И самое замечательное здесь, что все это происходит в JVM, но не в самом языке (как в отличие от С# в качестве примера). На самом деле, если вы просто изучаете язык Java, я настоятельно рекомендую вам ознакомиться с деталями современных реализаций JVM, поэтому вы знаете, что действительно вредно для производительности, а что нет, и не ставьте ненужные оптимизации в код Java, и не бойтесь использовать все возможности языка.

Так... все это касается IDE и инструментов на самом деле, но по какой-то причине мы имеем их для Java не для каких-либо других языков или платформы (.NET, конечно, большой конкурент в мире Windows).

Ответ 8

Сетевой эффект. Преимущество Java в том, что многие люди используют Java. Кто сам использует Java, потому что больше людей использует Java.

Ответ 9

Если вам нужно создать большое программное обеспечение, вам нужно будет сотрудничать. Имея много программистов, вы уверены, что кто-то может попросить вас поддерживать ваше программное обеспечение, даже если оригинальные разработчики покинули компанию.

Проверка статического типа и хорошая Java IDE не предлагают никакой магии, и это хорошо для большого числа поддерживающих, а не для Ruby.

Ответ 10

Недостаточно указать, что java статически типизирован, а ruby ​​динамически типизирован.

Исправьте меня, если я ошибаюсь, но это покрывает тот факт, что в рубине вы можете добавить и даже изменить программу (определения классов, определения методов и т.д.) во время выполнения? AFAIK вы можете иметь динамически типизированные языки, которые не являются "динамическими" (могут быть изменены во время выполнения).

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

Эта предсказуемость в зависимости от контекста, преимущество Java - один из контекстов, где это преимущество, - это когда у вас много разработчиков разных уровней навыков, работающих на довольно большом корпоративном приложении.

Ответ 11

ИМХО, то, что один человек считает преимуществом, может быть недостатком для кого-то другого. Некоторые люди предпочитают статическую печать, а другие - динамические. Это довольно субъективно и во многом зависит от работы и человека, делающего это.

Я бы сказал, просто изучите Java и решите для себя, каковы его сильные стороны. Зная, что оба языка сами бьют любые сравнения/советы, которые может дать другой человек. И обычно хорошо знать другой язык, поэтому вы не тратите свое время.

Ответ 12

Отрицательные для Java:

  • В библиотеках и фреймах, доступных для Java, существует много дубликатов.
  • Разработчики/сообщества Java склонны создавать сложные решения для простых задач.
  • В Java поддерживается намного больше преимуществ.
  • Слишком много блужданий для бизнес-пользователей ввел cruft, что делает менеджеров среднего звена лучше. Другими словами, некоторые философии на Java больше связаны с BS вместо того, чтобы выполнять работу. Вот почему компаниям нравится использовать Java.
  • Обычно вам нужно написать больше кода на Java, чем Ruby.
  • Требуется гораздо больше настроек/установки/настройки, чтобы получить полностью рабочую среду разработки Java поверх Ruby.

Положительные для Java:

  • Скорость.
  • Documentation.
  • Язык более низкого уровня, чем Ruby, что может быть хорошим или плохим, в зависимости от ваших потребностей.

Ни один из моих моментов не является очень научным, но я думаю, что различия в философии и личности за Java и Ruby делают их очень разными.

Ответ 13

Лучшее исполнение

Ответ 14

Есть больше вариантов:

  • Разработчики - лоты на прокат
  • Библиотеки - множество уже изобретенных колес.
  • IDE - множество сред разработки на выбор. Не только только vi/emacs + оболочка.
  • Runtimes - если вам по какой-то причине не нравится JVM, которую вы используете в системе, вы можете загрузить или купить другую реализацию, и это, скорее всего, просто работает. Сколько реализаций Ruby существует?

Обратите внимание, что это не имеет ничего общего с ЯЗЫКАМИ как таковым:)

Ответ 15

Чтение: Является ли Ruby межплатформенным как Java? заставило меня понять хотя бы одно фактическое преимущество java over ruby:

J2ME-совместимая подзадача java более портативна, чем ruby ​​

пока JRuby не будет запущен на J2ME, который может быть навсегда

Ответ 16

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

Где Java лучше подходит для сырых мышц и скорости.

Например, я написал программу Ruby для преобразования текстового файла 192 МБ в коллекцию MongoDB. Ruby запустил часы. И код Ruby был так же прост/оптимизирован, как вы могли бы получить (1.9.2).

Я переписал его на Java, и он запускается через 4 минуты. Да. Часы до 4 минут. Так что возьмите это за то, что стоит.