- Una página que reúne mensajes de error del compilador MPW C de Apple; dice que son extractos reales obtenidos al decompilar los recursos de tipo String del compilador
- En lugar de diagnósticos típicos de compilador, transmite reglas de ANSI C, restricciones de tipos y errores de sintaxis con frases mezcladas con bromas y sátira
- Entre los ejemplos hay errores del lenguaje C como la longitud de literales de cadena, labels dentro de
switch, la posición detypedef, la combinación devolatile/registery la modificación de constantes - También apunta directamente a ciertas situaciones de compilación concretas, como errores relacionados con la manipulación de
void *, conversiones avoid, redefinición destructy casos donde se mezclangotoe inicialización de variables automáticas - El compilador pesa 324 KB, y se añade que la lista publicada podría ser solo una selección y que la cuestión de derechos de autor no está clara
Colección de mensajes de error del compilador MPW C
- Una página que enumera algunos de los mensajes de error generados por el compilador MPW C de Apple
- Los mensajes se presentan como salidas reales, y se indica que fueron obtenidos al decompilar los recursos String del compilador
- Como el compilador pesa 324 KB, es posible que la lista no sea completa sino solo una selección
- Se aclara que el tema de los derechos de autor no está del todo claro
Ejemplos de diagnósticos reales que parecen chistes
-
Mensajes que retuercen la sintaxis de C y la norma ANSI
- Límite de longitud para literales de cadena:
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
- Error que dice que dentro de una sentencia
switchsolo debe haber labelscaseodefault:"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
- Situación en la que aparece un nombre
typedefinesperado:"a typedef name was a complete surprise to me at this point in your program"
- Mensaje que cita una cláusula de ANSI C para señalar que el destino del cast debe 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)"
- Límite de longitud para literales de cadena:
-
Errores relacionados con tipos y declaraciones
- Mensaje que indica que no se pueden usar
volatileyregisterjuntos:"'Volatile' and 'Register' are not miscible"
- Expresa de forma satírica el error de que una constante no puede modificarse:
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
- Situación en la que se intenta redefinir una
structya definida:"This struct already has a perfectly good definition"
- Restricción de cast relacionada con
void:"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
- Mensaje que dice que no se puede manipular un
void *a la ligera:"can't go mucking with a 'void *'"
- Mensaje que indica que no se pueden usar
-
Expresiones de error cortas o exageradas
- Error corto y directo:
"Huh ?"
- Situación en la que vuelve a encontrarse una función ya procesada:
"we already did this function"
- Error largo que junta
gotodesde fuera del bloque, una variable automática con inicializador y una ventana demasiado angosta:"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"
- Situación en la que se encuentra
/*dentro de un comentario:"Call me paranoid but finding '/*' inside this comment makes me suspicious"
- Situación con demasiados errores en una sola línea:
"Too many errors on one line (make fewer)"
- Error fatal de heap porque la tabla de símbolos está llena:
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
- Error corto y directo:
1 comentarios
Opiniones de Hacker News
Extraño la época en que había este tipo de espíritu juguetón en la computación.
Cuando estaba en Amazon, mi gerente me contó que antes, al actualizar la página 404, había escaneado un dibujo de un gato hecho por su hija y lo había puesto en el cuerpo de la página. Cuando entré en 2009, esa imagen seguía ahí, pero en algún momento parece que alguien se dio cuenta y la cambió por una foto de stock de un perro. Aun así, el nombre del asset seguía siendo
kayli-kitty.jpg, y después volvió a cambiar a una rotación de fotos, con lo que desapareció todo rastro del original.También encontré un comentario relacionado en un blog: https://www.davebellous.com/2006/09/25/what-the/#comment-290...
Parece que Amazon introdujo su página de error actual, con una imagen grande de un perro, alrededor de junio de 2016: https://web.archive.org/web/20160612232820/http://www.amazon...
www.amazon.comy revisa directamente el código fuente :)Hablando en serio, me da curiosidad: ¿sería posible algo así aunque el tutor hubiera dado su consentimiento en su momento?
Eso de “Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer” me recuerda aquellos viejos tiempos en que, aun después de comprar la computadora, podías comprar una actualización de RAM.
Hoy sería “Symbol table full - fatal heap error; please go buy a new Mac with more RAM”.
Los sistemas operativos modernos soportan swapping, así que la compilación continúa, solo que mucho más lenta. Para que una computadora moderna realmente se quede “sin memoria”, tendrías que llenar tanto la RAM como el disco.
node_modulespromedio.“a typedef name was a complete surprise to me at this point in your program”
Me gustaba cuando existían mensajes de error de compilador divertidos. Hace tiempo vi este mensaje en el compilador de un proveedor: “No! But they'll only let me warn you. Danger Will Robinson! Danger!”
También estaba “Really! If you are fussing around with void *, just go home or at least back to your editor!”. Creo que el gerente de TI siguió usando a ese proveedor por ese mensaje. El SDK era más o menos, pero era divertido.
void*era un problema tan grande?Programé en el MacOS original desde que se pudo. Recuerdo muchos de estos mensajes de error. En particular recuerdo “Too many errors on one line (make fewer)”.
También recuerdo que, si cambiaba un solo archivo de encabezado, el build tardaba 45 minutos.
Mi XCMD más grande incluía los tres lenguajes y MPW lo enlazaba sin inmutarse; también era fácil automatizar proyectos con pequeños bloques de código que había que pegar dentro de un archivo. Recuerdo reírme fuerte cada vez que aparecía uno de esos raros mensajes de error. A quien lo hizo: bien hecho.
Después de usar este compilador durante años, llegué a poder “descompilar” mentalmente al vuelo el código objeto 68k generado a código C, siempre que la función no fuera demasiado grande.
Con MacNosy, normalmente podía reconstruir el código fuente C de una app en unas horas. Tenía un script que convertía el archivo MacNosy de una app en un archivo de ensamblador y un archivo
rsrc, y podía ir pasando funciones a C una por una manteniendo una app compilable equivalente al original. Al principio lo usaba para hackear juegos, pero a veces también para corregir bugs.Que la generación de código del compilador MPW C fuera tan predecible se debía en parte a la simetría del conjunto de instrucciones 68k. Hicieron un compilador simple y funcionaba bien. La mayor parte del esfuerzo estaba en otras áreas. Como podía predecir con bastante precisión qué código iba a salir, si no me gustaba la generación de código, modificaba el fuente. Me gusta que el compilador
javactenga una filosofía parecida. Una vez que conoces los patrones, puedes producir bytecode casi óptimo.El compilador Glockenspiel C++ que se usaba en una empresa de capacitación a principios de los 90 era algo derivado de cfront, y mi mensaje de error de sintaxis favorito era simplemente “core dumped”
Era bastante incómodo explicar eso en un curso pago a estudiantes que ya estaban batallando con C++ en sí
“Call me paranoid but finding '/*' inside this comment makes me suspicious”; eso no es asunto suyo, profe
/*dentro de un/*, hagan falta dos*/para cerrarloEn la práctica quizá sea una idea espantosa, pero hubo bastantes situaciones en las que eso me habría ahorrado tiempo
Esto se aparta un poco del contenido de la página, pero me encantaba la forma en que muchas utilidades de MPW generaban su salida, incluidos los mensajes de error, en forma de comandos
Como la terminal era un búfer del editor, podías subir el cursor a esa línea o hacer clic en ella y luego presionar algo como
cmd-enterpara abrir el archivo relacionado“a typedef name was a complete surprise to me at this point in your program”
He visto esta lista infinidad de veces, pero este mensaje me hace reír a carcajadas cada vez que lo veo
Discusión anterior: https://news.ycombinator.com/item?id=30238928
Para agregar contexto, el compilador MPW C que creó esos mensajes en realidad no fue un desarrollo interno de Apple, sino que lo hizo Green Hills Software[1] por contrato. También aparece en la página de Wikipedia[2] y en su fuente[3]; curiosamente, esa fuente es justamente este tema
[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...