Каков технический термин для языков типов C # или Java? - PullRequest
9 голосов
/ 14 октября 2008

Вероятно, это очень простой вопрос, но каков технический термин для этого класса языка?

Они используют «промежуточный» язык типов ассемблера, который отправляется через JVM или CLR. Оба они являются объектно-ориентированными, и оба зависят от посредника, такого как виртуальная машина Java или Common Language Runtime, для компиляции в родной язык машин.

В отличие от Asm / C / C ++ они не компилируются непосредственно в машинный язык и требуют интенсивных знаний о распределении памяти. Они оба используют сборщик мусора.

Существует ли технический термин, который отделяет Java и C # от C ++?

Ответы [ 9 ]

27 голосов
/ 14 октября 2008

Ключевым отличием C ++ от .NET / Java является автоматическое восстановление памяти, которое больше не требуется. Это известно как сборщик мусора . Для этого свойства они известны как управляемые платформы.

Оба Java / .NET задерживают компиляцию байт-кода в нативный код до последней минуты. Для этого свойства они известны как JIT-скомпилированные (Just In Time).

Языки C # / Java / C ++ известны как императивные, объектно-ориентированные языки.

Система типов в .NET и Java допускает только проверяемый вызов методов. Для этого свойства они известны как статически типизированный .

C # / Java / C ++ Тьюринг завершен , что означает, что на практике они могут производить любые вычисления.

5 голосов
/ 14 октября 2008

Эти языки обычно называют «управляемыми» языками.

4 голосов
/ 14 октября 2008

Их иногда называют статически типизированными управляемыми языками программирования.

4 голосов
/ 14 октября 2008

Промежуточное представление является скорее свойством системы времени выполнения, чем самого языка. Эти типы систем часто называют Байт-кодом системами.

3 голосов
/ 14 октября 2008

С тех пор как Microsoft выпустила .NET, они начали использовать слово «удалось», чтобы различать языки, которые, по крайней мере логически, работают на виртуальной машине, и те, которые работают на сыром металле. Термин в основном завоевал популярность.

1 голос
/ 14 октября 2008

Я верю, что это будут управляемые языки.

1 голос
/ 14 октября 2008

«управляемый» или «управляемая память» или «сборщик мусора» - все это приемлемые термины, позволяющие различать их с точки зрения того, как распределяется / собирается память, хотя первое из них, возможно, является наиболее распространенным в настоящее время.

Что касается компиляции на промежуточный язык (IL), то это зависит от того, как работает виртуальная машина (ВМ), на которой они работают. В .NET общеязыковая среда исполнения (CLR) VM компилирует IL-код в машинный код непосредственно перед его выполнением, что называется компиляцией точно в срок или «JIT-компиляцией». Другие среды на самом деле не компилируют код в машинный код, а просто интерпретируют его, что значительно медленнее, и это известно как «интерпретируемый» язык.

0 голосов
/ 14 октября 2008

Промежуточное представление "байт-кода" - это просто деталь реализации. C ++ может быть скомпилирован, скажем, в ANDF (Архитектурный нейтральный формат распространения). Р-код раньше был очень популярен. С другой стороны, JavaCard, как правило, распространяются без возможности запуска промежуточной формы, и они существуют непосредственно для Java-компиляторов машинного кода.

C ++ можно собирать мусором. Это должно быть более явным в C ++ 0x. В реальном времени Java ограничил использование памяти для потоков в реальном времени.

Итак, термин для языков типа Java / C #: диалекты Java.

(Java является товарным знаком Sun Microsystems, также как и JavaScript.)

0 голосов
/ 14 октября 2008

Зависит от того, что если вы говорите о том, что они работают на виртуальной машине, то они рассматриваются как JIT-скомпилированные (Just-In-Time) или байт-коды (логически 1/2 скомпилированные и 1/2 интерпретируемые).

Если вы говорите о сборке мусора, то их просто называют сборщиком мусора.

Ключевым моментом здесь является то, что два атрибута являются отдельными, язык для сбора мусора не обязательно должен иметь виртуальную машину, и язык на основе виртуальной машины не должен быть сборщиком мусора.

В качестве примера Python - это интерпретируемый язык, в котором есть сборщик мусора, но он интерпретируется как не работающий на виртуальной машине.

...