sábado, agosto 11, 2007

.NET: El Framework, el IDE y el Lenguaje

Este es un post viejo que nunca publique porque no encontraba el archivo de Word donde lo hice, aunque algunas cosas ya serán más claras ahora que es más salió Visual Studio 2008 Beta 2 y hay mucha más documentación al respecto, muchos me han comentado dudas similares de las que trataba de explicar en este documento que escribí por ahí de Marzo. Así es que busque el archivo y espero conteste algunas preguntas.

Hemos escuchado mucho de .NET 2.0 y .NET 3.0 y por separado por ahí escuchamos de una nueva versión de Visual Studio (Orcas) y C# 3.0, aunque estos últimos aún no salen, pero ya liberaron.NET 3.0. ¿Así que cuál es la realidad, podemos usar .NET 3.0? La respuesta es sí. Tal vez causa algo de confusión, pero todo se aclara separando los diferentes productos, teníamos todavía en 2005 el framework 1.1, salio en Noviembre de ese año el 2.0 junto con un nuevo IDE (VS 2005), nuevo framework (.NET 2.0) y nuevas características del lenguaje (C# 2.0 y VB 8). Así que todo lo vimos como una sola nueva versión hacía una nueva plataforma de desarrollo que por facilidad nombramos simplemente ".NET 2.0". Un año después, también en noviembre, sacan el .NET 3.0 y en esta ocasión no tenemos nuevo IDE y el lenguaje permaneció igual, según fechas de Microsoft en la segunda mitad de este año (según una simple analogía será en noviembre) sacarán C# 3.0 y un nuevo IDE.

La clave está en separar. Tomando como ejemplo lo que se libero en noviembre de 2005 y comparándolo que la versión anterior.

Tenemos C# 2.0 y VB 8.0 y antes teníamos C# 1.0 y VB 7.0, voy a hablar sólo de C#, entre otras cosas:

  • Tenemos Generics,
  • Tenemos delegados anónimos.
  • Tenemos yield.
  • Tenemos clases parciales.
  • Se optimizo el lenguaje intermedio generado, no voy a explicar mucho de eso, pero la idea es que es mejor y se hicieron cambios necesarios para soportar cosas como los Generics.

Tenemos el .NET Framework 2.0 y antes teníamos el framework 1.1:

  • Tenemos nuevas clases para acceso a datos.
  • Algunas colecciones genéricas.
  • Algunos nuevos controles para desarrollar en Windows, Web y bueno sobre todo Web.
  • Algunas muchas mejoras más por citar algunas, remoting trabaja un poco distinto y es más seguro, se deprecaron algunos métodos y clases y se crearon nuevas para sustituir cierta funcionalidad, etc.

Tenemos el Visual Studio 2005 y antes teníamos el Visual Studio 2003:

  • Cambiaron muchas funcionalidades desde una versión a la otra. Unas de las más interesantes son la integración con pruebas, diagramas y herramientas para trabajo en equipo que provee Visual Studio Team Suite, pero esta es la versión más cara. Por otro lado tenemos muchas versiones que antes no existían como las Express, más limitadas que las demás, pero mucho más barata (gratis).
  • Obviamente mejor integración con los nuevos lenguajes C# 2.0 y VB 8, por ejemplo intellisense para generics y delegados anónimos.
  • Obviamente mejor integración con el nuevo framework, por ejemplo vistas de diseño distintas para ver los mater pages y soporta las nuevas formas de compilación en ASP.NET.
  • Mejoras al depurador, nuevas herramientas como el Object Test Bench y creación de algunos nuevos generadores de código.

Ahora volviendo a todo lo de 3.0:

Tenemos ya ahorita y listo para usar el .NET Framework 3.0 y trabaja en conjunto con el 2.0 y está compuesto por los siguientes cuatro componentes:

  • Windows Communication Foundation: viene a unificar tecnologías como Web Services, MSMQ, Remoting.
  • Windows Presentation Foundation: para hacer aplicaciones de escritorio más bonitas.
  • Windows Workflow Foundation: para crear y monitorear workflows.
  • Cardspace: para autentificar a usuarios usando una metafora de credenciales.

Es importante hacer notar que todo este framework trabaja lado a lado con el .NET 2.0, simplemente son una serie más de librerías, similar a si bajaran Enterprise Library o algún componente de terceros y no necesita de ningún cambio en el lenguaje o IDE.

Tendremos ojala y este mismo año C# 3.0 y VB 9.0, hablare sólo de C# 3.0, este nuevo lenguaje trae algunas novedades como:

  • Expresiones Lambda, que no son otra cosa más que otras sintaxis para usar delegados anónimos con muchas más ventajas adicionales a la sintaxis que espero poder explicar en otro post.
  • Tipos inferidos, que no es más que otro truco del compilador, este infiere dependiendo de lo que le asignes a una variable el tipo de dato, var s = "hola"; sabemos que es un string y el compilador lo puede inferir.
  • Extension methods, que no son otra cosa más que el compilador provee una nueva forma de mandar llamar a métodos estáticos de otras clases, otro truco más del compilador.
  • Tipos anónimos, que es similar a delegados anónimos pero para clases, este se aprovecha de los tipos inferidos e inicializadores así var car = new { Color = Color.Red, Name = "Lamborghini" }, crea una clase que tiene dos propiedades, Name de tipo string y Color de tipo Color, así podemos decir car.Color = Color.Black; car.Name = "McLaren F1".
  • Inicializadores, otro truco más del compilador para crear un objeto y en la misma declaración asignarle propiedades. DbConnection conn = new SqlConnection() { ConnectionString = "", CommandTye = CommandType.Text };

    // Nuevo atajo para inicializar objetos.
    DbConnection conn = new SqlConnection() { ConnectionString = "", CommandTye = CommandType.Text };

    // Se traduce al mismo código intermedio que la anteior.
    DbConnection conn = new SqlConnection();
    conn.ConnectionString = "";
    conn.CommandType = CommandType.Text;

    Por eso es que les digo que son trucos del compilador, sin embargo muy útiles, ahora usamos en todos lados clases parciales, generics y delegados anónimos, para esta altura de 2008 seguramente estaremos usando todo esto con mucha frecuencia, sobre todo si usamos LINQ, pero ese es tema de otro post.

Siguiendo con la comparación, tendremos ojala y este mismo año, Visual Studio Orcas seguramente el nombre oficial será VS 2007 o VS 2008 dependiendo de que le guste más a los de marketing, a mi me gusta más Orcas.

  • Tendrá soporte para las nuevas funcionalidades del lenguaje.
  • Tendrá soporte para el nuevo framework 3.0, un diseñador de Workflows, Wizards y otras cosas para WCF y una nueva vista de diseño para crear aplicaciones con WPF usando XAML.
  • Incluirá otras tecnologías que ya fueron liberadas, pero aún no se integran "out of the box" con Visual Studio, como ASP.NET Ajax (Antes Atlas) que se también tendrá algunos cambios importantes principalmente en el performance y su integración con Silverlight.
  • Soportará que le digas a que versión del framework estas enfocando tus aplicaciones y puedas desde el mismo IDE crear proyectos para .NET 3.0 o .NET 2.0.
  • Mejoras al depurador e Intellisense de JavaScript.

Así que resumiendo un poco, 3.0 se compone de tres partes, como siempre se ha hecho, sólo que ahora realmente están separadas en tiempo, ya tenemos el Framework 3.0 listo para empezar a crear aplicaciones usando WPF, WF y WCF, sin embargo, aún no tenemos un nuevo Visual Studio que nos ayude con esta tarea, aunque hay ciertas extensiones que se pueden utilizar desde ahorita. Por otro lado, en este caso el Framework 2.0 (incluyendo el CLR), el lenguaje intermedio y el lenguaje (C# o VB) no cambiaron por lo que nuestras aplicaciones de .NET 3.0 siguen usando el mismo C# 2.0 y el Framework 2.0. Esto cambiará seguramente en Noviembre de este año que tendremos la nueva versión del lenguaje C# 3.0 y VB 9.0 y la nueva versión del Visual Studio.

Hay otro proyecto LINQ y una nueva versión del Framework (3.5) que se liberará junto con Orcas y C# 3.0 que incluye varias clases que aprovechan ciertas características del nuevo lenguaje para hacer más fácil el acceso a datos, a casi todo tipo de datos (XML, Bases de Datos, Registro, Objetos), pero de esto hablaremos más a detalle en algún otro post.

Existen otras tecnologías paralelas a lo que mencionamos (Lenguaje, Framework e IDE) que no obedecen a las mismas fechas. En cierto sentido, gracias a que Microsoft se ha vuelto un poco más ágil, y si me refiero a usar metodologías ágiles en algunos de sus grupos de desarrollo e implementar algunas de estas prácticas ya podemos usar actualmente nuevos productos sin esperar a que se incluyan Out of the Box, por ejemplo ASP.NET Ajax y el Control Toolkiit que realmente es un desarrollo de ASP.NET, pero aún no se ha integrado como parte de por ejemplo un Framework 3.0 o Visual Studio, de hecho no hubo nada nuevo para ASP.NET en el Framework 3.0. Otro ejemplo seguramente serán BLINQ una nueva tecnología que usa LINQ para hacer páginas Web, este es otro desarrollo del grupo de ASP.NET que podría liberarse hasta después de Orcas y C# 3.0. Otros ejemplos son los Software Factories, Enterprise Library y CAB de Patterns and Practices que siempre han sido componentes por separado, el SDK de Visual Studio al igual que el Guidance Automation Toolkit, han tomado un camino muy distinto al del mismo producto en sí y Visual Studio Tools for Office 2007, que gracias a dios no espero a que se liberará Orcas y lo hicieron casi a la par de Office 2007.

El mejor ejemplo de esto es el Toolkit de controles de ASP.NET Ajax, que aunque más adelante se integraran como otros controles más de ASP.NET ojala y siempre siga liberando versiones por separado del Framework, Lenguaje e IDE. Es tan difícil liberar estos últimos, involucra muchas cuestiones de licenciamiento, esquemas de venta, marketing, documentación, pruebas, etc, etc, etc que simplemente haría que simples controles como el estos tarden un año en ver la luz. No es que estos controles no tengan licenciamiento, documentación y pruebas, es sólo que se pueden liberar más rápidamente.

Yo creo que Microsoft se está viendo inteligente en ir liberando así las versiones, y permitirnos ir usando la tecnologías más recientes sin esperar por largos ciclos de desarrollo aunque si será muy cómodo el instalar un solo producto (Orcas) y tener todo lo que necesitamos, pero mientras tanto, lo podemos ir usando en producción.

Otra línea de productos más, que la verdad en este caso si nos gustaría que formara parte del mismo timeline del Framework, Lenguaje e IDE y sobre todo que le dieran la misma importancia como a las demás es el Compact Framework y SQL Compact Edition. Algo como esto tiene sus pros y sus contras, por ejemplo, SQL Compact Edition y el Compact Framework SP1 se liberaron mucho después que Visual Studio 2005 y no nos hubiera gustado tener que esperar un año hasta que saliera Orcas para empezar o algún Service Pack de Visual Studio, sin embargo, unos meses después de que se libero Visual Studio 2005 se liberó el SDK para programar en Windows Mobile 5.0, por lo que Out of the box no tenemos soporte para esta plataforma en el IDE actual. Así que siempre que fuera para tener algo antes sería mejor que se integre (e.g. que hubieran incluido lo necesario para desarrollar Windows Mobile 5.0 en VS 2005) así no tendríamos que esperar ni que instalar tanto producto por separado y tendríamos. Sin embargo siempre que pensaran en retrasar un release sólo por incluirlo en un release mayor no nos gustaría (e.g. esperar al SP1 de VS 2005 para incluir el Compact Framework SP1).

Cuando liberaron el .NET 3.0 no salió nada nuevo para Mobile, pero junto con Orcas habrá grandes novedades, aunque se espera un WPF/E no será una de estas (Silverlight para mobile), pero existe ya un Compact WCF o WCF-E. El primero, WPF Everywhere, es para usar XAML y las capacidades gráficas de WPF en otras plataformas como Web (ahora conocido como Silverlight) y otros Sistemas Operativos incluyendo Windows CE y por lo tanto Windows Mobile, sin embargo WPF-E saldrá a la luz primero como un componente para diferentes navegadores antes de estar disponible para Mobile, por lo que seguramente no lo veremos incluido como parte de Orcas. Compact WCF usará SMTP para poder tener colas de mensajes en aplicaciones desconectadas y un protocolo para poder comunicarse por push con los dispositivos, estos dos por si sólo son ya grandes ventajas, sin embargo esperaríamos algo de Remoting y WS-* para tener realmente mejores herramientas de comunicación desde estos dispositivos. Aunque no vengan como parte de WCF-E tendremos todo el stack para hacer algo nosotros.

Siguiente con Mobile, tendremos también disponibles las nuevas características del lenguaje, buena parte de LINQ y otras tantas mejoras. Aunque el Beta de VS actual no incluye el SDK para Windows Mobile 6.0, esperamos que el release de Orcas si lo incluya. Hay otras áreas muy relacionadas con Mobile como Sql Server Compact Edition 3.5 que recibirán grandes mejoras. La más importante de estas considero será SyncServices de ADO.NET, que lamentablemente no contará con la versión de Mobile para esta versión.

Microsoft debería haber llamado a .NET 3.0 simplemente 2.5 ya que fue una mejora menor y .NET 3.5 que es un gran cambio debería haber sido 3.0 o simplemente 3.0 y 4.0 respectivamente, sin embargo tendremos que vivir con las decisiones de versionamiento, aunque nos acostumbraremos rápidamente. Para hacerlo un poco más confuso, C# será 3.0 y no 3.5.

Así es que esperemos grandes cambios. Si desean ver más información de 3.5, les sugiero los posts de Scott Guthrie sobre los nuevos features que comente.

No hay comentarios.: