2 puan yazan GN⁺ 2025-03-14 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Ruby on Rails freelancer’ı olarak 20 yıllık deneyim Common Lisp projelerine uzandı; ancak performans, taşınabilirlik ve çalışma ortamı sınırlamaları birikince yeniden C’yi seçmeye götürdü
  • cl-facts, hızlı bir triple store ve iç içe geçirilebilir atomik transaction’lara sahipti; ancak geliştirme süresinin uzaması müşteri kaybetme sonucunu da doğurdu
  • Sanal makineler, Linux cgroups tabanlı container’lar ve garbage collector’lara yönelik memnuniyetsizlik, C’nin sistem yazılımları için hâlâ gerçekçi temel olduğu kanaatine yol açtı
  • libc3 ile başlayan çalışma; C3 dili, interpreter ic3 ve compiler c3c fikrine genişledi, ad çakışması nedeniyle daha sonra KC3 olarak değiştirildi
  • KC3 bugün C89’a port edilmiş bir graph database, REPL ikc3, MVC web sunucusu kc3_httpd ve Markdown’dan HTML’e C implementasyonu tabanlı dokümantasyon sitesini de içeriyor

Common Lisp çalışmasının C ile yeniden yazıma uzanan süreci

  • Fransa’da bir bilgisayar okulunda 5 yıl eğitim aldıktan ve 20 yıl Ruby on Rails freelancer geliştiricisi olarak çalıştıktan sonra, kısa bir öğrenme süreci olacağı düşünülen Common Lisp giderek daha büyük bir projeye dönüştü
  • Common Lisp ile C kodu üreterek bir ASN.1 parser ve sorgu sistemi yaptı; bu çalışma özel bir Common Lisp-to-C SNMP sunucusuna genişledi
  • Ardından çeşitli Common Lisp paketleri yazdı
    • cl-unix-cybernetics, GitHub depoları arasında en çok yıldız alan proje oldu
    • cl-streams, cffi-posix de yazıldı
    • cl-facts, Common Lisp graph database olarak kullanılabilen bir triple store’dur
  • cl-facts; yüksek performans, atomik transaction’lar, iç içe geçirilebilir transaction’lar, unwind-protect uyumluluğu ve yalnızca 3 macro öğrenmeyi gerektiren kullanım kolaylığıyla ortaya çıkan bir sonuçtur
  • cl-facts, Belçika’daki European Lisp Symposium’da lightning talk olarak sunuldu; sunum slaytları facts.pdf dosyasında yer alıyor
  • Common Lisp paketi geliştirmek uzun zaman aldığı için müşteriler kaybedildi; ancak Common Lisp’in gelecek kuşaklar için bir araç olduğu değerlendirildi

C, KC3 ve mevcut bileşenler

  • Sanal makinelerin CPU ve bant genişliğini emülasyona harcadığı; Linux cgroups tabanlı container’larda RCE ve privilege escalation sorunlarının sürekli keşfedildiği deneyimi, OpenBSD merkezli bir tercihe götürdü
  • Terraform, Ansible gibi DevOps araçlarından kaçındı; VM ve container’ların yanı sıra programlama dillerinin kendisinden de memnun olmayan insanları gördü
  • Clojure ile her biri kendi dünya algısına sahip binlerce birimin bulunduğu bir strateji oyunu yapma girişimi, garbage collector nedeniyle başarısız oldu
  • Common Lisp projelerinin de garbage collector nedeniyle uygulanabilirlik alanı sınırlı kaldı; JVM’in garbage collector’ı ise iyi yapılması büyük maliyet gerektiren ticari bir güçlü yan olarak değerlendirildi
  • Performans ve taşınabilirlik düşünüldüğünde, ayrı bir araç yoksa makul seçimin C olduğu sonucuna vardı
    • Linux C ile yazılmıştır
    • OpenBSD C ile yazılmıştır
    • GTK+ nesne yönelimli saf C ile yazılmıştır
    • GNOME C ile yazılmıştır
    • Birçok Linux masaüstü uygulaması da eski C ile yazılmıştır
  • libc3 yardımcı kütüphanesiyle başlayıp C3 dili, interpreter ic3 ve compiler c3c tasarımına evrildi
  • UTF-8 buffer’ların ve veri yapılarının hızlıca gidip gelmesini sağladı; bellek maliyetini göze alarak bounds-check uyguladı
  • Defansif programlamayı merkeze aldı ve bug’ları baştan sıfıra indirme yönünü seçti; KC3 kodunun güvenlik sonucu doğurmadan çalıştığını belirtti
  • İlk interpreter, dilin tüm veri türlerini barındıran enum-tagged union olan tags’i REPL’de işleyen bir biçimde geliştirildi
  • 3 yıl sonra 5 katmanlı refactoring tamamlandı; testlerin yeniden tamamı geçti ve web sunucusu da tekrar bozulmayan bir duruma geldi
  • Dilin adı, C3 zaten kullanımda olduğu için KC3 olarak değiştirildi
  • Mevcut Common Lisp graph database’i cl-facts, C89’a port edildi
    • Büyük bölümü 2020’deki Covid-19 kapanması sırasında yazıldı
    • Triple ekleme/silme, recursive sorgu sistemi, transaction’lar, logging ve persistence içeriyor
    • Common Lisp’teki özgün tasarım C89 ile neredeyse aynen uygulandı
  • KC3, çeşitli algoritmik veri türlerinin biçimsel anlamını ele almak için parser ve generator’lar da içeriyor
    • Structs, Linked lists, Maps, Hash tables, Time, Complex, Rationals, Tuples, Code blocks, Quotes, Unquotes, Copy on write, Skip lists, Sets gibi bileşenler yer alıyor
    • Macro’lar var; örnekler sonraki yazıda ele alınacak
    • José Valim ve Elixir çalışmalarından büyük ilham alındı
  • ikc3 REPL, klavye veya dosya girdisini parse edip KC3 değerlendirme sonuçlarını standart çıktıya gönderir; KC3 unit test’lerinin 2. aşamasının büyük kısmında kullanılır
  • kc3_httpd, MVC framework’e sahip bir web sunucusudur ve mevcut web sayfalarını üretir
  • Common Lisp yazısı 700 görüntülenme aldı; dokümantasyon web sitesi kc3_httpd ve genişletilmiş Markdown-to-HTML C implementasyonu ile yazıldı

Henüz yorum yok.

Henüz yorum yok.