- Đây là một trang tập hợp các thông báo lỗi của trình biên dịch MPW C của Apple; được cho là các trích đoạn thực tế thu được bằng cách dịch ngược tài nguyên String của trình biên dịch
- Thay vì các chẩn đoán trình biên dịch thông thường, chúng truyền tải chuẩn ANSI C, ràng buộc kiểu và lỗi cú pháp bằng những câu pha trộn trò đùa và châm biếm
- Ví dụ bao gồm các lỗi ngôn ngữ C như độ dài chuỗi literal, label bên trong
switch, vị trí củatypedef, tổ hợpvolatile/register, và việc sửa đổi hằng số - Nội dung cũng nhắm thẳng vào những tình huống biên dịch cụ thể như thao tác với
void *, ép kiểuvoid, định nghĩa lại struct, và lỗi đan xen giữagotovới khởi tạo biến tự động - Trình biên dịch có kích thước 324KB, và có thêm rằng danh sách công khai này có thể chỉ là trích đoạn chứ không phải toàn bộ, đồng thời vấn đề bản quyền cũng chưa rõ ràng
Bộ sưu tập thông báo lỗi của trình biên dịch MPW C
- Đây là một trang liệt kê một phần các thông báo lỗi do trình biên dịch MPW C của Apple tạo ra
- Các thông báo được giới thiệu là đầu ra thực tế, và được nói là lấy bằng cách dịch ngược tài nguyên String của trình biên dịch
- Vì trình biên dịch có kích thước 324KB, danh sách này có thể chỉ là một phần trích ra chứ không phải toàn bộ
- Tác giả cũng nói rằng chưa thể khẳng định chắc chắn về vấn đề bản quyền
Những ví dụ chẩn đoán thực sự nhưng trông như trò đùa
-
Các thông báo bẻ lái cú pháp C và chuẩn ANSI
- Giới hạn độ dài chuỗi literal:
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
- Lỗi nói rằng trong câu lệnh
switchchỉ nên có labelcasehoặcdefault:"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
- Tình huống gặp một tên
typedefkhông ngờ tới:"a typedef name was a complete surprise to me at this point in your program"
- Thông báo viện dẫn điều khoản ANSI C để chỉ ra rằng đối tượng của cast phải là scalar:
"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)"
- Giới hạn độ dài chuỗi literal:
-
Lỗi liên quan đến kiểu và khai báo
- Thông báo rằng không thể dùng
volatilevàregistercùng nhau:"'Volatile' and 'Register' are not miscible"
- Diễn đạt mang tính châm biếm cho lỗi không thể sửa đổi hằng số:
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
- Tình huống cố định nghĩa lại một struct đã được định nghĩa:
"This struct already has a perfectly good definition"
- Giới hạn ép kiểu liên quan đến
void:"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
- Thông báo rằng không thể tùy tiện động vào
void *:"can't go mucking with a 'void *'"
- Thông báo rằng không thể dùng
-
Các cách diễn đạt lỗi ngắn gọn hoặc cường điệu
- Lỗi ngắn và trực diện:
"Huh ?"
- Tình huống gặp lại một hàm đã xử lý rồi:
"we already did this function"
- Một lỗi dài xử lý cùng lúc
gototừ ngoài block, biến tự động có initializer, và cửa sổ quá hẹp:"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"
- Tình huống phát hiện
/*bên trong comment:"Call me paranoid but finding '/*' inside this comment makes me suspicious"
- Tình huống có quá nhiều lỗi trên một dòng:
"Too many errors on one line (make fewer)"
- Lỗi heap nghiêm trọng khi bảng ký hiệu đã đầy:
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
- Lỗi ngắn và trực diện:
1 bình luận
Các ý kiến trên Hacker News
Tôi nhớ thời điện toán còn có sự tinh nghịch như thế này
Khi tôi còn ở Amazon, quản lý kể rằng trước đây lúc cập nhật trang 404, ông ấy đã quét bức vẽ con mèo của con gái mình và đưa vào phần nội dung trang. Khi tôi gia nhập năm 2009, hình đó vẫn còn, nhưng đến một lúc nào đó có lẽ ai đó đã để ý và đổi nó thành ảnh stock một con chó. Dù vậy tên asset vẫn là
kayli-kitty.jpg, rồi về sau lại đổi thành các ảnh xoay vòng, khiến dấu vết bản gốc biến mấtTôi cũng tìm được một bình luận blog liên quan: https://www.davebellous.com/2006/09/25/what-the/#comment-290...
Có vẻ Amazon đưa vào trang lỗi hiện tại dùng ảnh chó lớn vào khoảng tháng 6 năm 2016: https://web.archive.org/web/20160612232820/http://www.amazon...
www.amazon.comrồi xem ngay source thử xem :)Nói nghiêm túc thì tôi tò mò: nếu trước đây người giám hộ đã đồng ý thì chuyện như vậy có khả thi không?
“Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer” làm tôi nhớ thời xưa, khi sau khi mua máy tính rồi vẫn còn có thể mua nâng cấp RAM
Nếu là bây giờ chắc sẽ là “Symbol table full - fatal heap error; please go buy a new Mac with more RAM”
Các hệ điều hành hiện đại đều hỗ trợ swapping, nên việc biên dịch vẫn tiếp tục, chỉ là chậm hơn nhiều. Trên máy tính hiện đại, để thực sự bị “thiếu bộ nhớ” thì phải lấp đầy cả RAM lẫn ổ đĩa
node_modulestrung bình“a typedef name was a complete surprise to me at this point in your program”
Tôi thích thời còn có những thông báo lỗi compiler vui như thế. Trước đây tôi từng thấy thông báo này trong compiler của một nhà cung cấp: “No! But they'll only let me warn you. Danger Will Robinson! Danger!”
Cũng có cả “Really! If you are fussing around with void *, just go home or at least back to your editor!” nữa. Tôi nghĩ IT manager đã tiếp tục dùng nhà cung cấp đó vì thông báo ấy. SDK thì bình thường, nhưng vui
void*lại là vấn đề lớn đến vậy?Tôi đã lập trình trên MacOS gốc từ khi có thể. Tôi nhớ rất nhiều thông báo lỗi kiểu này. Đặc biệt nhớ câu “Too many errors on one line (make fewer)”
Cũng nhớ cả chuyện chỉ cần một file header thay đổi là build mất 45 phút
XCMD lớn nhất có cả ba ngôn ngữ, vậy mà MPW vẫn link ngon lành; những dự án có các khối code nhỏ cần dán vào một file cũng dễ tự động hóa. Tôi nhớ mỗi lần xuất hiện một thông báo lỗi hiếm gặp là lại cười phá lên. Người làm ra nó, làm tốt lắm
Sau vài năm dùng compiler này, miễn là hàm không quá lớn, tôi có thể “dịch ngược” ngay trong đầu object code 68k được tạo ra thành code C
Dùng MacNosy thì thường chỉ trong vài giờ có thể dựng lại source C của một ứng dụng. Tôi có script chuyển file MacNosy của ứng dụng thành file assembler và file
rsrc, rồi có thể chuyển từng hàm sang C trong khi vẫn giữ được ứng dụng build ra tương đương bản gốc. Ban đầu tôi dùng để hack game, nhưng thỉnh thoảng cũng dùng để sửa bugViệc sinh code của compiler MPW C dễ dự đoán như vậy một phần là nhờ tính đối xứng của tập lệnh 68k. Họ tạo ra một compiler đơn giản và nó hoạt động tốt. Phần lớn công sức được dành cho chỗ khác. Vì có thể dự đoán khá chính xác code nào sẽ được sinh ra, nếu không thích phần sinh code thì chỉ cần sửa source. Tôi cũng thích
javaccompiler vì nó có triết lý tương tự. Khi đã biết các mẫu, bạn có thể tạo ra bytecode gần như tối ưuTrình biên dịch Glockenspiel C++ từng được dùng ở một công ty đào tạo vào đầu thập niên 90 là một thứ phái sinh từ cfront, và thông báo lỗi cú pháp tôi thích nhất chỉ đơn giản là “core dumped”
Với những học viên vốn đã chật vật với chính C++, việc giải thích điều này trong một khóa học có thu phí khá là khó xử
“Call me paranoid but finding '/*' inside this comment makes me suspicious” ư, chuyện đó không phải việc thầy cần bận tâm
/*bên trong/*thì để kết thúc sẽ cần hai lần*/Thực tế có lẽ đó là một ý tưởng tệ hại, nhưng đã có khá nhiều tình huống mà nếu vậy thì tiết kiệm được thời gian
Hơi lệch so với nội dung trang, nhưng tôi rất thích cách nhiều tiện ích MPW tạo output, bao gồm cả thông báo lỗi, dưới dạng lệnh
Vì terminal là một buffer của editor, bạn có thể đưa con trỏ lên dòng đó hoặc bấm vào rồi nhấn thứ gì đó như
cmd-enterđể mở file liên quan“a typedef name was a complete surprise to me at this point in your program”
Dù đã xem danh sách này vô số lần, thông báo này lần nào cũng khiến tôi bật cười
Thảo luận trước đây: https://news.ycombinator.com/item?id=30238928
Bổ sung ngữ cảnh: trình biên dịch MPW C tạo ra các thông báo đó thực ra không phải do Apple phát triển nội bộ, mà do Green Hills Software[1] làm theo hợp đồng. Điều này cũng có trên trang Wikipedia[2] và nguồn của nó[3], thú vị là chính nguồn đó lại là chủ đề này
[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...