Что такое технический термин для языков типа C# или Java?

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

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

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

Есть ли технический термин, который отделяет Java и C# от C++?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
998
9

Ответы 9

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

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

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

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

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

Можно также сказать, что они являются языками на основе http://en.wikipedia.org/wiki/ALGOL, поскольку это семейство, от которого они произошли.

James Fassett 14.10.2008 12:49

Управляемый код - это гораздо больше, чем сборка мусора; автоматическая проверка и т. д. доказывают, например, что код не может вести себя запрещенными способами. Платформы со сборкой мусора просто называются платформами со сборкой мусора :)

Calum 14.10.2008 12:59

Калум прав: «управляемое» на самом деле не связано с управлением памятью.

Kristopher Johnson 14.10.2008 16:34

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

Niels van der Rest 04.10.2010 16:23

@Niels, отредактировал, чтобы избежать путаницы. Действительно, даже командные файлы Windows являются полными по Тьюрингу, так что да, конечно, C# тоже.

Drew Noakes 04.10.2010 16:41

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

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

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

Я также видел термин "псевдо-скомпилированный"

Guido 14.10.2008 12:06

Я согласен с твоей точкой зрения. Это особенно просто заметить в среде .NET, где среда выполнения и язык (языки), которые вы можете использовать для таргетинга на RT, более явно разные вещи.

Juan Pablo Califano 14.10.2008 17:25

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

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

С тех пор, как 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.)

Другие вопросы по теме