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...

 

Published 11/2/2008 16:22 por Octavio Hernández
Archivado en:
Comparte este post:

Comentarios

Monday, February 11, 2008 6:08 PM por Rodrigo Corral

# re: Más allá de C# 3.0

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...

Monday, February 11, 2008 6:10 PM por Rafael Ontivero

# re: Más allá de C# 3.0

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.

Monday, February 11, 2008 7:52 PM por Octavio Hernández

# re: Más allá de C# 3.0

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...

Monday, February 11, 2008 8:32 PM por Octavio Hernández

# re: Más allá de C# 3.0

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

Monday, February 11, 2008 9:27 PM por Unai

# re: Más allá de C# 3.0

Octavio TITÁN.... siempre a la última... ! Que bien te viene el modem para estos viajes de autobus !!

Tuesday, February 12, 2008 1:17 AM por Lucas Ontivero

# re: Más allá de C# 3.0

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.

Tuesday, February 12, 2008 10:05 AM por Octavio Hernández

# re: Más allá de C# 3.0

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.

Wednesday, February 13, 2008 8:04 AM por David Salgado

# re: Más allá de C# 3.0

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? :)

Wednesday, February 13, 2008 10:44 AM por Octavio Hernández

# re: Más allá de C# 3.0

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

Wednesday, February 13, 2008 4:35 PM por David Salgado

# re: Más allá de C# 3.0

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 :)

Wednesday, February 13, 2008 10:00 PM por Rodrigo Corral

# re: Más allá de C# 3.0

No se David, para scripting yo creo que MS ha dado en el clavo con Powershell...

Un saludo!!!