¿Es lo mismo C que C++? ¿Cuál es el origen de ambos?
Vamos a hablar un poco sobre lenguajes de programación y su historia, concretamente de C/C++. En este artículo descubriremos el origen y evolución de uno de los lenguajes de programación más usados a nivel mundial. Además, trataremos de responder a una de las preguntas más habituales de si es lo mismo C que C++.
Recorriendo la historia de C, desde su aparición hasta convertirse en un estándar.
Hace tiempo, en la década de 1970, exactamente entre los años que comprenden desde 1969 a 1972, Dennis Ritchie terminó de desarrollar el lenguaje de programación llamado C, ¿por qué lo hizo? D. Ritchie buscaba un lenguaje más eficiente en aspectos como el acceso a memoria, código más eficiente, fácil compilación y que no precisara de un run-time support muy extenso. Cuando hablamos de run-time support en lo que refiere a C, abarcamos aspectos como manejo de memoria (aunque en C esto hay que hacerlo manualmente depende de lo que el usuario quiera, mediante el desarrollo de código no preescrito en ocasiones ofreciendo mayor complicación en comparación con C++), control de errores y operaciones aritméticas.
Con las ideas claras, Dennis Ritchie y Ken Thompson reescribieron en 1973 la mayor parte de UNIX (sistema operativo presente en gran cantidad de los ordenadores de aquella época y que aún sigue presente en nuestros días), el cual estaba escrito en ensamblador (también conocido como código máquina). Traducir todo el código en ensamblador a C significaba un tedioso trabajo, pero también se reducía a: mayor eficiencia en lo mencionado en el primer párrafo. Por así decirlo, C ofrecía mayor «portabilidad» permitiendo a este lenguaje adaptarse a diferentes tipos de computadoras, cuestión que en lenguaje ensamblador tiene que hacer el programador manualmente. El ascenso de C como unos de los lenguajes principales, sino el principal de la época, fue en parte gracias a su implementación en UNIX.
Surge «The C Programming Language» de la necesidad de un estándar al escribir código en C.
Con el auge de C como uno de los principales lenguajes de la época se precisó de un estándar, esto lo llevaron a cabo Brian Khernighan y Dennis Ritchie (1978) en el libro «The C Programming Language», conocido mayormente por sus siglas K&R (procedentes de sus respectivos apellidos Khearnigan y Ritchie), que resolvió multitud de problemas relativos a la necesidad de los programadores de ceñirse a un estándar para realizar una portabilidad, por ejemplo.
En 1983 el ANSI (American National Standard Institute, por sus siglas en inglés) reunió un comité para elaborar un estándar para este lenguaje. Tras varios años, en 1989 este estándar vio la luz bajo el nombre de C89, comúnmente conocido por «ANSI C». En el año 1990 la organización internacional para la estandarización (ISO, International Organisation for Standarization, por sus siglas en inglés) adoptó este estándar con algunas modificaciones, este nuevo estándar se resguarda bajo el nombre de C90. Los compiladores de la época adoptaron una compatibilidad ANSI C/C90 por lo que los programas que quisieran una compatibilidad se vieron obligados a adoptar este estándar.
Un nuevo estándar para crear el «nuevo» lenguaje C++.
En 1999, ANSI liberó otro estándar más actualizado con nuevas características que adoptarían los compiladores bajo el nombre de «extensiones», las cuales algunas han sido implementadas en C.
En 1979, Bjarne Stroustrup desarrolló la primera versión de C++ en los Bell Lab’s. C++ era una «extensión» de C en aquel momento, ya que añadiría muchas más características a este lenguaje, por eso C++ (erróneamente hablando, ya que el C99 contiene funciones que C++ no contiene) es considerado en muchos casos como un superconjunto de C. Además C++ es un lenguaje orientado a objetos (POO, programación orientada a objetos).
C++ fue ratificado en 1988 por el ISO, en 2003 también. Más tarde en 2011, 2014 y 2017 se liberaron el C++11, el C++14 y el C++17 respectivamente, añadiendo varias funcionalidades más al lenguaje.
Toda historia tiene sus conclusiones.
En conclusión, C++ nos ofrece una gama de posibilidades más amplia respecto a la que nos ofrece C, posibilidades presentes solo en C++ tales como: el código de C puede ser interpretado en C++ pero no a la inversa, el uso de clases, uso de el famoso namespace o espacio de nombres, las funciones pueden ser utilizadas dentro de estructuras mientras que en C no es posible, soporta variables por referencia, C++ es lo que se dice un lenguaje híbrido, C++ es un lenguaje que soporta polimorfismo al igual que encapsulamiento y herencia, mientras que C no y un gran etcétera de funcionalidades que C++ nos regala frente a C.
Pero no tan rápido, forastero… ¿Merece la pena aprender C++ en 2018? La respuesta a esta pregunta es muy amplia y hay que tener en cuenta que C++ es un lenguaje bastante extenso y considerablemente difícil de aprender, por lo que habría que invertir mucho tiempo si valoramos la posibilidad de la existencia de otros lenguajes de programación que nos brindan mayor facilidad de aprendizaje en un menor tiempo e incluso, depende de nuestro objetivo, ofrecer el mismo resultado final más eficientemente si tenemos en cuenta lo mencionado en este párrafo.
Como bien dijo Bjarne Stroustrup: «C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off» que traducido al español sería «C hace fácil el poder dispararte en un pié; C++ lo hace más difícil, pero cuando lo hace te vuela toda la pierna entera».