1 pontos por GN⁺ 2023-10-17 | 1 comentários | Compartilhar no WhatsApp
  • Artigo que defende a ideia de que, ao contrário da crença popular, C não é uma linguagem de baixo nível
  • O autor, David Chisnall, sugere que as vulnerabilidades Meltdown e Spectre existem por causa da capacidade dos processadores de executar instruções além das verificações de acesso, e que esse recurso foi adicionado para fazer programadores em C acreditarem que estão programando em uma linguagem de baixo nível.
  • Chisnall argumenta que estar "próxima do metal" significa fornecer uma máquina abstrata que possa ser facilmente mapeada para as abstrações expostas pela plataforma-alvo, e afirma que isso não acontece com C.
  • O autor sugere que a causa fundamental das vulnerabilidades Spectre e Meltdown é que arquitetos de processadores tentaram criar processadores rápidos que expusessem máquinas abstratas como a PDP-11, permitindo que programadores em C continuassem acreditando que sua linguagem está próxima do hardware subjacente.
  • Chisnall afirma que, para executar código C rapidamente, são necessárias transformações complexas de compilador e milhares de anos-homem para criar compiladores suficientemente inteligentes.
  • O autor propõe que a propriedade central de uma linguagem de baixo nível é que programadores consigam entender facilmente como a máquina abstrata da linguagem se mapeia para a máquina física subjacente, e argumenta que isso não é verdade no caso de C.
  • Chisnall conclui que talvez seja hora de parar de tentar tornar o código C rápido e, em vez disso, pensar em como deveria ser o modelo de programação em processadores rápidos. Ele sugere que processadores projetados puramente para velocidade provavelmente suportariam um grande número de threads, teriam unidades vetoriais largas e um modelo de memória muito mais simples.

1 comentários

 
GN⁺ 2023-10-17
Comentários do Hacker News
  • O artigo argumenta que C não é uma linguagem de baixo nível devido ao gerenciamento manual de memória e às chamadas explícitas ao alocador.
  • Alguns comentaristas afirmam que C é de fato uma linguagem de baixo nível para quem a entende e a utiliza profissionalmente.
  • Há discordâncias em relação à afirmação do autor de que o conjunto de instruções da CPU deveria expor mais da implementação da CPU, citando tentativas fracassadas do passado.
  • O conceito de baixo nível a alto nível parece ser um espectro, e C está entre as linguagens mais próximas do lado inferior por expor primitivas da máquina como gerenciamento de memória e threads.
  • A afirmação do artigo de que programação paralela não é difícil é vista por alguns comentaristas como enganosa.
  • A premissa do artigo de que os computadores não se parecem com a arquitetura do PDP-11 parece mais correta do que nunca, mas a conclusão de imaginar processadores não-C não parece tão convincente.
  • Alguns comentaristas afirmam que a tese do artigo de que os computadores não são PDP-11 rápidos está correta, mas que relacionar isso a C está errado.
  • A afirmação do artigo de que C não é uma linguagem de baixo nível por causa de características como struct padding e signed overflow serem comportamento indefinido parece construtiva.
  • A alegação de que o domínio de C fez com que projetistas de CPU naturalmente precisassem criar algo que pudesse executar C parece fazer sentido, mas não está claro como isso se relaciona com a primeira afirmação e com o título do artigo.
  • Se as técnicas sofisticadas das CPUs modernas fazem com que C deixe de ser uma linguagem "de baixo nível", então isso também se aplicaria à linguagem assembly.
  • O artigo lembra VLIW a alguns comentaristas, em que uma única instrução VLIW pode conter várias instruções independentes que podem ser executadas em paralelo.