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





Ключевое различие между C++ и .NET / Java - это автоматическое освобождение памяти, которая больше не требуется. Это известно как вывоз мусора. По этому свойству они известны как платформы удалось.
Оба Java / .NET задерживают компиляцию байт-кода в машинный код до последней минуты. За это свойство они известны как JIT-скомпилированный (Just In Time).
Языки C# / Java / C++ известны как языки императивный, объектно-ориентированный.
Система типов как в .NET, так и в Java допускает только проверяемый вызов методов. За это свойство они известны как статически типизированный.
C# / Java / C++ - это Тьюринг завершен, что означает, что на практике они могут производить любые вычисления.
Управляемый код - это гораздо больше, чем сборка мусора; автоматическая проверка и т. д. доказывают, например, что код не может вести себя запрещенными способами. Платформы со сборкой мусора просто называются платформами со сборкой мусора :)
Калум прав: «управляемое» на самом деле не связано с управлением памятью.
Чем завершена Java Turing, а C# / C++ - нет? Согласно Статья в Википедии, условное ветвление - это все, что требуется для завершения по Тьюрингу, что не является уникальным для Java. Я что-то упустил?
@Niels, отредактировал, чтобы избежать путаницы. Действительно, даже командные файлы Windows являются полными по Тьюрингу, так что да, конечно, C# тоже.
«управляемая», «управляемая памятью» или «сборщик мусора» - все это приемлемые термины, чтобы различать их с точки зрения распределения / сбора памяти, хотя первый из них, пожалуй, является наиболее распространенным в настоящее время.
Что касается компиляции на промежуточный язык (IL), это зависит от того, как работает виртуальная машина (VM), на которой они работают. В .NET виртуальная машина общеязыковой среды выполнения (CLR) компилирует IL в машинный код непосредственно перед его выполнением, что известно как JIT-компиляция или JIT-компиляция. В других средах код фактически не компилируется в машинный код, а просто интерпретируется, что значительно медленнее и называется «интерпретируемым» языком.
Промежуточное представление - это скорее свойство исполняющей системы, чем самого языка. Эти типы систем часто называют системами Байт-код.
Я также видел термин "псевдо-скомпилированный"
Я согласен с твоей точкой зрения. Это особенно просто заметить в среде .NET, где среда выполнения и язык (языки), которые вы можете использовать для таргетинга на RT, более явно разные вещи.
Я считаю, что это будут управляемые языки.
Эти языки обычно называют «управляемыми» языками.
С тех пор, как Microsoft выпустила .NET, они начали использовать слово «удалось», чтобы различать языки, которые, по крайней мере логически, работают на виртуальной машине, и те, которые работают на чистом железе. Этот термин в основном прижился.
Это зависит от того, если вы говорите о том факте, что они работают на виртуальной машине, тогда они рассматриваются как JIT-скомпилированные (Just-In-Time) или байт-коды (логически 1/2 скомпилированы и 1/2 интерпретированы).
Если вы говорите о сборке мусора, то они просто называются сборщиком мусора.
Ключевым моментом здесь является то, что эти два атрибута разделены, язык со сборкой мусора не обязательно должен иметь виртуальную машину, а язык на основе виртуальной машины не должен быть сборщиком мусора.
Например, Python - это интерпретируемый язык, в котором есть сборка мусора, но он интерпретируется, а не запускается на виртуальной машине.
Иногда их называют статически типизированными управляемыми языками программирования.
Промежуточное представление «байт-кода» - это всего лишь деталь реализации. C++ может быть скомпилирован, скажем, в ANDF (архитектурно-нейтральный формат распределения). Раньше P-код был очень популярен. С другой стороны, карты JavaCard обычно распространяются без возможности запуска промежуточной формы, и существуют компиляторы Java, напрямую связанные с машинным кодом.
C++ может собирать мусор. Это должно быть более явным в C++ 0x. Java в реальном времени ограничивает использование памяти для потоков реального времени.
Итак, термин для языков типа Java / C#: диалекты Java.
(Java является товарным знаком Sun Microsystems, как и JavaScript.)
Можно также сказать, что они являются языками на основе http://en.wikipedia.org/wiki/ALGOL, поскольку это семейство, от которого они произошли.