- Uma página que reúne mensagens de erro do compilador MPW C da Apple; segundo ela, são trechos reais obtidos ao decompilar o recurso String do compilador
- Em vez de diagnósticos comuns de compilador, transmite especificações ANSI C, restrições de tipo e erros de sintaxe com frases que misturam piadas e sátira
- Os exemplos incluem erros da linguagem C como tamanho de literais de string, labels dentro de
switch, posição detypedef, combinação devolatile/registere modificação de constantes - Mira diretamente em situações específicas de compilação, como manipulação de
void *, casting devoid, redefinição de struct e erros envolvendogotoe inicialização de variáveis automáticas - Acrescenta que o compilador tem 324 KB, que a lista publicada pode ser apenas um trecho e não o conjunto completo, e que a questão de direitos autorais também não é clara
Coletânea de mensagens de erro do compilador MPW C
- É uma página que lista algumas mensagens de erro geradas pelo compilador MPW C da Apple
- As mensagens são apresentadas como saídas reais, obtidas ao decompilar o recurso String do compilador
- Como o compilador tem 324 KB, a lista pode ser apenas uma seleção, não o conjunto completo
- A página afirma não ter certeza sobre a questão de direitos autorais
Exemplos de diagnósticos reais que parecem piadas
-
Mensagens que brincam com a sintaxe de C e a especificação ANSI
- Limite de tamanho de literal de string:
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
- Erro indicando que dentro de uma instrução
switchsó deve haver labelscaseoudefault:"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
- Situação em que um nome
typedefinesperado foi encontrado:"a typedef name was a complete surprise to me at this point in your program"
- Mensagem que cita uma cláusula do ANSI C para apontar que o alvo de um cast deve ser escalar:
"type in (cast) must be scalar; ANSI 3.3.4; page 39, lines 10-11 (I know you don't care, I'm just trying to annoy you)"
- Limite de tamanho de literal de string:
-
Erros relacionados a tipos e declarações
- Mensagem dizendo que
volatileeregisternão podem ser usados juntos:"'Volatile' and 'Register' are not miscible"
- Erro que expressa de forma satírica que uma constante não pode ser modificada:
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
- Situação em que se tenta redefinir uma struct já definida:
"This struct already has a perfectly good definition"
- Restrição de cast relacionada a
void:"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
- Mensagem dizendo que não se pode manipular
void *de qualquer jeito:"can't go mucking with a 'void *'"
- Mensagem dizendo que
-
Expressões de erro curtas ou exageradas
- Erro curto e direto:
"Huh ?"
- Situação em que uma função já processada aparece de novo:
"we already did this function"
- Erro longo que trata ao mesmo tempo de um
gotovindo de fora do bloco, uma variável automática com initializer e uma janela estreita demais:"This label is the target of a goto from outside of the block containing this label AND this block has an automatic variable with an initializer AND your window wasn't wide enough to read this whole error message"
- Situação em que
/*é encontrado dentro de um comentário:"Call me paranoid but finding '/*' inside this comment makes me suspicious"
- Situação em que há erros demais em uma linha:
"Too many errors on one line (make fewer)"
- Erro fatal de heap por tabela de símbolos cheia:
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
- Erro curto e direto:
1 comentários
Comentários do Hacker News
Sinto falta da época em que havia essa brincadeira na computação
Quando eu estava na Amazon, meu gerente disse que, antigamente, ao atualizar a página 404, escaneou um desenho de gato feito pela filha e colocou no corpo da página. Quando entrei em 2009, a imagem ainda estava lá, mas em algum momento alguém deve ter percebido e trocado por uma foto stock de um cachorro. Mesmo assim, o nome do asset ainda era
kayli-kitty.jpge, depois, quando voltou a ser uma rotação de fotos, os vestígios do original desapareceramTambém encontrei um comentário relacionado em um blog: https://www.davebellous.com/2006/09/25/what-the/#comment-290...
Parece que a Amazon introduziu a página de erro atual, com uma imagem grande de cachorro, por volta de junho de 2016: https://web.archive.org/web/20160612232820/http://www.amazon...
www.amazon.come veja direto o código-fonte :)Falando sério, fico curioso: isso seria possível mesmo que o responsável tivesse consentido na época?
“Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer” me lembra os velhos tempos em que ainda dava para comprar um upgrade de RAM depois de comprar o computador
Hoje seria: “Symbol table full - fatal heap error; please go buy a new Mac with more RAM”
Sistemas operacionais modernos todos suportam swapping, então a compilação continua, só fica muito mais lenta. Para realmente ficar “sem memória” em um computador moderno, é preciso encher tanto a RAM quanto o disco
node_modulesmédio“a typedef name was a complete surprise to me at this point in your program”
Eu gostava da época em que existiam mensagens de erro de compilador engraçadas. Lembro de ter visto esta em um compilador de um fornecedor: “No! But they'll only let me warn you. Danger Will Robinson! Danger!”
Também havia “Really! If you are fussing around with void *, just go home or at least back to your editor!”. Acho que o gerente de TI continuava usando aquele fornecedor por causa dessa mensagem. O SDK era mais ou menos, mas era divertido
void*era um problema tão grande?Programei no MacOS original desde que isso se tornou possível. Lembro de muitas dessas mensagens de erro. Em especial, lembro de “Too many errors on one line (make fewer)”
Também me vem à cabeça que, quando um único arquivo de cabeçalho mudava, o build levava 45 minutos
O maior XCMD tinha as três linguagens, e o MPW linkava tudo sem reclamar; também era fácil automatizar projetos com pequenos blocos de código que precisavam ser colados dentro de um único arquivo. Lembro de cair na gargalhada sempre que aparecia uma mensagem de erro rara. Quem fez isso mandou bem
Depois de usar esse compilador por alguns anos, passei a conseguir “descompilar” mentalmente, na hora, o código objeto 68k gerado para código C, desde que as funções não fossem grandes demais
Com o MacNosy, normalmente era possível recriar o fonte C de um app em poucas horas. Eu tinha um script que convertia o arquivo MacNosy do app em um arquivo assembler e um arquivo
rsrc, e dava para ir movendo funções para C uma a uma mantendo um app compilável equivalente ao original. No começo usei isso para hackear jogos, mas às vezes também para corrigir bugsO fato de a geração de código do compilador MPW C ser tão previsível se devia em parte à simetria do conjunto de instruções 68k. Eles fizeram um compilador simples, e ele funcionava bem. A maior parte do esforço foi para outros lugares. Como dava para prever com bastante precisão que código sairia, se você não gostasse da geração de código, bastava ajustar o fonte. Também gosto do fato de o compilador
javacter uma filosofia parecida. Depois que você conhece os padrões, dá para produzir bytecode quase ótimoNo início dos anos 90, o compilador Glockenspiel C++ usado em uma empresa de treinamento era algo derivado do cfront, e minha mensagem de erro de sintaxe favorita era simplesmente “core dumped”
Era bem constrangedor explicar isso em um curso pago para alunos que já estavam sofrendo com o próprio C++
“Call me paranoid but finding '/*' inside this comment makes me suspicious” — isso não é da conta do senhor
/*dentro de um/*, então seriam necessários dois*/para encerrarNa prática talvez seja uma ideia horrível, mas houve várias situações em que isso teria economizado tempo
Fugindo um pouco do conteúdo da página, eu gostava muito do modo como muitos utilitários do MPW geravam a saída, inclusive mensagens de erro, em forma de comandos
Como o terminal era um buffer do editor, dava para levar o cursor até aquela linha, ou clicar nela, e então pressionar algo como
cmd-enterpara abrir o arquivo correspondente“a typedef name was a complete surprise to me at this point in your program”
Já vi essa lista incontáveis vezes, mas essa mensagem ainda me faz rir alto toda vez que a vejo
Discussão anterior: https://news.ycombinator.com/item?id=30238928
Para acrescentar contexto: o compilador MPW C que criou essas mensagens, na verdade, não foi desenvolvido internamente pela Apple, mas contratado da Green Hills Software[1]. Isso aparece na página da Wikipedia[2] e na fonte dela[3]; curiosamente, essa própria fonte é justamente sobre este assunto
[1] https://en.m.wikipedia.org/wiki/Green_Hills_Software
[2] https://en.m.wikipedia.org/wiki/Macintosh_Programmer%27s_Wor...
[3] https://web.archive.org/web/20140528005901/http://lists.appl...