Novedades en la CTP de Orcas de marzo de 2007

Como otros colegas ya han anunciado, está disponible desde hace unos días la CTP de marzo de Orcas, que se puede descargar desde aquí:


    http://www.microsoft.com/downloads/details.aspx?familyid=281fcb3d-5e79-4126-b4c0-8db6332de26e&displaylang=en


Yo no he tenido ni que descargármela, gracias a la gentileza de mi buen amigo Unai Zorrilla.


Aquí va un resumen de las características más relevantes de la CTP relacionadas con los lenguajes y LINQ (aunque la CTP contiene muchísimo más):


·         LENGUAJES


o        Soporte para las características de C# 3.0: Esta CTP implementa todas las características del lenguaje C# 3.0 que ofrecía la CTP de LINQ de mayo de 2006:


§         Expresiones de consulta


§         Inicializadores de objetos y colecciones


§         Métodos extensores


§         Inferencia de tipo de variables locales y tipos anónimos


§         Lambdas asociadas a delegados y árboles de expresiones


§         Soporte completo de tiempo de diseño: Intellisense, formato, colorización


o        Soporte para las características de VB 9.0: Esta CTP implementa las siguientes características del lenguaje:


§         Expresiones de consulta: soporte de consultas, filtrado y ordenación


§         Inicializadores de objetos


§         Métodos extensores


§         Inferencia de tipo de variables locales


§         Tipos anónimos


§         Literales XML


§         Propiedades XML


§         Intellisense para nueva línea y para expresiones


·         LINQ


o        LINQ to Objects


§         La API de LINQ to Objects permite consultas sobre cualquier colección .NET, como arrays y listas genéricas. Esta API se define en el espacio de nombres System.Linq dentro de System.Core.dll.


o        LINQ to XML (XLinq)


·         Añadidas las clases del espacio System.Xml Bridge, que contienen un conjunto de métodos extensores que permiten utilizar XPath y XSLT sobre árboles de LINQ to XML, producir un árbol de LINQ to XML mediante una transformación XSLT, y validar un árbol de nodos XElement contra un esquema XML.


·         Modelo de eventos, que hacen posible la sincronización eficiente de árboles LINQ to XML con una interfaz gráfica de usuario (por ejemplo, una aplicación WPF).


·         Cambios en la jerarquía de clases – añadida la clase XObject, eliminada (temporalmente) XStreamingElement.


·         Mejoras de usabilidad varias – se han realizado varias modificaciones menores en respuesta a estudios internos y sugerencias externas, para hacer la API más limpia y consistente.


o        LINQ to ADO.NET


·         ADO.NET se integra completamente con LINQ y ofrece múltiples opciones para utilizar LINQ en varios escenarios: LINQ to SQL ofrece acceso directo a tablas de bases de datos desde el entorno de programación, LINQ to Entities permite a los desarrolladores utilizar LINQ sobre modelos EDM (Entity Data Models), y LINQ to DataSet permite utilizar toda la expresividad de LINQ sobre DataSets.


·         LINQ to Entities permite a los desarrolladores programar contra una base de datos relacional utilizando una vista de los datos apropiada para la aplicación que están construyendo, independientemente de la estructura de la base de datos subyacente. El uso de modelos EDM permite a los desarrolladores diseñar modelos que sigan los conceptos naturales de la aplicación, en lugar de tener que mapearlos a las construcciones que ofrecen los almacenes relacionales. LINQ to Entities está creado sobre el modelo de proveedor de ADO.NET y permitirá trabajar contra diversos almacenes de datos relacionales, además de contra Microsoft SQL Server. Esta CTP incluye un proveedor de LINQ to Entities para SQL Server y SQL Server Compact Edition.


·         LINQ to SQL (antes conocido como DLinq) ha mejorado su funcionalidad con respecto a la CTP de mayo de 2006. Puede encontrar esta API en el espacio de nombres System.Data.Linq dentro del ensamblado System.Data.Linq.dll. Una novedad de esta edición es que la clase DataContext ofrece modos optimizados para la utilización en modo de solo lectura y la serialización. También es nuevo que la clase DataShape simplifica la carga temprana y añade la posibilidad de establecer consultas sobre relaciones.


o        Diseñador de LINQ to SQL


            ·         Ahora es posible crear métodos a partir de procedimientos almacenados y funciones dentro del diseñador.


            ·         Mejor gestión de los esquemas de bases de datos.


            ·         Soporte mejorado para la herencia en el diseñador.


 

¿Se avecina una revolución, o solo me lo parece?

“Finally the tables are starting to turn


I’m talkin’ about a revolution…”


 


Tracy Chapman


 


Hace unos días, en respuesta a un post sobre la disponibilidad de LINQ to SQL, mi admirado amigo Rodrigo Corral me escribía:



“A más de uno se nos ponen los pelos como escarpias cada vez que oímos SQL y LINQ en la misma frase … ya me gustaría leer tu opinión sobre el tema”


Aunque normalmente evito generar polémicas, y sobre todo las que conducen a “diálogos entre sordos”, como decía Gorbachev, he pensado en plasmar en este artículo mis ideas al respecto, en busca de las opiniones de algunos de los muchos desarrolladores inteligentes que escriben aquí o visitan estas páginas regularmente.


Ante todo, quiero dejar claro lo siguiente:


·         Nada más lejos de mis intenciones que atacar a nadie ni de menospreciar su trabajo.


·         No me considero ningún “gurú” ni nada por el estilo; mis opiniones pueden ser totalmente erradas. Sí soy alguien que tiene la suerte de llevar 20+ años programando y enseñando a programar con espíritu crítico, y de haber vivido casi desde cero el desarrollo de los lenguajes y sistemas de programación.


Luego quiero expresar convicciones personales adquiridas de la experiencia y de las que será difícil moverme:


·         Con sus posibles defectos, la POO es, de los paradigmas de programación hoy en uso, el que mejor permite modelar el universo en que vivimos y que mejor se adecua a las necesidades de los desarrolladores de aplicaciones. No sé si será el paradigma definitivo (“ultimate”, dirían en inglés), pero en el panorama no se vislumbra ningún otro capaz de sustituirlo a corto o mediano plazo. Sí hay que reconocer que los lenguajes .NET están también “importando” conceptos de otros “mundos” como la programación funcional, que vienen a enriquecer el modelo OO sin variar su esencia.


·         La manera en que desarrollamos hoy, por ejemplo, las aplicaciones que acceden a bases de datos corporativas lleva implícito un desajuste de impedancia provocado por la necesidad de tener que, desde lenguajes OO, usar SQL para expresar las sentencias de recuperación y almacenamiento persistente de los datos. SQL es un lenguaje diferente, basado en otro paradigma de programación, que tiene su curva de aprendizaje, y cuyas sentencias finalmente embebemos dentro de nuestras aplicaciones en forma de cadenas de caracteres que se saltan “a la torera” el control del compilador.


Bueno, después del “prólogo”, aquí va entonces mi predicción:


·         Dentro de unos pocos años, los desarrolladores de aplicaciones no escribirán ni una sola sentencia SQL en sus aplicaciones.


No sé si mi predilección por los trabajos de Hejlsberg (a quien sigo desde los tiempos de Turbo Pascal 1.0, circa 1984) me nuble la vista, pero pienso que LINQ está entre lo más relevante que ha generado el desarrollo de los lenguajes de programación en muchos años. Creo que la posibilidad de ejecutar consultas integradas en el lenguaje de manera uniforme contra los más diversos almacenes de datos, empezando por las colecciones de datos en memoria y terminando por los documentos XML y las bases de datos SQL (más todo lo demás que se tercie) es algo que hará mucho más productivos a los programadores, más claros y mantenibles a nuestros programas y que reducirá sensiblemente la curva de aprendizaje de los principiantes.


 


Pero con la aparición de LINQ no solo dejará de ser necesario escribir sentencias SELECT. Como puede leerse en el excelente post de Juan Carlos González, LINQ To SQL añadirá a las posibilidades generales de consulta un ORM ligero (“lightweight Object-Relational Mapper”) capaz de gestionar la identidad de los objetos de negocio y de suministrar operaciones de actualización que se traducirán, tras las bambalinas y de manera transparente al programador, en las sentencias SQL correspondientes.


 


Como yo lo veo, con la llegada de Orcas podremos empezar a crear aplicaciones verdaderamente 100% orientadas a objetos, a trabajar a un nivel cualitativamente más alto. Por supuesto, aún queda mucho trabajo por delante, sobre todo en lo relativo a la creación de un cuerpo teórico asociado a la arquitectura de las aplicaciones basadas en LINQ; pero (creo) ya se puede vislumbrar lo que vendrá.


 


Si has leído hasta aquí este “panfleto incendiario”, solo me resta darte las gracias. Tu opinión será bienvenida.


 


 

Sobre la ‘@’, el ‘&’ y otros "escapes"

En un reciente artículo,


    http://geeks.ms/blogs/rfog/archive/2007/02/19/el-uso-on-de-la-algarroba-dentro-de-un-programa-escrito-en-c.aspx,


mi buen amigo RFOG escribía sobre la posibilidad de utilizar en C# el carácter ‘@’ como prefijo delante de una palabra reservada, para indicar que ésta debe ser tratada como un identificador “normal”. Augusto Ruiz comentaba, correctamente, que la utilidad del uso de la ‘@’ delante de las palabras reservadas radica en que permite referirse desde C# a una clase, propiedad, método, etc. creada en otro lenguaje con un nombre que coincide con el de una palabra reservada de C#. Asimismo, indicaba que en Visual Basic para lograr ese efecto se encierra la palabra reservada entre corchetes.


Me imagino que todo lenguaje .NET que se precie debe tener algún mecanismo similar, dado el énfasis que hace la plataforma en que sea posible utilizar el código escrito en otros lenguajes. Por ejemplo, en Delphi/Object Pascal .NET el papel de la ‘@’ lo juega el ‘&’.


Un ejemplo de situación en la que la existencia de estos caracteres de “escape” es, cuando menos, sumamente útil, es la que sufrí tiempo atrás y me vino a la mente cuando leí el post de Rafa. Como todo el mundo conoce, la propiedad mediante la cual se representa al destinatario del mensaje de correo en las clases System.Web.Mail.MailMessage y System.Net.Mail.MailMessage se llama “To“. Con C# y VB no hay ningún problema, pero… ¡to es una palabra reservada de Pascal! (recuerde el típico bucle for i := 1 to 10 do Console.WriteLine(i);). Pascal además no distingue mayúsculas de minúsculas, así que cada vez que en Delphi .NET se quiere especificar el destinatario de un correo electrónico, no queda más narices que escribir:


    miMensaje.&To := ‘sleepless@seattle.com’;


 

La próxima CTP de Orcas será en marzo

Según Dinesh Kulkarni, Program Manager de Visual C#, podemos esperar la próxima CTP de Orcas para el próximo marzo:


    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1180478&SiteID=1


Dinesh confirma que en esta CTP ya estará incluida toda la funcionalidad relacionada con LINQ To SQL (tecnología anteriormente conocida como DLINQ), que permitirá utilizar las consultas integradas en el lenguaje contra bases de datos relacionales, sobre lo que no hemos visto nada nuevo desde hace algún tiempo…


 

Otra gran entrevista a Anders…

Mi viejo conocido Charlie Calvert (otro ex-Borlander) ha publicado en su blog otra entrevista a Anders Hejlsberg, arquitecto principal de C#, en la que éste habla sobre las ventajas que ofrecerá a los programadores la incorporación a C# y VB de elementos de programación funcional y de las consultas integradas en el lenguaje:



          http://blogs.msdn.com/charlie/archive/2007/01/26/anders-hejlsberg-on-linq-and-functional-programming.aspx



De esta entrevista me quedo no solo con la extraordinaria lucidez con la que Anders resume en unos pocos minutos la importancia de las funciones lambda, los árboles de expresiones o las consultas integradas en los lenguajes, sino también con la introducción preliminar de Charlie, en la que algunos encontraremos reflejada la historia de nuestras vidas.


 

Artículos sobre expresiones lambda y árboles de expresiones (C# 3.0)

Desde hace algún tiempo, vengo escribiendo para www.elguille.info algunos artículos sobre las nuevas características que incluirá C# 3.0. Por el momento hay tres, uno sobre expresiones lambda y dos sobre árboles de expresiones:

a) http://www.elguille.info/NET/futuro/firmas_octavio_ExpresionesLambda.htm

b) http://www.elguille.info/NET/futuro/firmas_octavio_ArbolesExpresiones.htm

c) http://www.elguille.info/NET/futuro/firmas_octavio_calculo_simbolico.htm

Gracias desde aquí a El Guille por la oportunidad de publicar en su sitio.


 

Traducciones de la documentación preliminar de C# 3.0, LINQ y ADO.NET vNext

Desde hace unos días están publicadas en MSDN mis traducciones al castellano de todos los documentos preliminares publicados hasta el momento sobre C# 3.0, LINQ y ADO.NET vNext. En particular, están traducidas las siguientes especificaciones:


 



  • Especificación de C# 3.0
  • El Proyecto LINQ
  • Los operadores de consulta estándar de LINQ
  • Acceso a datos de próxima generación
  • Presentación Técnica de ADO.NET vNext
  • El Marco de Entidades de ADO.NET vNext



Se puede acceder a estos documentos desde aquí.


 


Espero que estas traducciones ayuden a quien lo desee a familiarizarse con los fundamentos de estas tecnologías, que seguramente cambiarán nuestra manera de programar en un futuro ya cercano…


 

Año nuevo, blog nuevo…

Comienza un nuevo año, y con él la hora de retomar el mantenimiento de un blog…


Mi nombre es Octavio Hernández, y desde esta tribuna compartiré mis ideas sobre diversos temas relacionados con .NET Framework en general y con mis tecnologías predilectas, el lenguaje C# y el proyecto LINQ, en particular.


Mi más sincero agradecimiento al equipo de Geeks.ms y especialmente a Rodrigo Corral y Pablo Peláez por la oportunidad de formar parte de este gran colectivo.