Más allá de C# 3.0

Una vez salidos al mercado .NET 3.5 y C# 3.0, el equipo de desarrollo ya ha comenzado a pensar en las nuevas características a incorporar al lenguaje en la próxima “ola”. Para mantener al tanto a la comunidad, Charlie Calvert, Community PM de C#, ha dado inicio a una serie de posts que bajo el título “Future focus” comenzará a presentar ideas a ese respecto…

La primera propuesta, que ha causado bastante revuelo (según puede verse en la página antes mencionada), está relacionada con la adición a C# de enlace dinámico o tardío (dynamic / late binding), mediante el cual el acceso a una propiedad, método u otra característica de un objeto no se comprueba en tiempo de compilación, sino que es en tiempo de ejecución cuando se verifica si realmente el objeto soporta dicha propiedad o método, para llamarlo en caso afirmativo (o producir un error de ejecución si no existe).

El objetivo central de incluir esta especie de Option Strict Off 🙂 en C# es, en principio, hacer posible que se escriban en C# aplicaciones para el futuro Dynamic Language Runtime (DLR) que se montará por encima del CLR y jugará un papel importante en la próxima versión de Silverlight, haciendo posible desarrollar, además de VB, en Ruby, Python y otros lenguajes dinámicos. Otra área en las que el soporte de búsqueda dinámica de miembros puede ser útil es la automatización de Office y otros escenarios de interoperabilidad con COM; en este sentido, la adición de esta característica me recuerda lo que ocurrió hace alrededor de una década con Delphi, hasta entonces un lenguaje “puro” en lo que a control estricto de tipos se refiere.

La sintaxis que se propone (solo un esbozo, según los autores; de hecho, la impresión que me da es que no pensaron mucho en la idea antes de lanzarla al éter) es como sigue:

static void Main(string[] args)
{
dynamic
{
object myDynamicObject = GetDynamicObject();
myDynamicObject.SomeMethod(); // call a method
myDynamicObject.someString = “value”; // Set a field
myDynamicObject[0] = 25; // Access an indexer
}
}

La idea es que todo el código situado dentro del bloque dynamic podría hacer uso del enlace dinámico.


No repetiré aquí lo que dije allí, pero honestamente no me gusta la sintaxis que se plantea. Incluso se me antoja que nuestro querido lenguaje podría estropearse para siempre…


 

Octavio Hernandez

Desarrollador y consultor en tecnologías .NET. Microsoft C# MVP entre 2004 y 2010.

11 comentarios en “Más allá de C# 3.0

  1. A veces pienso que vamos para atrás… esto ya lo tenía VB 6.0 y COM (a través de la interfaz IDispacth) y todo el mundo lo odiaba… por su mal rendimiento y por su propensión a errores.

    Es cierto que abre ciertos excenarios, pero ningúno significativo que no se pueda implementar mediante Reflection, a mi modo de ver…

  2. Octavio, master, ¿cómo vas?

    Si siguen así, dentro de unos años cambiarán el nombre de C# a… Eiffel, ji ji.

    😉

    Si al final te veré de vuelta al C++ y al C++/CLI.

  3. Rodri,

    Creo que es lo de la espiral, los temas se repiten pero a un nuevo nivel… Y yo que pensaba que ya me había librado de aquello! 🙁

    Tampoco veo claro que los escenarios que se mencionan *requieran* añadir esta característica. Por ejemplo, uno de los escenarios es “Soporte mejorado para la reflexión”. ¿Cuál es la mejora, que ahora escribes x.foo() -a ciegas- en vez de x.GetMethod(“foo”).Invoke(x)?

    Ahora cuando venía de Segovia en el autobús pusieron una canción de Alejandro Sanz y Shakira que refleja adecuadamente “my state of mind” 🙂

    Te lo agradezco, pero no,

    te lo agradezco, mira niña, pero no

    Yo ya logré dejarte aparte

    no hago otra cosa que olvidarte…

  4. Rafa,

    Ya sabes lo que me “mola” C++. Ahora bien, sabes que en la programación en C++ para Windows tampoco es fácil librarse de IUnknown y compañía…

    Abrazo – Octavio

  5. Sinceramente, los cambios realizados en C# 3.0 no me gustaron demasiado, porque si bien uno puede continuar programando como siempre, habilita a que se hagan chanchadas y si es posible hacerlas entonces se harán.
    Con todas estas cosas van a terminar creando un nuevo Fox, un lenguaje que parecia que cada uno le agregaba las tonteras que se le ocurrian sin necesidad de consultar con nadie. Y así le fue.

  6. Bueno, que conste que a mí las novedades introducidas en C# 3.0 (esencialmente una sola – LINQ) sí me parecen geniales… Si no, creo que no me habría motivado a escribir sobre el tema.

  7. se me ocurren un par de escenarios para el “c# script” por llamarlo de alguna manera 🙂

    usarlo como lenguaje de scripting de aplicaciones ó como powershell

    q os parece? 🙂

  8. Hola, David, un honor!

    Sí, sin duda esas aplicaciones lucen válidas… Se podría pensar en un shell con lenguajes basados en C#, de manera similar a como el lenguaje de algunos shells de Unix como el Bourne se basa en la sintaxis de C.

    Mi duda es, ¿no tenemos otros lenguajes para eso? ¿Tenemos que extender C# (incluso rompiendo premisas básicas como el control de tipos estricto) para dar soporte a estas posibilidades?

    Abrazo – Octavio

  9. Mhh mi apuesta es que no será un lenguaje en concreto el dedicado al scripting..sino el DLR como tal, de modoq ue haya tb “scripting al gusto”

    personalmente..prefiero a c# como esta 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *