19 puan yazan GN⁺ 2026-01-04 | 4 yorum | WhatsApp'ta paylaş
  • C dilinin sözdizimini ve anlamını devralırken güvenlik ve kullanılabilirliği güçlendiren evrimsel bir dil olarak, mevcut C geliştiricileri için tanıdık bir ortamı korur
  • Tam C ABI uyumluluğu sunar; bu sayede C/C++ projelerine doğrudan entegre edilebilir ve vkQuake’in bazı kodlarının C3’e dönüştürülerek c3c derleyicisiyle derlendiği bir örnek bulunur
  • Modül sistemi, operatör aşırı yükleme, derleme zamanı makroları gibi özelliklerle kod yapısını ve ifade gücünü geliştirir
  • Sözleşme tabanlı programlama (Gradual Contracts), sıfır ek yükle hata işleme, çalışma zamanı ve derleme zamanı yansıması gibi modern özellikler içerir
  • Debug modunda güvenlik kontrolleri ve ayrıntılı stack trace otomatik olarak sunulur; bu da hata tespiti ve kararlılık açısından avantaj sağlar

C3 genel bakış

  • C3, C dilinin sözdizimi (syntax) ve anlamı (semantics) temel alınarak geliştirilmiş bir programlama dilidir
    • Amaç, mevcut C programcıları için tanıdık yapıyı korurken dili ileri taşımaktır
  • Doğru ve amaca yönelik operatör aşırı yükleme desteği sunar
    • C++’taki karmaşık aşırı yükleme yapısı olmadan vektör, matris, sabit noktalı aritmetik işlemler doğal biçimde ifade edilebilir
  • Sözleşme tabanlı programlama desteğiyle çalışma zamanı ve derleme zamanı kısıtları belirtilebilir
    • Kodun güvenliğini ve spesifikasyon tutarlılığını güçlendirir
  • Result tabanlı hata işleme ile exception yaklaşımının avantajlarını birleştirir
    • C koduyla doğal biçimde bütünleşen bir hata yönetimi yapısı sağlar
  • Tür bilgisi sorgulama (type introspection) hem derleme zamanında hem çalışma zamanında desteklenir
  • Inline assembly: dizelere veya karmaşık kısıtlara ihtiyaç duymadan assembly, normal kod yazar gibi yazılabilir
  • Debug modunda çalışma zamanında sınır kontrolleri (bound checks) ve değer kontrolleri (value checks) otomatik eklenir
  • C3 standart kütüphanesi, debug build içinde varsayılan olarak ayrıntılı stack trace sunar
    • Basit bir “segmentation fault” yerine hatanın somut konumu görülebilir

Ergonomics and Safety

  • Optionals ile hata ve null işlemede güvenlik sağlar
  • defer sözdizimiyle kaynak temizliğinin otomasyonu desteklenir
  • slices ve foreach ile güvenli yineleme işlemleri yapılabilir
  • Yorum tabanlı contracts ile kod kısıtları açıkça belirtilebilir
  • @pool bağlamında belleğin otomatik serbest bırakılması desteklenir

Performance by default

  • SIMD vektörleri doğrudan yazarak donanım düzeyinde kontrol sağlanabilir
  • Farklı bellek ayırıcı seçenekleriyle ince performans ayarı desteklenir
  • Hata işlemede ek yük oluşturmayan tasarım benimsenmiştir
  • Hızlı derleme süreleri ve LLVM backend optimizasyonları kullanılır
  • Kullanımı kolay inline assembly sunulur

Batteries included standard library

  • Dinamik kapsayıcılar ve dizgiler dahil standart veri yapıları sunar
  • Çapraz platform soyutlamalarıyla platformlar arası taşınabilirlik sağlar
  • Gerektiğinde yerel platform erişimine izin verir

Leverage existing C or C++ libraries

  • C3, C ABI ile tamamen uyumludur; ayrı “C uyumlu tipler” veya fonksiyon bildirimleri gerekmez
  • C3 içinden C kodu bağlanabilir, C içinden de C3 kodu bağlanabilir

Modules are simple

  • Basit ve sezgisel bir modül sistemi
    • Varsayılan ayarlar makul biçimde yapılandırılmıştır ve geliştirme akışını kesintiye uğratmaz
  • Modüller aracılığıyla namespace yönetimi sağlar
  • Açık denetimle kapsülleme yapısını sadeleştirir
  • Arayüzlerle paylaşılan davranışlar tanımlanabilir
  • Generic modules özelliğiyle jenerik tip üretimi basit ve açık biçimde gerçekleştirilebilir
  • Struct subtyping üzerinden yapısal yeniden kullanım desteklenir

Macros without a PhD

  • Derleme zamanı makroları, normal fonksiyonlara benzer biçimde yazılabilir
  • Kodun tür bilgisini anlayan type-aware makrolar desteklenir
  • C ön işlemcisine göre daha açık ve daha güçlü kod üretimi sağlar

4 yorum

 
kayws426 2026-01-06

Oldukça çeşitli şeyler çıkıyor. LONG LIVE C-LANG !!!
Ama ileride c4 çıkarsa, gerçekten de patlayıcı bir popülerlik yakalar mı...

 
bus710 2026-01-05

Zig her yıl breaking change getirdiği için, dili beğensem de artık elim gitmiyor.

Öte yandan C3’ün tanıtımına bakınca genel olarak C + Go hissi veriyor; okuyup yazması rahat ve sürüm yükseltmelerinden kaynaklanan stresin çok daha az olacağı izlenimini veriyor.

 
mhcoma 2026-01-05

Biraz da destek olarak... Son zamanlarda kullanıyorum, eğlenceli.
C kullanırken rahatsız eden noktaları iyileştirmeye odaklanmış gibi hissettirdiği için hoşuma gidiyor.
Resmî dokümantasyon ise biraz olgunlaşmamış
(bir özelliği araştırmak için bakınca, açıklamaların alakasız yerlerde yazılı olduğu durumlar çok oluyor...)

 
GN⁺ 2026-01-04
Hacker News görüşleri
  • C3'ün tasarım felsefesindeki ölçülü yaklaşımı hoşuma gidiyor
    Yeni bir bellek modelini dayatmıyor, C++ olmaya da çalışmıyor
    Özellikle tam ABI uyumluluğu sayesinde mevcut C build sistemlerine C3 dosyalarını doğrudan karıştırıp kullanabiliyorsunuz; binding yazmaya gerek kalmıyor
    Devrimden çok evrimi hedefleyen geliştirici vizyonunu takdir ediyorum
    Hafta sonunda öğrenilecek bir dil olarak tavsiye edilebilir. C99'dan daha modern ama tanıdık bir his veriyor
    • C3 ile kütüphane yazıp sembolleri dışa aktararak binding'lerde kullanmanın mümkün olup olmadığını merak ediyorum
      C'den tamamen vazgeçemememin nedeni cstring ve serbest bırakılmamış pointer'lar
    • Tam ABI uyumluluğu gerçekten bu kadar önemli mi emin değilim
      Asıl tehlikeli olan C'nin kendisinden çok implementasyonlar ve ABI
      fat pointer, geliştirilmiş varargs, UBSan, MTE gibi şeyler uygulanırsa oldukça iyi bir noktaya gelinebilir
  • C3 resmi belgelerindeki Contracts bölümünü okurken aklıma bir soru takıldı
    Derleyicinin sözleşmeleri mutlaka denetlemesi gerekmiyorsa ve ihlal durumunda tanımsız davranış ortaya çıkabiliyorsa, buna nasıl güvenip kullanmak gerekir bilmiyorum
    Güzel bir özellik ama biraz riskli görünüyor
    • Sözleşmeler, “her zaman doğru olması gereken koşulları” ifade eden değişmezlerdir (invariant)
      Bunlar yok sayılabilir, çalışma zamanında denetlenebilir ya da her zaman doğru kabul edilip optimizasyonda kullanılabilir
      Örneğin pointer geçerliliği denetlenebilir, tek sayı olma koşulu ise varsayım olarak bırakılabilir
    • Sözleşmeler, niyeti standartlaştırılmış bir biçimde ifade etmenin bir yoludur
      Büyük ekipler bunu zorunlu kılabilir; Visual Studio gibi araçlar ise sadece uyarı gösterip kademeli öğrenmeye imkan tanıyabilir
    • Belgelerdeki üç cümle sırasıyla şunu söylüyor:
      1. derleyicinin sözleşmeleri mutlaka kullanması gerekmez
      2. ihlal durumunda tanımsız davranış oluşabilir
      3. güvenli modda bunlar çalışma zamanında assert ile denetlenir
        Yani geliştirme sırasında açıp dağıtımda kapatarak performansı etkilememesini sağlayabilirsiniz
    • Sonuçta bu, derleyicinin zaten yaptığı varsayıma dayalı optimizasyonu kod içinde açıkça ifade etmenin bir yolu
    • Sözleşmeleri, “neredeyse hiç ulaşılmayacak koşulları” ifade eden yumuşak kısıtlar olarak görüyorum
      Mutlaka denetlenmesi gereken koşullar fonksiyon içinde doğrudan kodla ele alınmalı
  • Daha fazla ayrıntı C3 GitHub deposunda var
    C'den farklı olarak header dosyaları yok, modül tabanlı namespace, slice'lar, operator overloading, generic modüller, Result tabanlı hata işleme, güvenli modda çalışma zamanı denetimleri gibi özellikler sunuyor
    • Özellikler iyi ama yapı biraz dengesiz bir bileşim gibi hissettiriyor
      Kişisel olarak function overloading, varsayılan parametreler ve tuple dönüşleri eksik geliyor
  • C3'te Result ya da Expected için Optional adının kullanılması kafa karıştırıcı
    Bunun “T veya boş” değil, “T veya E” anlamına gelmesi gerekirken isim yanlış seçilmiş gibi duruyor
    İlgili belge bağlantısı
    • C3'ün Optional yapısı Option<T> ya da Result<T, E> ile aynı değil
      Hata tipi tek bir tamsayı koduyla sınırlı ve bu da “devrim değil, evrim” felsefesiyle uyumlu
      type? sözdizimi de sezgisel
    • Kod içinde doğrudan “Optional” kelimesi kullanılmıyor
      C'nin anlamını korurken out param yükünü azaltan bir tasarım
    • Kavram adlarını keyfi biçimde değiştirmeyi pek sevmiyorum ama ikisinden yalnızca biri desteklenecekse Optional daha açık bir ad
      Result zaten genel bir dönüş değeri anlamı taşıdığı için karışıklık yaratabilir
    • Yine de “Option” ya da “Maybe” başka anlamlara geldiği için “Result” veya “Either” daha uygun olur diye düşünüyorum
  • Tsoding'in C3 ile 30 saati aşkın yaptığı bir canlı yayın serisi var
    YouTube oynatma listesi
  • C3, Odin ve Zig geliştiricileriyle etkileşimim oldu
    Üç dilin birbirleriyle rekabet etmekten çok birbirlerinin trade-off'larından öğrenen bir ilişki içinde olması etkileyiciydi
    • Gömülü sistemlerde hangi dilin en mantıklı tercih olduğunu merak ediyorum
    • “Rekabet değil, öğrenme” deniyor ama sonuçta bu sadece daha nazik ifade edilmiş bir rekabet değil mi diye de düşünüyorum
  • Belgelere göz atınca iki sorum yanıt buldu
    1. LLVM tabanlı, yani taşınabilirliği yüksek
    2. Tagged enum desteği yok
      Bunun yerine makrolar ve reflection gibi özellikler eklenmiş
    • Tagged union'ların sistem dillerinde verimsiz olduğunu düşünüyorum
      En büyük tür kadar bellek kaplıyorlar ve akışı çalışma zamanındaki tür denetimine taşıyarak statik tipli dillerin avantajlarını azaltıyorlar
      Gerektiğinde bunları elle uygulamak daha iyi olabilir
  • Yeni bir dil yaratmanın ne zaman gerçekten değerli olduğu üzerine düşünüyorum
    C içinde generic'leri, slice'ları ve hata yayılımını kendim uyguladım ama derleyici yazmak fazla karmaşık
    Bu yüzden ben C varyantları ile Go'yu birlikte kullanıyorum
    • LLVM sayesinde “daha iyi C” türü bir dil yapmak sanıldığından daha kolay
      Hatta bir günde prototip çıkarabilecek kadar giriş eşiği düşük
    • Dil yaratmak her zaman değerlidir
      Yeni bir paradigmayı gerçeğe dönüştürmenin tek yolu budur
      Dil; sözdizimi, standart kütüphane, tooling ve runtime'ı birlikte uyumlu hale getirmeyi gerektirdiği için zor ama bu yüzden geleceğe etkisi de büyüktür
    • C3, aslında C2'ye katkı veren Christoffer'ın geliştirme hızından bunalıp bağımsız olarak başlattığı bir proje
      LLVM sayesinde yeni bir derleyiciyi kendisi inşa edebilmiş
    • Bir dilin değeri, başkalarıyla paylaşılan ortak bir anlayış yaratmasında yatar
      Tek başına kullanılan bir C varyantı sorun olmayabilir ama başkalarıyla işbirliği yapmak veya dış kütüphaneler kullanmak için ortak bir dil gerekir
  • Başta basit bir dil sanmıştım ama beklenmedik şekilde zengin özellik listesi beni şaşırttı
    Bir de exception'lara “Excuses” demeleri sevimli ve esprili
  • Bence böyle web siteleri programlama dili siteleri için örnek olmalı
    • Tersine, tasarım bana çocuksu ve amatörce göründü
      Özellikle gezinme menüsünde Discord bağlantısı olması bu izlenimi güçlendiriyor