2 puan yazan GN⁺ 2023-08-28 | 1 yorum | WhatsApp'ta paylaş
  • Apple’ın MPW C derleyicisi hata mesajlarını toplayan bir sayfa; derleyicinin String kaynaklarının decompile edilmesiyle elde edilen gerçek alıntılar olduğu belirtiliyor
  • Normal derleyici tanıları yerine şaka ve hiciv içeren ifadelerle ANSI C standardı, tür kısıtları ve sözdizimi hataları aktarılıyor
  • Örneklerde dize sabiti uzunluğu, switch içindeki label’lar, typedef konumu, volatile/register birleşimi, sabit değiştirme gibi C dili hataları yer alıyor
  • void * işlemleri, void cast’i, struct yeniden tanımı, goto ile otomatik değişken başlatmanın iç içe geçtiği hatalar gibi belirli derleme durumlarını doğrudan hedef alıyor
  • Derleyicinin boyutunun 324KB olduğu, yayımlanan listenin tamamı değil yalnızca bir seçki olabileceği ve telif durumunun da net olmadığı ekleniyor

MPW C derleyicisi hata mesajları derlemesi

  • Apple’ın MPW C derleyicisinin ürettiği bazı hata mesajlarını listeleyen bir sayfa
  • Mesajlar gerçek çıktı olarak sunuluyor ve derleyicinin String kaynaklarının decompile edilmesiyle elde edildiği söyleniyor
  • Derleyicinin boyutu 324KB olduğundan listenin tamamı değil, yalnızca kısmi bir alıntı olabileceği belirtiliyor
  • Telif meselesi konusunda kesin bir şey söylenemediği ifade ediliyor

Şaka gibi görünen gerçek tanı örnekleri

  • C sözdizimi ve ANSI standardını eğip büken mesajlar

    • Dize sabiti uzunluğu sınırı:
      • "String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
    • switch ifadesinin içinde yalnızca case ya da default label’larının bulunması gerektiğini söyleyen hata:
      • "...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
    • Beklenmedik bir typedef adıyla karşılaşılan durum:
      • "a typedef name was a complete surprise to me at this point in your program"
    • ANSI C maddesine atıf yaparak cast hedefinin scalar olması gerektiğini belirten mesaj:
      • "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)"
  • Türler ve bildirimlerle ilgili hatalar

    • volatile ile registerın birlikte kullanılamayacağını söyleyen mesaj:
      • "'Volatile' and 'Register' are not miscible"
    • Sabitlerin değiştirilemeyeceğini hicivli biçimde ifade eden hata:
      • "You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
    • Zaten tanımlanmış bir struct’ı yeniden tanımlamaya çalışılan durum:
      • "This struct already has a perfectly good definition"
    • void ile ilgili cast kısıtı:
      • "Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
    • void * üzerinde gelişi güzel işlem yapılamayacağını söyleyen mesaj:
      • "can't go mucking with a 'void *'"
  • Kısa ya da abartılı hata ifadeleri

    • Kısa ve doğrudan hata:
      • "Huh ?"
    • Daha önce işlenmiş bir fonksiyonla yeniden karşılaşılan durum:
      • "we already did this function"
    • Blok dışından gelen goto, initializer’a sahip otomatik değişken ve fazla dar pencereyi aynı anda konu eden uzun hata:
      • "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"
    • Yorum içinde /* bulunduğu durum:
      • "Call me paranoid but finding '/*' inside this comment makes me suspicious"
    • Tek satırda fazla sayıda hata bulunan durum:
      • "Too many errors on one line (make fewer)"
    • Sembol tablosunun dolduğu fatal heap hatası:
      • "Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"

1 yorum

 
GN⁺ 2023-08-28
Hacker News yorumları
  • Bilişimde böyle oyunculuğun olduğu zamanları özlüyorum
    Amazon’dayken yöneticim, eskiden 404 sayfasını yenilerken kızının çizdiği bir kedi resmini tarayıp sayfanın gövdesine koyduğunu söylemişti. 2009’da işe başladığımda o görsel hâlâ duruyordu ama bir noktada biri fark edip stok bir köpek fotoğrafıyla değiştirmiş gibiydi. Yine de asset adı hâlâ kayli-kitty.jpg idi; daha sonra tekrar dönen fotoğraflara geçilince orijinalin izi kayboldu

  • “Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer” demek; bilgisayarı aldıktan sonra da RAM yükseltmesi satın alabildiğimiz eski günleri hatırlatıyor
    Bugün olsa “Symbol table full - fatal heap error; please go buy a new Mac with more RAM” olurdu herhalde

    • Tam olarak öyle değil. Classic Mac OS sanal belleği desteklemiyordu; bu yüzden program kullanılmayan verileri bizzat diske indirmediği sürece her şeyin RAM’e sığması gerekiyordu
      Modern işletim sistemlerinin hepsi swapping destekler, dolayısıyla derleme devam eder ama yalnızca çok daha yavaşlar. Modern bir bilgisayarda gerçekten “bellek yetersiz” durumuna düşmek için hem RAM’i hem diski doldurmanız gerekir
    • SoC’deki birleşik bellek mantığını anlıyorum ama yine de üzücü. Yeni Mac Pro’da bile RAM yuvası yok
    • Yükseltilebilir RAM istiyorsanız her zaman PC kullanabilirsiniz
    • Günümüzde hatta daha da öyle. Apple Silicon Mac aynı bellek kapasitesine iki kat bilgi sığdırabildiği için, mütevazı 8 GB yapılandırmaya bile 16 GB’lık FizzBuzz boilerplate’i, 4 Google Chrome sekmesini veya ortalama bir node_modules’ün %20’sini koyabilirsiniz
  • “a typedef name was a complete surprise to me at this point in your program”
    Eğlenceli derleyici hata mesajlarının olduğu zamanlar güzeldi. Eskiden bir tedarikçinin derleyicisinde şöyle bir mesaj gördüğümü hatırlıyorum: “No! But they'll only let me warn you. Danger Will Robinson! Danger!”
    Bir de “Really! If you are fussing around with void *, just go home or at least back to your editor!” vardı. Sanırım IT yöneticisi o mesaj yüzünden o tedarikçiyi kullanmaya devam etmişti. SDK idare ederdi ama eğlenceliydi

    • Çok fazla C programlama yapmadım; void* neden bu kadar büyük bir meseleydi, bağlamını merak ediyorum
  • Mümkün olur olmaz özgün MacOS üzerinde programlama yaptım. Bu hata mesajlarının çoğunu hatırlıyorum. Özellikle “Too many errors on one line (make fewer)” aklımda kalmış
    Bir header dosyası değiştiğinde derlemenin 45 dakika sürdüğünü de hatırlıyorum

    • O dönemde 68k, C ve Pascal’ı karıştırarak yalnızca sistem genişletmeleri, eklentiler ve XCMD’ler yaptım. Projelerin hepsi küçüktü, bu yüzden derleme süresi sorun değildi ve MPW cennet gibiydi
      En büyük XCMD’de üç dil de vardı; MPW bunu hiç sorun çıkarmadan link’liyordu. Tek bir dosyanın içine yapıştırılacak küçük kod blokları olan projeleri otomatikleştirmek de kolaydı. Nadir hata mesajlarından biri çıktığında kahkahalarla güldüğümü hatırlıyorum. Bunu yapan kişi, iyi iş çıkarmış
  • Bu derleyiciyi birkaç yıl kullanınca, çok büyük fonksiyonlar olmadığı sürece üretilen 68k nesne kodunu kafamda anında C koduna “decompile” edebilir hâle geldim
    MacNosy kullanınca genellikle birkaç saat içinde bir uygulamanın C kaynağını yeniden oluşturabiliyordum. Uygulamanın MacNosy dosyasını assembler dosyası ve rsrc dosyasına dönüştüren bir script’im vardı; orijinaliyle eşdeğer şekilde derlenebilir bir uygulamayı korurken fonksiyonları tek tek C’ye taşıyabiliyordum. Başta oyun hack’lemek için kullandım ama ara sıra hata düzeltmek için de kullandım
    MPW C derleyicisinin kod üretiminin bu kadar öngörülebilir olmasının bir nedeni de 68k komut kümesinin simetrikliğiydi. Basit bir derleyici yaptılar ve iyi çalıştı. Emeğin çoğu başka yerlere gitti. Hangi kodun çıkacağını oldukça doğru tahmin edebildiğiniz için, kod üretimi hoşunuza gitmezse kaynağı değiştirmeniz yeterliydi. javac derleyicisinin de benzer bir felsefeye sahip olmasını seviyorum. Kalıpları öğrendikten sonra neredeyse optimale yakın bytecode üretebiliyorsunuz

  • 90’ların başında bir eğitim şirketinde kullanılan Glockenspiel C++ derleyicisi cfront’tan türetilmiş bir şeydi; en sevdiğim sözdizimi hatası mesajı ise sadece “core dumped” idi
    C++’ın kendisiyle bile zorlanan kursiyerlere, para karşılığı verilen bir eğitimde bunu açıklamak epey sıkıntılıydı

    • Kullanıcının yapması gereken tek şey debugger’ı çalıştırıp core dosyasındaki backtrace’e bakmak. Zamanla deneyim kazanınca farklı onaltılık adresleri farklı hata türleriyle ilişkilendirmeyi de öğrenir; bir zararı yok
  • “Call me paranoid but finding '/*' inside this comment makes me suspicious” demiş; bu, hocam, sizin dert edeceğiniz bir şey değil

    • Derleyicilerin iç içe blok yorumlarını desteklemesini ara sıra isterim. /* içinde bir /* daha varsa, kapatmak için iki kez */ gerekmesi gibi.
      Gerçekte berbat bir fikir olabilir ama böyle olsaydı zaman kazandıracağı epey durum yaşadım
  • Sayfanın içeriğinden biraz ayrı bir konu ama birçok MPW utility’sinin, hata mesajları dâhil çıktıyı komut biçiminde üretme şeklini gerçekten seviyordum
    Terminal bir editör buffer’ı olduğu için imleci ilgili satıra götürüp ya da satıra tıklayıp cmd-enter gibi bir şeye basarak ilgili dosyayı açmak mümkün oluyordu

    • Seçili metni çalıştıran şey sanırım sadece Enter tuşu idi
    • Plan 9’a benziyor
  • “a typedef name was a complete surprise to me at this point in your program”
    Bu listeyi sayısız kez görmüş olmama rağmen, bu mesajı her gördüğümde kahkahamı tutamıyorum

    • gcc’nin “Redefinition of ...” veya “Static declaration follows non-static” mesajlarından çok daha iyi
  • Önceki tartışma: https://news.ycombinator.com/item?id=30238928
    Bağlam eklemek gerekirse, bu mesajları üreten MPW C derleyicisi aslında Apple içinde geliştirilmiş değil; Green Hills Software[1] tarafından sözleşmeyle yapılmış. Wikipedia sayfasında[2] ve onun kaynağında[3] da geçiyor; ilginç olan, o kaynağın bizzat bu konu olması
    [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...