Skip to content

Instantly share code, notes, and snippets.

@cprieto
Created November 5, 2012 11:08
Show Gist options
  • Save cprieto/4016672 to your computer and use it in GitHub Desktop.
Save cprieto/4016672 to your computer and use it in GitHub Desktop.
Capitulo 2.5 - Runtime y lenguaje

Capitulo 2.5

Intro

Bien, estaba leyendo tus notas del capitulo 3 y muchas cosas me parecieron interesantes, mas que todo algunas preguntas y comentarios del capitulo, antes que ahondemos un poco en las preguntas y comentarios de ese capitulo queria profundizar un poco en algo clave e importante acerca de la framework, es tan importante que comprendiendo las diferencias y el porque veras mas claro la evolucion y avance del lenguaje como tal. Es tan crucial que a muchos programadores 'experimentados' al entrevistarlos y preguntarles acerca de ello demuestran no solo que no lo conocen si no que andan mas perdidos que el hijo de la llorona...

El runtime, el lenguaje y las librerias - Porque Microsoft nos complica la vida

La verdad, que muchos programadores contesten una pregunta tan simple como 'que versiones de la framework existen' y al mismo tiempo fallen al comentar 'que versiones del runtime existen' no es su culpa, si no de Microsoft y su equipo de marketing al confundir a millones de programadores de Microsoft alla afuera, y no, Java no lo ha hacho mejor en este sentido (aqui llevan puntos cosas como PHP y Python).

Como he mencionado antes, la '.NET Framework' consta de tres componentes en forma resumida:

  1. El runtime, a quien llamamos el CLR runtime, como recordaras este consta de la maquina virtual de .NET que ejecuta el lenguaje intermedio, de esta manera el runtime esta apegado a la definicion del lenguaje intermedio o CIL, que son las instrucciones basicas de ejecucion, algo asi como assembler pero para la maquina virtual. Como he mencionado antes, esto no es propio de Microsoft, todos los lenguajes que no generan codigo nativo (Java, PHP, Ruby, Python, Lua) usan un codigo intermedio. Asi pues, con cada version del runtime hay una version nueva de codigo intermedio. Puedes ver el link Common Language Runtime

  2. Las librerias, que comprenden todo lo que la gente conoce como 'la framework', ASP.NET, WCF, WPF, los SDKs son solo librerias, DLLs con codigo intermedio que pueden haber sido escritas en cualquier compilador que genere el CIL. Puedes tambien revisar el link .NET Framework

  3. El lenguaje y su compilador, que explicado simplemente, comen el 'codigo' y escupen el 'CIL' para que el CLR lo interprete y entienda.

Entender esas tres cosas y la separacion entre ellas es crucial. Es tal el caso que son disenados y desarrollados por equipos independientes y separados en Microsoft, claro, se comunican entre ellos y asi uno puede explotar la fortaleza del otro. Hay inclusive casos donde el lenguaje se queda corto para lo ofrecido por la CLR.

Versiones de C# versus versiones del CLR y la Framework

Bien, hasta el dia de hoy del anio 2012, luego de 12 anios (la primera version de C# salio en el 2000) C# Programming language hay 5 versiones del lenguaje (de C# 1.0 a C# 5.0 que es el ultimo). Sin embargo han salido 7 versiones de 'la framework' (1, 1.1, 2.0, 3.0, 3.5, 4.0 y 4.5) sin contar sus service packs (3.5SP1, 4.0SP1) y para complicar las cosas solo han salido 3 versiones del runtime (1.0, 2.0, 4.0). El mapeo a groso modo podria ser algo asi:

  • .NETFX1.0 = C#1 + CLR 1
  • .NETFX1.1 = C#1 + CLR 1
  • .NETFX2.0 = C#2 + CLR 2
  • .NETFX3.0 = C#2 + CLR 2
  • .NETFX3.5 = C#3 + CLR 2
  • .NETFX4.0 = C#4 + CLR 4
  • .NETFX4.5 = C#5 + CLR 4

Las razones por las cuales ves numeros disparejos es simple, provocar la menor friccion posible. Como programadores siempre pedimos mas y mas features, sin embargo, agregar una feature a un lenguaje involucra un mundo de cosas, especificamente en compatibilidad, claridad y estilo. Un buen ejemplo de un lenguaje mal disenado (y de hecho, no disenado para nada) es Perl, si pones a diez programadores de Perl a escribir un simple programa vas a terminar con treinta versiones totalmente diferentes del mismo programa. Ahora bien, eso es con el lenguaje, imaginate que pasaria o lo dificil que seria en cuanto a compatibilidad y mantenimiento el cambiar el codigo generado. Eso involucra cambiar compiladores, librerias, runtime, tantas cosas... Es por eso que cuando hay 'algo nuevo' o una 'feature nueva' el orden de preferencia para se agregados es:

  1. Como libreria
  2. Como feature del lenguaje
  3. Como adicion al runtime

Ahora bien, recuerda que cuando hablo de la implementacion del 'lenguaje' hablamos de lo que hace el compilador.

Puedo decirte en este momento, que aunque leas muchas cosas acerca de C# 2.0 y todo lo que agregaron posteriormente en C# 3.0 el mayor cambio o el mas significativo en la CLR en ese periodo fue solo uno, el agregar soporte para generics y ese fue un cambio a nivel del runtime y no solo al compilador, involucro cambiar totalmente el runtime.

En la siguiente entrega voy a hablarte mas sobre los generics y los cambios agregados en C# 2.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment