domingo, 17 de agosto de 2008

Spec#

Hace unos días ya del último post, y después de los comentarios de Humberto me animo a lanzar este otro post, también enlazado al tema del diseño por contrato (DbC).

Probablemente este sea un tema que aunque sabemos es muy interesante, haya quedado como “engavetado” por muchos de nosotros, tal vez por la incapacidad de los lenguajes o tal vez por la motivación de aprender otras prácticas.

Dejándome llevar por la motivación de aprender (en aquel momento TDD) leí el artículo del post pasado y al llegar al final vi que se enumeraban otras alternativas al framework que ahí se utilizó. Las alternativas se muestran siguiendo un orden, que desconozco los elementos que se tuvieron en cuenta para realizarlo, pero se presentan de la alternativa más cruda a la mejor.

Como programador al fin me fui a analizar los casos extremos, así que le di un vistazo a la más cruda, pero estaba tan cruda que no la pude digerir, se trataba de lanzar excepciones con validaciones en el código, esto no creo que valga la pena ni analizarlo, así que pase directamente a la mejor de las opciones enumeradas, Spec#.

En el artículo dice textualmente: Option 7. Microsoft's Spec# project is researching adding DbC to C#. It looks comparable in sophistication to Eiffel, but Spec# is unfinished: it's not licensed for commercial development. Microsoft's recent announcements about C# 3.0 didn't mention it, but hopefully DbC will make it into C# 4.0 ... whenever that may be.
Interesante verdad??

Aunque se menciona como la mejor de las alternativas, se dice que no estaba terminado. El artículo estaba fechado 2 Feb 2008, dos años atrás.. Y fue que me dije, deja ver que han pasado en estos dos años y fui a visitar el sitio. Uds pueden visitarlo en esta dirección: http://research.microsoft.com/SpecSharp/

Según tengo entendido aun el proyecto está en desarrollo, pero ya lo podemos utilizar (creo que la limitante de que no existe licencia para uso comercial continúa), yo he bajado la instalación que ahí tienen y funciona perfecto. Creo que donde está un poco flojo es en las ultimas adiciones a C# con el framework 3.5, lambda expression, LINQ, etc. Yo al menos estoy trabajando en 2.0 y lo poquito que he visto, esta genial, no me esperé que estuviera tan avanzado.

Como se han percatado no es un lenguaje nuevo, es simplemente una extensión a C#, por lo tanto uno programa sencillamente en C# pero puede utilizar algunas nuevas sintaxis soportadas por Spec#. Se habla de incluir todo esto en futuros releases de .NET, interesante.

Spec# adiciona a C# la posibilidad de distinguir en la declaración de una variable si la variable no podrá ser referenciada a NULL, esto se conoce como: non-null object references (adios a las condiciones que preguntan por null en nuestro código), ofrece especificaciones para los métodos como pre y post condiciones, una disciplina para el manejo de excepciones y brinda soporte para expresar invariantes a nuestras clases.

Me parece un tema bonito, algo que he sacado de la “gaveta” y que quisiera compartir con uds. Me alegra muchísimo que Humberto haya estado hurgando en el tema pues con su experiencia podremos ver si esto tiene futuro y quién sabe si esto es lo que nos tiene preparado Microsoft para después de LINQ…

Si les interesa el tema instalen la extensión a C# y en próximos post entramos en la materia, discutiendo ventajas y desventajas…

Espero sus comentarios.
Erlis

No hay comentarios: