
Thu Sep 17 2026

Selam! Hadi öncelikle biraz kişisel hikayeden başlayayım. Ben birkaç ay önce bir Rust projesine daldığımda, her seferinde GitHub Copilot'un bana verdiği JavaScript kodunu hatırladım. Tamamen farklı bir senaryo olacaktı, ama karşılaştığımız zorlukları kolaylaştırabileceğini düşündüm. Şimdiye kadar yaptığımız ve göreceğiniz şeylere bir göz atalım, böylece ne beklemeniz gerektiğini bilseniz de ben de yol aldığım deneyimleri sizinle paylaşayım.
cargo, rustc, rust-analyzer gibi araçlar. Bunlar ayrıca Copilot tarafından da desteklenmektedir, böylece daha keyifli bir akış elde edebilirsiniz.| Hedef | Neden önemli? | Gerçeklemeyi nasıl planlıyorum? |
|---|---|---|
| Temel konseptleri kavrama (Sahip olunması gereken sahiplik, k Arkadaş, borrow checker) | Rust'ta kurallar, derleyici tarafından yapılmadan önce ek kontrol gerektirir. | Günlük alıştırma ile başlayıp, rustc mesajlarını analiz ederek devam edeceğim. |
| Copilot ile hızlı prototipleme | İlk başta birkaç örnek kod oluşturarak fikir edinebilirim. | Basit cargo komutları kullanarak, ardından Copilot'un kodunu inceleyip anlamlandırmaya çalışacağım. |
| Ecosistem hakkında iyi bilgi sahibi olma (kütüphaneler, rust-lang forumları) | Harici kaynaklar olmadan Rust'ta ilerlemek zorlaşır. | Belirli bir Cargo alanında ayda 1-2 saat zaman ayıracağım. |
| Kendimi güvenli ve performanslı kod yazmada gelişmiş hissettirme | Gerçek dünyadaki Rust projeleri için temel. | Basit unsafe blokları ve bellek yönetimi uygulamaları kullanarak ilerleyeceğim. |
cargo --version kontrol edin).Pekala, sırada neler var? Bir sonraki bölümde, Copilot'u ve Rust için cargo projesi ayarlarını kullanarak birlikte ilk Rust çizgi projesini oluşturacağız. Hadi devam edelim! 🚀
Merhaba! 📦 Hazırsan başlayalım ve şu anda kullandığımız çalışma zamanının temel bilgilerine birlikte göz atalım.
Şu anda var olan ortam (yani "çalışma zamanı") genellikle JavaScript üzerinden çalışıyor ve Node.js altında bir araya geliyor. İşte kısa bir özet:
1️⃣ Node.js'yi indirin – resmi siteye gidin, kendi platformunuza uygun sürümü yükleyin veya nvm (Node Version Manager) ile yönetin.
2️⃣ Versiyonu kontrol edin – node -v ve npm -v ile hemen cevap alın.
3️⃣ Basit bir sunucu oluşturun – bir index.js dosyası açın ve basit bir HTTP sunucusu yazın:
const http = require('http');
const server = http.createServer((req, res) => {
res.end('Merhaba dünyaya!');
});
server.listen(3000, () => console.log('Sunucu 3000 portunda çalışıyor'));
Ve işte buradayız! 🎉 İsterseniz önce mevcut JavaScript çalışma zamanını gördünüz. Şimdi Copilot ile bunu Rust'a nasıl dönüştürebiliriz?
Rust ile başlamak 🎯 için Copilot'a şunu söyleyebilirsiniz:
/* JavaScript kodunu Rust karşılıklı bir versiyona çevir */
Copilot, Rust'a özgü tür sistemi (type system), gerekli use direktifleri, async runtime notları ve cargo.toml konfigürasyonunun tamamını bile oluşturacaktır.
Bu sayede ne oluyor? ✅ JavaScript'in çoklu platformlu çalışma zamanını, Rust'ın güvenli ve hızlı performansına dönüştürüyoruz – hem çoklu işletim sistemi dostu hem de binlerce saatlik çalışmayı kolaylaştırıyor.
Eğer hazırsan, şimdi tek satırlık bir notla Copilot'a şunu söyle:
“Şu kodı Rust'a çevir, tamam mı?”
Ve adımlar otomatik olarak oluşacak! 🚀
Keyifli kodlamalar!
Hadi pratik bir örnek üzerinden anlayalım. Bir ekip olarak Rust'a geçerken genellikle üç ana engelle karşılaşırız. Her birini anlayalım ve hemen pratik çözümler üretelim.
rustfmt ile biçimlendirin, ardından rust-analyzer'ın okuma modunu etkinleştirin ve Copilot'a özel rust kısıtlamaları hakkında geri bildirim verin (örneğin, // copilot-allow yorumları). Bu, Copilot'un Rust değerlerini gerçekten nasıl yazdığını öğrenmesine yardımcı olur.ownership) ve referanslama (borrowing) kavramları yeni başlayanlar için kafa karıştırıcı olabilir.Option<T> ve Result<T, E>'yi ref mut x ile birleştirme gibi özel Rust kalıplarını ekleyin. Her seferinde bir clippy kontrolü (cargo clippy) yaparak Copilot'a çoklu referanslardan kaçınma konusunda geri bildirim verin.RUSTUP_TOOLCHAIN=stable cargo build). Eğer sık sık küçük değişiklikler yapıyorsanız, cargo build --release yerine cargo check kullanarak hızlı geri bildirim alın. CI/CD'de derleme sürelerini izlemek için basit bir bash komutu kullanın:#!/usr/bin/env bash
# Derleme ve kontrol süresi ölçer
set -e
echo "=== Derleme zamanı ölçümü ==="
time cargo build --release
echo "=== Test sürümü ==="
time cargo test -- --nocapture
Bu sayede ne oluyor?
Hızlı hatırlatma: cargo fmt, cargo clippy ve cargo check araçlarını düzenli olarak kullanın. Bu üçlü, Copilot'un önerilerini Rust gerçekliğiyle destekler. İşte bir başlangıç için rust-analyzer ve Copilot'un birlikte çalışma ayarları:
# .vscode/settings.json örneği
{
"rust-analyzer.checkOnSave.enable": true,
"editor.formatOnSave": true,
"editor.codeLens.showReferences": true
}
Bu ayarlar ile zorlukları sorunsuz bir şekilde aşın. İyi kodlamalar! 🚀
Hazırsan başlayalım! 🎯 Örneğimizde, Python'da yazılmış basit bir yardımcı fonksiyon var. Bunu Rust'a çevirelim.
Python kodu
def gcd(a: int, b: int) -> int:
while b:
a, b = b, a % b
return a
Ne istiyoruz? Bu fonksiyonun tıpatıp aynı algoritmasını korurken, Rust'ın gücünü (tip güvenliği, sahiplik vb.) kullanarak yeniden yazılmasını istiyoruz. ❗️
Aşağıda, Copilot'a talimat vermenin adım adım bir yolunu göreceğiz. Her adımda Copilot'a verdiğimiz talimat ve ardından oluşturunurulan Rust kodunu göreceğiz. 🔁
Bununla Copilot'a algoritma ve beklentiler hakkında bir özet veriyoruz.
# Python'daki gcd fonksiyonunu Rust'a çevir
# - Fonksiyonun imzası fn gcd(a: i32, b: i32) -> i32 olmalı
# - Algoritma (while döngüsü ile Euclidean) aynı kalmalı
# - Rust tarzı kod üret (sahiplik, pattern matching vb.)
Şimdi spesifik imza gereksinimini ekliyoruz.
# Fonksiyonun imzası şu şekilde olmalı:
# pub fn gcd(a: i32, b: i32) -> i32 {
# // uygulama burada
# }
Neden önemli? Sahiplik ve visibility kuralları Rust'ın temel özelliğidir, Copilot'un bunu doğru üretebilmesi için açık talimat vermeliyiz. ✅
While döngüsünü ve değişken eşitlemesini Tanımlayalım.
# Algoritma şu şekilde olmalı:
# while b != 0 {
# let temp = b;
# b = a % b;
# a = temp;
# }
# a değerini geri döndür
Tüm kılavuzu bir arada verdiğimizde, Copilot'un artık daha az şüpheyle daha iyi kod üretebildiğini göreceğiz.
# Görev: Python'daki gcd fonksiyonunu Rust'a çevir
# Kurallar:
# 1. Fonksiyon imzası: pub fn gcd(a: i32, b: i32) -> i32
# 2. Algoritma: a ve b kullanarak Euclidean altyordamını uygulayın:
# while b != 0 {
# let temp = b;
# b = a % b;
# a = temp;
# }
# 3. a değerini geri döndürün
# Kod üretirken lütfen açıklama satırları ekleyin.
Sonuç (Oluşturulan Rust kodu)
pub fn gcd(mut a: i32, mut b: i32) -> i32 {
// Euclidean algoritması
while b != 0 {
let temp = b;
b = a % b;
a = temp;
}
a
}
Bu sayede ne oluyor? Fonksiyon, aynı mantığı takip ederken Rust'ın sahiplik modelini kullanıyor: değişkenler mut হতে olabilecekliği belirtiliyor ve tek bir döngü ile GÖRÜNÜMÜ aynı kalıyor. Algoritma artık Rust tarzında yazılmış durumda. 🛠
assert_eq!(gcd(48, 18), 6);let (mut a, mut b) = (a, b); pattern matching gerekmediği için belki geçersiz.Sonuç olarak, Copilot'a açık ve adım adım talimatlar vererek tamamen çalışır ve okunabilir bir Rust yardımcı fonksiyonu elde ettik. Artık daha büyük projeler için güvenle migrasyon adımlarını uygulamaya başlayabilirsin. 🚀
Sonuç olarak, iyi bir saha çalışması ve somut bir örnek verdik. 🎉
Hazırsan başlayalım 🚀. Bir Rust projesini hazırlamanın ötesine geçip, Cargo'nun güçlü özelliklerinden nasıl faydalanabileceğimizi ve Copilot'un bu süreçte nasıl bir rehber olabileceğini pratik bir örnek üzerinden anlayalım.
cargo new benim_projem
cd benim_projem
Böylece src/ dizini ve Cargo.toml dosyası otomatik olarak hazırlanmış olur. Copilot, cargo new komutu hakkında daha fazla bilgi isterseniz size derinlemesine açıklamalar sağlayabilir.
src/main.rs dosyasını açın. Copilot, bu kodu okuduktan sonra size hatasız bir başlangıç kodu, kullanışlı işlemler veya ünlü Rust crate'lerini eklemeniz için öneriler sunabilir.# Cargo.toml
[package]
name = "benim_projem"
version = "0.1.0"
edition = "2021"
cargo clean komutunu çalıştırın ve ardından cargo build komutu ile derleme sürecine başlayın.cargo build --release komutunu kullanın; bu, tüm optimizasyon düzeylerini etkinleştirir.rustup ile Rust sürümünü güncellemektarget.dir ayarını kullanarak CARGO_TARGET_DIR ortam değişkenini ayarlayarak istenmeyen derleme artefaklarını dışarıda tutmak#![deny(warnings)] tanımlayıcısını kullanarak derleme sırasında tüm uyarıları yakalamaksrc/main.rs dosyası:fn main() {
println!("Merhaba, Copilot!");
}
#[test] bloğu eklemesini söyleyin; böylece yazılan her kodun test edildiğinden emin olursunuz.Ne oluyor burada? 🛠️ Yeni bir Cargo projesi oluşturduktan, Copilot'un kodunuzu incelenmesine ve dokümantasyon önerileri sunmasına izin verdikten ve derleme optimizasyonlarını kullanıma aldıktan sonra, hem hızlı hem de hatasız bir Rust geliştirme ortamını hızlıca oluşturmuş oluyorsunuz. Copilot, sürekli olarak uyarılar verebilecek, en iyi uygulamaları önerip geliştirmeyi hızlandırabilecek sizin kişisel kod ortağınız olarak hizmet eder.
Haydi pratik bir derleme hatası örneği üzerinden anlayalım. Bu, çoğumuzun karşılaştığı tipik bir "property does not exist" hatası olsun. Nasıl panik yapmadan ilerleyebilir ve Copilot'tan yardım isteyebiliriz?
src/user.tsProperty 'emailVerified' does not exist on type 'UserProfile'./*
src/user.ts'deki şu hatayı çözüme kavuşturmama yardımcı olur musun?
Property 'emailVerified' does not exist on type 'UserProfile'.
Eğer UserProfile türünde emailVerified diye bir alan varsa alanın türünü düzelt, yoksa bu özelliği güvenli bir şekilde nasıl ekleyebileceğimi göster.
*/
Ne oluyor? ✅ Burada sana sadece derleyici mesajını verdim, Copilot ise hızlıca doğru çözümü öneriyor.
interface UserProfile {
id: number;
username: string;
// emailVerified özelliği eklendi
emailVerified?: boolean; // <‑‑ Copilot yeni alanı ekledi
}
const currentUser: UserProfile = {
id: 42,
username: "alice",
emailVerified: true // <‑‑ Kullanım
};
console.log(currentUser.emailVerified); // true
?: ile isteğe bağlı bir alan ekleyebilirsin.Özet: Bir derleme hatası çıktığında panik yapma. Hata mesajını anlamlı bir şekilde parçalara ayır, Copilot'a adım adım bir soru sor ve onun önerdiği düzeltmeleri uygulla. Bu sayede projen hızla yoluna geri dönecek. 🚀
Hazırsan başlayalım. Hadi pratik bir örnek üzerinden anlayalım. Birkaç hafta önce Rust ekibine katıldım ve ilk kez Copilot ile çalışırken anında geri bildirim, hızlı hata düzeltmeleri ve açık kaynaklı ipuçları elde ettim. Aşağıda bunları nasıl yaşadığımı ve bu avantajların benim için ne anlama geldiğini anlatacağım.
Derleme süresi: İlkRust projeme başladığımda cargo build her seferinde 30 saniyeden fazla sürüyordu. Copilot'un önerilen optimizasyonları ve önerilen #[inline] gibi önerileri sayesinde süreç %40'a kadar hızlandı. Derlemenin anında sonuç vermesi muhteşem bir his 🎉.
Kod oluşturma: Hızlı bir yardımcı fonksiyon (fact) yazmam gerektiğinde, IntelliSense tırnakları hemen dolduruluyor ve ben sadece kontrol edip belirli satırları ayarlayabiliyorum. Bu da bana daha az boş boş bakma ve daha fazla pratik yapma imkanı tanıyor.
Kullanım denetimi: unsafe Rust'ta biraz kontrol ihtiyacım olduğunda, Copilot otomatik olarak güvenli alternatifler öneriyor. Örneğin, unsafe { *ptr } önerisini görünce güvenli ptr.read() kullanmaya karar verdim. Böylece bellek hataları riski azaldı.
Eşleştirme kontrolleri: Çift yönlü kanal senaryosunda Copilot, : Option<> gibi güvenli bir tür belirtmemi hatırlattı. Şimdi işlemlerim daha güvenilir hale geldi ve beklenmedik paniklemeler daha az oluyor.
Hızlı problem çözme: Result türlerini kolayca zincirlemek konusunda yardım istediğimde, Copilot sadece öneri vermiyor; aynı zamanda kullanıcılar tarafından onaylanmış açık kaynaklı örnekler sunuyor. match yerine ? kullanmayı öğrendim ve günlük yönetimi konusunda topluluk tarafından onaylanmış anyhow kütüphanesini keşfettim.
Eğitim desteği: Herhangi bir Rust makalesini okuduktan sonra, Copilot genellikle ilgili kod parçacıklarını öneriyor ve kısa bir açıklama ekliyor. Bu da yeni kavramları öğrenmek yerine anlamaya odaklanabiliyor olmamı sağlıyor.
Aşağıda, bu avantajlardan bazılarını gösteren kısa bir Rust örneği veriyorum. Copilot'un önerdiği fact fonksiyonu, açık kaynaklı factorial kütüphanesinin nasıl kullanılacağı ve güvenli u128 aritmetiği gibi ipuçlarını görebilirsiniz.
use std::env;
fn main() {
// Komut satırından alınan sayı için faktöriyeli hesapla
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
println!("Kullanım: {} <n>", args[0]);
return;
}
let n: u128 = match args[1].parse() {
Ok(num) => num,
Err(_) => {
println!("Geçersiz sayı");
return;
}
};
let result = factorial(n);
println!("{}\ faktöriyeli = {}", n, result);
}
/// Faktöriyeli hesapla (basit iteratif yöntem)
fn factorial(n: u128) -> u128 {
(1..=n).product()
}
Bu sayede ne oluyor?
main fonksiyonunun yapısı hakkında yönlendirdi ve println! makrolarının doğru kullanımını gösterdi.u128 türünü kullanarak artık büyük sayılarla çalışabileceğimizi doğruladı.iterative veya product kullanımı) kodumun sadece çalışması değil, aynı zamanda temiz ve Rust tarzında olmasını sağladı.Rust'a Copilot ile geçiş yapmak, benim için sıradan bir terfi değil, performans, güvenilirlik ve işbirliğini özüne sokan bir geliştirme deneyimine dönüşüyor. 🚀
Hadi birlikte yeni bir proje oluşturalım ve bu avantajları birlikte keşfedelim!
Rust çalışma zamanını diğer servislerle (API'ler, veritabanları) bağlamaya başlamak 🎯 çok kolay — sadece doğru araçları yükleyip birkaç satır kod yazmamız yeterli.
reqwest ve tokio gibi kütüphaneleri ekleyelim.reqwest::Client ile bir HTTP istemcisi hazırlayalım.GET veya POST isteğini async bir fonksiyon içinde gönderelim.unwrap veya ? operatörleriyle hata akışını sağlayalım.Bunlar, çoğu uygulamada tekrarlanan temel aşamalar.
Aşağıda https://jsonplaceholder.typicode.com/posts/1 endpoint'ine GET isteği gönderen basit bir Rust programı var.
use reqwest;
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1️⃣ Client oluştur
let client = reqwest::Client::new();
// 2️⃣ İsteği gönder
let resp = client
.get("https://jsonplaceholder.typicode.com/posts/1")
.send()
.await?;
// 3️⃣ Durum kodunu kontrol et
if !resp.status().is_success() {
println!("❌ İstek başarısız: {}", resp.status());
return Ok(());
}
// 4️⃣ JSON yanıtını işle (basit bir türetme)
let text = resp.text().await?;
println!("✅ Yanıt: {}", text);
Ok(())
}
Bu sayede ne oluyor?
reqwest ile iletişim kurarak diğer servisleri Rust çalışma zamanına bağlarız.tokio sayesinde asenkron ve hafif bir istemci elde ederiz.reqwest ve tokio Cargo.toml'da var mı? ✅tokio::main ile async fn main() fonksiyonu mevcut mu? ✅? operatörlerini kullanıyor musunuz? ✅Artık Rust uygulamanız dış dünya ile güvenli bir şekilde iletişim kurabilir — API'ler, mesaj kuyrukları veya veritabanları üzerinden! 🛠🔁
Hadi pratik bir örnek üzerinden anlayalım. Copilot’un yakında kullanıma sunacağı yeni özellikleri keşfedip, açık kaynak topluluğundan nasıl faydalanabileceğimizi konuşalım.
copilot-examples deposundan ilham al.#copilot-contrib kanalına katılın ve bir PR oluşturun.Sonuç: Copilot’un geliştirmekte olduğu özellikleri erken deneyimlemek, hem iş akışınızı hızlandıracak hem de açık kaynak topluluğunun dinamizmi ile birlikte büyümeyi sağlayacak. 🚢
Neden?
Rust öğrenmeye devam etmek neden değerli?
Copilot'a güvenerek geçiş yapmak:
#![deny(warnings)], güvenli türleri vb.) kullanmaya başla.Son bir motivasyon: Zamanında başlamadığımız için geç kalmış hissediyoruz, ama aslında biz yazılım dünyasındaki emin elbiseyiz. Copilot sayesinde, dili öğrenmek süprizlerle dolu, düşündürücü bir yolculuğa dönüştür. Her yeni örnekle birlikte güvenini artıracaksın ve nihayetinde Rust odaklı projelerde para kazanmaya başlayacaksın.
Haydi Rust hikayesine devam edelim, bir sonraki güvenli, hızlı örnekle birlikte! ✨
Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.
All rights reserved