Слишком много семантики и утверждений, основанных на мнении.
Во-первых: C # не интерпретируемый язык; CLR и JVM считаются «средами выполнения» или «промежуточным программным обеспечением», но то же имя применяется к таким вещам, как Perl. Это создает путаницу среди людей, озабоченных именами.
Термин «интерпретатор», относящийся к среде выполнения, обычно означает, что существующий код интерпретирует некоторый неродной код. Есть две большие парадигмы: синтаксический анализ читает необработанный исходный код и выполняет логические действия; Выполнение байт-кода сначала компилирует код в неродное двоичное представление, для интерпретации которого требуется гораздо меньше циклов ЦП.
Изначально Java была скомпилирована в байт-код, а затем прошла через интерпретатор; теперь JVM считывает байт-код и своевременно компилирует его в собственный код. CIL делает то же самое: CLR использует своевременную компиляцию собственного кода.
Рассмотрите все комбинации выполнения исходного кода, выполнения байт-кода, компиляции в собственный, своевременной компиляции, выполнения исходного кода через компилятор в своевременный исходный код и т. Д. Семантика компилирования или интерпретации языка становится бессмысленной.
В качестве примера: многие интерпретируемые языки используют своевременную компиляцию байт-кода. C # компилируется в CIL, который JIT компилируется в родной; Напротив, Perl немедленно компилирует сценарий в байт-код, а затем запускает этот байт-код через интерпретатор. Вы можете запускать сборку C # только в формате байт-кода CIL; вы можете запускать Perl-скрипт только в формате необработанного исходного кода.
Оперативные компиляторы также используют множество внешних и внутренних инструментов. Среда выполнения отслеживает выполнение различных функций, а затем корректирует макет кода для оптимизации ветвей и организации кода для конкретного потока выполнения. Это означает, что код JIT может работать быстрее, чем код, скомпилированный в машинном коде (как обычно C ++ или как C # работает через IL2CPP), потому что JIT подстраивает свою стратегию оптимизации к фактическому случаю выполнения кода во время его выполнения.
Добро пожаловать в мир компьютерного программирования. Мы решили сделать его предельно сложным, а затем присвоить всему непонятные имена. Цель состоит в том, чтобы вызвать ожесточенную войну из-за определения слов, не имеющих практического значения.
person
John Moser
schedule
17.01.2016