Преимущества Java над Ruby / JRuby - PullRequest
13 голосов
/ 20 августа 2009

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

Ответы [ 16 ]

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

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

12 голосов
/ 20 августа 2009

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

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

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

Программистам редко приходится иметь дело с абсолютами.

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

Интеллектуальное использование надежной системы типов со статической проверкой типов может значительно сэкономить время.


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

5 голосов
/ 20 августа 2009

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

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

3 голосов
/ 20 августа 2009

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

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

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

2 голосов
/ 20 августа 2009

Язык.

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

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

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

То, что у нас есть в IDE, например Eclipse:

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

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

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

JVM.

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

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

2 голосов
/ 20 августа 2009

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

Java-Ruby Comparison


И это здорово !!

1 голос
/ 02 апреля 2011

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

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

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

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

1 голос
/ 23 августа 2009

Негативы для Java:

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

Позитивы для Java:

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

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

...