Google
 

sábado, septiembre 22, 2007

C++ y las tres bes: bonito bodrio y... bacalo (Capítulo I)

He estado varios meses sin actualizar el blog por falta de tiempo pero ya vuelvo al pie del cañón. Vuelvo para hacer pública mi opinión acerca de un lenguaje que prometió el oro y el moro pero que acabó convirtiéndose en un estorbo. Si, me refiero a C++.

Con la gran explosión de lenguajes que estamos viviendo en estos últimos años (Ruby, Lua, Python, etc...) se va haciendo cada vez más patente los grandes defectos de C++. El principal, desde mi punto de vista, y el que más me putea es el conocido como name mangling.

¿Que qué carajo es eso? Empecemos con la explicación para C. Cuando compilas tu programa el compilador de C no usa los nombres de las funciones que elijes porque el programa que se encarga de linkar necesita información extra. Así que el compilador retoca un poco los nombres. En C ésto, el mangling scheme, es algo definido en el estándar, da igual el compilador que uses, da igual el lenguaje que uses que al ser estándar todos se entienden entre sí.

Ahora vamos con el C++ que funciona igual excepto un pequeño y desastroso detalle... no hay un estándar, no entiendo porqué pero no lo hay. Cada compilador gcc, msvc, etc... usa un formato diferente para nombrar las funciones durante la compilación, con lo que todos son incompatibles entre si.

¿Como nos afecta esto? Intentad hacer una DLL en C++ y veréis que bonito resultado. Observad como todos los nuevos lenguajes tienen soporte directo para usar llamadas a C pero no a C++ Linkar archivos .obj de diferentes compiladores juntos y observad que bonito error aparece en vuestras pantallas.

2 comentarios:

javi dijo...

podría decir 3 ó 4 problemas mucho más importantes de C++ que el que has descrito, aunque no está mal saber porque de esa no compatibilidad.

Victor M. dijo...

Es a titulo personal porque me ha afectado bastantes veces y me ha obligado a tener que hacer el doble de trabajo (tener que montar 'wrapper' en C para una librería en C++). Pero tranquilo que esto es sólo el primer capítulo.