C
Cincuenta años y sigue siendo la capa sobre la que se apoya todo lo demás.
- Primera versión
- 1972
- Creado por
- Dennis Ritchie, at Bell Labs
- Tipado
- Estático y débil, con conversión libre a través de punteros
- Extensiones de archivo
- .c, .h
Para qué sirve
C vive en el fondo del stack. Kernels de sistemas operativos, drivers de dispositivos, firmware embebido, runtimes de lenguajes y las bibliotecas estándar de casi todos los demás lenguajes. Cuando un lenguaje presume de poder llamar código nativo, la interfaz de la que habla es la de C.
Sobrevive porque es pequeño y porque se proyecta sobre el hardware casi sin nada en medio. Sin runtime, sin recolector de basura, con pocas abstracciones que cuesten algo que no pediste. Eso es exactamente lo que quieres en un microcontrolador con kilobytes de RAM. Y es exactamente lo que lo vuelve peligroso en todos los demás lugares: la memoria manual y los búferes sin verificar han aportado una parte notable de las vulnerabilidades de seguridad de las últimas tres décadas.
Por eso los lenguajes de sistemas más nuevos se definen en parte por oposición a él, y hoy hay un esfuerzo serio por reemplazarlo donde la seguridad importa. Nada de eso hace mella en la base instalada. Hoy corre más C que nunca, y va a sobrevivir a todos los que leen esto.
De dónde viene
Dennis Ritchie construyó C en Bell Labs entre 1969 y 1973, a partir del B de Ken Thompson, para que Unix pudiera reescribirse en algo que no fuera ensamblador. Eso hizo a Unix portable, y esa sola decisión difundió el sistema operativo y el lenguaje más lejos de lo que cualquier campaña de promoción habría podido.
The C Programming Language, de Kernighan y Ritchie, definió el lenguaje durante una década a partir de 1978 y se convirtió en uno de los libros de programación más influyentes jamás escritos. La estandarización formal llegó después: ANSI C en 1989, ISO en 1990, y luego C99, C11, C17 y C23, cada uno agregando con cuidado y rompiendo casi nada.
El conservadurismo del comité es justamente el punto. El código escrito en 1990 todavía compila, y un ABI de C es la lengua franca que todos los lenguajes pueden hablar. C ha cambiado menos en cincuenta años de lo que la mayoría de los lenguajes cambia en cinco.
Cómo se siente teclearlo
C es llaves, puntos y comas y asteriscos. Cada sentencia termina en punto y coma, cada bloque es un par de llaves, y el trabajo con punteros suelta * y & en medio de declaraciones y expresiones donde tus dedos no los esperan. Las guardas de inclusión y las líneas #include vuelven la tecla de numeral algo ordinario en vez de exótico.
165 pasos en 10 tours, desde lo básico hasta programas completos.
Los tours
- Fundamentos del lenguajeC desde el principio. 35 pasos.
- Punteros y memoriaEl tour del que C se trata en realidad. 25 pasos.
- Cadenas y textoLas cadenas de C son una convención, no un tipo: un puntero y la promesa de que hay un byte cero en algún punto más adelante. 13 pasos.
- Archivos y E/Sstdio, como se debe. 12 pasos.
- Preprocesador y encabezadosEl preprocesador es una pasada de sustitución de texto que corre antes de que el compilador tenga la menor idea de qué significa tu programa, y la mayoría de los rincones más extraños de C viven aquí. 12 pasos.
- Estructuras de datos y algoritmosEstructuras de datos escritas a mano, porque en C es la única forma de tenerlas. 20 pasos.
- Programación de sistemasC hablando con el sistema operativo. 14 pasos.
- Hilos y concurrenciaHilos en C11, más los mutexes y las variables de condición que evitan que se destruyan entre sí. 10 pasos.
- Uniones, campos de bits y comportamiento indefinidoLas partes de C que son legales, útiles y capaces de arruinarte la semana. 13 pasos.
- APIs, errores y pruebasCómo escribir C que otras personas puedan usar. 11 pasos.
Documentación oficial
- Referencia de C en cppreference
- ISO WG14, el comité de C
- Documentación de GCC
- Manual de la biblioteca C de GNU
- Documentación de Clang