2 poin oleh GN⁺ 2023-08-28 | 1 komentar | Bagikan ke WhatsApp
  • Halaman yang mengumpulkan pesan error dari kompiler MPW C Apple, dan disebut sebagai kutipan nyata yang diperoleh dengan mendekompilasi resource String milik kompiler
  • Alih-alih diagnosis kompiler yang biasa, pesan-pesannya menyampaikan spesifikasi ANSI C, batasan tipe, dan kesalahan sintaks dengan kalimat yang bercampur lelucon dan sindiran
  • Contohnya mencakup error bahasa C seperti panjang string literal, label di dalam switch, posisi typedef, kombinasi volatile/register, dan modifikasi konstanta
  • Juga secara langsung menyasar situasi kompilasi tertentu seperti manipulasi void *, cast void, redefinisi struct, dan error yang melibatkan goto serta inisialisasi variabel otomatis
  • Ukuran kompiler adalah 324KB, dan ditambahkan bahwa daftar yang dipublikasikan kemungkinan hanya kutipan, bukan keseluruhan, serta persoalan hak cipta juga tidak sepenuhnya jelas

Kumpulan pesan error kompiler MPW C

  • Sebuah halaman yang mencantumkan sebagian pesan error yang dihasilkan oleh kompiler MPW C Apple
  • Pesan-pesan ini diperkenalkan sebagai keluaran nyata, dan disebut diperoleh dengan mendekompilasi resource String milik kompiler
  • Karena ukuran kompiler hanya 324KB, daftar ini kemungkinan bukan keseluruhan, melainkan sebagian kutipan
  • Disebutkan juga bahwa persoalan hak cipta tidak sepenuhnya pasti

Contoh diagnosis nyata yang terdengar seperti lelucon

  • Pesan yang memelintir sintaks C dan spesifikasi ANSI

    • Batas panjang string literal:
      • "String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
    • Error bahwa di dalam pernyataan switch hanya boleh ada label case atau default:
      • "...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
    • Situasi saat menemukan nama typedef yang tidak terduga:
      • "a typedef name was a complete surprise to me at this point in your program"
    • Pesan yang mengutip klausul ANSI C sambil menunjukkan bahwa target cast harus berupa 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)"
  • Error terkait tipe dan deklarasi

    • Pesan bahwa volatile dan register tidak bisa dipakai bersamaan:
      • "'Volatile' and 'Register' are not miscible"
    • Error yang menyampaikan secara satir bahwa konstanta tidak bisa dimodifikasi:
      • "You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
    • Situasi ketika mencoba mendefinisikan ulang struct yang sudah ada:
      • "This struct already has a perfectly good definition"
    • Batasan cast terkait void:
      • "Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
    • Pesan bahwa void * tidak bisa diperlakukan sembarangan:
      • "can't go mucking with a 'void *'"
  • Ungkapan error yang singkat atau berlebihan

    • Error yang pendek dan langsung:
      • "Huh ?"
    • Situasi ketika fungsi yang sudah diproses muncul lagi:
      • "we already did this function"
    • Error panjang yang sekaligus menangani goto dari luar block, variabel otomatis dengan initializer, dan jendela yang terlalu sempit:
      • "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"
    • Situasi ketika menemukan /* di dalam komentar:
      • "Call me paranoid but finding '/*' inside this comment makes me suspicious"
    • Situasi ketika ada terlalu banyak error dalam satu baris:
      • "Too many errors on one line (make fewer)"
    • Fatal heap error karena tabel simbol penuh:
      • "Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"

1 komentar

 
GN⁺ 2023-08-28
Komentar Hacker News
  • Saya rindu masa ketika komputasi punya sisi iseng seperti ini
    Saat saya di Amazon, manajer saya bilang dulu ketika memperbarui halaman 404, ia memindai gambar kucing buatan putrinya dan memasukkannya ke isi halaman. Saat saya bergabung pada 2009, gambar itu masih ada, tetapi pada suatu waktu sepertinya ada yang menyadarinya lalu menggantinya dengan foto stok anjing. Meski begitu, nama asetnya masih tetap kayli-kitty.jpg, lalu kemudian diganti lagi menjadi foto-foto yang berotasi sehingga jejak aslinya hilang

  • “Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer” membuat saya teringat masa lalu ketika setelah membeli komputer pun kita masih bisa membeli upgrade RAM
    Kalau sekarang mungkin bunyinya, “Symbol table full - fatal heap error; please go buy a new Mac with more RAM”

    • Tidak selalu begitu. Classic Mac OS tidak mendukung memori virtual, jadi kecuali program sendiri menurunkan data yang tidak dipakai ke disk, semuanya harus masuk ke RAM
      Sistem operasi modern semuanya mendukung swapping, sehingga kompilasi tetap berlanjut, hanya saja menjadi jauh lebih lambat. Di komputer modern, agar benar-benar “kehabisan memori”, RAM dan disk harus sama-sama penuh
    • Saya paham argumen soal memori terpadu di SoC, tetapi tetap saja terasa disayangkan. Bahkan Mac Pro baru pun tidak punya slot RAM
    • Kalau ingin RAM yang bisa di-upgrade, kapan saja bisa pakai PC
    • Justru sekarang lebih begitu. Apple Silicon Mac bisa menyimpan informasi dua kali lebih banyak pada kapasitas memori yang sama, jadi konfigurasi 8GB yang remeh pun bisa menampung 16GB boilerplate FizzBuzz, 4 tab Google Chrome, atau 20% dari rata-rata node_modules
  • “a typedef name was a complete surprise to me at this point in your program”
    Saya suka masa ketika ada pesan error compiler yang lucu. Dulu saya pernah melihat pesan seperti ini di compiler dari salah satu vendor: “No! But they'll only let me warn you. Danger Will Robinson! Danger!”
    Ada juga “Really! If you are fussing around with void *, just go home or at least back to your editor!” Sepertinya manajer IT terus memakai vendor itu karena pesan tersebut. SDK-nya biasa saja, tapi menyenangkan

    • Saya tidak banyak memprogram C, jadi penasaran konteksnya: kenapa void* jadi masalah besar seperti itu?
  • Saya memprogram di MacOS asli sejak hal itu memungkinkan. Saya ingat banyak pesan error seperti ini. Terutama “Too many errors on one line (make fewer)”
    Saya juga teringat build yang butuh 45 menit kalau satu file header berubah

    • Di masa itu saya hanya membuat ekstensi sistem, plugin, dan XCMD dengan campuran 68k, C, dan Pascal. Semua proyeknya kecil, jadi waktu kompilasi bukan masalah, dan MPW terasa seperti surga
      XCMD terbesar saya berisi ketiga bahasa itu, dan MPW menautkannya tanpa masalah. Proyek yang berisi blok-blok kode kecil untuk ditempel ke dalam satu file pun mudah diotomatisasi. Saya ingat selalu tertawa keras setiap kali pesan error langka muncul. Pembuatnya, kerja bagus
  • Setelah memakai compiler ini selama bertahun-tahun, selama fungsinya tidak terlalu besar, saya jadi bisa “mendekompilasi” kode objek 68k yang dihasilkan menjadi kode C langsung di kepala
    Dengan MacNosy, biasanya saya bisa membuat ulang source C sebuah aplikasi dalam beberapa jam. Saya punya skrip yang mengubah file MacNosy aplikasi menjadi file assembler dan file rsrc, lalu saya bisa memindahkan fungsi satu per satu ke C sambil mempertahankan aplikasi yang bisa dibangun setara dengan aslinya. Awalnya saya memakainya untuk hacking game, tetapi kadang juga untuk memperbaiki bug
    Prediktabilitas code generation compiler MPW C sebagian berkat simetri instruction set 68k. Mereka membuat compiler sederhana, dan itu bekerja dengan baik. Sebagian besar upaya dicurahkan ke hal lain. Karena saya bisa memprediksi dengan cukup akurat kode seperti apa yang akan keluar, kalau tidak suka hasil code generation-nya, saya tinggal memperbaiki source-nya. Saya juga suka bahwa compiler javac punya filosofi serupa. Setelah tahu polanya, kita bisa membuat bytecode yang hampir optimal

  • Kompiler Glockenspiel C++ yang dipakai di sebuah perusahaan pendidikan pada awal 90-an adalah turunan dari cfront, dan pesan kesalahan sintaks favorit saya cuma “core dumped”
    Cukup canggung menjelaskannya dalam kursus berbayar kepada para peserta yang sudah kewalahan dengan C++ itu sendiri

    • Pengguna cukup menjalankan debugger dan melihat backtrace dari file core. Nanti setelah makin berpengalaman, mereka akan belajar mengaitkan alamat heksadesimal yang berbeda dengan jenis kesalahan yang berbeda, jadi tidak ada ruginya
  • “Call me paranoid but finding '/*' inside this comment makes me suspicious” — itu bukan urusan Anda, Pak

    • Kadang saya berharap kompiler mendukung komentar blok bertingkat. Misalnya kalau ada /* lagi di dalam /*, maka untuk mengakhirinya perlu */ dua kali
      Dalam praktiknya mungkin itu ide yang buruk sekali, tetapi ada cukup banyak situasi ketika hal seperti itu akan menghemat waktu
  • Sedikit melenceng dari isi halaman, tetapi saya benar-benar menyukai cara banyak utilitas MPW menghasilkan keluaran, termasuk pesan kesalahan, dalam bentuk perintah
    Karena terminalnya adalah buffer editor, kita bisa memindahkan kursor ke baris terkait atau mengekliknya lalu menekan sesuatu seperti cmd-enter untuk membuka file yang relevan

    • Seingat saya, menjalankan teks yang dipilih cukup dengan tombol Enter
    • Kelihatannya seperti Plan 9
  • “a typedef name was a complete surprise to me at this point in your program”
    Saya sudah melihat daftar ini berkali-kali, tetapi pesan ini tetap membuat saya tertawa keras setiap kali melihatnya

    • Jauh lebih baik daripada “Redefinition of ...” atau “Static declaration follows non-static” dari gcc
  • Diskusi sebelumnya: https://news.ycombinator.com/item?id=30238928
    Sebagai konteks tambahan, kompiler MPW C yang membuat pesan-pesan itu sebenarnya bukan dikembangkan secara internal oleh Apple, melainkan dibuat berdasarkan kontrak oleh Green Hills Software[1]. Itu juga disebutkan di halaman Wikipedia[2] dan sumbernya[3], dan menariknya, sumber itu sendiri adalah topik ini
    [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...