domingo, 19 de julio de 2009

Con valor, como debe ser.

Leyendo InformIT me entero que el comité de estandarización del C++ ha rechazado los conceptos explícitos. Una pieza fundamental del nuevo estándar C++0x.

Un concepto implícito es una interfaz que no hace falta declararlo cuando se crea un tipo. Basta con que el tipo tenga las operaciones adecuadas para que cumpla el concepto. Así que si tengo un concepto "sumable" que requiera tener definido "operator+", tanto una clase que lo implemente como los enteros o los flotantes son "sumables". En teoría de tipos a esto se le llama "duck typing".

Cuando se introducen los conceptos en el lenguaje de forma sintáctica lo que tenemos son conceptos explícitos. Es decir, o digo que un entero es "sumable" o no puedo usarlo como "sumable". Esto tiene sus ventajas y sus inconvenientes. Por ejemplo, que sea "sumable" puede tener asociada la semántica de la suma pero un "operator+" podría no ser una suma. En ese caso sí que me interesa separar lo que es "sumable" de lo que parece "sumable". Por otra parte, ¿para qué tener que decir que es sumable?... si es que se ve. Debido a esto el comité de estandarización añadió los conceptos automáticos que no es más que los conceptos implícitos antes mencionados.

Se complica la cosa, ¿verdad?

Lo que realmente ocurre es que introducir algo explícito cuando ya existe eso mismo implícito no es buena idea si no es realmente necesario. Las necesidades que se proponían eran varias:

  • Mejorar la notificación de los errores en los templates.
  • Añadir semántica a los conceptos implícitos (mediante axiomas)
  • Otras más que no llego a comprender o recordar.

Bueno. Creo que la primera necesidad es responsabilidad del compilador. El compilador debe acercar los errores al usuario y no vomitar la pila de argumentos de template. La segunda no es tampoco una necesidad muy necesaria ya que día a día los programadores usan identificadores para describir la semántica y no hay nada que les impida usar la función inadecuada en el momento inoportuno. Aún así, programan.

Así que bien visto, a pesar de estar tirando varios años de trabajo a la basura... ¡KISS!.

0 comentarios:

Publicar un comentario