Las extensiones de lenguaje perdidas de High C de MetaWare
Compiladores de C en la década de 1980
- En la década de 1980, muchas empresas pequeñas competían entre sí y ofrecían diversas extensiones del lenguaje
- Phar Lap desarrolló un extensor de DOS que podía aprovechar el procesador 80386 de 32 bits, y MetaWare adaptó el compilador High C para ello
- Fujitsu integró el extensor de DOS de Phar Lap en la plataforma FM TOWNS, y High C se convirtió en el compilador de C predeterminado de esta plataforma
Extensiones de lenguaje únicas de High C
- High C incluía no solo extensiones específicas de DOS, sino también varias extensiones del lenguaje enfocadas en el usuario
- Algunas funciones no se incorporaron al estándar oficial sino hasta décadas después, y otras aún no existen en C ni en C++
Uso de guiones bajos en literales numéricos
- Se podían usar guiones bajos para separar literales numéricos largos y hacerlos más fáciles de leer
- C++ introdujo esta función en C++14, y C la incorporó en C23
Argumentos etiquetados
- Se podían etiquetar los argumentos al llamar funciones con muchos parámetros
- Es similar a una función popular de Python, y cuando hay etiquetas de argumentos, estos pueden especificarse sin importar el orden
- Esta función aún no existe en C ni en C++ estándar
Casos por rango
- Ofrecía una función para hacer coincidir rangos de valores, al estilo de Pascal
- Esta función no existe en C ni en C++ estándar
Funciones anidadas
- Se podían declarar otras funciones anidadas dentro de una función
- Las funciones anidadas podían declararse con el tipo de "valor de función completo", que funciona como un closure no escapable
- Ofrecía una implementación más completa que la extensión de funciones anidadas de GCC
- C estándar aún no tiene una función oficial de funciones anidadas
Generadores
- Soportaba corutinas generadoras al estilo de Python
- Las funciones generadoras podían producir valores varias veces, y cada valor podía procesarse secuencialmente usando una nueva sintaxis de bucle
for
- Permitía interacciones complejas con la función de funciones anidadas
- Es poco probable que C estándar llegue a integrar esta función
Resumen de GN⁺
- El compilador High C de MetaWare ofrecía diversas extensiones del lenguaje en la década de 1980, mejorando enormemente la expresividad del lenguaje C
- Algunas funciones no se incorporaron al estándar oficial sino hasta décadas después, y otras aún no existen en C ni en C++
- Funciones avanzadas como los generadores y las funciones anidadas son difíciles de encontrar incluso en muchos lenguajes de programación actuales
- Este artículo ayuda a entender la historia y el proceso de evolución del lenguaje C, y ofrece perspectivas interesantes sobre el diseño de lenguajes de programación
1 comentarios
Comentarios de Hacker News
En 2011 escribí un
forguiado por iteradores. En ese momento imaginé cómo sería si se incluyera en el estándar de C++Tengo una copia de High C/C++ Language Reference
Funciones que ofrece el lenguaje D (o Das BetterC):
caseEl compilador C
lcc-winañadió sobrecarga de operadores, argumentos predeterminados para funciones y sobrecarga de funcionesEl compilador C de Plan 9 introdujo varias extensiones del lenguaje, y algunas terminaron incluyéndose en el estándar de C
Actualmente GCC admite la bandera
-fplan9-extensions, que ofrece funciones como convertir automáticamente punteros a estructuras en campos anónimosQuien introdujo estas funciones iba muy adelantado a su tiempo. Da pena que no haya influido en el estándar
Este tema ya se había tratado antes en Hacker News
Hay alguien que se pregunta si existe una copia en PDF
La razón por la que los literales de cadena del código de ejemplo terminan en ¥n en vez de
\nes por la página de códigos Shift-JISLos generadores hacen pensar en la cuestión de iteración interna/externa de Rust y en
try_fold()La tipografía del libro se siente al mismo tiempo hermosa y terrible
No sé mucho sobre la notación japonesa ni sobre reglas de kerning, pero parece que forzaron una fuente de ancho variable a encajar en celdas monoespaciadas
Me gusta que los ejemplos de código no estén en una fuente de 8pt
Hay quien se pregunta si el libro fue escrito en japonés, o si primero se escribió en inglés y luego se tradujo al japonés
Si salió de Fujitsu, es muy probable que haya sido escrito en japonés. La calidad del inglés en las sentencias
printfy en los comentarios del código, pese a parecer de alguien no nativo, impresionaEn particular, las funciones relacionadas con generadores estaban muy adelantadas para su época
Puede que haya sido posible porque Fujitsu no pasó por un proceso de estandarización. Pero esa también es la razón por la que estas extensiones se han redescubierto y reinventado en el C/C++ moderno