1 puan yazan GN⁺ 2024-09-27 | 1 yorum | WhatsApp'ta paylaş

MetaWare'in High C derleyicisindeki kayıp dil genişletmeleri

1980'lerde C derleyicileri

  • 1980'lerde birçok küçük şirket rekabet ediyor ve çeşitli dil genişletmeleri sunuyordu
  • Phar Lap, 32 bit 80386 işlemcisinden yararlanabilen bir DOS genişleticisi geliştirdi ve MetaWare bu amaçla High C derleyicisini buraya port etti
  • Fujitsu, Phar Lap'in DOS genişleticisini FM TOWNS platformuna entegre etti ve High C bu platformun varsayılan C derleyicisi oldu

High C'nin benzersiz dil genişletmeleri

  • High C, DOS'a özgü genişletmelerin yanı sıra kullanıcı odaklı çeşitli dil genişletmeleri de içeriyordu
  • Bazı özellikler ancak onlarca yıl sonra resmî standarda girdi; bazıları ise hâlâ C veya C++ içinde yer almıyor

Sayı sabitlerinde alt çizgi kullanımı

  • Uzun sayı sabitlerini okumayı kolaylaştırmak için ayırıcı olarak alt çizgi kullanılabiliyordu
  • C++ bu özelliği C++14 ile, C ise C23 ile ekledi

Etiketli argümanlar

  • Çok sayıda argüman alan fonksiyon çağrılarında argümanlar etiketlenebiliyordu
  • Python'un popüler özelliğine benzer şekilde, argüman etiketi varsa sıra fark etmeksizin argüman belirtilebiliyordu
  • Standart C veya C++'ta bu özellik hâlâ yok

Aralık case

  • Pascal'daki gibi bir değer aralığını eşleştirebilen bir özellik sunuyordu
  • Standart C veya C++'ta bu özellik yok

İç içe fonksiyonlar

  • Bir fonksiyonun içinde başka fonksiyonlar iç içe tanımlanabiliyordu
  • İç içe fonksiyonlar, kaçmayan closure gibi çalışan "tam fonksiyon değeri" türüyle bildirilebiliyordu
  • GCC'nin iç içe fonksiyon genişletmesinden daha eksiksiz bir uygulama sunuyordu
  • Standart C'de hâlâ resmî bir iç içe fonksiyon özelliği yok

Generator'lar

  • Python tarzı generator coroutine'leri destekliyordu
  • Generator fonksiyonları birden fazla kez değer üretebiliyor ve yeni bir for döngüsü sözdizimiyle her değer sırayla işlenebiliyordu
  • İç içe fonksiyon özelliğiyle karmaşık etkileşimlere izin veriyordu
  • Standart C'nin bu özelliği entegre etmesi pek olası görünmüyor

GN⁺ özeti

  • MetaWare'in High C derleyicisi, 1980'lerde sunduğu çeşitli dil genişletmeleriyle C dilinin ifade gücünü büyük ölçüde artırdı
  • Bazı özellikler ancak onlarca yıl sonra resmî standarda girdi; bazıları ise hâlâ C veya C++ içinde yer almıyor
  • Generator'lar ve iç içe fonksiyonlar gibi gelişmiş özellikler, bugün birçok programlama dilinde bile nadiren görülüyor
  • Bu yazı, C dilinin tarihini ve gelişim sürecini anlamaya yardımcı olurken programlama dili tasarımına dair ilgi çekici içgörüler sunuyor

1 yorum

 
GN⁺ 2024-09-27
Hacker News yorumu
  • 2011'de iterator güdümlü bir for yazmıştım. O zaman bunun C++ standardına dahil edilmesini hayal etmiştim

  • High C/C++ Language Reference'ın bir kopyasına sahibim

  • D dilinde (veya Das BetterC'de) bulunan özellikler:

    • sayısal sabitlerde alt çizgi kullanılabiliyor
    • case aralıkları belirtilebiliyor
    • adlandırılmış argümanlar kullanılabiliyor
    • iç içe fonksiyonlar kullanılabiliyor
    • statik iç içe fonksiyonlar kullanılabiliyor
    • generator benzeri özellikler sunuluyor
  • lcc-win C derleyicisi operator overloading, varsayılan fonksiyon argümanları ve fonksiyon aşırı yüklemeyi eklemişti

  • Plan 9 C derleyicisi birçok dil uzantısı getirdi ve bunların bazıları C standardına girdi

  • Günümüzde GCC, struct pointer'ları anonim alanlara otomatik dönüştürme gibi özellikler için -fplan9-extensions bayrağını destekliyor

  • Bu özellikleri getiren kişi zamanının çok ilerisindeydi. Ancak standardı etkileyememiş olması üzücü

  • Bununla ilgili içerik daha önce Hacker News'te de ele alınmıştı

  • PDF kopyası olup olmadığını merak eden biri var

  • Örnek koddaki string literal'ların \n yerine ¥n ile bitmesinin nedeni Shift-JIS kod sayfası

  • Generator konusu Rust'taki iç/dış iterasyon tartışmasını ve try_fold() fonksiyonunu hatırlatıyor

  • Kitabın tipografisi aynı anda hem güzel hem de korkunç geliyor

  • Japonca yazım sistemi veya kerning kuralları hakkında pek bilgim yok ama sanki değişken genişlikli yazı tipi sabit genişlikli hücrelere zorla sığdırılmış gibi

  • Kod örneklerinin 8pt yazı tipiyle olmaması güzel

  • Kitabın Japonca mı yazıldığı, yoksa önce İngilizce yazılıp sonra Japoncaya mı çevrildiği merak ediliyor

  • Fujitsu'dan çıktıysa büyük olasılıkla Japonca yazılmıştır. Anadili İngilizce olmayan birinin printf ifadelerinde ve kod yorumlarında kullandığı İngilizcenin kalitesi etkileyici

  • Özellikle generator ile ilgili özellikler o dönem için fazlasıyla ilerideydi

  • Fujitsu standardizasyon sürecinden geçmediği için bunu yapabilmiş olabilir. Ama bu, bu tür uzantıların modern C/C++'ta neden yeniden keşfedilip yeniden icat edildiğini de açıklıyor