2 puntos por GN⁺ 2025-01-13 | 1 comentarios | Compartir por WhatsApp
  • Mejoras obvias para C

    • Estándar C23: El lenguaje C mejora de forma regular y actualmente ha llegado a C23. Sin embargo, todavía existen problemas sin resolver.
    • Esfuerzo de la comunidad de Dlang: Al integrar un compilador de C (ImportC) en el compilador del lenguaje de programación D, se abre una oportunidad para resolver estos problemas.
  • Evaluación de expresiones constantes

    • Problema: C puede calcular expresiones simples en tiempo de compilación, pero no puede ejecutar funciones.
    • Solución de ImportC: ImportC permite ejecutar funciones en tiempo de compilación, superando esta limitación.
  • Pruebas unitarias en tiempo de compilación

    • Problema en C: En código C, las pruebas unitarias requieren un objetivo de compilación separado, lo que resulta engorroso.
    • Ventaja de ImportC: ImportC permite ejecutar fácilmente pruebas unitarias mediante la evaluación de funciones en tiempo de compilación.
  • Referencia anticipada de declaraciones

    • Limitación de C: C es sensible al orden de las declaraciones y no permite referencias anticipadas.
    • Ventaja de ImportC: ImportC no depende del orden de las declaraciones y permite declaraciones globales en cualquier orden.
  • Importación de declaraciones

    • Problema del método existente: Existe la molestia de tener que escribir archivos .h para cada módulo externo.
    • Solución de ImportC: ImportC puede importar declaraciones sin archivos .h, por lo que es más eficiente.
  • Material de referencia

    • Documentación de ImportC: Proporciona información detallada sobre ImportC.
    • Documentación del lenguaje D: Proporciona información adicional sobre el lenguaje D.

1 comentarios

 
GN⁺ 2025-01-13
Comentarios de Hacker News
  • Los archivos de encabezado en C son buenos porque permiten distinguir con claridad entre lo público y lo privado, y entre interfaz e implementación. A través de los archivos .h se puede entender fácilmente cómo usar una biblioteca

    • La documentación tiende a concentrarse en los archivos .h, por lo que se ven distintos de los archivos .c
    • También se puede poner documentación en los archivos .c, pero eso hace más incómodo leer la interfaz
  • Hay quienes opinan que C debería permitir ejecutar funciones en tiempo de compilación, pero las funciones con tiempos de ejecución largos podrían ser problemáticas

    • Un ejemplo es la función busybeaver
  • Hay curiosidad por soluciones para problemas como la evaluación de expresiones constantes, las pruebas unitarias en tiempo de compilación, las referencias anticipadas en declaraciones y la importación de declaraciones

    • Evaluación de expresiones constantes: si se trabaja dentro de una unidad de traducción es sencillo, pero requiere repetir código
    • Pruebas unitarias en tiempo de compilación: se pueden expresar con macros, pero sería más fácil si se añadiera el primer punto
    • Referencias anticipadas en declaraciones: obligarían al compilador a hacer dos pasadas, lo que podría afectar el rendimiento
    • Importación de declaraciones: podría romper la forma de implementar plantillas en C
  • Es posible escribir pruebas unitarias para código en C con un buen sistema de build y un poco de boilerplate

    • Un ejemplo es el código de pruebas de la biblioteca npy
  • Cuando la evaluación de expresiones constantes se vuelve compleja, la velocidad del compilador puede degradarse y podría hacer falta una VM

    • Se opina que, en vez de la definición de C++20, habría sido mejor avanzar hacia importar módulos como símbolos
  • Las pruebas unitarias en tiempo de compilación le quitan control al desarrollador y exigen procedimientos innecesarios para completar el trabajo

    • Las pruebas de fallo de compilación son buenas para el build final, pero no son adecuadas para builds intermedios
  • Se discute si es mejor definir funciones de manera "de arriba hacia abajo"

    • Incluso en lenguajes como Python, la definición de arriba hacia abajo es común
    • Se pregunta si la definición de arriba hacia abajo se adapta mejor a ciertos tipos de código
  • Funciones que les gustaría que se añadieran a C

    • Soporte para un tipo slice que codifique puntero y longitud
    • API reentrantes y seguras para hilos
    • Estandarización de una función como defer de Go y Zig
    • Soporte portable para Unicode y UTF-8
  • La simplicidad de implementación de C es una ventaja, y ampliar mucho su alcance no parece una buena idea

    • Como en Scheme, podría haber una especificación "pequeña" y otra "grande"
  • Razones por las que definir funciones de arriba hacia abajo puede ser mejor

    • Se parece a la manera en que se escribe código dentro de una función
    • La ubicación de las funciones dentro de un módulo queda clara
    • Permite identificar con claridad las dependencias circulares
    • Las dependencias circulares vuelven más compleja la base de código y dificultan entender el módulo
    • OCaml no permite dependencias circulares entre funciones