C dilinde yazılmış bir Rust derleyicisi
(notgull.net)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,Makefileolmadan, tamamen saf C ile yazılıyor - Projenin adı Dozer
- C++,
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
i32destekliyor - 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,
cargobenzeri bir araç oluşturmak - otomatik üretilmiş kodu kaldırmak
- rustc ve
cargoderleme sürecini oluşturmak
- Dozer'i kademeli olarak geliştirip temel
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
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
Hobi olarak Rust ile bir C derleyicisi yazıyorum ve ona "Small C Compiler" diyorum
printf("Hello World!")işleyebildiği noktaya gelene kadar açık kaynak planı yoktypedefsorunu nedeniyle akademinin çözümünün ne olduğunu merak ediyorumDonanımda da aynı bootstrap sorunu var
Bootstrap'in faydalarını bulmak için 4 bağlantıyı takip etmem gerekti
Bootstrap zincirine C++ girince bootstrap neredeyse bitmiş oluyor
rustcsürümleri, daha eskirustcsürümleriyle derleniyorHedef sistemde yeni bir ikili üretmek için
rustc'nin o sistemi desteklemesi gerekirrustc'ye bu desteği eklerseniz kendini derleyebilirScheme ile bir C++ yorumlayıcısı ya da derleyicisi yazmayı hayal ediyorum
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
Bootstrap sürecinde FORTH'ü araç zincirinin bir parçası olarak kullanmayı düşünmek mümkün