9

这可能是一个非常简单的问题,但是这类语言的技术术语是什么?

他们使用通过 JVM 或 CLR 发送的“中间”汇编类型语言。它们都是面向对象的,并且都依赖于诸如 Java 虚拟机或公共语言运行时之类的中介来编译为本机语言。

与 Asm/C/C++ 不同,它们不直接编译成本地机器语言,并且需要大量的内存分配知识。他们都使用垃圾收集。

是否有将 Java 和 C# 与 C++ 分开的技术术语?

4

9 回答 9

27

C++ 和 .NET/Java 之间的一个关键区别是自动回收不再需要的内存。这称为垃圾收集。对于此属性,它们被称为托管平台。

Java/.NET 都将字节码编译为本机代码延迟到最后一分钟。对于此属性,它们被称为JIT 编译(及时)。

C#/Java/C++ 语言被称为命令式、面向对象的语言。

.NET 和 Java 中的类型系统只允许可验证的方法调用。对于这个属性,它们被称为静态类型

C#/Java/C++ 是图灵完备的,这意味着在实践中,它们可以产生任何计算。

于 2008-10-14T07:58:25.007 回答
5

这些语言通常被称为“托管”语言。

于 2008-10-14T08:00:23.817 回答
4

它们有时被称为静态类型的托管编程语言。

于 2008-10-14T09:07:00.843 回答
4

中间表示更像是运行时系统的属性,而不是语言本身的属性。这些类型的系统通常称为字节码系统。

于 2008-10-14T07:59:21.323 回答
3

自从 Microsoft 推出 .NET 以来,他们开始使用“托管”一词来区分至少在逻辑上运行在虚拟机上的语言和运行在原始金属上的语言。这个词已经很流行了。

于 2008-10-14T08:00:35.297 回答
1

“托管”或“内存管理”或“垃圾收集”都是可以接受的术语,以根据内存的分配/收集方式来区分它们,尽管第一个可以说是当今最常见的。

至于编译成中间语言(IL),这取决于它们运行的​​虚拟机(VM)是如何工作的。在 .NET 中,公共语言运行时 (CLR) VM 在 IL 执行之前将其编译为机器代码,这称为即时编译或“JIT 编译”。其他环境实际上并不将代码编译为机器代码,而只是简单地解释它,这要慢得多,这被称为“解释”语言。

于 2008-10-14T07:58:49.170 回答
1

我相信它将是托管语言。

于 2008-10-14T08:00:03.550 回答
0

Intermediate "bytecode" representation is just an implementation detail. C++ can be compiled to, say, ANDF (Architecture Neutral Distribution Format). P-code used to be really popular. On the other hand, JavaCards are generally distributed without the ability to run the intermediate form, and there exists direct to machine code Java compilers.

C++ can be Garbage Collected. That should be more explicit in C++0x. Real-Time Java has restricted memory use for real-time threads.

So, a term for Java/C# type languages: Java dialects.

(Java is a trademark of Sun Microsystems, so is JavaScript.)

于 2008-10-14T13:19:27.463 回答
0

这取决于,如果您谈论的是它们在虚拟机上运行的事实,那么它们被视为 JIT 编译(即时)或字节码(逻辑上 1/2 编译和 1/2 解释)。

如果您在谈论垃圾收集,那么它们就简称为垃圾收集。

这里的关键点是这两个属性是分开的,垃圾收集语言不必有虚拟机,而基于虚拟机的语言不必进行垃圾收集。

例如,Python 是一种具有垃圾收集功能的解释型语言,但它被解释为与在虚拟机上运行相反。

于 2008-10-14T09:01:16.953 回答