El CLR (Common Language Runtime)
El CLR o Common Language Runtime es el entorno que administra la ejecución de código y proporciona los servicios para desarrollo de las aplicaciones, así como también todos los elementos requeridos por los lenguajes, Visual Basic .NET, C# y otros de .NET.
Los tipos de datos son comunes a todos los lenguajes y son provistos por el Common Type System (CTS o sistema de tipos comunes) del CLR. Cada tipo de dato tiene su propia sintaxis en su lenguaje de programación correspondiente, pero, al ser tomados por el CLR, esos tipos son iguales.
Esto se debe a que uno de los principales objetivos de la plataforma .NET fue ser independiente del lenguaje de programación elegido para el desarrollo de aplicaciones. Por eso se creó la Common Language Specification (CLS o especificación de lenguaje común), que define y estandariza un conjunto de las características soportadas por el CLR que son necesarias en la mayoria de las aplicaciones. Todos los componentes desarrollados y compilados de acuerdo con esta especificación pueden interactuar entre sí, independientemente del lenguaje en el que fueron escritos.
Microsoft proporciona, junto con el .NET Framework, las implementaciones de cuatro lenguajes compatibles con CLS, y sus compiladores:
.- Microsoft Visual Basic .NET
.- Microsoft Visual C# .NET
.- Microsoft J# .NET
.- Microsoft C++ .NET
Esto significa que una aplicación escrita en Visual Basic .NET, por ejemplo, puede incorporar sin problemas nuevas partes escritas en C# o C++ .NET.
Dado que la especificación CLS es un estándar público, ha permitido que otros diseñadores de lenguajes y compiladores desarrollen más de 20 lenguajes y compliladores compatibles con ella y, por lo tanto, compatibles entre sí y con los lenguajes desarrollados por MIcrosoft. Todos los componentes y aplicaciones creados bajo estas especificaciones se dice que son código administrado, o Managed Code, debido a que muchas aplicaciones de muy bajo nivel, como drivers de dispositivos, necesitan tener acceso directo a los recursos del sistema operativo para tener un mejor rendiemiento.
Como cada lenguaje proporciona su propia sintaxis en la implementación de las directivas del CLS, es necesario que los compiladores "traduzcan" su código fuente en "algo" que sea entendible por el CLR. Ese "algo" se denomina MSIL o Microsoft Intermediate Language, que es un código intermedio en el cual se compilan todos los lenguajes de .NET. Estos componentes y aplicaciones resulatantes se conocen como assemblies o ensamblados en .NET. Pueden ser archivos ejecutables (.exe) o bibliotecas de clases y componentes (.dll). Los assemblies no son ejecutables directamente, sino que son compilados al código nativo de la CPU en la que se encuentra corriendo por el compilador Just In Time (JIT) del CLR y, luego, se ejecutan en su entorno. Para que el CLR entienda cómo debe ejecutar estas aplicaciones y componentes, los compiladores de los lenguajes .NET incluyen en la compilación la metadata, que es la información que describe los objetos que forman parte de la aplicación o componente generado.
La metadata describe:
.- Los tipos de datos y sus deendencias.
.- Los objetos y sus miembros.
.- La referencia e información (incluyendo versión) de los componentes y recursos externos que son utilizados por la apliación o componente y que son necesarios para su funcionamiento.
Esta metadata de un componente administrado es utilizada por el CLR para proporcionar, entre otras, las siguientes funcionalidades:
.- Administra la memoria.
.- Localizar y crear instancia de clases.
.- Administrar las referencias de los objetos y realizar el garbage collection.
.- Resolver las invocaciones a los métodos.
.- Generar código nativo.
.- Asegurar que la aplicación tiene recursos necesarios para funcionar.
.- Reforzar la seguridad.
//---- El CLR administra la ejecución de código y permite el desarrollo de las aplicaciones ----//
///
Namespaces
El conocimiento de los namespaces de .NET es de fundamental importancia para aprovechar toda la funcionalidad que nos proporciona y, así, no tener que escribir código con el cliente con el que ya contamos.
///
La inclusión de esta metadata en el componente compilado hace que éste se autodescriba. Esto le indica al CLR todo lo necesario para preparar y ejecutar una aplicación .NET correctamente y permitir que pueda interactuar con otros componentes.
.- Compilación Just In Time (o "justo a tiempo"): El CLR se encarga de compilar las aplicaciones .NET a código de máquina nativo para el sistema operativo y la plataforma de hardware en la que se está ejecutando. Esto lo hace cin intervención alguna del desarrollador o el usuario y cuando se necesita.
.- Gestión automática de memoria: El CLR abstrae a los desarrolladores de tener que pedir y liberar memoria explícitamente. Para lograrlo, uno de sus componentes, llamado garbage collector(recolector de basura), se encarga de liberar periódicamente la memoria que ya no está siendo usada por ninguna aplicación. Por otra parte, el CLR también abstrae a los desarrolladores del uso de punteros de acceso y del acceso a memoria de bajo nivel. Si bien estas características pueden ser consideradas poderosas, suelen hacer que el desarrollo y el mantenimiento de aplicaciones resulten más propensos a errores y menos productivos.
.- Gestión de errores consistente: Como las aplicaciones .NET no se ejecutan directamente contra el sistema operativo, cualquier error no manejado que ocurra en tiempo de ejecución será atrapado por el CLR en última instancia, sin afectar a ninguna otra aplicación que se esté ejecutando ni tener efecto alguno sobre su estabilidad.
.- Ejecución basada en componentes: Todas las aplicaciones .NET son empaquetadas en componetes reutilizables denominados, genéricamente, assemblies, que el CLR se ocupa de cargar en memoria y de ejecutar.
.- Gestión de seguridad: El CLR brinda una barrera más de contención a la hora de ejecutar aplicaciones manejadas, ya que permite establecer políticas de seguridad que deberán ser cumplidas por las aplicaciones .NET que se ejecuten en una computadora.
.- Multithreading: El CLR provee un entorno de ejecución multi-hilos por sobre las capacidades del sistema operativo, así como también, mecanismos para asegurar su sincronización y el acceso a recursos compartidos.
Biblioteca de funcionalidad
(Base Class Library)
La funcionalidad principal de la Base Class Library es proporcionar cientos de tipos básicos (clases e interfaces) orientados a objetos, extensibles mediente herencia e independientes del lenguaje de programación que se desee utilizar. Este conjunto de elementos incluye la mayoría de las funcionalidades que los programadores aplican de manera cotidiana.
Dada la cantidad de clases (unos cuantos miles), es necesario organizarlas de algún modo en que sean fáciles de encontrar y que permita diferenciarlas si poseen el mismo nombre. Para lograr esto, .NET proporciona lo que se denomina namespaces o epacios de nombres. Se trata de calificadores de clases, que hacen posible determinar, unívocamente, qué clases utilizar dentro de .NET y, así, evitar ambigüedades. En la Tabla 2 vemos una breve lista de los principales namespaces.
El CLR o Common Language Runtime es el entorno que administra la ejecución de código y proporciona los servicios para desarrollo de las aplicaciones, así como también todos los elementos requeridos por los lenguajes, Visual Basic .NET, C# y otros de .NET.
Los tipos de datos son comunes a todos los lenguajes y son provistos por el Common Type System (CTS o sistema de tipos comunes) del CLR. Cada tipo de dato tiene su propia sintaxis en su lenguaje de programación correspondiente, pero, al ser tomados por el CLR, esos tipos son iguales.
Esto se debe a que uno de los principales objetivos de la plataforma .NET fue ser independiente del lenguaje de programación elegido para el desarrollo de aplicaciones. Por eso se creó la Common Language Specification (CLS o especificación de lenguaje común), que define y estandariza un conjunto de las características soportadas por el CLR que son necesarias en la mayoria de las aplicaciones. Todos los componentes desarrollados y compilados de acuerdo con esta especificación pueden interactuar entre sí, independientemente del lenguaje en el que fueron escritos.
Microsoft proporciona, junto con el .NET Framework, las implementaciones de cuatro lenguajes compatibles con CLS, y sus compiladores:
.- Microsoft Visual Basic .NET
.- Microsoft Visual C# .NET
.- Microsoft J# .NET
.- Microsoft C++ .NET
Esto significa que una aplicación escrita en Visual Basic .NET, por ejemplo, puede incorporar sin problemas nuevas partes escritas en C# o C++ .NET.
Dado que la especificación CLS es un estándar público, ha permitido que otros diseñadores de lenguajes y compiladores desarrollen más de 20 lenguajes y compliladores compatibles con ella y, por lo tanto, compatibles entre sí y con los lenguajes desarrollados por MIcrosoft. Todos los componentes y aplicaciones creados bajo estas especificaciones se dice que son código administrado, o Managed Code, debido a que muchas aplicaciones de muy bajo nivel, como drivers de dispositivos, necesitan tener acceso directo a los recursos del sistema operativo para tener un mejor rendiemiento.
Como cada lenguaje proporciona su propia sintaxis en la implementación de las directivas del CLS, es necesario que los compiladores "traduzcan" su código fuente en "algo" que sea entendible por el CLR. Ese "algo" se denomina MSIL o Microsoft Intermediate Language, que es un código intermedio en el cual se compilan todos los lenguajes de .NET. Estos componentes y aplicaciones resulatantes se conocen como assemblies o ensamblados en .NET. Pueden ser archivos ejecutables (.exe) o bibliotecas de clases y componentes (.dll). Los assemblies no son ejecutables directamente, sino que son compilados al código nativo de la CPU en la que se encuentra corriendo por el compilador Just In Time (JIT) del CLR y, luego, se ejecutan en su entorno. Para que el CLR entienda cómo debe ejecutar estas aplicaciones y componentes, los compiladores de los lenguajes .NET incluyen en la compilación la metadata, que es la información que describe los objetos que forman parte de la aplicación o componente generado.
La metadata describe:
.- Los tipos de datos y sus deendencias.
.- Los objetos y sus miembros.
.- La referencia e información (incluyendo versión) de los componentes y recursos externos que son utilizados por la apliación o componente y que son necesarios para su funcionamiento.
Esta metadata de un componente administrado es utilizada por el CLR para proporcionar, entre otras, las siguientes funcionalidades:
.- Administra la memoria.
.- Localizar y crear instancia de clases.
.- Administrar las referencias de los objetos y realizar el garbage collection.
.- Resolver las invocaciones a los métodos.
.- Generar código nativo.
.- Asegurar que la aplicación tiene recursos necesarios para funcionar.
.- Reforzar la seguridad.
//---- El CLR administra la ejecución de código y permite el desarrollo de las aplicaciones ----//
///
Namespaces
El conocimiento de los namespaces de .NET es de fundamental importancia para aprovechar toda la funcionalidad que nos proporciona y, así, no tener que escribir código con el cliente con el que ya contamos.
///
La inclusión de esta metadata en el componente compilado hace que éste se autodescriba. Esto le indica al CLR todo lo necesario para preparar y ejecutar una aplicación .NET correctamente y permitir que pueda interactuar con otros componentes.
.- Compilación Just In Time (o "justo a tiempo"): El CLR se encarga de compilar las aplicaciones .NET a código de máquina nativo para el sistema operativo y la plataforma de hardware en la que se está ejecutando. Esto lo hace cin intervención alguna del desarrollador o el usuario y cuando se necesita.
.- Gestión automática de memoria: El CLR abstrae a los desarrolladores de tener que pedir y liberar memoria explícitamente. Para lograrlo, uno de sus componentes, llamado garbage collector(recolector de basura), se encarga de liberar periódicamente la memoria que ya no está siendo usada por ninguna aplicación. Por otra parte, el CLR también abstrae a los desarrolladores del uso de punteros de acceso y del acceso a memoria de bajo nivel. Si bien estas características pueden ser consideradas poderosas, suelen hacer que el desarrollo y el mantenimiento de aplicaciones resulten más propensos a errores y menos productivos.
.- Gestión de errores consistente: Como las aplicaciones .NET no se ejecutan directamente contra el sistema operativo, cualquier error no manejado que ocurra en tiempo de ejecución será atrapado por el CLR en última instancia, sin afectar a ninguna otra aplicación que se esté ejecutando ni tener efecto alguno sobre su estabilidad.
.- Ejecución basada en componentes: Todas las aplicaciones .NET son empaquetadas en componetes reutilizables denominados, genéricamente, assemblies, que el CLR se ocupa de cargar en memoria y de ejecutar.
.- Gestión de seguridad: El CLR brinda una barrera más de contención a la hora de ejecutar aplicaciones manejadas, ya que permite establecer políticas de seguridad que deberán ser cumplidas por las aplicaciones .NET que se ejecuten en una computadora.
.- Multithreading: El CLR provee un entorno de ejecución multi-hilos por sobre las capacidades del sistema operativo, así como también, mecanismos para asegurar su sincronización y el acceso a recursos compartidos.
Biblioteca de funcionalidad
(Base Class Library)
La funcionalidad principal de la Base Class Library es proporcionar cientos de tipos básicos (clases e interfaces) orientados a objetos, extensibles mediente herencia e independientes del lenguaje de programación que se desee utilizar. Este conjunto de elementos incluye la mayoría de las funcionalidades que los programadores aplican de manera cotidiana.
Dada la cantidad de clases (unos cuantos miles), es necesario organizarlas de algún modo en que sean fáciles de encontrar y que permita diferenciarlas si poseen el mismo nombre. Para lograr esto, .NET proporciona lo que se denomina namespaces o epacios de nombres. Se trata de calificadores de clases, que hacen posible determinar, unívocamente, qué clases utilizar dentro de .NET y, así, evitar ambigüedades. En la Tabla 2 vemos una breve lista de los principales namespaces.
No hay comentarios:
Publicar un comentario