Periódicamente aparece el tema sobre el futuro de los lenguajes C y C++, unas veces en las news, otras en foros más o menos técnicos, a veces son expertos o gurús quienes lo afirman (pero en este caso dejan de serlo, por lo menos para mí). Y lo curioso del asunto es que siempre, siempre, dicen lo mismo: al C/C++ les quedan menos de 10 años de vida. Luego varían un poco en cuanto a dar razones, pero en esencia el resultado es el mismo: la pronta muerte por abandono. Recientemente ha sido la Bitácora de Guti quien lo ha afirmado (y que conste que no tengo nada personal contra Guti, pero si tú no usas el C no digas que nade más lo usa).< ?xml:namespace prefix = o />
Pero lo cierto es que estos dos lenguajes están más vivos que nunca, y lo estarán durante mucho, mucho tiempo. Bien es verdad que Borland, Microsoft, Watcom, tradicionales fabricantes de compiladores para PC (y fijaos que digo para PC) han ido abandonando y dejando atrás sus herramientas basadas en C. En algunos casos, incluso la empresa ha desaparecido en sí (es el caso de Watcom, aunque una versión mejorada de su compilador se puede encontrar en www.openwatcom.com). En otros casos (Microsoft) el C/C++ se ha convertido en un lenguaje de segunda dentro de su nueva filosofía. Y de Borland sólo diremos que ha perdido el rumbo en cuanto a lenguajes de programación se refiere.
Desde el punto de vista de la programación para PC quizás tenga que apoyar la opinión de Guti y de otros, pero lo cierto es que en la actualidad no sólo de PC vive el hombre.
¿Quién no ha usado una afeitadora, un microondas, un vídeo, una tele, un dispensador de comida (en general una máquina de vending), un teléfono móvil, ha pagado en un parking con una máquina de tickets…? Y no sigo, porque hoy en día, virtualmente casi cualquier aparato más complejo que un mechero de gas tiene un microprocesador dentro. Digamos, y es sólo un acercamiento, que para 1 PC que existe, hay otros 1000 dispositivos diferentes basados en microprocesador.
¿En qué se programan estos dispositivos? ¿En Visual Basic, en Java? No, señores, no, se programan en C/C++. Y se seguirán programando. Quien quiera que vaya a las Web de Renesas (antes Hitachi), Motorota, Intel, Microchip, y un muy largo etcétera, busque información sobre microprocesadores y vea las herramientas de programación disponibles para ellos: C/C++. Desde IDE’s clon del Visual Studio 5/6 (HEW, Keil) hasta compiladores de línea de comandos (WindRiver, Keil otra vez, Metrowerks), hasta híbridos, mezcla de una cosa y otra.
Y repito: todos ellos se programan, al menos, en C. Existen ensambladores para cada uno de los micros, pero es mucho más fácil programarlos en C. Y hay fabricantes que ofrecen versiones con extensiones del C/C++, pero que no dejan de ser C y C++.
Pero si volvemos a la plataforma PC, veremos que el C/C++ tampoco va a morir. Ni de lejos. ¿Cómo están hechas las tripas de los periféricos –impresoras, monitores, discos duros, escáneres, etc.-? Pues con microprocesadores y, ¡tachán!, programados en C/C++. Incluso partes de las placas bases están, de seguro, programadas en C. Porque si os imagináis que los chipsets son puro hardware os equivocáis. Dentro de ellos se ejecuta código, aunque aquí quizás estén hechos en VHDL (por cierto, una variación del C para programar hardware). Hasta los módulos de memoria ejecutan código (id a Nanta y bajaros un Datasheet de un módulo de memoria).
¡¡El C ha muerto. Viva el C!! Hasta que no se encuentre un sustituto para la realización de esas tareas, el C seguirá vivo, muy vivo. En un momento se pensó que el Pascal podría sustituirlo (más que nada por su sintaxis algo más sencilla), pero al final el único hueco que conserva es la docencia y el Delphi.
Y quien piense que pronto aparecerán chips que ejecuten directamente Java o C# (o incluso Visual Basic) para sustituir a los actuales microprocesadores se equivocan de medio a medio. No digo que no haya chips que hagan eso (creo que ya los hay por lo menos de Java), pero lo que afirmo categóricamente y con conocimiento de causa es que veo difícil que una máquina expendedora de tickets de un parking se haga alguna vez con uno de esos chips, por lo menos mientras Java siga siendo el Java que conocemos en la actualidad. Si el lenguaje sufriera profundas modificaciones quizás sí, pero resulta que esas modificaciones son las opciones que se quitaron del C para hacer Java (lo mismo ocurre con el C#, y del Visual Basic mejor no hablar). Y para muestra un botón.
Definimos una estructura que se corresponda con el espacio de direcciones del micro (al menos del de los registros de configuración, puertos, etc.). Creamos una variable puntero de esa estructura con la dirección base dentro del micro. E voilà, ya podemos configurar/programar/usar el micro como si se tratara de una variable más:
struct MICRO
{
unsinged char relleno01[3];
unsigned char simr;
unsigned char relleno02[0x10];
unsigned char icr1;
…
};
volatile struct MICRO *const g_micro=(struct MICRO *)0xffe0000;
void main void()
{
g_micro->icr1=ICR_AUTOVECTORICR_INT_LEVEL_1ICR_INT_PRIORITY_0; //IRQ1, Selector, NO USADA
…
}
Actualización
Olvidé comentar lo más importante para los PCeros, gracias a Oscar que me lo ha recordado: ¿Conoce alguien en qué están hechos Linux, todos los colores y sabores de Unix, Winodws y todas sus variantes, y casi todos los sistemas operativos? Pues en C y C++, señores. ¿Conoce alguien con qué están hechas grandes aplicaciones como Visual Studio, KDE, Gnome, Office, OpenOffice, Mozilla y familia…? Pues en C y C++. Creo que con estos ejemplos sobra cualquier otro comentario.