Почему код Java необходимо скомпилировать, но код JavaScript не - программирование
Подтвердить что ты не робот

Почему код Java необходимо скомпилировать, но код JavaScript не

Почему код, написанный на Java, должен быть скомпилирован в байт-коде, который интерпретируется JVM, но код, написанный на языке JavaScript, не нужно компилировать и запускать непосредственно в браузере?

Есть ли простой способ понять это?

В чем основное отличие между тем, как эти два языка написаны, что может помочь понять это поведение?

Я не студент CS, поэтому, пожалуйста, извините наивность вопроса.

4b9b3361

Ответ 1

Исторически JavaScript был интерпретированным языком. Это означает, что интерпретатор принимает исходный код и выполняет все это за один шаг. Преимущество здесь - простота и гибкость, но переводчики очень медленные. Компиляторы преобразуют язык высокого уровня на язык более низкого уровня, который может выполнять непосредственно собственный процессор или виртуальная машина (в данном случае виртуальная машина Java). Это намного быстрее.

JavaScript в современных браузерах теперь составлен на лету. Поэтому, когда загружается script, первое, что делает механизм JavaScript, - это скомпилировать его в байт-код и затем выполнить его. Причина, по которой весь этап компиляции отсутствует в перспективе конечного пользователя, заключается в том, что разработчики браузеров (к счастью) поддержали требование о том, что JavaScript явно не скомпилирован.

Java был из языка getgo, который всегда имел явный шаг компиляции. Но во многих случаях это не так. IDE, например IntelliJ или Eclipse, может компилировать Java на лету и во многих случаях удалять явный шаг компиляции.

Ответ 2

JavaScript и Java - это не одно и то же. Они могут иметь сходное имя, но я отсылаю вас к , чтобы помочь понять, что они действительно не связаны с все.

Реальность заключается в том, что нет ничего, что останавливало бы язык Java как интерпретируемый язык, и в равной степени ничто не останавливало бы JavaScript как скомпилированный язык (механизм JavaScript javascript делает компиляцию для повышения скорости и делает очень хорошую работу).

В контексте браузера Java работает так же, как Flash или Silverlight - требуется плагин, и браузер действует как хост этого плагина; в котором размещена среда выполнения Java.

Javascript был разработан как язык сценариев для браузера, и поэтому браузер может понять его изначально. Однако, как браузер фактически выполняет запуск этого кода, он полностью зависит от браузера. То есть - он может функционировать исключительно на уровне script, предполагая нулевое знание следующей строки кода и выполняющий чисто программный стек; или он может выполнить некоторую JIT, чтобы получить код ближе к оборудованию и (надеюсь) повысить скорость.

Ответ 3

Любой язык может быть скомпилирован и интерпретирован. В обоих случаях часть программного обеспечения должна читать исходный код, разделять его, анализировать и т.д., Чтобы проверить определенные требования, а затем назначить значение для каждой части программы. Единственное различие заключается в том, что компилятор затем начинает генерировать код с (почти) тем же значением на другом языке (байт-код JVM или JavaScript или машинный код или что-то совсем другое), в то время как интерпретатор немедленно выполняет значение программы.

Теперь, на практике это и проще, и сложнее. Это проще на многих языках, которые лучше подходят для одного из двух - Java статически типизирован, и относительно малозначительно о программировании существует относительно небольшая динамика, поэтому вы можете скомпилировать ее и, таким образом, выполнить некоторую работу, которая в противном случае должна была бы быть выполнена на во время выполнения. JavaScript динамически типизирован, и вы не можете решить много вещей (например, добавляется ли + или конкатенация) до времени выполнения, поэтому компиляция не дает вам большой производительности. Однако сочетание компилятора и интерпретатора (компиляция с упрощенным промежуточным представлением, затем интерпретация и/или компиляция) становится все более популярным среди динамических языковых реализаций. И тогда возникает тот факт, что современные реализации JavaScript компилируются, а на самом деле V8 никогда ничего не интерпретирует.

Ответ 4

Из-за сложности компиляции уровня между Java и Javascript в Javascript есть некоторые ограничения. Поскольку байт-код выполняется на платформе JVM, которая написана для конкретной ОС, а исполнение аппаратного байт-кода имеет больше преимуществ для доступа к системным ресурсам. Даже C-код также может быть встроен в Java-байт-код. С другой стороны, поскольку Javascript работает только в браузере, это меньше связано с ним.

на платформе Java есть две основные части. Язык программирования Java и JVM. Это заставляет каждую часть сосредоточиться только на своей области. Вот почему JVM не делает deal с синтаксисом программирования Java. Это похоже на то, что при запуске C-кода ссылка не связана с кодом C, а с сборкой.

Байт-код на платформе JVM, вероятно, является сборкой в ​​C.

В конце концов все представления преобразуются в двоичное представление, а затем как-то электические сигналы. Это доказывает, что нам нужны уровни программирования.