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

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

16 ответов


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

  • Java имеет больше документации (книг, блогов, учебник и т. д.); общее качество документации очень хорошее
  • Java имеет

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

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


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

программисты редко должны иметь дело с абсолютами.

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

Harnessed толковейше, сильный тип система с статическим типом проверяя может быть реальная экономия времени.


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


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

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


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

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

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

Java-Ruby Comparison


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


язык.

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

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

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

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

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

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

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

JVM.

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

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


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


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

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


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

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

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

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


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

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


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

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

положительные стороны для Java:

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

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


лучшие спектакли


есть еще варианты:

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

обратите внимание, что это не имеет ничего общего с языками как таковыми:)


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

J2ME-совместимый subest java более портативен, чем ruby

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


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

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

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

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