1 puan yazan GN⁺ 2024-08-26 | 1 yorum | WhatsApp'ta paylaş

Neden C ile bir Rust derleyicisi yazılıyor?

  • Son dönemde faaliyetlerin azalmasının birkaç nedeni var

    • Ailede ölüm gibi kişisel olaylar
    • İşte artan sorumluluklar
    • açık kaynağa yönelik tutkunun azalması
    • yeni bir projeye odaklanma
  • Bu proje, tamamen saf C ile bir Rust derleyicisi yazmayı amaçlıyor

    • C++, flex, yacc, Makefile olmadan, tamamen saf C ile yazılıyor
    • Projenin adı Dozer

Neden böyle bir şey yapılıyor?

  • Bootstrapping ve bunun önemi anlaşılmalı
    • Rust kodunu çalıştırmak için bir derleyici gerekir
    • Rust'ın başlıca derleyicisi rustc'dir
    • rustc, Rust ile yazılmıştır ve Rust kodunu derlemek için gereklidir
    • rustc'yi derlemek için rustc'nin daha eski bir sürümü gerekir
    • rustc'nin ilk sürümleri OCaml ile yazılmıştı
    • OCaml derleyicisi Guile ile derlenebilir ve Guile C ile yazılmıştır

İniş ilkesi

  • Bootstrappable Builds projesine giriş

    • 512 baytlık bir ikili seed ile başlar
    • basit bir derleyiciden giderek daha karmaşık derleyiciler üretilir
    • sonunda TinyCC, GCC, Linux vb. derlenebilir
  • Rust bu süreçte oldukça geç ortaya çıkar

    • rustc 1.56 sürümünü derlemek için mrustc kullanılır
    • C++ devreye girmeden önce Rust kullanmak istenirse bu mümkün değildir
  • Dozer, C ile bootstrap edilebilen bir Rust derleyicisini hedefler

    • TinyCC ile bootstrap edilebilir olmalıdır

Plan

  • Son iki aydır Dozer üzerinde çalışılıyor

    • TinyCC ve cproc ile derlenebiliyor
    • arka uç olarak QBE kullanılıyor
    • şu anda lexer ve parser'ın bir kısmı tamamlandı
    • makro/modül genişletmesi şimdilik erteleniyor
    • type-check yalnızca i32 destekliyor
    • kod üretimi henüz yetersiz
  • Bundan sonraki plan

    • Dozer'i kademeli olarak geliştirip temel libc örneklerini, libcore'u ve rustc'yi derleyebilir hale getirmek
    • Rust paketlerini derleyebilecek, cargo benzeri bir araç oluşturmak
    • otomatik üretilmiş kodu kaldırmak
    • rustc ve cargo derleme sürecini oluşturmak

GN⁺ özeti

  • Bu yazı, tamamen saf C ile bir Rust derleyicisi yazma projesini anlatıyor
  • Bootstrapping'in önemi ve bunun üzerinden Rust derleyicisi oluşturma süreci açıklanıyor
  • Dozer projesi, C ile bootstrap edilebilen bir Rust derleyicisini hedefliyor
  • Proje son derece zorlu; başarılı olup olmayacağı belirsiz olsa da denemenin kendisi anlam taşıyor

1 yorum

 
GN⁺ 2024-08-26
Hacker News yorumları
  • Rust'ı bootstrap etmek için, C ile proto-Rust yazıp ardından proto-Rust ile tam Rust derleyicisini yazmak iyi olurdu

    • Proto-Rust'ta borrow checker ya da makro desteği olmaz, belleği serbest bırakmaz ve iyi kod üretmesine gerek yoktur
    • Proto-Rust, Rust sözdizimine sahip C gibidir
    • Bu yolun neden seçilmediğini merak ediyorum
  • Hobi olarak Rust ile bir C derleyicisi yazıyorum ve ona "Small C Compiler" diyorum

    • Backend olarak Cranelift kullanıyor ve derleyici mimarisi takılabilir ve hacklenebilir
    • printf("Hello World!") işleyebildiği noktaya gelene kadar açık kaynak planı yok
    • Preprocessor ve parser'ı uygulamaya çalışıyorum; rust-peg ve HimeCC'ye katkıda bulunuyorum
    • typedef sorunu nedeniyle akademinin çözümünün ne olduğunu merak ediyorum
  • Donanımda da aynı bootstrap sorunu var

    • Bilgisayarlar, daha önce yapılmış bilgisayarlar ve yazılımlarla üretiliyor
    • Üzerine düşünmeye değer ilginç bir konu
  • Bootstrap'in faydalarını bulmak için 4 bağlantıyı takip etmem gerekti

    • Başlıktaki "neden" kısmının bunu açıklayacağını beklemiştim
  • Bootstrap zincirine C++ girince bootstrap neredeyse bitmiş oluyor

    • Rust kullanılacaksa C++ devreye girmeden önce kullanılmalı
    • Rust derleyicisinin C'den bootstrap edilebilmesi güzel olurdu
    • Ama eski rustc sürümleri, daha eski rustc sürümleriyle derleniyor
    • OCaml derleyicisi Guile ile başarıyla derlenebilir
    • Yazar C++ aşamasını kaldırıp C aşamasını tercih ediyor
    • Yazarın motivasyonu net değil
  • Hedef sistemde yeni bir ikili üretmek için rustc'nin o sistemi desteklemesi gerekir

    • rustc'ye bu desteği eklerseniz kendini derleyebilir
  • Scheme ile bir C++ yorumlayıcısı ya da derleyicisi yazmayı hayal ediyorum

    • Scheme'den doğrudan bugünkü gcc'ye gitmek büyük bir kestirme olurdu
    • Ama C++ derleyicisi yazmanın neredeyse imkansız olduğu yaygın kanaat
  • Tüm yığına bakınca bunun "trusting trust" sorununu aşmanın bir yolu olabileceği düşünülebilir

  • Backend olarak QBE kullanılmasını beğendim

    • Rust ve LLVM ile karşılaştırmasını görmek ilginç olurdu
    • Bol şans
  • Bootstrap sürecinde FORTH'ü araç zincirinin bir parçası olarak kullanmayı düşünmek mümkün