⬅️ Atlas · 📚 Índice de clases · 🧭 Rutas · ⬅️ Volver al programa
Ninguno de estos lenguajes está aquí por curiosidad histórica, por nostalgia ni por capricho. Están aquí porque siguen en producción hoy, y porque cada uno deja a la vista un concepto que los diez lenguajes del núcleo esconden o dan por resuelto.
El criterio de inclusión es doble y se aplica a todos por igual:
Dos precisiones que este material no oculta
Primera: no todo se puede resolver con estos lenguajes, y donde no se puede, se dice. JCL no calcula: orquesta trabajos. VBA vive dentro de Excel y no tiene
stdin. AutoLISP no existe fuera de AutoCAD. RPG recibe sus datos por parámetros o por fichero, no por la entrada estándar. En esos casos el contrato se adapta y la adaptación se declara en la página, en lugar de inventar un programa falso que finja lo contrario. Un JCL que multiplicara números no enseñaría JCL: enseñaría una mentira.Segunda: muchos de estos lenguajes se han actualizado para resolver problemas actuales. No son fotos fijas. COBOL genera y analiza JSON con sentencias del lenguaje; Fortran descarga bucles a la GPU con
do concurrent; RPG consume APIs REST conDATA-INTO; Ada 2022 comprueba contratos y SPARK los demuestra; Tcl 9.0 trajo Unicode completo; Perl 5.40 tienetry/catchy firmas de función; Delphi compila para iOS y Android; MUMPS habla FHIR y corre en contenedores. Por eso cada ficha tiene una sección🔄 Lo que se ha modernizado: sin ella, la lista parecería un cementerio, y no lo es.
| Lenguaje | Año | Dónde sobrevive | Estado | El concepto que deja a la vista |
|---|---|---|---|---|
| COBOL | 1959 | Banca, seguros, gobierno, tarjetas, pensiones | 🟢 | Aritmética decimal exacta y la forma del dato declarada |
| Fortran | 1957 | HPC, clima, física, CFD, BLAS/LAPACK | 🟢 | El array como ciudadano de primera; el coste del aliasing |
| Ada | 1983 | Aviónica, espacio, ferrocarril, defensa | 🟢 | El tipo lleva una regla del dominio, no solo un tamaño |
| RPG | 1959 | IBM i: ERP, retail, logística, manufactura | 🟢 | El ciclo del programa: un bucle principal implícito |
| PL/I | 1964 | Mainframe z/OS: banca, seguros | 🟡 | El origen del try/catch; el coste de querer abarcarlo todo |
| M / MUMPS | 1966 | Sanidad, historia clínica, VistA, Epic | 🟡 | El lenguaje y la base de datos son la misma cosa |
| Smalltalk | 1970s | Banca, seguros, trading, telecomunicaciones | 🟡 | OO puro: hasta el if es un mensaje a un objeto |
| Common Lisp | 1958 | IA simbólica, CAD, investigación, DSL | 🟡 | Homoiconicidad y macros: el código es un dato |
| AutoLISP | 1986 | AutoCAD: arquitectura, ingeniería, construcción | 🟢 | El lenguaje incrustado en una aplicación anfitriona |
| Tcl/Tk | 1988 | EDA (diseño de chips), redes, testing, GUI | 🟡 | No hay sintaxis, solo comandos: el if es de usuario |
| Perl | 1987 | Sysadmin, texto, bioinformática, web heredada | 🟡 | Regex en la sintaxis y el contexto de evaluación |
| Delphi / Object Pascal | 1995 | Escritorio empresarial, TPV, industria, ERP | 🟢 | RAD y modelo de componentes: propiedades y eventos |
| VBA | 1993 | Excel, Word, Access, AutoCAD, SolidWorks | 🟢 | Una hoja de cálculo es un programa; la UDF que extiende la fórmula |
| Pascal | 1970 | Educación, y sobre todo vía Delphi/Free Pascal | 🟡 | Tipos definidos por el usuario: subrangos y enumerados reales |
| JCL | 1964 | z/OS: proceso por lotes de banca y seguros | 🟢 | Programa y entorno separados: inyección de dependencias del SO |
| Assembler | 1949 | Firmware, núcleos, cripto, SIMD, embebidos | 🟢 | El suelo: qué es de verdad una variable, una pila, una llamada |
| C | 1972 | SO, firmware, redes, bases de datos, intérpretes | 🟢 | La ABI universal: el idioma en que los lenguajes se hablan |
| C++ | 1985 | Videojuegos, navegadores, finanzas, HPC, robótica | 🟢 | Abstracción de coste cero y RAII |
🟢 uso amplio y activo · 🟡 nicho vivo pero minoritario
Este programa distingue siempre lo que verifica una máquina de lo que es material de lectura. Con estos dieciocho lenguajes, la clasificación es la siguiente:
casos.jsonCOBOL (GnuCOBOL), Fortran (gfortran), Ada (GNAT), Pascal y Object Pascal (Free Pascal), Common Lisp (SBCL), Tcl (tclsh), Perl, C y C++.
Su código se extrae del Markdown, se compila o interpreta y se ejecuta contra los mismos casos de prueba que las diez implementaciones del núcleo. Si el resultado no coincide, la CI falla. Es el mismo estándar que se aplica al núcleo, sin excepciones.
Estos lenguajes no pueden cumplir el contrato stdin → stdout sin falsearse: no es una limitación
del material, es la naturaleza del lenguaje. RPG recibe parámetros, JCL orquesta un programa que sí
calcula, VBA lee celdas y AutoLISP pregunta al usuario o señala un objeto del dibujo. En cada página
se explica cómo se adapta el contrato y por qué. No se verifican, y así se declara en cada
aparición.
PL/I, M / MUMPS, Smalltalk y Assembler.
Sí pueden expresar el contrato, pero su cadena de herramientas no está en los runners de CI: PL/I necesita z/OS, MUMPS y Smalltalk requieren instalaciones pesadas, y el ensamblador depende de la arquitectura concreta. El código está escrito para ser correcto e idiomático, sin el sello de la máquina. Verificar diez de dieciocho no es verificarlos todos, y conviene no vender lo contrario.
Cada lenguaje tiene dos apariciones distintas, que responden a dos preguntas distintas:
1. Su ficha en el Atlas — ¿qué es este lenguaje y por qué sigue vivo?
Una página por lenguaje, con la misma estructura en las dieciocho: por qué está en el programa, historia, dónde sobrevive, por qué no ha muerto, lo que se ha modernizado, cómo se ejecuta hoy, el programa de la clase 041 explicado línea a línea, la tabla "si vienes de X…", los errores comunes al leerlo, y bibliografía real con libros concretos y documentación oficial fechada.
2. Su sección en cada clase — ¿cómo se ve ESTE concepto en este lenguaje?
Cada clase de código del programa tiene un fichero vivos.md que resuelve el problema de esa
clase en los lenguajes vivos que aporten algo a ese concepto concreto, con código y explicación.
No es el mismo texto repetido 136 veces: la nulabilidad en COBOL (que no tiene null, y usa niveles
88) no se parece en nada a la nulabilidad en Ada (que tiene not null access), y ahí está el valor.
Son 1632 programas, y cada página los agrupa por el rigor con que están respaldados:
| Nivel | Lenguajes | Qué significa |
|---|---|---|
| 🟢 Se ejecuta en CI | COBOL, Fortran, Ada, Pascal, Common Lisp, Tcl, Perl, C++ | Se compila y se ejecuta contra el mismo casos.json que las diez implementaciones del núcleo |
| 🟡 Contrato adaptado | RPG, JCL, VBA, AutoLISP | El lenguaje no puede expresar stdin→stdout; la adaptación se declara |
| ⚪ Sin sello de máquina | PL/I, MUMPS, Smalltalk, ensamblador | Correctos y revisados, pero ningún compilador libre los verifica aquí |
🗂️ Y más allá de estos dieciocho, todos los lenguajes del repositorio tienen ficha con esta misma anatomía: el índice de las 60 fichas incluye los diez del núcleo y los primos del Atlas.
| Si te interesa… | Empieza por |
|---|---|
| Entender el software que mueve dinero | COBOL → JCL → PL/I |
| El cálculo científico y el rendimiento | Fortran → C → Assembler |
| Los sistemas donde un fallo cuesta vidas | Ada → Pascal |
| De dónde salió la orientación a objetos | Smalltalk → C++ → Delphi |
| Metaprogramación y lenguajes que se extienden | Common Lisp → Tcl |
| Automatizar la herramienta que ya usas | VBA → AutoLISP |
| El software sanitario y las bases de datos raras | M / MUMPS |
| Procesar texto mejor que nadie | Perl → Tcl |
| Aplicaciones de escritorio empresariales | Delphi / Object Pascal → Pascal |
| El ERP que factura en media Europa | RPG → COBOL |
Libros que ayudan a leer toda esta sección, no un lenguaje concreto:
⏮️ Volver al Atlas · 📚 Índice de clases · 🏠 Volver al programa