Creating Binary Modules: Rust
C++'ın aksine, Rust bir projeyi derlemek için bir saatlik CMake/diğer ince ayarları gerektirmez, sadece Cargo'ya sahip olmanız yeterlidir.
Rust'ta ikili modüller (binary modules) oluşturmak için artık iki ana crate (kütüphane) bulunmaktadır - gmod-rs ve rglua (kütüphane, işlevselliği ve yapıyı tanımlar).
İkisinin de kod yazmaya farklı ama benzer yaklaşımlarının yanı sıra farklı işlevsellikleri ve giriş eşikleri vardır.
Bu makalede WilliamVenner'ın gmod-rs crate'ine (kütüphanesine) göz atacağız.
Bağımlılıklar
Resmi sitesinden Rust'ı yükleyin, tek bir yükleyici ile Cargo'ya (paket yöneticisi) ve Rust derleyicisinin kendisine aynı anda sahip olacaksınız.
Rust analyzer (LSP)
İsterseniz, IDE'niz için rust-analyzer'ı (Dil Sunucusu (Language Server) ve diğer güzellikler dahil olmak üzere kolay kod yazımı için bir dizi yardımcı program) kurabilirsiniz.
Bunu vscode'a yüklemek için tek yapmanız gereken marketplaceden resmi eklentiyi yüklemektir.
Yeni bir proje kurma
Rust'ta yeni bir proje oluşturmak için sadece bir komut yazmanız yeterlidir - cargo new <proje adı> --lib.
Tebrikler! Rust projenizi başlattınız.
Projeyi yapılandırma
Şimdi projemizi gmod için özelleştirelim:
gmod-rs'i bir bağımlılık olarak yükleyin:
- Bu satırları
Cargo.tomldosyasına ekleyin:
Aşağı yukarı şöyle görünmelidir:
nightlyaraç zincirini (toolchain) ayarlayın:
Kodu düzenleme
Projemiz neredeyse hazır, sadece lib.rs dosyasının kaynak kodunu değiştirmemiz gerekiyor - bu durumda bu bir giriş noktası (entrypoint) dosyasıdır ve C++'daki main.cpp'nin bir benzeridir.
lib.rs dosyasını açın ve içindeki her şeyi silin.
İçine bu kodu yerleştirin:
Tamamdır! Projenizin sadece derlenmesi gerekiyor ve ardından gmod-rs crate'ini (kütüphanesini) keşfetmeye ve Lua yığını (stack) ile çalışmaya başlayabilirsiniz!
Gördüğünüz gibi, gmod13_open ve gmod13_close fonksiyonları State argümanı ile doldurulmuştur. Bu, Lua ile ikili modülünüz (binary module) arasındaki arayüz olan bir nesnedir. Onun aracılığıyla Lua yığınını (stack) kontrol edebiliriz.
Derleme
WilliamVenner, gmod-rs deposunda projeyi derlemek için hazır CLI komutları sunmaktadır, ancak ben bunları yine de burada paylaşacağım:
| Platform | Komut | Açıklama |
|---|---|---|
win32 |
cargo build --target i686-pc-windows-msvc |
Windows 32-bit Sunucunuz Windows üzerinde çalışıyorsa ve Garry's Mod'un main branch'inde ise (bu varsayılan branch'tir) bunu kullanın. |
win64 |
cargo build --target x86_64-pc-windows-msvc |
Windows 64-bit Sunucunuz Windows üzerinde çalışıyorsa ve Garry's Mod'un x86-64 branch'inde ise bunu kullanın. |
linux |
cargo build --target i686-unknown-linux-gnu |
Linux 32-bit Sunucunuz Linux üzerinde çalışıyorsa ve Garry's Mod'un main branch'inde ise (bu varsayılan branch'tir) bunu kullanın. |
linux64 |
cargo build --target x86_64-unknown-linux-gnu |
Linux 64-bit Sunucunuz Linux üzerinde çalışıyorsa ve Garry's Mod'un x86-64 branch'inde ise bunu kullanın. |
Proje başarıyla derlendikten sonra, oluşturulan .dll (.so unix benzeri sistemlerde) dosyasını bulun ve burada yazıldığı gibi istenen sonuca göre yeniden adlandırın.
Derlenmiş ikili dosyayı Windows'ta target/<TARGET>/debug/my_gmod_dll.dll veya Linux'ta target/<TARGET>/debug/libmy_gmod_dll.so yolunda bulabilirsiniz.
Projeyi release modunda derlemek isterseniz, derleme komutuna --release bayrağını ekleyin.
Sonuç
Bu kadar kullanışlı araçlarımız olduğu için Rust'ta her şeyin kolay olduğunu düşünmenizi istemem. Evet, C++'ın aksine araçlarımız çok kullanışlıdır, ancak dilin kendisine alışmak uzun zaman alır. Bu yüzden onu öğrenmeyi düşünüyorsanız, buna değip değmeyeceğini birkaç kez düşünün.
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord