Почему так много новых языков написано для 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, чем вы думаете.