Почему так много новых языков написано для Java VM?

Появляется все больше языков программирования (Scala, Clojure,...), которые сделаны для виртуальной машины Java и поэтому совместимы с байт-кодом Java.

Я начинаю спрашивать себя: почему Java VM?

  • Что делает его настолько мощным или популярным, что для него созданы новые языки программирования, которые, похоже, набирают популярность?

  • Почему они не пишут новую виртуальную машину для нового языка?

Ответ 1

Почему они не пишут новую виртуальную машину для нового языка?

Это легко:

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

Ответ 2

Производительность и библиотеки

  • JVM является одним из самых мощных в мире программных продуктов.
  • Чтобы воспользоваться огромным массивом библиотек классов Java.
  • Тот факт, что взаимодействие между Java и не-Java-языками внутри JVM работает.

Ответ 3

JVM обладает прочной структурой и работает с самой миниатюрной Java-смарт-картой (ок, крошечной виртуальной машиной) для самых больших кластерных суперкомпьютеров, которые вы можете себе представить.

Поскольку он прочный, есть целые страны, в которых люди:

  • Смарт-карта Java в своем кошельке либо как национальная идентификационная карточка, либо как их системная карта медицинского обслуживания (или и то и другое)
  • сотовый телефон с JVM (или Dalvik VM, который, в основном, представляет собой ребрендинг версии Java VM). Heck, у iPhone есть процессор ARM, оптимизированный для запуска Java-байт-кода (но по причине бизнеса Apple решила не предлагать Java на iPhone/iPad).
  • проигрыватель BluRay, который, конечно, имеет Java (потому что он является частью спецификации BluRay).

Я разрабатываю коммерческое программное обеспечение на Java: мы продаем в Windows и OS X, но мы все развиваемся в Linux. И это просто работает. И он также работает на Solaris и т.д. И это потому, что мы нацелены на JVM: прощание с переносимостью. Пока платформа имеет виртуальную машину, программное обеспечение должно работать.

Тогда я не могу поверить, что кто-то упомянул об этом: это очень хороший старт с точки зрения безопасности.

Java VM, по своему усмотрению, невосприимчива к переполнению/переполнению буфера. Это огромно. Это на самом деле намного больше, чем большинство людей понимают.

Единственное переполнение буфера "Java", которое я помню в Linux (что побудило меня обновить из-за проблем с безопасностью), было фактически переполнением буфера, что привело к выполнению произвольного кода в... написанном lib (zlib, если я правильно помню, еще в те дни, когда Java на Linux по-прежнему не выполнял эту lib).

Конечно, переполнение/переполнение буфера webapps, приводящее к выполнению произвольного кода, больше не является самым важным вектором атаки (теперь, когда XSS и SQL-инъекция украли шоу). Но во всех остальных случаях переполнение/переполнение буфера является источником большинства проблем безопасности.

JVM невосприимчив к этому.

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

Это очень надежная и безопасная (при правильном использовании) технология. Именно поэтому он настолько широко используется как технически подкованным (Java огромна в Google, от GMail до их Android до GWT и т.д.) И техно-неконкурентных компаний.

На самом деле можно утверждать, что успех Java исходит из JVM и что "Java VM" гораздо важнее, чем "Java язык".

JVM - самая большая "история" успеха этих последних 20 лет. И это заслужено. И он должен остаться:)

Ответ 4

  • видел 15 лет усовершенствований, улучшений производительности и т.д.
  • бесплатный и открытый исходный код
  • работает на самых разных платформах.
  • поддерживает несколько языков на одной виртуальной машине
  • Основной язык (Java) является одним из наиболее распространенных языков, поэтому Java + JVM является относительно безопасной точкой входа
  • достаточно безопасный и надежный

Ответ 5

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

Если вы пишете свою собственную виртуальную машину, вы должны написать ее для Linux/Unix/BSD, один для Mac и один для Windows, и вы должны поддерживать виртуальную машину на всех этих платформах, а также поддерживать компилятор языка и библиотеки времени исполнения. Если вы используете виртуальную машину Java, первая часть позаботится о вас Oracle, IBM и Apple.

Ответ 6

Что делает его настолько мощным или популярным, что для него созданы новые языки программирования, которые, похоже, набирают популярность?

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

Почему они не пишут новую виртуальную машину для нового языка?

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

Ответ 7

Потому что с почти 20-летними усилиями Java VM

  • портативный
  • достаточно эффективным, а не C или С++, но с хорошей производительностью (учитывая, что он все еще vm)
  • легко интегрируется с
  • с поддержкой API или библиотек

Я имею в виду, если бы я планировал выпустить новый язык, почему я не должен использовать JVM? Хорошо, есть другие vms (llvm, попугай), но JVM поддерживается, известна и протестирована.

И это тоже неплохо! Недостаток invokeDynamic будет решен с заменой Java7 так лучше, чем это.

Ответ 8

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

Первый вопрос второй: существует огромное количество сторонней библиотеки и поддержки инструмента для кода, скомпилированного в байт-код Java и выполняющегося на виртуальной машине. Когда вы создаете новый язык, одна большая проблема заключается в том, что вам нужно создать все, что люди могут использовать с ним, или сделать его совместимым с чем-то другим (например, привязка к существующим статическим C-библиотекам или .Net или COM или Java VM). Открытая спецификация Java VM (erm, до сих пор), глубокая история и широкая применимость делают ее хорошей мишенью для новых языков.

Ответ 9

Потому что это не технология Microsoft. Как отмечали другие, существует множество оснований для использования JVM, но я думаю, что он будет немного менее популярен, если бы Microsoft CLR была столь же бесплатной, как переносная, и как открытая.

Ответ 10

Очевидные причины:

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