1 puntos por GN⁺ 2024-09-27 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2024-09-27
Comentarios de Hacker News
  • En 2011 escribí un for guiado 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):

    • permite usar guiones bajos en literales
    • permite especificar rangos de case
    • permite usar argumentos con nombre
    • permite usar funciones anidadas
    • permite usar funciones anidadas estáticas
    • ofrece una función similar a los generadores
  • El compilador C lcc-win añadió sobrecarga de operadores, argumentos predeterminados para funciones y sobrecarga de funciones

  • El 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ónimos

  • Quien 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 \n es por la página de códigos Shift-JIS

  • Los 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 printf y en los comentarios del código, pese a parecer de alguien no nativo, impresiona

  • En 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