2 puan yazan GN⁺ 2025-03-14 | 1 yorum | WhatsApp'ta paylaş
  • Fransa'da bir bilgisayar okulunda 5 yıl eğitim aldı ve 20 yıl boyunca serbest geliştirici olarak çalıştı
  • Ağırlıklı olarak istemci projelerinde Ruby on Rails ile çalıştı
  • Common Lisp öğrenmeye başlarken ASN.1 ayrıştırıcısı üreten bir sunucu yönetim protokolü yazdı
    • Common Lisp'ten C kodu üreterek bir SNMP sunucusu geliştirdi
  • Sonrasında Common Lisp tabanlı çeşitli projeler yazdı:
    • cl-unix-cybernetics – GitHub'da en çok yıldız alan projesi
    • cl-streams ve cffi-posix geliştirdi
    • cl-facts – bir triple store; Common Lisp grafik veritabanı işlevi görüyor
      • hızlı, atomik transaction ve iç içe geçebilen transaction desteği sunuyor
      • unwind-protect ile uyumlu
      • yalnızca 3 makro öğrenerek kullanılabiliyor
      • European Lisp Symposium (ELS)'ta sunuldu
  • Common Lisp geliştirmeye odaklanırken istemcilerini kaybetti, ancak Lisp'in potansiyeline dair güçlü bir inanç geliştirdi

Sanal makinelerin (VM) ve container'ların sınırları

  • Uzmanlar VM ve container'ların sorunlarına dikkat çekiyor:
    • VM'ler gereksiz CPU ve bant genişliği israfına yol açıyor
    • Linux'un cgroups tabanlı container'larında uzaktan komut çalıştırma (RCE) ve yetki yükseltme açıkları bulunuyor
    • Her yıl yeni güvenlik açıkları keşfediliyor
  • OpenBSD'yi tercih ederek Terraform, Ansible gibi DevOps araçlarının sorunlarından kaçındı

Common Lisp'in sınırları ve performans sorunları

  • Clojure gibi ortamlarda GC (garbage collector) nedeniyle performans sorunları yaşandı:
    • Binlerce birimi işleyen bir strateji oyunu geliştirirken başarısızlık örnekleri ortaya çıktı
    • JVM'in GC'si performans ve maliyet sorunlarını beraberinde getiriyor

C'ye geçiş kararı

  • Common Lisp'in performans ve taşınabilirlik sınırlarını fark etti:
    • Linux, OpenBSD, GTK+ ve GNOME'un tamamı C ile yazıldı
    • Sonunda performans ve taşınabilirlik sorunlarını çözmek için C'ye geçti

Yeni dil KC3'ün geliştirilmesi

  • libc3 yardımcı kütüphanesi geliştirildi → C3 dili → ad daha sonra KC3 olarak değiştirildi
  • KC3'ün özellikleri:
    • bir interpreter (ic3) ve compiler (c3c) içeriyor
    • UTF-8 buffer'lardan veri yapıları oluşturup tersine dönüştürebiliyor
    • defensive programming yaklaşımıyla en baştan bug'ları en aza indiriyor
    • güvenlik sorunu yok
    • enum etiketli union tabanlı bir veri tipi sistemi sunuyor

KC3 ile elde edilen sonuçlar

  • cl-facts C89'a taşındı:
    • geliştirme Covid-19 döneminde tamamlandı
    • triple ekleme, silme, recursive query sistemi, transaction, logging, kalıcılık gibi özellikler hayata geçirildi
  • Algoritmik tipler için ayrıştırıcı ve üretici yazıldı:
    • struct, linked list, map, hash table, complex number, tuple, code block ve daha fazlasını içeriyor
    • José Valim'den (Elixir'in yaratıcısı) büyük ilham aldı
  • ikc3 – KC3 değerlendirme sonuçlarını yazdıran bir REPL
  • kc3_httpd – MVC framework tabanlı bir web sunucusu geliştirildi
    • mevcut blog sayfası da kc3_httpd üzerinden sunuluyor
  • Dokümantasyon sitesi yazıldı → KC3'ün Markdown to HTML dönüştürücüsü kullanıldı

Sonuç

  • Common Lisp'te edinilen deneyimlerin üzerine C'ye geçildi
  • KC3, performans, güvenlik ve taşınabilirlik alanlarında güçlü sonuçlar verdi
  • İleride KC3 ile ilgili ek makrolar ve örnekler paylaşılacak

1 yorum

 
GN⁺ 2025-03-14
Hacker News görüşleri
  • Ben tersini düşünüyorum. Küçükken çok VB kullandım, sonra üniversitede Java, C ve C++ öğrendim ve ağırlıklı olarak C kullandım. Xfce'nin çekirdek geliştiricisi oldum ve 5 yıl çalıştım

    • Sonrasında backend geliştirmeye geçip Java, Scala ve Python kullandım. Bu diller başka sorunlar getiriyor ama standart kütüphane ve bağımlılık yönetim sistemlerini beğendim
    • 12 yıl sonra Xfce'ye geri döndüm ama C hâlâ zor. Bellek sızıntıları, NULL pointer başvuruları, veri yarışları gibi pek çok sorun var
    • Rust kullanınca C'ye kıyasla daha üretken oldum
  • Bu duyguya tamamen katılıyorum. Birkaç yıldır saf C ile bir şeyler geliştirmek için güçlü bir istek duyuyorum

    • Ana dilim C++ ama eski C kütüphanelerini kullanmak gerçekten keyifli. Arayüzler basit ve temel
    • Saf C ile methodlar geliştirirken algoritmaya %100 odaklanabilmek hoşuma gidiyor
    • C beni işi kendim yapmaya zorluyor. Sihri ve karmaşıklığı gizlemiyor
    • Çevremdeki insanlar modern C++ özelliklerini kullanmaya çalışıyor ama ben giderek C++ özelliklerini çıkarmaya çalışıyorum
  • Çok uzun zaman önce C ile programlamaya başladım ve bazen hâlâ o günlere dönmek istiyorum

    • Ama gerçekten C ile production-grade bir uygulama yazmaya kalkınca neden bıraktığınızı anlıyorsunuz
    • Bilgisayarın desteği olmadan kendiniz yapmanız gereken çok fazla şey var
    • Bugün düşük seviyeli bir dil seçmem gerekse muhtemelen Ada'yı seçerdim. C'ye benziyor ama derleyici desteği daha fazla
  • Blog yazısını okuduktan sonra yazarın ne anlatmak istediği konusunda kafam karıştı

    • Yazarın programının kullanılmama nedeninin dil olup olmadığını merak ettim
    • Bellek tüketimiyle ilgili sorunlar olabilir
    • Yazar, çıkardığı derslerden ya da kullanıcı istatistiklerinden söz etmemiş
    • Yeni özellikler eklenmemiş, sanki sadece alıştırma olarak yeniden yazılmış gibi
  • kc3 kod örneği verilmiş

  • C benim ilk dilimdi ve basit konsol uygulamalarıyla küçük oyunlar yaptım

    • Ama geri dönmek istemiyorum. Build araçları ve bağımlılık yönetimi demode kalmış
    • Zig benim yeni C'm. İçinde bir C derleyicisi var ve C header'larını wrapper olmadan kullanabiliyor
    • Go'yu basit bir dile ihtiyaç duyduğumda, Rust'ı ise performans ve güvenlik gerektiğinde kullanıyorum
  • Bazen hobi olarak C ile kod yazıyorum. Ama tekrarlayan işler çok fazla olduğu için sıkıcı oluyor

    • C ile derleyici yazmak, tagged union'larla uğraşmak gibi
    • Tekrarlayan işleri azaltmak için bir generator yazsam mı diye düşündüm ama henüz yapmadım
    • C ile proje geliştirirken prototipleme için embedded bir dil kullanmayı düşünmüştüm
  • C pratik olduğu için başarılı oldu

    • Güvenli değil ama yapmak istediğiniz şeyi yapmanıza izin veriyor
  • Hiçbir şey anlamadım

    • Killer app'in ne olduğunu, CL ile ilgili sorunun ne olduğunu ve C'nin tek seçenek olup olmadığını merak ediyorum
    • KC3 kodunu çalıştırmanın güvenlik açısından sorunsuz olduğundan emin misiniz diye merak ediyorum
  • Bu yazı, mutlu sonu olmayan bir ibret hikâyesi gibi okunuyor