Comprehensive Rust'a Hoş Geldiniz 🦀
1.
Kursun Çalıştırılması
❱
1.1.
Kurs Yapısı
1.2.
Klavye Kısayolları
1.3.
Çeviriler
2.
Cargo'yu Kullanmak
❱
2.1.
Rust Ekosistemi
2.2.
Kod Örnekleri
2.3.
Cargo'nun Yerel (Local) Olarak Çalıştırılması
Gün 1: Sabah
3.
Hoş Geldiniz
4.
Merhaba, Dünya
❱
4.1.
Rust Nedir?
4.2.
Rust'ın Faydaları
4.3.
Deneme Alanı (Playground)
5.
Türler ve Değerler
❱
5.1.
Merhaba, Dünya
5.2.
Değişkenler
5.3.
Değerler
5.4.
Aritmetik
5.5.
Tür Çıkarımı
5.6.
Alıştırma: Fibonacci
❱
5.6.1.
Çözüm
6.
Kontrol Akışı Temelleri
❱
6.1.
if İfadeleri
6.2.
Döngüler
❱
6.2.1.
for
6.2.2.
loop
6.3.
break ve continue
❱
6.3.1.
Etiketler
6.4.
Bloklar ve Kapsamlar
❱
6.4.1.
Kapsamlar (Scopes) ve Gölgeleme (Shadowing)
6.5.
Fonksiyonlar
6.6.
Makrolar
6.7.
Alıştırma: Collatz Sekansı
❱
6.7.1.
Çözüm
Gün 1: Öğleden Sonra
7.
Hoş Geldiniz
8.
Demetler (Tuples) ve Diziler (Arrays)
❱
8.1.
Diziler
8.2.
Demetler
8.3.
Dizi Adımlama (Iteration)
8.4.
Desenler ve Çözümlenme (Destructuring)
8.5.
Alıştırma: İçiçe Diziler
❱
8.5.1.
Çözüm
9.
Referanslar
❱
9.1.
Paylaşılan Referanslar
9.2.
Özel (Exclusive) Referanslar
9.3.
Dilimler (Slices)
9.4.
Dizeler (Strings)
9.5.
Alıştırma: Geometri
❱
9.5.1.
Çözüm
10.
Kullanıcı Tanımlı Türler
❱
10.1.
İsimli Yapılar
10.2.
Demet Yapıları (Tuple Structs)
10.3.
Enumlar
10.4.
Const
10.5.
Static
10.6.
Tür Eş İsimleri (Type Aliases)
10.7.
Alıştırma: Asansör Olayları
❱
10.7.1.
Çözüm
Gün 2: Sabah
11.
Hoş Geldiniz
12.
Desen Eşleştirme
❱
12.1.
Değerleri Eşleştirmek
12.2.
Yapıların (Struct) Çözümlenmesi
12.3.
Enum'ların (Struct) Çözümlenmesi
12.4.
Let'li Kontrol Akışı
12.5.
Alıştırma: İfade Değerlendirmesi
❱
12.5.1.
Çözüm
13.
Metotlar ve Özellikler (Traits)
❱
13.1.
Metotlar
13.2.
Özellikler (Traits)
❱
13.2.1.
Özelliklerin (Traits) Gerçekleştirimi
13.2.2.
Üstözellikler (Supertraits)
13.2.3.
İlişkili Türler
13.3.
Türetme
13.4.
Alıştırma: Genel Kaydedici
❱
13.4.1.
Çözüm
Gün 2: Öğleden Sonra
14.
Hoş Geldiniz
15.
Jenerikler
❱
15.1.
Jenerik Fonksiyonlar
15.2.
Jenerik Veri Türleri
15.3.
Jenerik Özellikler (Traits)
15.4.
Özellik (Trait) Sınırları
15.5.
impl Trait
15.6.
dyn Trait
15.7.
Alıştırma: Jenerik min
❱
15.7.1.
Çözüm
16.
Standart Kütüphane Türleri
❱
16.1.
Standart Kütüphane
16.2.
Dokümantasyon
16.3.
Option
16.4.
Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
Alıştırma: Sayıcı
❱
16.8.1.
Çözüm
17.
Standart Kütüphanedeki Özellikler (Traits)
❱
17.1.
Karşılaştırmalar
17.2.
Operatörler
17.3.
From ve Into
17.4.
Tür Çevirimi
17.5.
Read ve Write
17.6.
Default, yapı (struct) güncelleme sözdizimi
17.7.
Çevreleyiciler (Closures)
17.8.
Alıştırma: ROT13
❱
17.8.1.
Çözüm
Gün 3: Sabah
18.
Hoş Geldiniz
19.
Bellek Yönetimi
❱
19.1.
Program Belleğinin Gözden Geçirilmesi
19.2.
Bellek Yönetimine Yaklaşımlar
19.3.
Sahiplik
19.4.
Taşıma Semantiği
19.5.
Clone
19.6.
Kopyalanan Türler
19.7.
Drop
19.8.
Alıştırma: İnşa Edici / Yapıcı Tür (Builder Type)
❱
19.8.1.
Çözüm
20.
Akıllı Göstericiler
❱
20.1.
Box<T>
20.2.
Rc
20.3.
Sahipli Özellik Nesneleri (Owned Trait Objects)
20.4.
Alıştırma: İkili Ağaç
❱
20.4.1.
Çözüm
Gün 3: Öğleden Sonra
21.
Hoş Geldiniz
22.
Ödünç Alma
❱
22.1.
Bir Değeri Ödünç Alma
22.2.
Ödünç Alma Kontrolü
22.3.
Ödünç Alma Hataları
22.4.
İç Değişebilirlik (Interior Mutability)
22.5.
Alıştırma: Sağlık İstatistikleri
❱
22.5.1.
Çözüm
23.
Ömürler (Lifetimes)
❱
23.1.
Ömür için Ek Açıklamalar (Annotations)
23.2.
Ömür Atlaması (Elision)
23.3.
Yapıların Ömürleri
23.4.
Alıştırma: Protobuf Ayrıştırma
❱
23.4.1.
Çözüm
Gün 4: Sabah
24.
Hoş Geldiniz
25.
Adımlayıcılar (Iterators)
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
Alıştırma: Adımlayıcı Metot Zincirleme
❱
25.4.1.
Çözüm
26.
Modüller
❱
26.1.
Modüller
26.2.
Dosya Sistemi Hiyerarşisi
26.3.
Görünürlük
26.4.
use, super, self
26.5.
Alıştırma: Bir GUI Kütüphanesi için Modüller
❱
26.5.1.
Çözüm
27.
Test Etme
❱
27.1.
Test Modülleri
27.2.
Diğer Test Türleri
27.3.
Derleyici Tüyleri (Lint) ve Clippy Aracı
27.4.
Alıştırma: Luhn Algrotiması
❱
27.4.1.
Çözüm
Gün 4: Öğleden Sonra
28.
Hoş Geldiniz
29.
Hata İşleme
❱
29.1.
Panic'ler
29.2.
Result
29.3.
Try Operatörü
29.4.
Try Dönüşümleri
29.5.
Error Özelliği (Trait)
29.6.
thiserror
29.7.
anyhow
29.8.
Alıştırma: Result ile Yeniden Yazma
❱
29.8.1.
Çözüm
30.
Emniyetsiz (Unsafe) Rust
❱
30.1.
Emniyetsiz
30.2.
Ham Göstericilerinin İçeriği (Dereferencing)
30.3.
Değişebilir Statik Değişkenler
30.4.
Birlikler (Unions)
30.5.
Emniyetsiz Fonksiyonlar
30.6.
Emniyetsiz Özellikler (Traits)
30.7.
Alıştırma: FFI Sarmalayıcı
❱
30.7.1.
Çözüm
Android
31.
Hoş Geldiniz
32.
Kurulum (Setup)
33.
İnşa (Build) Kuralları
❱
33.1.
İkili (Binary) Dosya
33.2.
Kütüphane
34.
AIDL
❱
34.1.
Doğum Günü Servisi Eğitimi
❱
34.1.1.
Arayüz
34.1.2.
Servis API
34.1.3.
Servis
34.1.4.
Sunucu
34.1.5.
Dağıtmak (Deploy)
34.1.6.
İstemci
34.1.7.
API'yi Değiştirme
34.1.8.
Uyarlamaları Güncellenme
34.2.
AIDL Türler
❱
34.2.1.
İlkel (Primitive) Türler
34.2.2.
Dizi Türleri
34.2.3.
Nesnelerin Gönderilmesi
34.2.4.
Parsellenebilir Gönderme
34.2.5.
Dosyaların Gönderilmesi
35.
Test Etme
❱
35.1.
GoogleTest
35.2.
Taklit Etme (Mocking)
36.
Kayıt Tutma (Logging)
37.
Birlikte Çalışabilirlik
❱
37.1.
C ile
❱
37.1.1.
Bindgen ile Rust Tarafından C'yi Kullanma
37.1.2.
C Tarafından Rust'ı Kullanma
37.2.
C++ ile
❱
37.2.1.
Köprü Modülü
37.2.2.
Rust Köprüsü
37.2.3.
Oluşturulan (Generated) C++
37.2.4.
C++ Köprüsü
37.2.5.
Paylaşılan (Shared) Türler
37.2.6.
Paylaşılan (Shared) Enum'lar
37.2.7.
Rust Hata İşleme
37.2.8.
C++ Hata İşleme
37.2.9.
Ek Türler
37.2.10.
Android için inşa: C++
37.2.11.
Android için inşa: Genrules
37.2.12.
Android için inşa: Rust
37.3.
Java ile
Chromium
38.
Hoş Geldiniz
39.
Kurulum (Setup)
40.
Chromium ve Cargo Ekosistemlerinin Karşılaştırılması
41.
İlke (Policy)
42.
İnşa (Build) Kuralları
❱
42.1.
Emniyetsiz (Unsafe) Kod
42.2.
Chromium C++'dan Rust Koduna Bağımlılık
42.3.
Visual Studio Code
42.4.
Alıştırma
43.
Test Etme
❱
43.1.
rust_gtest_interop Kütüphanesi
43.2.
Rust Testleri için GN Kuralları
43.3.
chromium::import! Makrosu
43.4.
Alıştırma
44.
C++ ile Birlikte Çalışabilirlik
❱
44.1.
Bağlamalara Örnek
44.2.
CXX'in Sınırlamaları
44.3.
CXX Hata İşleme
❱
44.3.1.
Hata İşleme: QR Örneği
44.3.2.
Hata İşleme: PNG Örneği
44.4.
Chromium'da CXX'i Kullanma
44.5.
Alıştırma
45.
Üçüncü Taraf Kasalarnı Eklenmesi
❱
45.1.
Cargo.toml'yi Yapılandırma
45.2.
gnrt_config.toml'yi Yapılandırma
45.3.
Kasaların İndirilmesi
45.4.
gn İnşa Kurallarının Oluşturulması
45.5.
Problemlerin Çözülmesi
❱
45.5.1.
Kod Oluşturan İnşa Betikleri (Build Scripts )
45.5.2.
C++ Kodunu İnşa Eden (Build) veya Keyfi Eylemler Gerçekleştiren İnşa Betikleri
45.6.
Bir Kasaya Bağımlılık
45.7.
Gözden Geçirmeler (Reviews) ve Denetimler (Audits)
45.8.
Chromium Kaynak Kodunun Kontrol Edilmesi
45.9.
Kasaları Güncel Tutmak
45.10.
Alıştırma
46.
Bir Araya Getirmek - Alıştırma
47.
Alıştırma Çözümleri
Yalın Sistem (Bare Metal): Sabah
48.
Hoş Geldiniz
49.
no_std
❱
49.1.
Minimal Bir Örnek
49.2.
alloc
50.
Mikrodenetleyiciler
❱
50.1.
Ham MMIO
50.2.
PAC'ler
50.3.
HAL Kasaları (Crates)
50.4.
Kart Destek Kasaları (Board Support Crates)
50.5.
Tür Durum Deseni
50.6.
embedded-hal
50.7.
probe-rs ve cargo-embed
❱
50.7.1.
Hata Ayıklama
50.8.
Diğer Projeler
51.
Alıştırmalar
❱
51.1.
Pusula
51.2.
Çözümler
Yalın Sistem (Bare Metal): Öğleden Sonra
52.
Uygulama İşlemcileri
❱
52.1.
Rust'a Hazırlanmak
52.2.
Satır İçi Assembly
52.3.
MMIO
52.4.
Bir UART Sürücü Yazalım
❱
52.4.1.
Daha Fazla Özellik (Trait)
52.5.
Daha İyi Bir UART Sürücüsü
❱
52.5.1.
Bitflags Kasası
52.5.2.
Çoklu Yazmaçlar (Registers)
52.5.3.
Sürücü
52.5.4.
Onu Kullan
52.6.
Kayıt Tutma (Logging)
❱
52.6.1.
Onu Kullan
52.7.
İstisnalar
52.8.
Diğer Projeler
53.
Kullanışlı Kasalar (Crates)
❱
53.1.
zerocopy
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
spin
54.
Android'de Yalın Sistem (Bare Metal)
❱
54.1.
vmbase
55.
Alıştırmalar
❱
55.1.
RTC Sürücüsü
55.2.
Çözümler
Eşzamanlılık: Sabah
56.
Hoş Geldiniz
57.
İş Parçacıkları (Threads)
❱
57.1.
Temel İş Parçacıkları (Plain Threads)
57.2.
Kapsamlı İş Parçacıkları (Threads)
58.
Kanallar
❱
58.1.
Vericiler ve Alıcılar
58.2.
Sınırsız Kanallar
58.3.
Sınırlı Kanallar
59.
Send ve Sync
❱
59.1.
Marker Özellikleri (Traits)
59.2.
Send
59.3.
Sync
59.4.
Örnekler
60.
Paylaşımlı Durum (State)
❱
60.1.
Arc
60.2.
Mutex
60.3.
Örnek
61.
Alıştırmalar
❱
61.1.
Filozofların Akşam Yemeği
61.2.
Çok İş Parçacıklı Link Denetleyicisi
61.3.
Çözümler
Eşzamanlılık: Öğleden Sonra
62.
Hoş Geldiniz
63.
Async Temelleri
❱
63.1.
async/await
63.2.
Future Özellikleri (Traits)
63.3.
Çalışma Zamanları
❱
63.3.1.
Tokio Kasası
63.4.
Görevler
64.
Kanallar ve Kontrol Akışı
❱
64.1.
Async Kanalları
64.2.
Join
64.3.
Select
65.
Tuzaklar
❱
65.1.
Yürütücünün/Çalıştırıcının (Executor) Engellenmesi
65.2.
Pin
65.3.
Async Özellikleri (Traits)
65.4.
İptal (Cancellation)
66.
Alıştırmalar
❱
66.1.
Filozofların Akşam Yemeği
66.2.
Yayımlamalı Sohbet Uygulaması
66.3.
Çözümler
Son sözler
67.
Teşekkürler!
68.
Sözlük
69.
Diğer Kaynaklar
70.
Emekler
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Turkish (Türkçe)
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Japanese (日本語)
Korean (한국어)
Farsi (فارسی)
Spanish (Español)
Ukrainian (українська)
Alıştırma Çözümleri
Solutions to the Chromium exercises can be found in
this series of CLs
.