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
Hacker News yorumu
2011'de iterator güdümlü bir
foryazmıştım. O zaman bunun C++ standardına dahil edilmesini hayal etmiştimHigh C/C++ Language Reference'ın bir kopyasına sahibimD dilinde (veya Das BetterC'de) bulunan özellikler:
casearalıkları belirtilebiliyorlcc-winC derleyicisi operator overloading, varsayılan fonksiyon argümanları ve fonksiyon aşırı yüklemeyi eklemiştiPlan 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-extensionsbayrağını destekliyorBu ö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
\nyerine¥nile bitmesinin nedeni Shift-JIS kod sayfasıGenerator konusu Rust'taki iç/dış iterasyon tartışmasını ve
try_fold()fonksiyonunu hatırlatıyorKitabı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
printfifadelerinde 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