[.NET] Conociendo la plataforma .NET un poco más a fondo.


El Common Language Infrastructure (CLI)

El Common Language Infrastructure (CLI) es un estándar ECMA (especificación 335) que especifica la infraestructura de tiempo de ejecución necesaria para ejecutar el código administrado, para permitir que diferentes bibliotecas y lenguajes puedan trabajar juntos sin problemas. En el momento en que se inició el proyecto .NET en Microsoft a finales de los 90, estaba claro que la clave del éxito en el espacio de interoperabilidad entre lenguajes fue involucrar a grupos de diseñadores de lenguajes tanto dentro de la empresa como fuera de ella para asegurar la robustez del diseño. Como parte de esta iniciativa, Microsoft formó un equipo con Hewlett-Packard e Intel para trabajar en la estandarización de la CLI, que tuvo lugar en 2001.

Una implementación de CLI es el Common Language Runtime suministrado por Microsoft, aunque existen otras implementaciones que se ejecutan en otras plataformas como FreeBSD, por lo que esto significa que el código escrito para .NET, no sólo permite la interoperabilidad entre lenguajes sino que también permite ejecutar código en distintas plataformas de Sistemas Operativos.

El Common Language Infrastructure tiene tres componentes:

  • Virtual Execution System (VES).

Proporciona un entorno para la ejecución de código administrado, define una máquina virtual y un modelo de manejo de excepciones, y sabe cómo ejecutar el código definido en el estándar. El formato del conjunto de instrucciones de código se denomina Common Intermediate Language (CIL) y los metadatos se usan para describir toda la información relativa al código administrado. Esto hace que el formato de los ensamblados aseguren la compatibilidad entre diversas plataformas.

  • Common Type System (CTS):

Es un conjunto común de tipos de datos que cualquier lenguaje que cumple con la especificación debe soportar. Unifica la representación y el comportamiento de los tipos de datos compartidos por todos los lenguajes de la plataforma .NET. Un ejemplo es que antes de la existencia de .NET, un char* en C es diferente a un BSTR en COM, pero en la plataforma .NET, una cadena String de C# no difiere de una usada en Visual Basic .NET o en cualquier otro lenguaje .NET.

  • Common Language Specification (CLS):

Define un conjunto de características en las que se deben basar los lenguajes de programación para determinar si el tipo de dato cumple con la especificación. Si las reglas se cumplen, se marca como CLS-compliant. Esto significa que todos los lenguajes .NET son capaces de interactuar con él.

En la siguiente imagen se muestra la relación entre los tres elementos principales de la infraestructura.

common-language-infrastructure

La relación entre el CTS, el CLS y algunos lenguajes .NET se muestran en la siguiente imagen. Se puede observar que los lenguajes proveen un superconjunto de características sobre el CLS. Por ejemplo C# puede crear tipos con miembros en los que difieren en el nombre con mayúsculas o minúsculas (case-sensitive), esto no es CLS-compliant, y también se observa que, como en C++ una de las características suyas es el soporte para herencia múltiple, ese código generado con herencia múltiple no puede ser ejecutado en modo administrado si no que se ejecuta en modo nativo.

La Base Class Library (BCL) que provee .NET Framework está escrito de tal manera que es CLS-compliant por lo que se deduce que dicha biblioteca está disponible para todos los lenguajes .NET.

common-type-structure

Con este artículo hemos aprendido un poquito más cómo se compone la plataforma de Microsoft .NET.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s