Common Language Runtime
[Introducción al Common Language Runtime]

(¿Como funciona el Common Language Runtime?)

Fecha: 02/May/2005 (01/Mayo/2005)
Autor: Alejandro Domingo Velazquez Cruz [email protected]

 

 Por favor no se olviden de calificar este articulo, su opinión cuenta, buena o mala será tomada en cuenta

El Common Language Runtime


El Common Language Runtime o CLR es el motor de la plataforma. NET, es el encargado de gestionar la ejecución de las aplicaciones
.NET, a las cuales ofrece númerosos servicios para simplificar su desarrollo, favoreciendo con ello su fiabilidad y seguridad, sus
principales caracteristicas y servicios que proporciona son:

Modelo de programación consistente: A todos los servicios ofrecidos por el CLR se accede de la misma forma: a través de un
modelo de programación orientada a objetos. Esto marca diferencia importante respecto al modo de acceso a los servicios que
ofrecen algunos de los sistemas operativos actuales, como por ejemplo la familia Windows, en la cual se accede a los servicios
a traves de llamadas a funciones globales definidas en DLLs y a otros a traves de objetos COM en el caso mencionado.

Modelo de programación sencillo: Con el CLR desaparecen muchos elementos complejos incluidos en los sistemas operativos
actuales (registro de Windows, GUIDs, HRESULTS, IUnknown, etc.) El CLR no oculta al programador esta parte del Sistema Operativo,
sino que simplemente no existen estos elementos en la plataforma .NET, entre los cuales uno de los mas conocidos es el "infierno de
las DLL´s", esto se debia a que al sustituir versiones viejas de las DLL´s, al actualizarlas por otras nuevas algunos programas
podian errar en su ejecucion si las nuevas versiones no son 100% compatibles con las anteriores, en la plataforma .NET las versiones
nuevas y viejas de DLL´s pueden coexistir sin problemas, de modo que las aplicaciones diseñadas para las DLL´s anteriores pueden
seguir ejecutandose, mientras que otros programas sacan provecho de las nuevas versiones de las DLL´s

Ejecución multiplataforma: El CLR actúa como una máquina virtual, encargándose de ejecutar las aplicaciones diseñadas para la
plataforma .NET. Es decir, cualquier plataforma para la que exista una versión del CLR podrá ejecutar cualquier aplicación .NET.
Microsoft ha desarrollado versiones del CLR para la mayoría de las versiones de Windows: Windows 95, Windows 98, Windows ME,
Windows NT 4.0, Windows 2000, Windows XP y Windows CE (que puede ser usado en CPUs que no sean de la familia x86) Por otro
lado Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y también hay terceros que están desarrollando de
manera independiente versiones de libre distribución del CLR para Linux. Asímismo, dado que la arquitectura del CLR está totalmente
abierta, es posible que en el futuro se diseñen versiones del mismo para otros sistemas operativos.
Integración de lenguajes: Desde cualquier lenguaje para el que exista un compilador que genere código para la plataforma .NET
es posible utilizar código generado para la misma usando cualquier otro lenguaje tal y como si de código escrito usando el primero
se tratase.

Aislamiento de procesos: El CLR asegura que desde código perteneciente a un determinado proceso no se pueda acceder a código
o datos pertenecientes a otro, lo que evita errores de programación muy frecuentes e impide que unos procesos puedan atacar
a otros. Esto se consigue gracias al sistema de seguridad de tipos antes comentado, pues evita que se pueda convertir un
objeto a un tipo de mayor tamaño que el suyo propio, ya que al tratarlo como un objeto de mayor tamaño podría accederse a
espacios en memoria ajenos a él que podrían pertenecer a otro proceso.

Tratamiento de excepciones: En el CLR todo los errores que se puedan producir durante la ejecución de una aplicación se
propagan de igual manera: mediante excepciones. Esto es muy diferente a como se venía haciendo en los sistemas Windows hasta
la aparición de la plataforma .NET, donde ciertos errores se transmitían mediante códigos de error en formato Win32, otros
mediante HRESULTs y otros mediante excepciones. El CLR permite que excepciones lanzadas desde código para .NET escrito en un
cierto lenguaje se puedan capturar en código escrito usando otro lenguaje, e incluye mecanismos de depuración que pueden
saltar desde código escrito para .NET en un determinado lenguaje a código escrito en cualquier otro.

Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en múltiples hilos de ejecución que pueden ir
evolucionando por separado en paralelo o intercalándose, según el número de procesadores de la máquina sobre la que se
ejecuten. Las aplicaciones pueden lanzar nuevos hilos, destruirlos, suspenderlos por un tiempo o hasta que les llegue una
notificación, enviarles notificaciones, sincronizarlos, etc.

Distribución transparente: El CLR ofrece la infraestructura necesaria para crear objetos remotos y acceder a ellos de manera
completamente transparente a su localización real, tal y como si se encontrasen en la máquina que los utiliza.

Seguridad avanzada: El CLR proporciona mecanismos para restringir la ejecución de ciertos códigos o los permisos asignados a
los mismos según su procedendecia o el usuario que los ejecute. Es decir, puede no darse el mismo nivel de confianza a código
procedente de Internet que a código instalado localmente o procedente de una red local; puede no darse los mismos permisos a
a un mismo código según el usuario que lo esté ejecutando o según el rol que éste desempeñe.

Gestión de memoria: El CLR incluye un recolector de basura que evita que el programador tenga que tener en cuenta cuándo ha
de destruir los objetos que dejen de serle útiles. Este recolector es una aplicación que se activa cuando se quiere crear
algún objeto nuevo y se detecta que no queda memoria libre para hacerlo, caso en que el recolector recorre la memoria
dinámica asociada a la aplicación, detecta qué objetos hay en ella que no puedan ser accedidos por el código de la
aplicación, y los elimina para limpiar la memoria de "objetos basura" y permitir la creación de otros nuevos.

Interoperabilidad con código antiguo: El CLR incorpora los mecanismos necesarios para poder acceder desde código escrito para
la plataforma .NET a código escrito previamente a la aparición de la misma y, por tanto, no preparado para ser ejecutando
dentro de ella. Estos mecanismos permiten tanto el acceso a objetos COM como el acceso a funciones sueltas de DLLs
preexistentes (como la API Win32).

Y en respuesta directa a lo preguntado: ¿Se ejecuta un CLR por cada aplicación?, No, solo existe un único CLR para gestionar
todo el código administrado, cada que se utiliza alguna de las funcionalidades se llama al CLR, el CLR provee la funcionalidad
y en ese momento acepta la siguiente solicitud de la siguiente aplicación. Notese que el CLR no atiende necesariamente un unico
proceso a la vez. El CLR puede manejar multiples hilos de varios programas de manera simultanea, como algunos dicen es una
maquina virtual no convencional, java al igual es una maquina virtual pero utiliza codigo interpretado o bytecodes, de forma
similar el CLR tiene codigo intermedio IL que seria el equivalente a los bytecodes de Java, pero la diferencia radica en que
antes de ejecutarse la aplicacion se compila el codigo, por tanto el usuario utiliza solo codigo compilado.


AVISO: Impartiré unos cursos en linea TOTALMENTE GRATUITOS en la página http://groups.msn.com/MUGVeracruz


ir al índice