Является ли Java (все еще) кроссплатформенным языком выбора? [закрыто]

20

Когда я начал использовать Java в девяностые годы, все было « напиши один раз, беги куда угодно! » С первого дня. Наверное, тогда это было правдой, и я был частью хора.

Я не уверен, что думать об этом больше, учитывая все другие языки, использующие многоплатформенные среды выполнения (python, flash, perl, html, php ...). Но я все еще вижу много аргументов, которые говорят, что вы должны использовать Java, потому что он предположительно лучше для кроссплатформенной разработки.

Так это все еще верно сегодня? Является ли Java по-прежнему языком выбора для многоплатформенной разработки?

  • Пожалуйста, будьте конкретны с акцентом на межплатформенные аспекты
  • Я не прошу сравнения общих характеристик языка.

Обновление: пока хорошие отзывы! Большинство ответов, кажется, одобряют Java или сеть. Любой вклад от толпы сценария?

Мартин Викман
источник
См. Также: programmers.stackexchange.com/questions/15610/…
Эрик Уилсон,
3
Этот комментарий не затрагивает суть вопроса, но его следует учитывать: веб-приложения на базе Java, ориентированные на пользователей Windows, - это то, от чего следует избегать. В Oracle JVM для Windows было много проблем с безопасностью в последнее время. Таким образом, вы можете обнаружить, что опытные пользователи не будут использовать веб-приложения на основе Java, потому что они удалили JVM.
тыкай
Ваш вопрос основан на предположении, что это был даже кроссплатформенный язык выбора с самого начала.
Лукас Рэймидж

Ответы:

10

языки стилей сценариев, такие как python, также облегчают кросс-платформенную разработку. Теперь, любите ли вы Python (или другие подобные языки), зависит от вас, и нам, вероятно, не нужно начинать эту дискуссию здесь.

Java пытается заставить вас писать код, который будет работать переносимо, в то время как python позволяет писать переносимый код. Сам язык Python будет работать переносимо, но внешние библиотеки могут или не могут. Кроме того, python будет свободно предоставлять доступ к специальным сервисам платформы.

Есть ли у Java преимущество? Я думаю, что в любом случае вы можете написать переносимый код с такой же легкостью. То есть вы можете написать код, и он обычно будет работать на разных платформах. Но вы не можете сойти с рук, просто написав код и предполагая, что он будет работать везде. Я работал над проектом на python, который выпускал версии для Windows, Linux и Mac, и у нас было очень мало кроссплатформенных проблем. (Единственное, что я помню, было из-за ошибки в библиотеке, в которой мы использовали pygame, которая вызывала проблемы с рисованием в Linux. Это было исправлено путем обновления используемой нами версии pygame)

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

В конце концов, я думаю, что все сводится к тому, с каким языком вам нравится работать и какое развертывание вам нужно выполнить.

Уинстон Эверт
источник
18

В то время как Java не может быть или единственным жизнеспособным кросс-платформенный инструмент, имеет некоторые преимущества:

  • Это очень быстро.
  • Это очень надежно.
  • Он чрезвычайно переносим (например, байт-код, скомпилированный 10 лет назад в Windows 95, сегодня отлично работает в OS X).

и некоторые недостатки:

  • Базовые библиотеки GUI (Swing ...) показывают свой возраст (здесь могут помочь сторонние дополнения).
  • Сам язык может быть менее многословным (например, проверенные исключения ...).
  • Время запуска может быть более быстрым (хотя оно все время улучшается).

Говоря конкретно о Java платформе , есть еще один момент:

  • Существует довольно много языков, которые работают на JVM и взаимодействуют с Java.
Joonas Pulakka
источник
19
Чрезвычайно быстро? По сравнению с чем?
HardCode
18
@HardCode: по сравнению с любым интерпретируемым языком или большинством компилируемых языков. C и C ++ могут быть сделаны быстрее в некоторых случаях, но это сложно, и становится все сложнее, когда число ядер увеличивается. С Java параллелизм (эффективное использование этих нескольких ядер) становится намного проще достичь на практике.
Joonas Pulakka
5
@HardCode, по-видимому, JVM - это самая быстрая среда выполнения, доступная практически для любого интерпретируемого языка (в отличие от тех, которые хакеры языка сделали сами)
14

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

У нашего продукта есть Java-сервер, который будет работать на Windows или Linux, но мы столкнулись с определенными проблемами ОС и убедитесь, что у нас есть серверы Linux и Windows, доступные для поддержки / тестирования, если это необходимо. Пользовательские интерфейсы Java, как правило, имеют больше проблем, чем серверы (хотя многие из них носят косметический характер и поэтому потенциально могут игнорироваться в зависимости от приложения).

Хотя для меня это не совсем язык, Интернет является кроссплатформенной платформой. Интерфейс HTML / JavaScript означает, что ваше приложение будет работать практически на любой клиентской платформе, и в большинстве случаев это была реальная цель - не нужно беспокоиться о том, был ли это Mac или ПК, какая версия ОС и так далее.

Конечно, вы, как правило, по-прежнему будете диктовать серверную платформу, но когда люди просто становятся более гибкими, особенно в те дни, когда большинство компаний уже поддерживают сочетание серверов Windows и Linux.

Джон Хопкинс
источник
8
Хороший ответ. Конечно, головная боль также может быть связана с тем, что ваше приложение работает правильно во всех версиях браузера.
Тим Гудман
5
@ Тим: хорошая мысль. Я считаю, что браузерные приложения гораздо более «тестируются и отлаживаются везде», чем настольные Java-приложения.
Joonas Pulakka
5
@Tim: +1. Заставить приложение веб-приложения работать одинаково во всех основных браузерах так же сложно, как заставить приложение Java работать одинаково в разных ОС.
Евгений Брикман
3
«Пиши один раз, везде отлаживай» - не соответствует моему опыту. Пока вы разумны и избегаете зависимостей от платформы, у меня не было проблем с запуском одного и того же Java-кода на нескольких платформах (включая GUI). Да, конечно, вы должны это проверить, но я думаю, что за почти 15 лет программирования на Java у меня только однажды возникла реальная проблема переносимости (которая была моей собственной ошибкой в ​​жестком кодировании разделителей каталогов Windows, а не в использовании кросс-платформенного Java-файла File.pathSeparator !)
Микера
2
@mikera - Мы видели проблемы между Linux и Windows, которые не имели ничего общего с нашим кодом. Они редки, но они существуют.
Джон Хопкинс
9

Лично я бы сказал, что Java по-прежнему является кроссплатформенным языком выбора и, вероятно, останется там некоторое время (наряду с веб-приложениями). В этом посте я написал еще несколько статей на эту тему о Java как о платформе , но в частности о кроссплатформенном:

  • Пока вы осторожны с вашими зависимостями (например, избегаете библиотек, использующих JNI для взаимодействия с нативным кодом), тогда Java можно писать без изменений на всех основных платформах JVM.

  • Поскольку Java обычно распространяется как машинно-независимый байт-код, его можно запускать без перекомпиляции на любой JVM (поскольку локальная JVM сама выполняет JIT-компиляцию в нативный код). Например, мне удалось получить достаточно сложное приложение с графическим интерфейсом для первого запуска на Mac после разработки в Windows - с тем же файлом jar . Сравните это с большинством других кроссплатформенных языков, которые обычно требуют разных библиотек или перекомпиляции для другой платформы.

  • Множество базовых библиотек, которые вам нужны (GUI, сеть, IO и т. Д.), Являются частью стандартной среды выполнения и написаны кросс-платформенным способом. Таким образом, вам не нужно искать и тестировать кроссплатформенные библиотеки, вы гарантированы, что почти все, что вам нужно, уже есть в среде выполнения.

mikera
источник
3

Я думаю, у вас есть такой выбор:

1) использовать либо

  • составлен или
  • устный перевод.

2) Как вы будете упаковывать и доставлять свой код?

  • Один "front-end", один двоичный файл / скрипт?
  • Один "front-end", несколько бинарных файлов / скриптов?
  • Несколько "front-end", несколько бинарных файлов / скриптов?

Эти варианты влияют на производительность, видимость и распространение кода.

Вы не против отдать свой исходный код? Скомпилированные языки могут быть для вас. Похоже, что скомпилированные языки работают лучше в микро-бенчмарках, чем интерпретируемые (даже JITed) языки. Также, если вы зависите от среды выполнения, такой как Java, Python, Ruby и т. Д., Ваш код может быть сложнее распространять.

Я обнаружил, что большинство популярных кроссплатформенных настольных приложений используют «Один интерфейс, несколько двоичных файлов» с использованием C / C ++ и библиотеки кроссплатформенных виджетов, например, Audacity, Blender, Firefox, Google Планета Земля, OpenOffice, Skype, Songbird, Stellarium, VLC.

LennyProgrammers
источник
Вы сделали интересную ошибку, указав Skype в своих примерах, но это супер-популярное приложение на самом деле было запущено с Delphi / Pascal для Windows и портировано с C / C ++ для Linux и Objective-C для MacOS / iPhone
Maksee
Я думаю, что скомпилированная / интерпретируемая дихотомия немного вводит в заблуждение - Java в некотором смысле не является ни тем, ни другим, потому что он скомпилирован в независимый от машины байт-код для распространения (т.е. больше не в исходной форме), а затем JIT скомпилирован позднее в собственный код на какой бы машине вы ни работали. Он полностью кроссплатформенный, но также обеспечивает вашу собственную производительность, плюс вам не нужно распространять исходный код, если вы этого не хотите. выиграть / выиграть / выиграть.
Микера
0

Я скажу нет. Python и ruby ​​часто используются, как и javascript как для клиентской, так и для серверной части. Я лично использую .NET, и у меня нет проблем, чтобы он работал на Mac и Linux (при разработке на Windows)

Я слышал, что LLVM становится популярным, но все еще очень мал. Это позволит вам использовать кроссплатформенный C ++ в одном двоичном файле. Очевидно, это будет выполнено в браузере, но я не видел пример, где он позволяет вам изменять dom или вызывать javascript.


источник
LLVM не предназначен для работы в браузере ... Вы говорите о emscripten?
Камило Мартин
проверьте дату. 4 года назад emscripten не существовало. Предполагалось, что NativeClient будет работать (и у него была работоспособность), но это не так.
Теперь я вижу дату, но, тем не менее, LLVM никогда не был посвящен браузерам, верно?
Камило Мартин
1
Нет. Хотя я бы хотел писать на C ++ или на другом языке, который поддерживает LLVM вместо JS ...
В связи с этим ...
Камило Мартин
-1

Если вы добавите в платформу мобильные платформы, вам по крайней мере потребуется включить перекомпиляцию. Например, Android, J2me.

Конор
источник