Ana Sayfa

Rust GCC Backend: Neden ve Nasıl Kullanılır?

1 dk okuma

Rust derleyicisi, kaynak kodu hedef işlemci için ikili koda dönüştürürken çeşitli aşamalardan geçer. Varsayılan olarak LLVM'i bir backend olarak kullanır, ancak Cranelift ve GCC gibi başka backend'ler de mevcuttur. Bu makale, bir derleyicinin ikili kod üretmek için farklı backend'leri, özellikle de GCC'yi nasıl kullanabileceğini açıklıyor. Derleyiciler, kaynak kodu dahili olarak Soyut Sözdizimi Ağacı (AST) adı verilen manipüle edilebilir bir formata dönüştürerek çalışır. Rust derleyicisi, kod ayrıştırma, linting, tip kontrolü ve ödünç alma kontrolü gibi görevleri üstlenen bir "front-end"e sahiptir. Tüm bu kontrollerden sonra, kodun hedef işlemci talimat setine çevrilmesi gerekir; bu noktada LLVM veya GCC gibi "backend"ler devreye girer.

Rust derleyici backend'leri, Rust derleyicisinin AST'si ile gerçek kod üreteci arasındaki köprü görevi görür. AST'yi alırlar ve LLVM/GCC API'lerini çağırarak kendi aşamalarını çalıştırır, optimizasyonlar yapar ve sonunda assembly kodunu üretirler. LLVM, GCC'den çok daha yeni olduğu için (2003'e karşı 1987), birçok eski işlemciyi desteklemez ve asla desteklemeyecektir. Bu nedenle, Dreamcast gibi eski bir platformda Rust programı yazmak istiyorsanız, ya kendi backend'inizi yazmanız ya da GCC backend'ini kullanmanız gerekir. Bu, Rust'ın daha geniş bir donanım yelpazesine ulaşmasını sağlar.

Makalede, gccrs adlı bir front-end ile rustc_codegen_gcc adlı GCC backend'i arasındaki farka da değiniliyor. gccrs, Rust'ın front-end'ini yeniden uygulayan bağımsız bir projedir. Buna karşılık, rustc_codegen_gcc, Rust derleyicisinin LLVM veya Cranelift gibi mevcut bir backend'idir. Sadece Rust derleyicisinin girdisinden ikili kod üretmek için tasarlanmıştır ve Rust derleyicisinin AST'si ile GCC'nin kod üretim API'si arasında bir köprü görevi görür. GCC'nin dahili yapısına doğrudan erişim sağlayan bir kütüphanesi olmadığı için, libgccjit bu entegrasyonu sağlamak için kullanılır. Bu yaklaşım, Rust'ın eski sistemlere uyumluluğunu artırırken, geliştiricilere daha fazla esneklik sunar.

İçgörü

Rust'ın GCC backend'i, derleyicinin eski veya daha az yaygın işlemci mimarilerini destekleyerek erişim alanını genişletir ve geliştiricilere daha fazla esneklik sunar.

Kaynak