A Design Rationale for C++/CLI, traducido
C++/CLI es la versión CLI del lenguaje de programación C++ y, al igual que el C++ es el lenguaje de sistemas para Windows y *nix en modo nativo, su equivalente C++/CLI lo es para la plataforma .NET.
C++/CLI extiende el lenguaje C++ para dar cabida a los conceptos que se esconden dentro del universo .NET, para poder implementar, consumir y ofrecer a otros lenguajes objetos compatibles con el formato CLI. Realmente esta ampliación es necesaria porque, aunque hacer que cualquier código fuente realizado en C++ pueda ejecutarse dentro de una máquina virtual .NET sea tan sencillo como aplicar /clr a las opciones del proyecto, dicho código es incapaz de utilizar ningún elemento disponible en la plataforma, y menos aún suministrarlos para que sean consumidos por otros lenguajes.
Se necesitan por ello una serie de extensiones que sean capaces de operar con el modelo .NET, así como de comunicar el código C++ existente con las nuevas características.
Es por ello por lo que Microsoft reunió a los mayores expertos en C++, entre los que se encuentran Herb Sutter y Bjarne Stroustrup, para que fueran ellos los que delimitaran e implementaran los nuevos conceptos necesarios para convertir al C++ en el lenguaje más potente de todos dentro de la plataforma .NET, de igual modo que ya lo es en el resto de entornos de ejecución.
Y fue este grupo el que, tras una ardua labor, convirtieron las Extensiones Manejadas en el C++/CLI, un poderoso lenguaje de programación que, sin interferir en la especificación ya existente (y en la medida de lo posible, en futuras versiones del C++), es capaz, no sólo de manejarse dentro del CLI, sino de resultar el lenguaje de programación más potente para el desarrollo en esta plataforma.
Esta potencia lleva asociada una complejidad inherente que no se puede evitar, pero que sí se puede enmascarar o adornar, evitando en todo momento que algo que ya es difícil de por sí, lo sea todavía más por haber sido mal implementado (que fue el caso de las Extensiones Manejadas).
Mi primer contacto con el documento que nos ocupa vino de la mano de mi anterior trabajo, el pequeño tutorial de C++/CLI que escribí en su momento. Me surgió una duda con una de las características, y ni corto ni perezoso, pregunté en el foro en inglés del Visual C++.
La respuesta vino acompañada de: “debes leerte el Rationale”, como habitualmente se le llama, aunque más bien la respuesta quería decir otra cosa: “¿cómo es posible que todavía no hayas leído el Rationale?”. Pues ni corto ni perezoso, me puse a ello.
Tras haberlo hecho, comprendí que se trata de un documento de cabecera, que todo programador de C++/CLI o que pretenda serlo debería haber leído al menos una vez. El documento es muy denso, muy técnico, pero conforme va desvelándote los misterios sobre por qué el C++/CLI hace las cosas como las hace y no de otra forma, vas comprendiendo no sólo los intríngulis del lenguaje, sino otros aspectos del CLI y del C++ tradicional que quizás no recordabas o no sabías cómo eran.
El siguiente paso fue decidirme a traducirlo, para compartir con la comunidad un documento tan importante.
Y aquí es donde entra Octavio Hernández, que ya había revisado mi anterior trabajo y con el que había mantenido conversaciones por correo y, anteriormente –sin saber quién era-, en persona en distintos eventos por las Españas de dios. Y lo que iba a ser un trabajo solitario se convirtió en un trabajo solitario… en tándem. Yo traduje una parte, él otra, nos corregimos de forma cruzada, luego fuimos revisándolo todo varias veces y al final terminamos.
Hemos concluido una laboriosa tarea, a veces enormemente difícil, pero al final, con tesón y constancia, la hemos realizado. Porque aunque en un principio pueda parecer trivial traducir este documento de 54 páginas en inglés, ha resultado una tarea ardua y densa pero, al fin aquí está.
El documento original se puede bajar de aquí, y nuestra traducción de aquí. El autor del trabajo es Herb Sutter, todo un hacha en temas C++.
