Os recursos de extensão de linguagem perdidos do compilador High C da MetaWare
Compiladores C dos anos 1980
- Nos anos 1980, muitas pequenas empresas competiam entre si oferecendo várias extensões de linguagem
- A Phar Lap desenvolveu um extensor DOS capaz de aproveitar o processador 32-bit 80386, e a MetaWare portou o compilador High C para isso
- A Fujitsu integrou o extensor DOS da Phar Lap à plataforma FM TOWNS, e o High C se tornou o compilador C padrão dessa plataforma
Extensões de linguagem únicas do High C
- O High C incluía não apenas extensões específicas de DOS, mas também várias extensões de linguagem voltadas ao usuário
- Alguns recursos só foram incorporados aos padrões oficiais décadas depois, e alguns ainda não existem em C ou C++
Uso de sublinhado em literais numéricos
- É possível usar sublinhados para separar literais numéricos longos e facilitar a leitura
- O C++ introduziu esse recurso no C++14, e o C o introduziu no C23
Argumentos rotulados
- É possível rotular argumentos ao chamar funções com muitos parâmetros
- É semelhante a um recurso popular do Python, e, quando há rótulos de argumento, eles podem ser especificados independentemente da ordem
- O C e o C++ padrão ainda não têm esse recurso
Casos por intervalo
- Oferece um recurso para corresponder intervalos de valores, como em Pascal
- O C e o C++ padrão não têm esse recurso
Funções aninhadas
- É possível declarar uma função aninhada dentro de outra função
- Funções aninhadas podem ser declaradas com o tipo "valor de função completo", que funciona como um closure sem escape
- Oferece uma implementação mais completa do que a extensão de funções aninhadas do GCC
- O C padrão ainda não tem um recurso oficial de funções aninhadas
Geradores
- Suporta corrotinas geradoras no estilo Python
- Funções geradoras podem produzir valores várias vezes, e cada valor pode ser processado em sequência usando uma nova sintaxe de loop
for
- Permite interações complexas com o recurso de funções aninhadas
- É improvável que o C padrão incorpore esse recurso
Resumo do GN⁺
- O compilador High C da MetaWare oferecia várias extensões de linguagem nos anos 1980, aumentando bastante a expressividade da linguagem C
- Alguns recursos só foram incorporados aos padrões oficiais décadas depois, e alguns ainda não existem em C ou C++
- Recursos avançados como geradores e funções aninhadas são difíceis de encontrar até mesmo em muitas linguagens de programação atuais
- Este artigo ajuda a entender a história e o processo de evolução da linguagem C, além de oferecer insights interessantes sobre design de linguagens de programação
1 comentários
Comentários no Hacker News
Em 2011, alguém escreveu um
fororientado por iterador. Na época, imaginou como seria se isso entrasse no padrão do C++Alguém possui o High C/C++ Language Reference
Recursos disponíveis em D (ou Das BetterC):
caseO compilador C
lcc-winadicionou sobrecarga de operadores, argumentos padrão de função e sobrecarga de funçõesO compilador C do Plan 9 introduziu várias extensões de linguagem, e algumas delas acabaram entrando no padrão C
Hoje o GCC oferece suporte à flag
-fplan9-extensions, fornecendo recursos como conversão automática de ponteiros para struct em campos anônimosA pessoa que introduziu esses recursos estava muito à frente do seu tempo. É uma pena que isso não tenha influenciado o padrão
O assunto relacionado já havia aparecido antes no Hacker News
Há quem se pergunte se existe uma cópia em PDF
As literais de string no código de exemplo terminam com
¥nem vez de\npor causa da code page Shift-JISOs geradores fazem lembrar a questão de iteração interna/externa no Rust e
try_fold()A tipografia do livro parece ao mesmo tempo bonita e horrível
Não conhecem bem a notação japonesa nem as regras de kerning, mas parece que uma fonte de largura variável foi forçada a caber em células monoespaçadas
É bom que os exemplos de código não estejam em fonte 8pt
Há quem pergunte se o livro foi escrito em japonês ou escrito em inglês e depois traduzido para o japonês
Se veio da Fujitsu, é bem provável que tenha sido escrito em japonês. A qualidade do inglês em instruções
printfe comentários de código de quem não é nativo impressionaEspecialmente os recursos relacionados a geradores estavam muito à frente do seu tempo para aquela época
Talvez isso também tenha sido possível porque a Fujitsu não passou por um processo de padronização. Mas esse também é o motivo de essas extensões terem sido redescobertas e reinventadas no C/C++ moderno