A menudo aparecen juntos en los primeros puestos de las clasificaciones de lenguajes más populares, y con razón. He aquí un rápido repaso a las ventajas (y desventajas) de C, C++ y C#.
Los lenguajes de programación C, C++ y C# presentan similitudes que sugieren un parentesco. De hecho, C fue el precursor y le siguieron C++ y C#, cada uno de los cuales aportó desarrollos interesantes, aunque en direcciones diferentes.
C, el lenguaje del rendimiento
Inventado en 1972 para acompañar la creación del sistema UNIX, el lenguaje C convirtió a sus autores, Kernighan y Ritchie, en un nombre muy conocido. Primero se estandarizó con el nombre de "ANSI C" y después con las normas ISO. Se sucedieron las versiones y el lenguaje de programación no dejó de evolucionar.
C ofrece al desarrollador un control preciso de la máquina y acceso directo a la memoria. Cuando se inventó, era un lenguaje mucho más legible que cualquier otro disponible en la época. Hoy en día, se considera un lenguaje de bajo nivel, pero si se utiliza correctamente, puede servir para crear una amplia gama de aplicaciones, escribir programas de alto rendimiento cercanos al hardware. Se utiliza para escribir todos los componentes básicos utilizados en otras tecnologías (empezando, por ejemplo, por las máquinas virtuales Java).
Su sintaxis ha sido adoptada por muchos lenguajes sucesores. C utiliza un enfoque secuencial. Esto significa que las instrucciones se ejecutan en secuencia. Un punto de entrada en la aplicación se denomina "main". El código puede organizarse en funcionescon parámetros de entrada, entrada-salida y retroalimentación. Por tanto, admite la llamada programación "procedimental". Se admiten variables globales.
Por último, el código C manipula muy a menudo directamente los espacios de memoria asignados. Esto permite una gestión muy precisa... pero requiere mucha atención por parte del desarrollador.
Su última versión estable es la C17 de junio de 2018. La última versión previsualizar es el C23 de abril de 2023.
C++, un lenguaje orientado a objetos
El lenguaje C++ fue desarrollado por Bjarne Stroustrup en 1979. Compatible con C, pero diseñado como lenguaje orientado a objetospuede utilizarse para implementar abstracciones de mayor nivel que C.
C++ sigue siendo un lenguaje multiparadigma: permite la programación imperativa, orientada a objetos y funcional. El concepto de plantilla permite la programación genérica. El lenguaje sigue siendo fuertemente tipado, y la compilación puede ser bastante estricta, pero se dispone de un gran número de opciones, dejando al programador en gran medida a cargo. El principal escollo del lenguaje sigue siendo el acceso a la memoria, a través de punteros, y la obligación del desarrollador de liberar todos los recursos que haya asignado. La memoria se asigna en la pila o en el montón, a discreción del desarrollador.
Las versiones recientes del lenguaje y de la biblioteca estándar (de 2014 a 2020) han mejorado considerablemente la legibilidad y fiabilidad del código.. En particular, mediante la aplicación de patrones (punteros inteligentes) y el mayor uso de la programación genérica. Normalizado desde 1998 por la ISO, este lenguaje ha experimentado varias evoluciones, la más importante de las cuales es C++11. Su diferencia más inmediata con C es el soporte de clases y principios orientados a objetos. Los compiladores de C++ suelen ser más estrictos que los de C. Por ello, muchos desarrolladores han utilizado C++ sólo para encapsular bibliotecas C. Tenga en cuenta que existe un C++ gestionado que se utiliza exclusivamente en la plataforma .NET...
Su última versión es C++20 a partir de diciembre de 2020.
C#, .NET y Microsoft
El lenguaje C#, pronunciado "C sharp", se lanzó en 2002. Está destinado a ser el lenguaje principal de la plataforma .NET de Microsoft. Se basa en gran medida en la sintaxis de Java, al tiempo que añade todos los elementos de IL, el lenguaje intermedio utilizado por el componente de máquina virtual (CLR) de la arquitectura .NET.
Con esta tecnología, los desarrolladores tienen acceso a una biblioteca estándar muy amplia. Las sucesivas actualizaciones, hasta la actual C# 11, han seguido el ritmo de los avances de la plataforma .NET. Por tanto, C# puede utilizarse con todo tipo de aplicaciones, desde aplicaciones de consola hasta aplicaciones web. El vínculo con C++ es evidente, al igual que con Java. Sus características sintácticas son, por tanto, intermedias entre Java (una sintaxis estricta y sencilla) y C++ (una complejidad ligada al uso directo de la memoria, la sobrecarga de operadores).
C# ofrece mucho azúcar sintáctico, es decir, elementos sintácticos sencillos que generan código relativamente complejo. Por ejemplo, el delegado, que es la implementación de un observador, pero que se presenta como un puntero de función C, o la gestión de propiedades, que no son más que los getter y setter de C++. La programación genérica se introdujo en C#, ofreciendo la posibilidad de crear familias de clases que se adaptan a tipos desconocidos en el momento en que se escribieron.
La gran diferencia con C++ es que respeta las limitaciones de la arquitectura .NET.. Su objetivo es escribir aplicaciones de confianza controladas por el CLR. En particular, porque la memoria es gestionada por un recolector de basura cuya función es mantener la memoria disponible. Nótese la ausencia de variables y funciones globales en C#, lo que lo convierte en un lenguaje de objetos mucho más puro que C++....
La última versión es la C# 11 de noviembre de 2022.
¿En conclusión?
Sabiendo todo esto, resulta más fácil elegir entre estos tres lenguajes de programación. Optar por C es una garantía de aprender lo básico, pero quizá de una forma un poco brusca, debido a su complejidad. Los principiantes son bienvenidos, ¡siempre que sigan con él!
Con C++, en cambio, los conceptos de objeto y programación genérica amplían las posibilidades, y la biblioteca estándar, muy enriquecida en los últimos años, facilita la vida en ciertos casos.
Por último, con C#, el último de la serie, tenemos un lenguaje avanzado que simplifica muchos aspectos de la construcción de aplicaciones... Sobre todo porque está basado en el marco .NET. Ahora sólo tiene que decidir cuál de estos lenguajes se adapta mejor a su proyecto.