1 puntos por GN⁺ 2023-10-17 | 1 comentarios | Compartir por WhatsApp
  • Un artículo que sostiene que, contrario a la creencia popular, C no es un lenguaje de bajo nivel
  • El autor, David Chisnall, sugiere que las vulnerabilidades Meltdown y Spectre existen por la capacidad de los procesadores de ejecutar instrucciones saltándose las comprobaciones de acceso, una función que se añadió para hacer creer a los programadores de C que estaban programando en un lenguaje de bajo nivel.
  • Chisnall argumenta que estar "cerca del metal" significa ofrecer una máquina abstracta que pueda mapearse fácilmente a las abstracciones expuestas por la plataforma objetivo, y sostiene que esto no ocurre con C.
  • El autor propone que la causa raíz de las vulnerabilidades Spectre y Meltdown es que los arquitectos de procesadores intentaron crear procesadores rápidos que expusieran máquinas abstractas como la PDP-11, lo que permitió que los programadores de C siguieran creyendo que su lenguaje estaba cerca del hardware subyacente.
  • Chisnall afirma que, para ejecutar código C rápidamente, se requieren transformaciones complejas del compilador y miles de años-persona para construir compiladores lo bastante inteligentes.
  • El autor sugiere que una propiedad clave de un lenguaje de bajo nivel es que los programadores puedan entender con facilidad cómo la máquina abstracta del lenguaje se mapea a la máquina física subyacente, y sostiene que ese no es el caso de C.
  • Chisnall concluye que quizá sea momento de dejar de intentar hacer que el código C sea rápido y, en cambio, pensar cómo debería verse el modelo de programación en procesadores rápidos. Sugiere que un procesador diseñado puramente para la velocidad probablemente soportaría una gran cantidad de hilos, tendría unidades vectoriales anchas y un modelo de memoria mucho más simple.

1 comentarios

 
GN⁺ 2023-10-17
Opiniones en Hacker News
  • El artículo sostiene que C no es un lenguaje de bajo nivel debido a la gestión manual de memoria y a las llamadas explícitas al asignador.
  • Algunos comentaristas sostienen que C sí es realmente un lenguaje de bajo nivel para quienes lo entienden y lo usan profesionalmente.
  • Hay desacuerdo con la afirmación del autor de que el conjunto de instrucciones de la CPU debería exponer más de la implementación del CPU, citando intentos fallidos del pasado.
  • La idea de bajo nivel a alto nivel parece ser un espectro, y C se ubica hacia el extremo más bajo entre los lenguajes que exponen primitivas de máquina como la memoria y la gestión de hilos.
  • La afirmación del artículo de que la programación paralela no es difícil parece engañosa para algunos comentaristas.
  • La premisa del artículo de que las computadoras no se parecen a la estructura del PDP-11 parece más correcta que nunca, pero la conclusión de imaginar procesadores no-C no parece tan sólida.
  • Algunos comentaristas afirman que el artículo acierta al decir que las computadoras no son PDP-11 rápidos, pero se equivoca al relacionar eso con C.
  • La afirmación del artículo de que C no es un lenguaje de bajo nivel, por características como el padding de struct y que el signed overflow sea comportamiento no definido, parece constructiva.
  • La afirmación de que, debido al dominio de C, los diseñadores de CPU tuvieron naturalmente que crear algo que pudiera ejecutar C parece razonable, pero no está claro cómo se relaciona eso con la primera afirmación y con el título del artículo.
  • Si las técnicas sofisticadas de los CPU modernos hacen que C ya no sea un lenguaje "de bajo nivel", entonces eso mismo también se aplica al lenguaje ensamblador.
  • El artículo le recuerda a algunos comentaristas a VLIW, donde una sola instrucción VLIW puede incluir varias instrucciones independientes que pueden ejecutarse en paralelo.