2008-10-14 22 views
9

Esta es probablemente una pregunta muy simple, pero ¿cuál es el término técnico para esta clase de lenguaje?¿Cuál es el término técnico para los lenguajes de tipo C# o Java?

Utilizan un lenguaje de tipo ensamblaje "intermedio" que se envía a través de JVM o CLR. Ambos están orientados a objetos y ambos dependen de un intermediario como la Máquina Virtual Java o el Common Language Runtime para compilar en el lenguaje de máquinas nativas.

A diferencia de Asm/C/C++ no se compilan directamente en el lenguaje nativo de la máquina y requieren un conocimiento intensivo de asignación de memoria. Ambos usan recolección de basura.

¿Existe un término técnico que separe Java y C# de C++?

Respuesta

27

Una diferencia clave entre C++ y .NET/Java es la recuperación automática de memoria que ya no es necesaria. Esto se conoce como recolección de basura. Para esta propiedad, se les conoce como plataformas administradas.

Ambos Java/.NET retrasan la compilación de bytecode en código nativo hasta el último minuto. Para esta propiedad se les conoce como JIT-compiled (Just In Time).

Los idiomas C#/Java/C++ se conocen como imprescindibles, lenguajes orientados a objetos.

El sistema de tipos tanto en .NET como en Java solo permite la invocación de métodos verificables. Para esta propiedad se les conoce como tipado estáticamente.

C#/Java/C++ son Turing complete, lo que significa que, en la práctica, pueden producir cualquier cálculo.

+0

También se podría decir que son [http://en.wikipedia.org/wiki/ALGOL](http://en.wikipedia .org/wiki/ALGOL), ya que esa es la familia de la que se derivan. –

+0

Hay mucho más para el código administrado que la recolección de basura; la validación automática, etc., demuestra que el código no puede comportarse de manera no permitida, por ejemplo. Las plataformas recolectadas basura simplemente se llaman plataformas recolectadas de basura :) – Calum

+0

Calum tiene razón: "administrado" realmente no se trata de la administración de la memoria. –

1

'administrado' o 'administrado por memoria' o 'basura recolectada' son todos términos aceptables para distinguirlos en términos de cómo se asigna/recolecta la memoria, aunque el primero es posiblemente el más común hoy en día.

En cuanto a compilar en un lenguaje intermedio (IL), depende de cómo funciona la máquina virtual (VM) en la que funcionan. En .NET, la máquina virtual Common Language Runtime (CLR) compila el IL al código máquina justo antes de que se ejecute, lo que se conoce como compilación justo a tiempo, o 'JIT compilation'. En realidad, otros entornos no compilan el código en código máquina, sino que simplemente lo interpretan, lo que es significativamente más lento, y esto se conoce como un lenguaje "interpretado".

4

La representación intermedia es más una propiedad del sistema de tiempo de ejecución que del lenguaje en sí. Estos tipos de sistemas a menudo se llaman sistemas Bytecode.

+0

También he visto el término "pseudo-compilado" –

+0

Estoy de acuerdo con su punto. Esto es especialmente simple de observar en el entorno .NET, donde el tiempo de ejecución y los idiomas que puede usar para apuntar a ese RT son cosas más claramente diferentes. –

1

Creo que serían los idiomas administrados.

5

Esos idiomas se conocen comúnmente como idiomas "administrados".

3

Desde que Microsoft salió con .NET, comenzaron a usar la palabra "administrado" para distinguir entre lenguajes que, al menos lógicamente, se ejecutan en una máquina virtual y aquellos que se ejecutan en el metal en bruto. El término en general se ha puesto de moda.

0

Depende, si está hablando del hecho de que se ejecutan en una máquina virtual, entonces se consideran como JIT-compiled (Just-In-Time) o bytecode (lógicamente 1/2 compilado y 1/2 interpretado).

Si usted está hablando acerca de la recolección de basura y luego se les conoce como basura recogida, simplemente.

El punto clave aquí es los dos atributos son independientes, un lenguaje de basura recogida no tiene que tener una máquina virtual y un lenguaje basado en máquina virtual no tiene por qué ser el recolector de basura.

Como ejemplo Python es un lenguaje interpretado que tiene recolección de basura, pero se interpreta en lugar de correr en una máquina virtual.

4

A veces se conocen como lenguajes de programación gestionados de tipo estático.

0

La representación intermedia de "bytecode" es solo un detalle de implementación. C++ se puede compilar, por ejemplo, ANDF (Formato de distribución neutral de arquitectura). El código P solía ser muy popular. Por otro lado, las JavaCards se distribuyen generalmente sin la capacidad de ejecutar la forma intermedia, y existen compiladores Java de código directo.

C++ puede ser basura recolectada. Eso debería ser más explícito en C++ 0x. Java en tiempo real tiene uso restringido de memoria para hilos en tiempo real.

Por lo tanto, un término para Java/C# idiomas Tipo: dialectos Java.

(Java es una marca registrada de Sun Microsystems, por lo que es JavaScript.)

Cuestiones relacionadas