Rust’ta C-variadic tanımı nerede derlenir?

  • Konuyu Başlatan Konuyu Başlatan Görkem
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 2

Görkem

WFN Üye
Katılım
21 Mar 2025
Mesajlar
1,518
Çözüm
1
Tepki Skoru
23
Ticaret Puanı
0
Üyelik
1 Yıl 6 Ay 17 Gün
Konum
Adıyaman
Web Sitesi
Yok
Alanı
Reklam Al-Sat
1/3
Konu sahibi
Rust’ta C-variadic fonksiyon tanımı, her ABI ve her hedefte geçerli değildir; doğru ABI ve destekli target seçilmezse kod derlenmez. Ayrıca tanım unsafe olmalı ve ... yalnızca en sonda yer almalıdır.

Aşağıdaki özet, hangi durumda tanımın geçerli olduğunu ve hangi noktada güvenlik sınırının başladığını pratik biçimde ayırır. Böylece FFI tarafında önce derlenebilirlik, sonra da doğru argüman okuma kuralı kontrol edilir.

Rust’ta C-variadic tanımı hangi koşullarda geçerli?​

ABI seçimi: önce çağrı sözleşmesini doğrulayın​

C-variadic tanım için ABI, variadic destekleyen foreign ABI ailesinden biri olmalıdır. Rust ABI ile variadic fonksiyon tanımlanmaz; dış dünyaya açılan sözleşme C uyumlu çağrı kuralına dayanır. extern "system" ise Windows x86_32’de variadic olmayan çağrılarda stdcall, variadic çağrılarda ise C gibi davranır.

Hedef mimari: destekli target yoksa tanım reddedilir​

Resmî referans, C-variadic tanım desteğinin stabil olduğu hedefleri ayrı ayrı listeler: x86/x86-64, ARM, AArch64 ve Arm64EC, RISC-V 32/64 (ilp32e hariç), LoongArch 32/64, s390x, PowerPC/PowerPC64, AMDGPU/NVPTX, Wasm32/Wasm64, C-SKY, Xtensa, Hexagon, SPARC64 ve MIPS. BPF gibi bazı hedeflerde bu tanım desteklenmez ve derleyici hata verir.

Tanımın biçimi: unsafe, son parametre ve async/const yasağı​

Bir C-variadic fonksiyon tanımı unsafe olmak zorundadır; ayrıca async veya const olamaz. ... token’ı yalnızca son parametre olabilir. Trait içindeki bildirimlerde de unsafe kuralı geçerlidir. extern bloklarda ise bildirimin safe olması ancak variadic argümanlara hiç erişmeyeceği açıkça garanti ediliyorsa anlamlıdır.

VaList okurken asıl risk: tür uyumsuzluğu​

Rust tarafında fonksiyon gövdesindeki variadic liste `VaList

KontrolNe anlama gelir / ne yapmalı
Tanımlama yapacağınız target destekli mi?Destekli değilse derleme hatası alırsınız; özellikle bazı hedeflerde C-variadic fonksiyon tanımı yoktur.
ABI gerçekten C uyumlu mu?Variadic tanım için ABI C ailesinde olmalıdır; Rust ABI’si variadic kabul etmez.
Fonksiyon unsafe mi tanımlandı?C-variadic tanımlama unsafe olmalıdır; güvenli sarmalayıcı gerekiyorsa ayrı katman yazın.
... en sonda mı?Variadic parametre yalnızca son parametre olabilir; sonrasında başka parametre gelmez.
VaList::next_arg ile okunan tür uyumlu mu?Okunan tür, gerçek çağrıdaki türle uyumlu olmalı; aksi durumda UB riski doğar.
extern blokta safe ilanı var mı?Yalnızca variadic argümanlara hiç dokunmayacaksa anlamlıdır; aksi halde yanıltıcı olur.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Giriş Yap

Zaten bir hesabınız var mı? Buradan giriş yapın.

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

İpuçları
Geri
Üst
Kendinize göre özelleştirin

Bazı Topluluk Kısayolları...

Forumda sık kullandığınız alanlara hızlıca ulaşın.

Görünüm Tema Değiş?
Hızlı kısayollar