jueves, abril 03, 2008

Conociendo el CLR (Parte 1)

Después de un tiempo sin escribir nada, voy a empezar una serie de artículos sobre el CLR, creo que es muy útil conocerlo a fondo para poder aprovecharlo al máximo y ser mas productivos.

Introducción:

Primero un poco de historia. Microsoft a través de los años ha introducido varias tecnologías para ayudar a los desarrolladores a implementar su código. Muchas de estas tecnologías ofrecen abstracciones que permiten enfocarse mas en la resolución del problema que en la máquina o el sistema operativo. Dentro de estas tecnologías podemos mencionar:

  1. Microsoft Foundation Class library (MFC) ( abstracción sobre programación de GUI C++)
  2. Visual Basic 6 ( abstracción que facilitaba crear aplicaciones GUI), aunque algunos piensan que es una aberración, tiene su importancia en la historia de como los desarrolladores han aplicado RAD (rapid application development). Aclaro que no voy centrarme en el venerable Visual Basic.
  3. ASP ( ofrecía una abstracción para la creación de sitios web dinámicos)
  4. ATL ( permitía crear componentes que podían ser usados en varios lenguajes)

El problema era que había que dominar muchas tecnologías y el desarrollo era complicado, dependía mucho del tipo de aplicación que se quería realizar. El objetivo del .Net Framework es crear un único modelo de programación para cualquier tipo de aplicación ya sea de consola, gráfica, web, componente o servicio sobre la plataforma Windows (aunque ya es posible utilizarlo en otras plataformas). Otro objetivo era permitir a los desarrolladores usar el lenguaje que quisieran.

El .Net Framework consiste básicamente de dos partes: El Common Language Runtime (CLR) y el Framework Class Library (FCL).

El CLR provee el modelo de programación que todas las aplicaciones usan. Este incluye su propio cargador de archivos, administrador de memoria (garbage collector), sistema de seguridad (code access security), manejo de hilos y mas.

El CLR ofrece un modelo de programación orientado a objetos que define que tipos y objetos existen y como se comportan. Aunque hay que tener en cuenta la diferencia entre orientado a objetos y orientado a componentes (ese es otro tema que no vamos a tratar por ahora).

En el siguiente post hablaremos sobre el modelo de ejecución del CLR. Hasta la próxima.