İçeriğe atla

C--

Vikipedi, özgür ansiklopedi
C--
C++ logosuna benzeyen resmî olmayan C-- logosu
Paradigmasızorunlu
İlk çıkışı1998 (28 yıl önce) (1998)
TasarımcıSimon Peyton Jones ve Norman Ramsey
Tür disipliniStatik, zayıf
EtkilendikleriC
Web sitesics.tufts.edu/~nr/c--/

C--, insanların doğrudan kod yazması için değil, yüksek seviye dillerin derleyicileri tarafından otomatik olarak üretilmek üzere tasarlanmış C benzeri bir ara programlama dilidir. Fonksiyonel programlama araştırmacıları Simon Peyton Jones ve Norman Ramsey tarafından yaratılmıştır. Diğer birçok ara dilin aksine, bytecode veya ikili (binary) bir formatta değil, düz ASCII metin olarak tutulur.[1][2]

Dilin iki ana dalı bulunur:

C--, yüksek kalitede makine kodu üreten derleyicilerin geliştirilmesini kolaylaştırmak amacıyla "taşınabilir bir çevirici dili (assembly)" olarak tasarlanmıştır. Bu sayede, düşük seviyeli kod üretimi ve program optimizasyonu gibi karmaşık işlemler doğrudan C-- derleyicisine devredilir.

Dilin sözdizimi büyük ölçüde C'ye dayanır. Ancak kod üretimini ve optimizasyonu zorlaştırdığı gerekçesiyle, C'deki değişken sayıda argüman alan fonksiyonlar, işaretçi sözdizimi ve karmaşık tip sistemleri gibi bazı standart özellikler dilden çıkarılmıştır.

Dilin adı aslında bir kelime oyunudur: "C++" nasıl C'nin geliştirilmiş halini temsil ediyorsa, "C--" de C'nin daha sadeleştirilmiş ve küçültülmüş bir versiyonu olduğunu vurgular. (C dilinde ++ artırma, -- ise azaltma operatörüdür.)

Kendi başına sıfırdan bir kod üreteci yazmak zor olduğundan, geçmişte birçok proje (örneğin orijinal Modula-3) doğrudan C kodu üreten derleyiciler yazmıştır. Ancak C dilinin, fonksiyonel dillerin ihtiyaç duyduğu bazı konularda eksikleri vardır: C dili; kuyruk çağrısı optimizasyonunu garanti etmez, doğru çöp toplamayı veya verimli istisna işlemeyi desteklemez. C--, tüm bunları destekleyen ve C'ye kıyasla daha net sınırları olan, basit bir alternatif olmayı amaçlar. Dilin en yenilikçi özelliği, herhangi bir C-- derleyicisi ile çalışabilen taşınabilir çöp toplayıcılar ve istisna işleme sistemleri yazılmasına olanak tanıyan çalışma zamanı arayüzüdür.

Aşağıdaki C-- örneği, argüman olarak aldığı n değerine kadar olan tam sayıların toplamını ve çarpımını hesaplar. Bu kod parçası iki temel dil özelliğini göz önüne serer:

  • Prosedürler birden fazla sonuç döndürebilir.
  • Kuyruk özyinelemesi (tail recursion), "jump" anahtar kelimesi ile açıkça istenir.
/* Kuyruk özyinelemesi */
export sp;
sp(bits32 n) {
    jump sp_help(n, 1, 1);
}

sp_help(bits32 n, bits32 s, bits32 p) {
    if n == 1 {
        return(s, p);
    } else {
        jump sp_help(n - 1, s + n, p * n);
    }
}

Derleyiciler ve Kullanım

[değiştir | kaynağı değiştir]

Günümüzde C--'nin en aktif kullanıldığı yer, Haskell programlama dilinin derleyicisi olan GHC'dir (Glasgow Haskell Compiler). Simon Peyton Jones ve Norman Ramsey gibi orijinal C-- geliştiricilerinin de katkılarıyla GHC ekibi, dili kendi ihtiyaçlarına göre genişleterek Cmm lehçesini (dialect) yaratmıştır.[4] GHC'nin kod üretim aşaması (backend), oluşturulan bu C-- kodunu alır ve LLVM veya kendi yerleşik araçları üzerinden doğrudan çalıştırılabilir makine koduna dönüştürür.

Geçmişte Quick C-- gibi dili doğrudan destekleyen bağımsız derleyiciler geliştirilmiş olsa da, bu projelerin büyük çoğunluğu 2010'lu yıllarda terk edilmiştir ve günümüzde aktif olarak bakımları yapılmamaktadır.

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (23 Nisan 1998). "The C– Language Reference Manual". Microsoft (İngilizce). 5 Şubat 2020 tarihinde kaynağından arşivlendi2 Haziran 2026.
  2. Reig, Fermin; Ramsey, Norman; Jones, Simon Peyton (1 Ocak 1999). "C–: a portable assembly language that supports garbage collection". Microsoft (İngilizce): 1-28. 20 Aralık 2025 tarihinde kaynağından arşivlendi2 Haziran 2026.
  3. Ramsey, Norman; Jones, Simon Peyton. "The C-- Language Specification, Version 2.0" (PDF). 23 Ekim 2019 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 11 Aralık 2019.
  4. 1 2 GHC Commentary: What the hell is a .cmm file?

Dış bağlantılar

[değiştir | kaynağı değiştir]