Мир программного обеспечения немного обезумел из-за огромной гибкости любого компьютерного языка. После того, как вы усвоили идею компилятора, написанного на языке, который он компилирует, на что еще можно смотреть? Но … виртуальная машина Java JVM, написанная на JavaScript, кажется еще одним уровнем безумия.
На самом деле это вполне разумная идея, которая сводится с ума только из-за обычных позиций, которые обычно занимают Java, ведущая собака, и JavaScript, подчиненный. Java компилируется не в машинный код, а в специальный байтовый код, который затем запускается на виртуальной машине, которая обычно реализуется в собственном машинном коде. Однако ничто не мешает отважному программисту реализовать его на любом языке, который вы можете назвать. Единственная реальная проблема заключается в том, что вам нужна быстрая реализация, чтобы байтовый код работал с приемлемой скоростью.
До недавнего времени реализация JVM в JavaScript была затруднена из-за проблем с эффективностью, но скорость работы движков JavaScript резко возросла. Настолько, что одинокий программист, Артур Вентура, реализовал большую часть стандартной JVM с помощью JavaScript, и вы можете проверить код на Github.
Мотивация для этого очень хорошо изложена в блоге Артура. Он утверждает, что вместо того, чтобы встраивать JavaScript в веб-браузеры, у них должна быть виртуальная машина, чтобы можно было использовать любой язык. Помимо этого преимущества, он также указывает, что с подходом типа JVM вы получаете автоматическую песочницу, а простая отправка JVM на сервер обеспечивает постоянство, независимое от браузера.
Действительно, имеет гораздо больше смысла иметь встроенную JVM в браузер, но в противном случае почему бы просто не эмулировать JVM в JavaScript, который встроен в каждый браузер. Это всего лишь еще один аспект постоянного преобразования функций, предоставляемых плагинами, в реализации JavaScript — кодеки, pdf, архивирование и так далее.
После 6 месяцев работы результатом является BicaVM, который, как утверждается, выполняет 60% байтового кода. Он еще не был оптимизирован, но работает на iPad / iPhone и поддерживает интерфейс JNI для DOM.
Приведет ли это к чему-нибудь практическому?
Возможно нет. Это доказательство концепции, и идея о том, что браузер следует рассматривать как отдельную виртуальную машину, вовсе не безумна. Однако немного странно думать о том, что JavaScript действительно запускает Java-программы. Возможно, это ассемблер эпохи Интернета.