В табличке отличий Java от JS указано, что Java компилируется, а JS интерпретируется.
Разве не все языки переводятся в двоичный код?
Java
Что имеется в виду? Компиляция-интерпретация.
Да, в обоих случаях производится перевод в двоичный код виртуальной машины. Разница в том, сколько понадобится процессорных команд для выполнения одной команды виртуальной машины. Для компилируемого языка (статическая типизация) система команд виртуальной машины почти не отличается от системы команд процессора - выполнение команды виртуальной машины требует минимального кол-ва процессорных команд, виртуальная машина работает быстро. Для интерпретируемого языка (динамическая типизация) каждая команда виртуальной машины требует большого кол-ва процессорных команд, виртуальная машина работает медленно.
Присваивание числа переменной в Java (существование переменной и её тип проверены на этапе компиляции): записать число в ячейку оперативной памяти.
Присваивание числа переменной в JavaScript (на этапе компиляции сгенерирован код присваивания, но никаких проверок существования / типа переменной не производилось): найти имя переменной в таблицах переменных, начиная с таблицы локальных переменных; если переменная не найдена - создать её в таблице глобальных переменных; записать значение + тип значения в структуру, на которую ссылается найденная / созданная переменная.
В результате интерпретируемые языки примерно в 10 раз медленнее компилируемых.
Присваивание числа переменной в Java (существование переменной и её тип проверены на этапе компиляции): записать число в ячейку оперативной памяти.
Присваивание числа переменной в JavaScript (на этапе компиляции сгенерирован код присваивания, но никаких проверок существования / типа переменной не производилось): найти имя переменной в таблицах переменных, начиная с таблицы локальных переменных; если переменная не найдена - создать её в таблице глобальных переменных; записать значение + тип значения в структуру, на которую ссылается найденная / созданная переменная.
В результате интерпретируемые языки примерно в 10 раз медленнее компилируемых.
Java компилируется в промежуточный код виртуальной Java-машины, потом этот код интерпретируется (очень быстро). JS интерпретируется непосредственно из исходного текста. А исполняются команды процессора, конечно, на уровне двоичного кода.
По простому когда код интерпретируется это означает что сразу выполняется по строчкам, когда компилируется компилятор сначала смотрит что ему подсунули, делает из этого свои выводы и только после этого выполняет код
1. Компиляция это преобразование программы из одного языка в другой или в машинный код.
2. Интерпретация это непосредственное выполнение программы.
3. Java и JS компилируются.
2. Интерпретация это непосредственное выполнение программы.
3. Java и JS компилируются.
>> Что имеется в виду? Компиляция-интерпретация.
1. Компиляция это специальный процесс который должен быть выполнен до того как программа сможет быть запущенна на выполнение на специальной выполняющей машине. Суть этого процесса это из языка программирования создать поток машинных инструкций если по простому то перевести с языка человека на язык машины.
2. Интерпритация - это то же процесс выполняемый специальной машиной которую называют интерпретатором. Суть этого процесса это интерпретировать код программы и сразу же исполнять полученные инструкции.
>> В табличке отличий Java от JS указано, что Java компилируется, а JS интерпретируется.
Данные в такой табличке являются бредом сивой кобылы не знакомой ни с тем как работает JVM (Java) ни с тем как исполняется JavaScript в современных браузерах.
1. Компиляция это специальный процесс который должен быть выполнен до того как программа сможет быть запущенна на выполнение на специальной выполняющей машине. Суть этого процесса это из языка программирования создать поток машинных инструкций если по простому то перевести с языка человека на язык машины.
2. Интерпритация - это то же процесс выполняемый специальной машиной которую называют интерпретатором. Суть этого процесса это интерпретировать код программы и сразу же исполнять полученные инструкции.
>> В табличке отличий Java от JS указано, что Java компилируется, а JS интерпретируется.
Данные в такой табличке являются бредом сивой кобылы не знакомой ни с тем как работает JVM (Java) ни с тем как исполняется JavaScript в современных браузерах.
> Разве не все языки переводятся в двоичный код?
Не все.
Некоторые исполняются непосредственно из исходного кода, строчка за строчкой - интерпретируются.
Некоторые переводятся из одного языка в другой. Например, первый компилятор C++ переводил код из C++ в язык C.
Некоторые переводятся сначала в промежуточный двоичный код виртуальной машины. Этим баловался ещё Вирт (создатель Паскаля).
> В табличке отличий Java от JS указано, что Java компилируется, а JS интерпретируется.
Это так, но есть нюансы...
Компиляторы существуют двух видов - AOT (ahead of time) и JIT (just in time). AOT переводит из одного языка в другой перед исполнением, JIT во время исполнения.
В теории, т. е. согласно спецификациям языка, ECMAscript (javascript) обязан быть, как минимум, интерпретатором, а java обязана быть AOT компилятором в двоичный код виртуальной машины и, возможно, поддерживать JIT компиляцию на ряду с интерпретацией кода виртуальной машины.
На практике, все несколько сложнее. Например, в большинстве реализаций java есть AOT компилятор в двоичный код виртуальной машины, интерпретатор и JIT компилятор. А есть реализация где есть AOT компиляция в машинный код. Примерно такая же мешанина и с javascript
Не все.
Некоторые исполняются непосредственно из исходного кода, строчка за строчкой - интерпретируются.
Некоторые переводятся из одного языка в другой. Например, первый компилятор C++ переводил код из C++ в язык C.
Некоторые переводятся сначала в промежуточный двоичный код виртуальной машины. Этим баловался ещё Вирт (создатель Паскаля).
> В табличке отличий Java от JS указано, что Java компилируется, а JS интерпретируется.
Это так, но есть нюансы...
Компиляторы существуют двух видов - AOT (ahead of time) и JIT (just in time). AOT переводит из одного языка в другой перед исполнением, JIT во время исполнения.
В теории, т. е. согласно спецификациям языка, ECMAscript (javascript) обязан быть, как минимум, интерпретатором, а java обязана быть AOT компилятором в двоичный код виртуальной машины и, возможно, поддерживать JIT компиляцию на ряду с интерпретацией кода виртуальной машины.
На практике, все несколько сложнее. Например, в большинстве реализаций java есть AOT компилятор в двоичный код виртуальной машины, интерпретатор и JIT компилятор. А есть реализация где есть AOT компиляция в машинный код. Примерно такая же мешанина и с javascript
Похожие вопросы
- Ошибка компиляции: ошибка в java
- Бог создал любей по своему образу и подобию имеется в виду качества Его сущьности. А человек отдалившись от Бога ...
- Почему в стране не осталось патриотов? (не УАЗики имеются в виду) (не УАЗики имеются в виду)
- Я что-то не "допетриваю"....это какие имеются в виду БЕСПЛАТНЫЕ проезды на всех видах транспорта
- Подскажите, можно продать жилье за один день. Имеется в виду процедура в регистрационной палате?
- А когда люди говорят, сглазили. Это что имеется в виду? (ситуация вн)
- Вопрос воспитателем ДОУ. В чем вы ходите на работу? Имеется в виду, в каких вещах работаете в группе?
- Подскажите,как проехать до Киева через Брянск от Москвы на общественном транспорте 3 ноября вечером?(имеется в вид
- Как вы думаете, какой город имелся в виду под именем «Куяба» ? Объясните свою точку зрения.
- Очень нравится---СИРЕНЬ... Имеется множество видов её...Расскажите о них... А также---есть ли Легенда о СИРЕНИ.. какая?..))
И делается все это с помощью магии, добрых фей и волшебных палочек.
Без всяких АЛУ и машинного кода.
Таких интерпретаторов давно не существует. В современном мире код практически всех языков программирования компилируется в исполняемый код. И не важно, будет это машинный код реального процессора или байт-код виртуальной машины.
Различие интерпретируемых / компилируемых языков в современном мире определяется свойствами виртуальных машин, которые необходимы для выполнения скомпилированного кода.
JIT компилятор компилирует в машинный код не исходный код программы, а байт-код виртуальной машины. Так что JIT - это дополнение к AOT, а не альтернатива.