jueves, 20 de junio de 2013

Relación de C# con la CLR

En artículos anteriores ya he hablado acerca de varias de las capacidades con las que viene acompañado el lenguaje de programación C#, i.e., gestión automática de memoria, seguridad de tipos. En un principio esta es una de las relaciones directas de C# con la CLR. A continuación explico, en breve, el concepto de esta máquina virtual que es común a todas las versiones lanzadas de .NET Framework.

- ¿Qué es la CLR?:


De acuerdo a [2], la CLR es la máquina virtual que permite la ejecución de programas escritos en .NET. Esta máquina virtual se encarga a través de la compilación JIT [3] de realizar una traducción de código bytecode a código nativo de la máquina adyacente (de acuerdo a la plataforma, y el hardware).

La CLR
Figura 1. Pila de los componentes para necesarios para ejecutar una aplicación .NET.

La CLR provee servicios inherentes (la mayoría de lenguajes de programación modernos los implementan a partir de su especificación (en el artículo Soporte de Plataforma para C# hablo más acerca de los principios de diseño del lenguaje C#)) como lo es:
  • El gestión automática de memoria
  • Manejo de excepciones
  • Gestión de hilos
  • Seguridad de tipos
  • Colección de basura

- C# y la CLR:


Proceso de ejecución de una aplicación C# en el CLR.
Figura 2. Proceso de ejecución de una aplicación C# en el CLR.

En la Figura 2 observamos todas las fases que integran la ejecución una aplicación escrita en lenguaje C# sobre la CLR. Para empezar se codifica la aplicación, se invoca al compilador de C# (csc) y se crea un assembly como proceso (EXE) o como librería (DLL), está librería debe pasar por una comprobación o verificación de tipos (tercera fase), luego se realiza una mejora en el rendimiento del código a través del compilador JIT [3], antes de finalizar se crea código nativo (adyacente a la plataforma y la arquitectura hardware), finalmente, el programa pasa a ejecutarse sobre la máquina virtual -Common Language Runtime CLR [2]- y el programa ha quedado listo para ser usado por el usuario de la aplicación.

- Apuntes finales:
  • Cualquier programa escrito en uno de los lenguajes soportados por el framework .NET puede ejecutarse sobre la CLR.
  • La CLR provee servicios críticos para dar vida (gestión automática de memoria, seguridad de tipos, etc.) a una aplicación durante el tiempo de ejecución.
  • C# es técnicamente independiente de la CLR [5].

Conclusiones:

He hecho un breve recorrido acerca de las características básicas de la CLR, y su relación con el lenguaje C# (desde luego esto también aplica para el resto de los lenguajes: VB.NET, C++, F#, etc.). Adicionalmente, he descrito el ciclo de producción de una aplicación C# y su posterior ejecución sobre la máquina virtual que provee la CLR.


Glosario:

- csc
- Hilo
- Host features
- JIT
- Máquina virtual (virtual machine)

Referencias:

[1] Gestión de memoria en C# - http://ortizol.blogspot.com/2013/06/gestion-de-memoria-en-c.html
[2] Common Language Runtime - http://en.wikipedia.org/wiki/Common_Language_Runtime
[3] Just-in-time compilation - http://en.wikipedia.org/wiki/Just-in-time_compilation
[4] CLR via C#, 4th Edition - http://shop.oreilly.com/product/0790145353665.do
[5] C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
H

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.