Чим 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 або * NIX


1
Зовсім не складно написати Java-код, який працює лише в Windows; просто жорсткий код файлу Windows, наприклад "C: \ MyApp \ data"
kevin cline

@kevincline Шлях з твердим кодом - це погана практика для будь-якої операційної системи. Але Java не вимагає від вас цього робити, оскільки вона пропонує незалежні від ОС методи для отримання загальних каталогів, таких як каталог користувачів або шлях встановлення поточної програми.
Філіпп

3

Місцево і просто від мовного виконання, різниця є незначною. Зокрема, JVM розроблений не лише як інтерпретатор, але й компілятор виконання, виведення коду, інструментальний шар віртуалізації, який може застосовувати динамічні гачки, різноманітну семантику GC та можливість описувати ергономіку віртуалізації. Python може працювати в JVM? Чи може Java працювати в інтерпретаторі Python?

Більшість перекладачів - це перекладачі мови / лексеми часу виконання, JVM (та інші), як відомо, інтерпретувати / компілювати / запускати проміжний код. Наприклад, IBM займається цим десятиліттями поза Явою, це не є новим. Навіть VB деякий час вірив у проміжний код?

Зараз ВОРА - це переважно пасе, оскільки багато інтерпретованих мов працюють майже скрізь без змін.


3

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

Звичайно, інтерпретовані мови працюють майже аналогічно незалежно від того, на якій платформі працює інтерпретатор (доки інтерпретатор доступний для цієї платформи). Однак файлові системи, проблеми з дозволом, кодування, закінчення рядків та незліченна кількість інших невеликих, але дратівливих проблем можуть викликати головні болі. Деякі речі, що залежать від платформи, важко абстрагуватися.


ВОРА сама по собі недостатня. Дійсно важливий біт полягає в тому, що він дуже добре визначає, як він працює всюди, що робить його неважливим саме там , де він був запущений.
Thorbjørn Ravn Andersen

1

Чи має Python незалежний графічний інтерфейс, незалежний від платформи?

У будь-якому випадку, функція WORA - знову ж таки - заманювати програмістів на C, оскільки C, як правило, моделює основу платформи, а платформи відрізняються (розмір слова "ендіатизм"), створюючи повністю портативні програми C, вимагаючи великої уважності та уваги.

Обіцянка Java полягала в тому, що всю цю втомлюваність не потрібно було робити, оскільки платформа дуже чітко визначена, і ви ЗНАЄМО, що char - 16 біт і т.д. Програма може працювати на комп'ютері, про який ви ніколи не чули і навіть правильно запускати.


6
У Python є кілька альтернатив для GUI, незалежних від платформи: docs.python.org/faq/…
Joonas Pulakka

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

-4

За винятком того, що Java категорично не WORA. Я бачив програмне забезпечення Java, яке вийшло з ладу після оновлення Java до вищої версії на другорядний номер версії. IMHO, WORA - лише маркетинговий трюк.


1
Це насправді не відповідь на питання.
Ерік Вілсон

-1 тому, що Java WORA для всіх практичних цілей. Це буде спрацьовувати, якщо уникнути хак-файлів і, очевидно, рідних матеріалів, таких як JNI. У мене 50 000+ лінійних програм ідеально працювали в Windows, Mac і Linux, без змін, вперше, з тим же складеним .jar-файлом. Якщо ви дотримуєтесь чистої Java, то все просто працює.
mikera

1
Здається, ви неправильно зрозуміли, що означає WORA.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.