# Creating Binary Modules: Rust

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/Creating_Binary_Modules:_Rust
- **Çeviri tarihi:** 2025-09-08

C++'ın aksine, Rust bir projeyi derlemek için bir saatlik CMake/diğer ince ayarları gerektirmez, sadece [Cargo](https://github.com/rust-lang/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](https://github.com/WilliamVenner/gmod-rs) ve [rglua](https://github.com/Vurv78/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](https://rust-lang.org), 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](https://github.com/rust-lang/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](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) 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`.

```lua
cargo new my_gmod_dll --lib
```

Tebrikler! Rust projenizi başlattınız.

### Projeyi yapılandırma

Şimdi projemizi gmod için özelleştirelim:

1. `gmod-rs`'i bir bağımlılık olarak yükleyin:

```lua
cargo add gmod
```

1. Bu satırları `Cargo.toml` dosyasına ekleyin:

```lua
[lib]
crate-type = ["cdylib"]
```

Aşağı yukarı şöyle görünmelidir:

```lua
[package]
name = "my_gmod_dll"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
gmod = "17.0.0"
```

1. `nightly` araç zincirini (toolchain) ayarlayın:

```lua
rustup override set nightly
```

### 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:

```lua
use gmod::{gmod13_close, gmod13_open, lua::State};

#[gmod13_open]
fn gmod13_open(lua: State) -> i32 {
	println!("Hello from Rust!");

	0
}

#[gmod13_close]
fn exit(_: State) -> i32 {
  0
}
```

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](https://github.com/WilliamVenner/gmod-rs/tree/master/examples/my-first-binary-module) 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](https://gmod.tr/wiki/Creating_Binary_Modules:_CMake#naminglocation) 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.

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/Creating_Binary_Modules:_Rust
