Чем JVM и Java WORA отличаются от других языков высокого уровня?

12

В мире Java мы часто говорим о JVM, и когда Java была новой, у нее была, предположительно, убийственная функция: «Однажды напиши, беги где угодно».

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

Так чего мне не хватает? Чем JVM отличается от интерпретатора Python? Есть ли способ, которым Python не хватает независимости от платформы Java? Или это просто культурная разница?

Эрик Уилсон
источник
1
Основным отличием является строгость спецификации JVM. Просто очень хорошо определено, как он должен (а не должен) себя вести.

Ответы:

17

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

С другой стороны, Python не очень хорошо справляется с задачей изолировать вас от базовой ОС. У него нет стандартного способа обработки взаимодействия между процессами (посмотрите на различия в модуле sys и модуле os между окнами и * nix-реализация Python, например.)

Я написал код на Python, который будет работать только на * NIX или Windows, используя только доступные вызовы API Python, где в Java было бы очень сложно написать код, который был просто Java API, который не работал бы одинаково на обоих Windows box или * NIX box

mangelo
источник
1
Нетрудно написать код Java, который работает только в Windows; просто жестко закодировать путь к файлу Windows, например, «C: \ MyApp \ data»
Кевин Клайн
@kevincline Твердо закодированные пути - плохая практика в любой операционной системе. Но Java не требует от вас этого, поскольку предлагает независимые от ОС методы для извлечения общих каталогов, таких как каталог пользователя или путь установки текущей программы.
Филипп
3

Тематически и просто от языковой среды выполнения, есть небольшая разница. В частности, JVM разработана не только как интерпретатор, но и как компилятор времени выполнения, вывод кода, инструментальный уровень виртуализации, к которому могут применяться динамические хуки, различные семантики GC и возможность описания эргономики виртуализации. Python может работать в JVM? Может ли Java работать в интерпретаторе Python?

Большинство интерпретаторов являются интерпретаторами языка / токена времени выполнения, JVM (и других), как вы знаете, интерпретировать / компилировать / запускать промежуточный код. Например, IBM десятилетиями занималась этим вне Java, в этом нет ничего нового. Даже VB работал в промежуточном коде в течение некоторого времени, я верю?

В настоящее время WORA в основном устарела, так как многие интерпретируемые языки работают практически везде без изменений.

Jé Queue
источник
3

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

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

Joonas Pulakka
источник
WORA сама по себе не достаточно. Действительно важным моментом является то, что он очень хорошо определен, как он работает везде, что делает его неважным, где именно он был запущен.
Турбьерн Равн Андерсен
1

Есть ли у Python независимый от платформы графический интерфейс?

В любом случае, функция WORA снова привлекла программистов на С, так как С имел тенденцию тесно моделировать базовую платформу, а поскольку платформы были разными (размер слова «endianess»), создание полностью переносимых программ на С требовало большой заботы и внимания.

Обещание Java заключалось в том, что не нужно было выполнять все эти утомительные действия, поскольку платформа очень хорошо определена, и вы ЗНАЕТЕ, что символ 16-битный и т. Д. Кроме того, графический интерфейс написан на Java, а также на 100% переносим, ​​что означает, что ваш Программа может работать на компьютере, о котором вы никогда не слышали, и даже работать правильно.


источник
6
Python имеет несколько независимых от платформы альтернативы GUI: docs.python.org/faq/...
Йонас Pulakka
Графические интерфейсы Java печально известны тем, что не отображаются должным образом на различных платформах, поэтому я бы не стал хвастаться этим аспектом. Тем не менее, я бы согласился с остальной частью вашего заявления.
ярость
-4

За исключением того, что Java категорически не является WORA. Я видел программное обеспечение Java, которое сломалось после того, как Java была обновлена ​​до более высокой версии по второстепенному номеру версии. ИМХО, WORA - просто маркетинговый трюк.

zvrba
источник
1
Это не совсем ответ на вопрос.
Эрик Уилсон
-1 потому что Java это WORA для всех практических целей. Это будет работать, если вы будете избегать системных хаков и явно нативных вещей, таких как JNI. У меня было более 50 000 линейных приложений, которые отлично работали в Windows, Mac и Linux, без изменений, с тем же скомпилированным файлом .jar. Если вы придерживаетесь чистой Java, все это просто работает.
Микера
1
Похоже, вы неправильно поняли, что такое WORA.