---
title: "Tek Bir Rust Unicode Hatası, Üç Kodlama Modeli: Tekrarlanabilir Bir Karşılaştırma"
url: https://blog.edumints.com/tek-bir-rust-unicode-hatasi-uc-kodlama-modeli-tekrarlanabilir-bir
category: "LLM"
date: 2026-10-18T07:07:20.570Z
publisher: Edumints Blog
lang: tr-TR
source_name: "dev.to"
source_url: https://dev.to/lovestaco/one-rust-unicode-bug-three-coding-models-a-reproducible-comparison-48ae
---

# Tek Bir Rust Unicode Hatası, Üç Kodlama Modeli: Tekrarlanabilir Bir Karşılaştırma

Kodlama modellerinin liderlik tabloları, bir modelin gerçek dünyadaki bir yazılım hatasını nasıl ele aldığı hakkında çok az şey söyler. Bir Rust fonksiyonu düz ASCII metinlerde sorunsuz çalışırken, UTF-8 dizisini yanlış bayt sınırından dilimlediği (slice) için geçerli Unicode verilerde çökebilir (panic). Doğru bir çözüm hem karakter sınırlarına saygı göstermeli hem de `&str` dönüş tipini korumalıdır. Bu karşılaştırma, modelleri açıklamalarının ne kadar ikna edici olduğuna göre değil; tekrarlanabilir tek bir hata, tek bir istem (prompt) ve aynı regresyon testleri üzerinden ürettikleri yamaların derleyici çıktısına ve kalitesine göre değerlendirir.

**Temel Değerlendirme Kriterleri:**
- Tek satırlık bir Rust dilimleme işlemi geçerli UTF-8 üzerinde çökebilir; bu da onu kodlama modelleri için harika bir sınava dönüştürür.
- Çözüm, fonksiyon imzasını (`&str`) korumalı, karakter sınırlarını doğru yönetmeli ve regresyon testlerinden geçmelidir.
- Bu karşılaştırma üç model için aynı hatayı kullanır ve yamaları liderlik tablosu puanları yerine derleyici çıktılarıyla yargılar.

## Hata (The Bug)

Aşağıdaki fonksiyonun bir metnin ilk `n` karakterini döndürmesi beklenmektedir. Düz ASCII karakterlerde çalışır ancak `n` değeri çok baytlı (multibyte) bir UTF-8 karakterinin ortasına denk geldiğinde çöker:

```rust
pub fn prefix(input: &str, n: usize) -> &str {
    if n >= input.len() {
        return input;
    }
    &input[..n]
}

#[cfg(test)]
mod tests {
    use super::prefix;

    #[test]
    fn ascii() {
        assert_eq!(prefix("rustacean", 4), "rust");
    }

    #[test]
    fn unicode() {
        assert_eq!(prefix("café", 4), "café");
    }

    #[test]
    fn beyond_length() {
        assert_eq!(prefix("é", 10), "é");
    }
}
```

Orijinal uygulama karakterleri değil, baytları saymaktadır. UTF-8 kodlamasında `café` kelimesinin sonundaki `é` harfi iki bayt yer kaplar. Dördüncü bayt indeksinden dilimleme yapmak bu karakteri ortadan ikiye böler ve çalışma zamanında paniğe (panic) yol açar. Bu kodu yeni bir Cargo kütüphanesi projesinde `src/lib.rs` olarak kaydedip `cargo test` komutunu çalıştırarak çöken Unicode senaryosunu kolayca tekrarlayabilirsiniz.

## Üç Model, Tek Görev

Karşılaştırmadaki üç aday model **DeepSeek V4 Pro**, **Claude Fable 5.1** ve **Grok Build 0.1** olarak belirlenmiştir. Çalıştırmadan önce model erişilebilirliği, kesin API kimlikleri ve desteklenen parametreler canlı katalogdan doğrulanmalıdır:

- **DeepSeek V4 Pro:** Katalogdan API kimliği doğrulanır | Sıcaklık (Temperature): `0` | Girdi: Aynı Rust dosyası ve istem | Sürüm: API sürümü kaydedilir.
- **Claude Fable 5.1:** Katalogdan API kimliği doğrulanır | Sıcaklık (Temperature): `0` | Girdi: Aynı Rust dosyası ve istem | Sürüm: API sürümü kaydedilir.
- **Grok Build 0.1:** Katalogdan API kimliği doğrulanır | Sıcaklık (Temperature): `0` | Girdi: Aynı Rust dosyası ve istem | Sürüm: API sürümü kaydedilir.

**Pratik Mühendislik Çıkarımı:** Her model için aynı istek gövdesi, sistem talimatları, maksimum çıktı sınırı ve test ortamı kullanılmalıdır. Sıfır sıcaklık (`temperature: 0`) rastgeleliği azaltır ancak tekrarlanan çağrılarda birebir aynı yanıtların döneceğini garanti etmez; bu nedenle API tarafından döndürülen tam model kimliği mutlaka kayıt altına alınmalıdır.

## İstem (The Prompt)

Her model için aşağıdaki istemi hiçbir değişiklik yapmadan kullanın ve ardından orijinal `src/lib.rs` dosyasının tamamını ekleyin:

> Aşağıdaki Rust fonksiyonunu düzeltin. Paniklemeden ilk `n` Unicode skaler değerini döndürmelidir. Dönüş tipini `&str` olarak koruyun. Hatayı kısaca açıklayın, eksiksiz bir `src/lib.rs` döndürün ve bir emoji ile birleştirici karakter (combining character) için regresyon testi ekleyin. Harici bağımlılık eklemeyin.

Bir modele diğer modelin başarısızlığından bahsetmeyin ve test etmeden önce modelin yanıtını sessizce onarmayın.

## Her Modelin Yamasında İncelenecekler

**DeepSeek V4 Pro ve Diğer Adaylar İçin Denetim Süreci:**
- Ham yanıtı, bildirilen girdi/çıktı token sayılarını, geçen istek süresini ve ilk `cargo test` çıktısını kaydedin.
- Doğru bir yama, rastgele bir bayt indeksinden dilimleme yapmak yerine karakter sınırları (`char_indices` vb.) üzerinde gezinmelidir.
- Döndürülen kod derlenmezse hatayı olduğu gibi saklayın ve bir sonraki istemi yeni bir deneme olarak sayın.

Yazılım geliştirme süreçlerinde LLM'leri değerlendirirken sentetik kıyaslamalar yerine, gerçek derleyici doğrulaması ve uç durum (edge-case) regresyon testleri kullanmak en güvenilir mühendislik yaklaşımıdır.

---

**Kaynak:** dev.to (https://dev.to/lovestaco/one-rust-unicode-bug-three-coding-models-a-reproducible-comparison-48ae)
**Yayıncı:** [Edumints Blog](https://blog.edumints.com) · Alıntılarken bu URL'ye bağlantı verin: https://blog.edumints.com/tek-bir-rust-unicode-hatasi-uc-kodlama-modeli-tekrarlanabilir-bir
