diff --git a/po/tr.po b/po/tr.po index c58f8fa7ed6..e55e8c77cbf 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Comprehensive Rust 🦀\n" -"POT-Creation-Date: 2024-01-24T13:24:49+01:00\n" -"PO-Revision-Date: 2023-10-27 14:20+0300\n" +"POT-Creation-Date: 2024-03-03T14:32:49+03:00\n" +"PO-Revision-Date: 2024-03-03 16:36+0300\n" "Last-Translator: akerem@protonmail.com\n" "Language-Team: Turkish \n" "Language: tr\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #: src/SUMMARY.md src/index.md msgid "Welcome to Comprehensive Rust 🦀" @@ -56,10 +56,9 @@ msgstr "Gün 1: Sabah" msgid "Welcome" msgstr "Hoşgeldiniz" -#: src/SUMMARY.md src/hello-world.md src/hello-world/hello-world.md -#, fuzzy +#: src/SUMMARY.md src/hello-world.md src/types-and-values/hello-world.md msgid "Hello, World" -msgstr "Merhaba Dünya!" +msgstr "Merhaba, Dünya" #: src/SUMMARY.md src/hello-world/what-is-rust.md msgid "What is Rust?" @@ -67,15 +66,15 @@ msgstr "Rust Nedir?" #: src/SUMMARY.md src/hello-world/benefits.md msgid "Benefits of Rust" -msgstr "" +msgstr "Rust'ın Faydaları" #: src/SUMMARY.md src/hello-world/playground.md msgid "Playground" -msgstr "" +msgstr "Deneme Alanı (Playground)" #: src/SUMMARY.md src/types-and-values.md msgid "Types and Values" -msgstr "" +msgstr "Türler ve Değerler" #: src/SUMMARY.md src/types-and-values/variables.md msgid "Variables" @@ -83,15 +82,15 @@ msgstr "Değişkenler" #: src/SUMMARY.md src/types-and-values/values.md msgid "Values" -msgstr "" +msgstr "Değerler" #: src/SUMMARY.md src/types-and-values/arithmetic.md msgid "Arithmetic" -msgstr "" +msgstr "Aritmetik" #: src/SUMMARY.md src/types-and-values/strings.md msgid "Strings" -msgstr "" +msgstr "Dizeler (Strings)" #: src/SUMMARY.md src/types-and-values/inference.md msgid "Type Inference" @@ -99,7 +98,7 @@ msgstr "Tür Çıkarımı" #: src/SUMMARY.md src/types-and-values/exercise.md msgid "Exercise: Fibonacci" -msgstr "" +msgstr "Alıştırma: Fibonacci" #: src/SUMMARY.md src/types-and-values/solution.md #: src/control-flow-basics/solution.md src/tuples-and-arrays/solution.md @@ -111,30 +110,44 @@ msgstr "" #: src/slices-and-lifetimes/solution.md src/iterators/solution.md #: src/modules/solution.md src/testing/solution.md #: src/error-handling/solution.md src/unsafe-rust/solution.md -#, fuzzy msgid "Solution" -msgstr "Çözümler" +msgstr "Çözüm" #: src/SUMMARY.md src/control-flow-basics.md -#, fuzzy msgid "Control Flow Basics" -msgstr "Kontrol Akışı" +msgstr "Kontrol Akışı Temelleri" -#: src/SUMMARY.md src/control-flow-basics/conditionals.md -msgid "Conditionals" -msgstr "" +#: src/SUMMARY.md +msgid "`if` Expressions" +msgstr "`if` İfadeleri" #: src/SUMMARY.md src/control-flow-basics/loops.md msgid "Loops" -msgstr "" +msgstr "Döngüler" + +#: src/SUMMARY.md src/control-flow-basics/loops/for.md +msgid "`for`" +msgstr "`for`" + +#: src/SUMMARY.md src/control-flow-basics/loops/loop.md +msgid "`loop`" +msgstr "`loop`" #: src/SUMMARY.md src/control-flow-basics/break-continue.md msgid "`break` and `continue`" -msgstr "" +msgstr "`break` ve `continue`" + +#: src/SUMMARY.md src/control-flow-basics/break-continue/labels.md +msgid "Labels" +msgstr "Etiketler" #: src/SUMMARY.md src/control-flow-basics/blocks-and-scopes.md msgid "Blocks and Scopes" -msgstr "" +msgstr "Bloklar ve Kapsamlar" + +#: src/SUMMARY.md src/control-flow-basics/blocks-and-scopes/scopes.md +msgid "Scopes and Shadowing" +msgstr "Kapsamlar (Scopes) ve Gölgeleme (Shadowing)" #: src/SUMMARY.md src/control-flow-basics/functions.md msgid "Functions" @@ -142,11 +155,11 @@ msgstr "Fonksiyonlar" #: src/SUMMARY.md src/control-flow-basics/macros.md msgid "Macros" -msgstr "" +msgstr "Makrolar" #: src/SUMMARY.md src/control-flow-basics/exercise.md msgid "Exercise: Collatz Sequence" -msgstr "" +msgstr "Alıştırma: Collatz Sekansı" #: src/SUMMARY.md msgid "Day 1: Afternoon" @@ -155,57 +168,47 @@ msgstr "Gün 1: Öğleden Sonra" #: src/SUMMARY.md src/tuples-and-arrays.md #: src/tuples-and-arrays/tuples-and-arrays.md msgid "Tuples and Arrays" -msgstr "" +msgstr "Demetler and Diziler" #: src/SUMMARY.md src/tuples-and-arrays/iteration.md -#, fuzzy msgid "Array Iteration" -msgstr "Iterator" - -#: src/SUMMARY.md src/tuples-and-arrays/match.md src/pattern-matching.md -msgid "Pattern Matching" -msgstr "Desen Eşleştirme" +msgstr "Dizi İterasyonu" #: src/SUMMARY.md src/tuples-and-arrays/destructuring.md -#: src/pattern-matching/destructuring.md -#, fuzzy -msgid "Destructuring" -msgstr "Enumların Çözümlenmesi" +msgid "Patterns and Destructuring" +msgstr "Desenler ve Çözümlenme (Destructuring)" #: src/SUMMARY.md src/tuples-and-arrays/exercise.md msgid "Exercise: Nested Arrays" -msgstr "" +msgstr "Alıştırma: İçiçe Diziler" #: src/SUMMARY.md src/references.md msgid "References" msgstr "Referanslar" #: src/SUMMARY.md src/references/shared.md -#, fuzzy msgid "Shared References" -msgstr "Referanslar" +msgstr "Paylaşılan Referanslar" #: src/SUMMARY.md src/references/exclusive.md -#, fuzzy msgid "Exclusive References" -msgstr "Geçersiz (Dangling) Referanslar" +msgstr "Özel Referanslar" #: src/SUMMARY.md src/references/exercise.md msgid "Exercise: Geometry" -msgstr "" +msgstr "Alıştırma: Geometri" #: src/SUMMARY.md src/user-defined-types.md msgid "User-Defined Types" -msgstr "" +msgstr "Kullanıcı Tanımlı Türler" #: src/SUMMARY.md src/user-defined-types/named-structs.md -#, fuzzy msgid "Named Structs" -msgstr "Yapılar (Structs)" +msgstr "İsimli Yapılar" #: src/SUMMARY.md src/user-defined-types/tuple-structs.md msgid "Tuple Structs" -msgstr "Tuple Yapıları (Tuple Structs)" +msgstr "Demet Yapıları (Tuple Structs)" #: src/SUMMARY.md src/user-defined-types/enums.md #: src/pattern-matching/destructuring.md @@ -213,35 +216,44 @@ msgid "Enums" msgstr "Enumlar" #: src/SUMMARY.md src/user-defined-types/static-and-const.md -#, fuzzy msgid "Static and Const" -msgstr "static & const" +msgstr "Static ve Const" #: src/SUMMARY.md src/user-defined-types/aliases.md msgid "Type Aliases" -msgstr "" +msgstr "Tür Eş İsimleri (Type Aliases)" #: src/SUMMARY.md src/user-defined-types/exercise.md msgid "Exercise: Elevator Events" -msgstr "" +msgstr "Alıştırma: Asansör Etkinlikleri" #: src/SUMMARY.md msgid "Day 2: Morning" msgstr "Gün 2: Sabah" +#: src/SUMMARY.md src/pattern-matching.md +msgid "Pattern Matching" +msgstr "Desen Eşleştirme" + +#: src/SUMMARY.md src/pattern-matching/match.md +msgid "Matching Values" +msgstr "Değerleri Eşleştirme" + +#: src/SUMMARY.md src/pattern-matching/destructuring.md +msgid "Destructuring" +msgstr "Çözümlenme" + #: src/SUMMARY.md src/pattern-matching/let-control-flow.md -#, fuzzy msgid "Let Control Flow" -msgstr "Kontrol Akışı" +msgstr "Let'li Kontrol Akışı" #: src/SUMMARY.md src/pattern-matching/exercise.md msgid "Exercise: Expression Evaluation" -msgstr "" +msgstr "Alıştırma: İfade Değerlendirmesi" #: src/SUMMARY.md src/methods-and-traits.md -#, fuzzy msgid "Methods and Traits" -msgstr "Read ve Write" +msgstr "Metotlar ve Özellikler (Traits)" #: src/SUMMARY.md src/methods-and-traits/methods.md msgid "Methods" @@ -251,27 +263,29 @@ msgstr "Metotlar" msgid "Traits" msgstr "Özellikler (Traits)" +#: src/SUMMARY.md +msgid "Implmementing Traits" +msgstr "Özelliklerin (Traits) Gerçekleştirilmesi" + +#: src/SUMMARY.md src/methods-and-traits/traits/associated-types.md +msgid "Associated Types" +msgstr "İlişkili Türler" + #: src/SUMMARY.md src/methods-and-traits/deriving.md -#, fuzzy msgid "Deriving" -msgstr "Türetilebilir Özellikler (Traits)" - -#: src/SUMMARY.md src/methods-and-traits/trait-objects.md -msgid "Trait Objects" -msgstr "Özellik Nesneleri" +msgstr "Türetme" #: src/SUMMARY.md src/methods-and-traits/exercise.md msgid "Exercise: Generic Logger" -msgstr "" +msgstr "Alıştırma: Genel Kaydedici" #: src/SUMMARY.md src/generics.md msgid "Generics" msgstr "Jenerikler" #: src/SUMMARY.md src/generics/generic-functions.md -#, fuzzy msgid "Generic Functions" -msgstr "Dış Bağlantıya Sahip Fonksiyonlar" +msgstr "Jenerik Fonksiyonlar" #: src/SUMMARY.md src/generics/generic-data.md msgid "Generic Data Types" @@ -283,95 +297,88 @@ msgstr "Özellik (Trait) Sınırları" #: src/SUMMARY.md src/generics/impl-trait.md msgid "`impl Trait`" -msgstr "" +msgstr "`impl Trait`" #: src/SUMMARY.md src/generics/exercise.md msgid "Exercise: Generic `min`" -msgstr "" +msgstr "Alıştırma: Jenerik `min`" #: src/SUMMARY.md msgid "Day 2: Afternoon" msgstr "Gün 2: Öğleden Sonra" #: src/SUMMARY.md src/std-types.md -#, fuzzy msgid "Standard Library Types" -msgstr "Standart Kütüphane" +msgstr "Standart Kütüphane Türleri" #: src/SUMMARY.md src/std-types/std.md msgid "Standard Library" msgstr "Standart Kütüphane" #: src/SUMMARY.md src/std-types/docs.md -#, fuzzy msgid "Documentation" -msgstr "Dokümantasyon Testleri" +msgstr "Dokümantasyon" #: src/SUMMARY.md msgid "`Option`" -msgstr "" +msgstr "`Option`" #: src/SUMMARY.md msgid "`Result`" -msgstr "" +msgstr "`Result`" -#: src/SUMMARY.md src/android/interoperability/cpp/type-mapping.md -#, fuzzy +#: src/SUMMARY.md src/android/aidl/types/primitives.md +#: src/android/interoperability/cpp/type-mapping.md msgid "`String`" -msgstr "String" +msgstr "`String`" #: src/SUMMARY.md src/std-types/vec.md msgid "`Vec`" -msgstr "" +msgstr "`Vec`" #: src/SUMMARY.md src/std-types/hashmap.md src/bare-metal/no_std.md msgid "`HashMap`" -msgstr "" +msgstr "`HashMap`" #: src/SUMMARY.md src/std-types/exercise.md -#, fuzzy msgid "Exercise: Counter" -msgstr "Egzersizler" +msgstr "Alıştırma: Sayıcı" #: src/SUMMARY.md src/std-traits.md -#, fuzzy msgid "Standard Library Traits" -msgstr "Standart Kütüphane" +msgstr "Standart Kütüphanedeki Özellikler (Traits)" #: src/SUMMARY.md src/std-traits/comparisons.md src/async.md msgid "Comparisons" -msgstr "" +msgstr "Karşılaştırmalar" #: src/SUMMARY.md src/std-traits/operators.md -#, fuzzy msgid "Operators" -msgstr "Iterator" +msgstr "Operatörler" #: src/SUMMARY.md src/std-traits/from-and-into.md msgid "`From` and `Into`" -msgstr "" +msgstr "`From` ve `Into`" #: src/SUMMARY.md src/std-traits/casting.md -#, fuzzy msgid "Casting" -msgstr "Test Etme" +msgstr "Casting" #: src/SUMMARY.md src/std-traits/read-and-write.md msgid "`Read` and `Write`" -msgstr "" +msgstr "`Read` ve `Write`" #: src/SUMMARY.md msgid "`Default`, struct update syntax" -msgstr "" +msgstr "`Default`, yapı (struct) güncelleme sözdizimi" #: src/SUMMARY.md src/std-traits/closures.md msgid "Closures" -msgstr "" +msgstr "Kapanışlar (Closures)" #: src/SUMMARY.md src/std-traits/exercise.md -#, fuzzy msgid "Exercise: ROT13" -msgstr "Egzersizler" +msgstr "Alıştırma: ROT13" #: src/SUMMARY.md msgid "Day 3: Morning" @@ -383,12 +390,11 @@ msgstr "Bellek Yönetimi" #: src/SUMMARY.md src/memory-management/review.md msgid "Review of Program Memory" -msgstr "" +msgstr "Program Belleğinin Gözden Geçirilmesi" #: src/SUMMARY.md src/memory-management/approaches.md -#, fuzzy msgid "Approaches to Memory Management" -msgstr "Rust Bellek Yönetimi" +msgstr "Bellek Yönetimine Yaklaşımlar" #: src/SUMMARY.md src/memory-management/ownership.md msgid "Ownership" @@ -400,17 +406,15 @@ msgstr "Taşıma Semantiği" #: src/SUMMARY.md msgid "`Clone`" -msgstr "" +msgstr "`Clone`" #: src/SUMMARY.md src/memory-management/copy-types.md -#, fuzzy msgid "Copy Types" -msgstr "Bileşik Türler" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "`Drop`" -msgstr "Drop" +msgstr "`Drop`" #: src/SUMMARY.md src/memory-management/exercise.md msgid "Exercise: Builder Type" @@ -423,15 +427,19 @@ msgstr "" #: src/SUMMARY.md src/smart-pointers/box.md #: src/android/interoperability/cpp/type-mapping.md msgid "`Box`" -msgstr "" +msgstr "`Box`" #: src/SUMMARY.md src/smart-pointers/rc.md msgid "`Rc`" -msgstr "" +msgstr "`Rc`" + +#: src/SUMMARY.md src/smart-pointers/trait-objects.md +msgid "Trait Objects" +msgstr "Özellik Nesneleri" #: src/SUMMARY.md src/smart-pointers/exercise.md msgid "Exercise: Binary Tree" -msgstr "" +msgstr "Alıştırma: İkili Ağaç" #: src/SUMMARY.md msgid "Day 3: Afternoon" @@ -442,80 +450,68 @@ msgid "Borrowing" msgstr "Ödünç Alma" #: src/SUMMARY.md src/borrowing/shared.md -#, fuzzy msgid "Borrowing a Value" -msgstr "Ödünç Alma" +msgstr "Bir Değeri Ödünç Alma" #: src/SUMMARY.md src/borrowing/borrowck.md -#, fuzzy msgid "Borrow Checking" -msgstr "Ödünç Alma" +msgstr "Ödünç Kontrolü" #: src/SUMMARY.md src/borrowing/interior-mutability.md -#, fuzzy msgid "Interior Mutability" -msgstr "Birlikte Çalışabilirlik" +msgstr "" #: src/SUMMARY.md src/borrowing/exercise.md -#, fuzzy msgid "Exercise: Health Statistics" -msgstr "Sağlık İstatistikleri" +msgstr "Alıştırma: Sağlık İstatistikleri" #: src/SUMMARY.md src/slices-and-lifetimes.md -#, fuzzy msgid "Slices and Lifetimes" -msgstr "Ömürler" +msgstr "Dilimler ve Ömürler" #: src/SUMMARY.md -#, fuzzy msgid "Slices: `&[T]`" -msgstr "Dilimler (Slices)" +msgstr "Dilimler: `&[T]`" #: src/SUMMARY.md src/slices-and-lifetimes/str.md -#, fuzzy msgid "String References" -msgstr "Geçersiz (Dangling) Referanslar" +msgstr "" #: src/SUMMARY.md src/slices-and-lifetimes/lifetime-annotations.md -#, fuzzy msgid "Lifetime Annotations" -msgstr "Fonksiyon Çağrılarında Ömürler" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Lifetime Elision" -msgstr "Ömürler" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Struct Lifetimes" -msgstr "Ömürler" +msgstr "Yapıların Ömürleri" #: src/SUMMARY.md src/slices-and-lifetimes/exercise.md msgid "Exercise: Protobuf Parsing" msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Day 4: Morning" -msgstr "Gün 1: Sabah" +msgstr "Gün 4: Sabah" #: src/SUMMARY.md src/iterators.md msgid "Iterators" -msgstr "" +msgstr "İteratörler" #: src/SUMMARY.md src/iterators/iterator.md src/bare-metal/no_std.md msgid "`Iterator`" -msgstr "" +msgstr "`Iterator`" #: src/SUMMARY.md src/iterators/intoiterator.md msgid "`IntoIterator`" -msgstr "" +msgstr "`IntoIterator`" #: src/SUMMARY.md -#, fuzzy msgid "`FromIterator`" -msgstr "FromIterator" +msgstr "`FromIterator`" #: src/SUMMARY.md src/iterators/exercise.md msgid "Exercise: Iterator Method Chaining" @@ -535,7 +531,7 @@ msgstr "Görünürlük" #: src/SUMMARY.md msgid "`use`, `super`, `self`" -msgstr "" +msgstr "`use`, `super`, `self`" #: src/SUMMARY.md src/modules/exercise.md msgid "Exercise: Modules for a GUI Library" @@ -550,9 +546,8 @@ msgid "Test Modules" msgstr "Test Modülleri" #: src/SUMMARY.md src/testing/other.md -#, fuzzy msgid "Other Types of Tests" -msgstr "Diğer Kaynaklar" +msgstr "" #: src/SUMMARY.md src/testing/useful-crates.md msgid "Useful Crates" @@ -560,25 +555,23 @@ msgstr "Kullanışlı Sandıklar (Crates)" #: src/SUMMARY.md src/testing/googletest.md msgid "GoogleTest" -msgstr "" +msgstr "GoogleTest" #: src/SUMMARY.md src/testing/mocking.md msgid "Mocking" -msgstr "" +msgstr "Mocking" #: src/SUMMARY.md src/testing/lints.md msgid "Compiler Lints and Clippy" msgstr "" #: src/SUMMARY.md src/testing/exercise.md -#, fuzzy msgid "Exercise: Luhn Algorithm" -msgstr "Luhn Algrotiması" +msgstr "Alıştırma: Luhn Algrotiması" #: src/SUMMARY.md -#, fuzzy msgid "Day 4: Afternoon" -msgstr "Gün 1: Öğleden Sonra" +msgstr "Gün 4: Öğleden Sonra" #: src/SUMMARY.md src/error-handling.md msgid "Error Handling" @@ -589,23 +582,20 @@ msgid "Panics" msgstr "Panikler" #: src/SUMMARY.md src/error-handling/try.md -#, fuzzy msgid "Try Operator" -msgstr "Iterator" +msgstr "" #: src/SUMMARY.md src/error-handling/try-conversions.md -#, fuzzy msgid "Try Conversions" -msgstr "Örtülü Dönüşümler" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "`Error` Trait" -msgstr "Daha Fazla Özellik (Trait)" +msgstr "`Error` Özelliği (Trait)" #: src/SUMMARY.md src/error-handling/thiserror-and-anyhow.md msgid "`thiserror` and `anyhow`" -msgstr "" +msgstr "`thiserror` ve `anyhow`" #: src/SUMMARY.md msgid "Exercise: Rewriting with `Result`" @@ -613,12 +603,11 @@ msgstr "" #: src/SUMMARY.md src/unsafe-rust.md src/unsafe-rust/unsafe.md msgid "Unsafe Rust" -msgstr "Güvensiz (Unsafe) Rust" +msgstr "Emniyetsiz (Unsafe) Rust" #: src/SUMMARY.md -#, fuzzy msgid "Unsafe" -msgstr "Güvensiz (Unsafe) Rust" +msgstr "Emniyetsiz" #: src/SUMMARY.md src/unsafe-rust/dereferencing.md msgid "Dereferencing Raw Pointers" @@ -633,19 +622,16 @@ msgid "Unions" msgstr "Birlikler (Unions)" #: src/SUMMARY.md src/unsafe-rust/unsafe-functions.md -#, fuzzy msgid "Unsafe Functions" -msgstr "Güvensiz (Unsafe) Fonksiyonları Çağırma" +msgstr "Emniyetsiz Fonksiyonlar" #: src/SUMMARY.md -#, fuzzy msgid "Unsafe Traits" -msgstr "Güvensiz Özelliklerin (Unsafe Traits) Gerçekleştirilmesi" +msgstr "Emniyetsiz Özellikler (Traits)" #: src/SUMMARY.md -#, fuzzy msgid "Exercise: FFI Wrapper" -msgstr "Güvenli FFI Sarıcı (Wrapper)" +msgstr "Alıştırma: FFI Sarıcı" #: src/SUMMARY.md src/bare-metal/android.md msgid "Android" @@ -671,19 +657,27 @@ msgstr "Kütüphane" msgid "AIDL" msgstr "AIDL" +#: src/SUMMARY.md src/android/aidl/birthday-service.md +msgid "Birthday Service Tutorial" +msgstr "" + #: src/SUMMARY.md msgid "Interface" msgstr "Arayüz" #: src/SUMMARY.md -msgid "Implementation" -msgstr "Gerçekleştirim" +msgid "Service API" +msgstr "" + +#: src/SUMMARY.md +msgid "Service" +msgstr "" #: src/SUMMARY.md msgid "Server" msgstr "Sunucu" -#: src/SUMMARY.md src/android/aidl/deploy.md +#: src/SUMMARY.md src/android/aidl/example-service/deploy.md msgid "Deploy" msgstr "Dağıtmak (Deploy)" @@ -691,10 +685,38 @@ msgstr "Dağıtmak (Deploy)" msgid "Client" msgstr "İstemci" -#: src/SUMMARY.md src/android/aidl/changing.md +#: src/SUMMARY.md src/android/aidl/example-service/changing-definition.md msgid "Changing API" msgstr "API'yi Değiştirme" +#: src/SUMMARY.md +msgid "Updating Implementations" +msgstr "" + +#: src/SUMMARY.md +msgid "AIDL Types" +msgstr "" + +#: src/SUMMARY.md src/android/aidl/types/primitives.md +msgid "Primitive Types" +msgstr "" + +#: src/SUMMARY.md src/android/aidl/types/arrays.md +msgid "Array Types" +msgstr "" + +#: src/SUMMARY.md src/android/aidl/types/objects.md +msgid "Sending Objects" +msgstr "" + +#: src/SUMMARY.md src/android/aidl/types/parcelables.md +msgid "Parcelables" +msgstr "" + +#: src/SUMMARY.md src/android/aidl/types/file-descriptor.md +msgid "Sending Files" +msgstr "" + #: src/SUMMARY.md src/android/logging.md src/bare-metal/aps/logging.md msgid "Logging" msgstr "Kayıt Tutma (Logging)" @@ -720,57 +742,52 @@ msgid "With C++" msgstr "C++ ile" #: src/SUMMARY.md src/android/interoperability/cpp/bridge.md -#, fuzzy msgid "The Bridge Module" -msgstr "Test Modülleri" +msgstr "Köprü Modülü" #: src/SUMMARY.md -#, fuzzy msgid "Rust Bridge" -msgstr "Android'de Rust" +msgstr "Rust Köprüsü" #: src/SUMMARY.md src/android/interoperability/cpp/generated-cpp.md msgid "Generated C++" -msgstr "" +msgstr "Oluşturulan (Generated) C++" #: src/SUMMARY.md msgid "C++ Bridge" -msgstr "" +msgstr "C++ Köprüsü" #: src/SUMMARY.md src/android/interoperability/cpp/shared-types.md -#, fuzzy msgid "Shared Types" -msgstr "Skaler Türler" +msgstr "Paylaşılan (Shared) Türler" #: src/SUMMARY.md src/android/interoperability/cpp/shared-enums.md msgid "Shared Enums" -msgstr "" +msgstr "Paylaşılan (Shared) Enum'lar" #: src/SUMMARY.md src/android/interoperability/cpp/rust-result.md -#, fuzzy msgid "Rust Error Handling" -msgstr "Hata İşleme" +msgstr "Rust Hata İşleme" #: src/SUMMARY.md src/android/interoperability/cpp/cpp-exception.md -#, fuzzy msgid "C++ Error Handling" -msgstr "Hata İşleme" +msgstr "C++ Hata İşleme" #: src/SUMMARY.md src/android/interoperability/cpp/type-mapping.md msgid "Additional Types" -msgstr "" +msgstr "Ek Türler" #: src/SUMMARY.md msgid "Building for Android: C++" -msgstr "" +msgstr "Android için inşa: C++" #: src/SUMMARY.md msgid "Building for Android: Genrules" -msgstr "" +msgstr "Android için inşa: Genrules" #: src/SUMMARY.md msgid "Building for Android: Rust" -msgstr "" +msgstr "Android için inşa: Rust" #: src/SUMMARY.md msgid "With Java" @@ -784,7 +801,7 @@ msgstr "Egzersizler" #: src/SUMMARY.md msgid "Chromium" -msgstr "" +msgstr "Chromium" #: src/SUMMARY.md src/chromium/cargo.md msgid "Comparing Chromium and Cargo Ecosystems" @@ -795,9 +812,8 @@ msgid "Policy" msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Unsafe Code" -msgstr "Güvensiz (Unsafe) Rust" +msgstr "Emniyetsiz (Unsafe) Kod" #: src/SUMMARY.md src/chromium/build-rules/depending.md msgid "Depending on Rust Code from Chromium C++" @@ -805,12 +821,11 @@ msgstr "" #: src/SUMMARY.md src/chromium/build-rules/vscode.md msgid "Visual Studio Code" -msgstr "" +msgstr "Visual Studio Code" #: src/SUMMARY.md src/exercises/chromium/third-party.md -#, fuzzy msgid "Exercise" -msgstr "Egzersizler" +msgstr "Alıştırma" #: src/SUMMARY.md src/chromium/testing/rust-gtest-interop.md msgid "`rust_gtest_interop` Library" @@ -825,33 +840,28 @@ msgid "`chromium::import!` Macro" msgstr "" #: src/SUMMARY.md src/chromium/interoperability-with-cpp.md -#, fuzzy msgid "Interoperability with C++" -msgstr "Birlikte Çalışabilirlik" +msgstr "C++ ile Birlikte Çalışabilirlik" #: src/SUMMARY.md src/chromium/interoperability-with-cpp/example-bindings.md -#, fuzzy msgid "Example Bindings" -msgstr "Örnekler" +msgstr "" #: src/SUMMARY.md src/chromium/interoperability-with-cpp/limitations-of-cxx.md msgid "Limitations of CXX" msgstr "" #: src/SUMMARY.md src/chromium/interoperability-with-cpp/error-handling.md -#, fuzzy msgid "CXX Error Handling" -msgstr "Hata İşleme" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Error Handling: QR Example" -msgstr "Hata İşleme" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Error Handling: PNG Example" -msgstr "Hata İşleme" +msgstr "" #: src/SUMMARY.md msgid "Using CXX in Chromium" @@ -915,9 +925,8 @@ msgid "Bringing It Together - Exercise" msgstr "" #: src/SUMMARY.md src/exercises/chromium/solutions.md -#, fuzzy msgid "Exercise Solutions" -msgstr "Çözümler" +msgstr "Alıştırma Çözümleri" #: src/SUMMARY.md msgid "Bare Metal: Morning" @@ -964,9 +973,8 @@ msgid "`embedded-hal`" msgstr "" #: src/SUMMARY.md src/bare-metal/microcontrollers/probe-rs.md -#, fuzzy msgid "`probe-rs` and `cargo-embed`" -msgstr "probe-rs, cargo-embed" +msgstr "`probe-rs` ve `cargo-embed`" #: src/SUMMARY.md src/bare-metal/microcontrollers/debugging.md msgid "Debugging" @@ -1039,28 +1047,27 @@ msgstr "İstisnalar" #: src/SUMMARY.md src/bare-metal/useful-crates/zerocopy.md msgid "`zerocopy`" -msgstr "" +msgstr "`zerocopy`" #: src/SUMMARY.md src/bare-metal/useful-crates/aarch64-paging.md msgid "`aarch64-paging`" -msgstr "" +msgstr "`aarch64-paging`" #: src/SUMMARY.md src/bare-metal/useful-crates/buddy_system_allocator.md msgid "`buddy_system_allocator`" -msgstr "" +msgstr "`buddy_system_allocator`" #: src/SUMMARY.md src/bare-metal/useful-crates/tinyvec.md msgid "`tinyvec`" -msgstr "" +msgstr "`tinyvec`" #: src/SUMMARY.md src/bare-metal/useful-crates/spin.md msgid "`spin`" -msgstr "" +msgstr "`spin`" #: src/SUMMARY.md -#, fuzzy msgid "`vmbase`" -msgstr "vmbase" +msgstr "`vmbase`" #: src/SUMMARY.md msgid "RTC Driver" @@ -1092,15 +1099,15 @@ msgstr "Sınırlı Kanallar" #: src/SUMMARY.md src/concurrency/send-sync.md msgid "`Send` and `Sync`" -msgstr "" +msgstr "`Send` ve `Sync`" #: src/SUMMARY.md src/concurrency/send-sync/send.md msgid "`Send`" -msgstr "" +msgstr "`Send`" #: src/SUMMARY.md src/concurrency/send-sync/sync.md msgid "`Sync`" -msgstr "" +msgstr "`Sync`" #: src/SUMMARY.md src/concurrency/send-sync/examples.md msgid "Examples" @@ -1112,11 +1119,11 @@ msgstr "Paylaşımlı Durum (State)" #: src/SUMMARY.md src/concurrency/shared_state/arc.md msgid "`Arc`" -msgstr "" +msgstr "`Arc`" #: src/SUMMARY.md src/concurrency/shared_state/mutex.md msgid "`Mutex`" -msgstr "" +msgstr "`Mutex`" #: src/SUMMARY.md src/memory-management/review.md #: src/error-handling/try-conversions.md @@ -1143,7 +1150,7 @@ msgstr "Async Temelleri" #: src/SUMMARY.md src/async/async-await.md msgid "`async`/`await`" -msgstr "" +msgstr "`async`/`await`" #: src/SUMMARY.md src/async/futures.md msgid "Futures" @@ -1188,7 +1195,7 @@ msgstr "Yürütücünün/Çalıştırıcının (Executor) Engellenmesi" #: src/SUMMARY.md src/async/pitfalls/pin.md msgid "`Pin`" -msgstr "" +msgstr "`Pin`" #: src/SUMMARY.md src/async/pitfalls/async-traits.md msgid "Async Traits" @@ -1263,6 +1270,10 @@ msgstr "" "adresinden ulaşılabilir. Başka bir yerde okuyorsanız, lütfen güncellemeleri " "kontrol edin." +#: src/index.md +msgid "The course is also available [as a PDF](comprehensive-rust.pdf)." +msgstr "" + #: src/index.md msgid "" "The goal of the course is to teach you Rust. We assume you don't know " @@ -1286,9 +1297,9 @@ msgid "Show you common Rust idioms." msgstr "Yaygın Rust kod kaplarını göstermeyi." #: src/index.md -#, fuzzy msgid "We call the first four course days Rust Fundamentals." -msgstr "İlk üç kurs gününe Rust Esasları (Rust Fundamentals) adını veriyoruz." +msgstr "" +"İlk dört kurs gününe Rust Esasları (Rust Fundamentals) adını veriyoruz." #: src/index.md msgid "" @@ -1306,15 +1317,15 @@ msgstr "" "çalışabilirlik de dahildir." #: src/index.md -#, fuzzy msgid "" "[Chromium](chromium.md): a half-day course on using Rust within Chromium " "based browsers. This includes interoperability with C++ and how to include " "third-party crates in Chromium." msgstr "" -"[Android](android.md): Android platformu geliştirme (AOSP) için Rust'ın " -"kullanımına ilişkin yarım günlük bir kurs. Buna C, C++ ve Java ile birlikte " -"çalışabilirlik de dahildir." +"[Chromium](chromium.md): Rust'ın Chromium tabanlı tarayıcılarda " +"kullanılmasına ilişkin yarım günlük bir kurs. Bu, C++ ile birlikte " +"çalışabilirliği ve üçüncü taraf kasaların Chromium'a nasıl dahil edileceğini " +"içerir. " #: src/index.md msgid "" @@ -1406,20 +1417,17 @@ msgstr "" "bilgisini burada bulabilirsiniz." #: src/running-the-course.md -#, fuzzy msgid "" "We typically run classes from 9:00 am to 4:00 pm, with a 1 hour lunch break " "in the middle. This leaves 3 hours for the morning class and 3 hours for the " "afternoon class. Both sessions contain multiple breaks and time for students " "to work on exercises." msgstr "" -"Dersleri genellikle sabah 10:00'dan akşam 16:00'ya kadar yürütüyoruz ve " +"Dersleri genellikle sabah 9:00'dan akşam 16:00'ya kadar yürütüyoruz ve " "ortasında 1 saatlik öğle yemeği molası veriyoruz. Geriye sabah dersi için " -"2.5 saat, öğleden sonra dersi için ise 2.5 saat kalıyor. Bunun sadece bir " -"öneri olduğunu unutmayın: İnsanlara egzersiz için daha fazla zaman tanımak " -"için sabah seansına da 3 saat ayırabilirsiniz. Daha uzun seansların " -"dezavantajı, 16.00'dan sonra yani 6 saatlik dersten sonra insanların çok " -"yorulabilmesidir." +"3saat, öğleden sonra dersi için ise 3 saat kalıyor. Her iki oturum da " +"öğrencilerin alıştırmalar üzerinde çalışmaları için birden fazla ara ve " +"zaman içerir." #: src/running-the-course.md msgid "Before you run the course, you will want to:" @@ -1441,14 +1449,13 @@ msgstr "" "ekrana sahip olursunuz." #: src/running-the-course.md -#, fuzzy msgid "" "Decide on the dates. Since the course takes four days, we recommend that you " "schedule the days over two weeks. Course participants have said that they " "find it helpful to have a gap in the course since it helps them process all " "the information we give them." msgstr "" -"Tarihlere karar verin. Kurs en az üç tam gün sürdüğünden, günleri iki " +"Tarihlere karar verin. Kurs en az dört tam gün sürdüğünden, günleri iki " "haftaya yaymanızı öneririz. Kurs katılımcıları, kursta boşluk kalmasının, " "onlara verdiğimiz tüm bilgileri işlemelerine yardımcı olması açısından " "yararlı bulduklarını belirtmişlerdir." @@ -1533,21 +1540,19 @@ msgid "Rust Fundamentals" msgstr "Rust Esasları" #: src/running-the-course/course-structure.md -#, fuzzy msgid "" "The first four days make up [Rust Fundamentals](../welcome-day-1.md). The " "days are fast paced and we cover a lot of ground!" msgstr "" -"İlk üç gün [Rust Temelleri](../welcome-day-1.md)'ni oluşturur. Günler hızlı " -"geçiyor ve çok fazla yol kat ediyoruz:" +"İlk dört gün [Rust Temelleri](../welcome-day-1.md)'ni oluşturur. Günler " +"hızlı geçiyor ve çok fazla yol kat ediyoruz:" #: src/running-the-course/course-structure.md -#, fuzzy msgid "Course schedule:" -msgstr "Kurs Yapısı" +msgstr "Kurs programı:" #: src/running-the-course/course-structure.md -msgid "Day 1 Morning (3 hours, including breaks)" +msgid "Day 1 Morning (2 hours and 10 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md @@ -1555,27 +1560,27 @@ msgid "[Welcome](../welcome-day-1.md) (5 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Hello, World](../hello-world.md) (20 minutes)" +msgid "[Hello, World](../hello-world.md) (15 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Types and Values](../types-and-values.md) (1 hour and 5 minutes)" +msgid "[Types and Values](../types-and-values.md) (45 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Control Flow Basics](../control-flow-basics.md) (1 hour)" +msgid "[Control Flow Basics](../control-flow-basics.md) (40 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 1 Afternoon (2 hours and 55 minutes, including breaks)" +msgid "Day 1 Afternoon (2 hours and 15 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Tuples and Arrays](../tuples-and-arrays.md) (1 hour)" +msgid "[Tuples and Arrays](../tuples-and-arrays.md) (35 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[References](../references.md) (50 minutes)" +msgid "[References](../references.md) (35 minutes)" msgstr "" #: src/running-the-course/course-structure.md @@ -1583,7 +1588,7 @@ msgid "[User-Defined Types](../user-defined-types.md) (50 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 2 Morning (3 hours and 5 minutes, including breaks)" +msgid "Day 2 Morning (2 hours and 50 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md @@ -1591,23 +1596,23 @@ msgid "[Welcome](../welcome-day-2.md) (3 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Pattern Matching](../pattern-matching.md) (50 minutes)" +msgid "[Pattern Matching](../pattern-matching.md) (1 hour)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Methods and Traits](../methods-and-traits.md) (55 minutes)" +msgid "[Methods and Traits](../methods-and-traits.md) (45 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Generics](../generics.md) (45 minutes)" +msgid "[Generics](../generics.md) (40 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 2 Afternoon (3 hours, including breaks)" +msgid "Day 2 Afternoon (3 hours and 10 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Standard Library Types](../std-types.md) (1 hour and 10 minutes)" +msgid "[Standard Library Types](../std-types.md) (1 hour and 20 minutes)" msgstr "" #: src/running-the-course/course-structure.md @@ -1615,7 +1620,7 @@ msgid "[Standard Library Traits](../std-traits.md) (1 hour and 40 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 3 Morning (2 hours and 15 minutes, including breaks)" +msgid "Day 3 Morning (2 hours and 20 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md @@ -1623,19 +1628,19 @@ msgid "[Welcome](../welcome-day-3.md) (3 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Memory Management](../memory-management.md) (1 hour and 10 minutes)" +msgid "[Memory Management](../memory-management.md) (1 hour)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Smart Pointers](../smart-pointers.md) (45 minutes)" +msgid "[Smart Pointers](../smart-pointers.md) (55 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 3 Afternoon (2 hours and 20 minutes, including breaks)" +msgid "Day 3 Afternoon (2 hours and 10 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Borrowing](../borrowing.md) (1 hour)" +msgid "[Borrowing](../borrowing.md) (50 minutes)" msgstr "" #: src/running-the-course/course-structure.md @@ -1644,7 +1649,7 @@ msgid "" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 4 Morning (3 hours and 5 minutes, including breaks)" +msgid "Day 4 Morning (2 hours and 50 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md @@ -1660,15 +1665,15 @@ msgid "[Modules](../modules.md) (40 minutes)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Testing](../testing.md) (1 hour and 5 minutes)" +msgid "[Testing](../testing.md) (1 hour)" msgstr "" #: src/running-the-course/course-structure.md -msgid "Day 4 Afternoon (2 hours, including breaks)" +msgid "Day 4 Afternoon (2 hours and 10 minutes, including breaks)" msgstr "" #: src/running-the-course/course-structure.md -msgid "[Error Handling](../error-handling.md) (45 minutes)" +msgid "[Error Handling](../error-handling.md) (55 minutes)" msgstr "" #: src/running-the-course/course-structure.md @@ -1680,12 +1685,11 @@ msgid "Deep Dives" msgstr "Derin Dalışlar" #: src/running-the-course/course-structure.md -#, fuzzy msgid "" "In addition to the 4-day class on Rust Fundamentals, we cover some more " "specialized topics:" msgstr "" -"Rust'ın Esasları hakkındaki 3 günlük derse ek olarak, daha özel konuları da " +"Rust'ın Esasları hakkındaki 4 günlük derse ek olarak, daha özel konuları da " "ele alıyoruz:" #: src/running-the-course/course-structure.md @@ -1729,9 +1733,8 @@ msgstr "" "elle çalıştırdığınızda çalıştıklarından emin olun." #: src/running-the-course/course-structure.md -#, fuzzy msgid "Rust in Chromium" -msgstr "Android'de Rust" +msgstr "Chromium'da Rust" #: src/running-the-course/course-structure.md msgid "" @@ -1895,12 +1898,14 @@ msgstr "" #: src/running-the-course/translations.md msgid "" "[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" -"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), and " -"[@jooyunghan](https://github.com/jooyunghan)." +"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), " +"[@jooyunghan](https://github.com/jooyunghan), and [@namhyung](https://github." +"com/namhyung)." msgstr "" "[Korece](https://google.github.io/comprehensive-rust/ko/) yazanlar: " "[@keispace](https://github.com/keispace), [@jiyongp](https://github.com) /" -"jiyongp) ve [@jooyunghan](https://github.com/jooyunghan)." +"jiyongp), [@jooyunghan](https://github.com/jooyunghan) ve [@namhyung]" +"(https://github.com/namhyung)." #: src/running-the-course/translations.md msgid "" @@ -1963,6 +1968,16 @@ msgstr "" "[@CoinEZ-JPN](https://github.com/CoinEZ) ve [@momotaro1105](https://github) ." "com/momotaro1105)." +#: src/running-the-course/translations.md +msgid "" +"[Italian](https://google.github.io/comprehensive-rust/it/) by " +"[@henrythebuilder](https://github.com/henrythebuilder) and [@detro](https://" +"github.com/detro)." +msgstr "" +"[İtalyanca](https://google.github.io/comprehensive-rust/it/) yazanlar: " +"[@henrythebuilder](https://github.com/henrythebuilder) ve [@detro](https://" +"github.com/detro)." + #: src/running-the-course/translations.md msgid "" "If you want to help with this effort, please see [our instructions](https://" @@ -2071,7 +2086,6 @@ msgstr "" "çalıştırıcısıyla birlikte gelir." #: src/cargo/rust-ecosystem.md -#, fuzzy msgid "" "`rustup`: the Rust toolchain installer and updater. This tool is used to " "install and update `rustc` and `cargo` when new versions of Rust are " @@ -2080,13 +2094,13 @@ msgid "" "and `rustup` will let you switch between them as needed." msgstr "" "`rustup`: Rust araç zinciri (toolchain) yükleyicisi ve güncelleyicisi. Bu " -"araç, Rust'un yeni sürümleri yayınlandığında `rustc` ve `cargo` " +"araç, Rust'ın yeni sürümleri yayınlandığında `rustc` ve `cargo` " "programlarını yüklemek ve güncellemek için kullanılır. Ek olarak, `rustup` " -"standart kütüphanenin belgelerini de indirebilir. Aynı anda birden fazla " -"Rust sürümünü yükleyebilirsiniz ve `rustup` gerektiğinde bunlar arasında " -"geçiş yapmanıza olanak tanır." +"standart kitaplık için belgeleri de indirebilir. Aynı anda birden fazla Rust " +"sürümünü yükleyebilirsiniz ve `rustup` gerektiğinde bunlar arasında geçiş " +"yapmanıza olanak tanır." -#: src/cargo/rust-ecosystem.md src/hello-world/hello-world.md +#: src/cargo/rust-ecosystem.md src/types-and-values/hello-world.md #: src/tuples-and-arrays/tuples-and-arrays.md src/references/exclusive.md #: src/pattern-matching/destructuring.md src/memory-management/move.md #: src/error-handling/try.md src/android/setup.md src/concurrency/threads.md @@ -2170,15 +2184,14 @@ msgstr "" "olduğunu unutmayın (çoğu kullanıcı asla kullanmaz)." #: src/cargo/rust-ecosystem.md -#, fuzzy msgid "" "It might be worth alluding that Cargo itself is an extremely powerful and " "comprehensive tool. It is capable of many advanced features including but " "not limited to:" msgstr "" "Cargo'nun kendisinin son derece güçlü ve kapsamlı bir araç olduğunu " -"belirtmekte fayda var. Aşağıdakiler dahil olmakla ve bunlarla sınırlı " -"olmamak üzere birçok gelişmiş özelliğe sahiptir: " +"belirtmekte fayda var. Aşağıdakiler dahil olmakla ve bunlarla sınırlı " +"olmamak üzere birçok gelişmiş özelliğe sahiptir:" #: src/cargo/rust-ecosystem.md msgid "Project/package structure" @@ -2397,24 +2410,25 @@ msgstr "" #: src/welcome-day-1.md msgid "Welcome to Day 1" -msgstr "" +msgstr "1. Gün'e Hoş Geldiniz" #: src/welcome-day-1.md msgid "" "This is the first day of Rust Fundamentals. We will cover a lot of ground " "today:" -msgstr "" +msgstr "Rust Esasları'nın ilk günü. Bugün çok fazla konuyu ele alacağız:" #: src/welcome-day-1.md msgid "" "Basic Rust syntax: variables, scalar and compound types, enums, structs, " "references, functions, and methods." msgstr "" +"Temel Rust sözdizimi: değişkenler, skaler ve bileşik türleri, numaralandırma " +"türleri (enums), yapılar (structs), referanslar, fonksiyonlar ve metotlar." #: src/welcome-day-1.md -#, fuzzy msgid "Types and type inference." -msgstr "tür çıkarımı:" +msgstr "Türler ve tür çıkarımı." #: src/welcome-day-1.md msgid "Control flow constructs: loops, conditionals, and so on." @@ -2427,6 +2441,8 @@ msgstr "" #: src/welcome-day-1.md msgid "Pattern matching: destructuring enums, structs, and arrays." msgstr "" +"Desen eşleştirme: numaralandırmaların (enums), yapıların ve dizilerin " +"çözümlenmesi (destructuring)." #: src/welcome-day-1.md src/welcome-day-2.md src/welcome-day-3.md #: src/welcome-day-4.md @@ -2445,35 +2461,39 @@ msgid "[Welcome](./welcome-day-1.md) (5 minutes)" msgstr "" #: src/welcome-day-1.md -msgid "[Hello, World](./hello-world.md) (20 minutes)" +msgid "[Hello, World](./hello-world.md) (15 minutes)" msgstr "" #: src/welcome-day-1.md -msgid "[Types and Values](./types-and-values.md) (1 hour and 5 minutes)" +msgid "[Types and Values](./types-and-values.md) (45 minutes)" msgstr "" #: src/welcome-day-1.md -msgid "[Control Flow Basics](./control-flow-basics.md) (1 hour)" +msgid "[Control Flow Basics](./control-flow-basics.md) (40 minutes)" msgstr "" -#: src/welcome-day-1.md src/welcome-day-2-afternoon.md -msgid "Including 10 minute breaks, this session should take about 3 hours" +#: src/welcome-day-1.md src/welcome-day-3-afternoon.md +#: src/welcome-day-4-afternoon.md +msgid "" +"Including 10 minute breaks, this session should take about 2 hours and 10 " +"minutes" msgstr "" #: src/welcome-day-1.md msgid "Please remind the students that:" -msgstr "" +msgstr "Lütfen öğrencilere şunu hatırlatın:" #: src/welcome-day-1.md msgid "" "They should ask questions when they get them, don't save them to the end." -msgstr "" +msgstr "Sorular akıllarına geldiğinde sormalılar, sona saklamamalılar." #: src/welcome-day-1.md msgid "" "The class is meant to be interactive and discussions are very much " "encouraged!" msgstr "" +"Sınıfın etkileşimli olması amaçlanıyor ve tartışmalar çok teşvik ediliyor!" #: src/welcome-day-1.md msgid "" @@ -2482,11 +2502,18 @@ msgid "" "It can be hard to find the right balance, but err on the side of allowing " "discussions since they engage people much more than one-way communication." msgstr "" +"Bir eğitmen olarak tartışmaları güncel tutmaya çalışmalısınız, yani Rust'ın " +"işi nasıl yaptığı ve başka bir dilin işi nasıl yaptığıyla ilgili " +"tartışmaları sürdürün. Doğru dengeyi bulmak zor olabilir, ancak insanları " +"tek yönlü iletişimden çok daha fazla meşgul ettiği için tartışmalara izin " +"vermeyi tercih edin." #: src/welcome-day-1.md msgid "" "The questions will likely mean that we talk about things ahead of the slides." msgstr "" +"Sorular çoğunlukla slaytlardan önce bazı şeyler hakkında konuşacağımız " +"anlamına gelecektir." #: src/welcome-day-1.md msgid "" @@ -2494,6 +2521,9 @@ msgid "" "Remember that the slides are just a support and you are free to skip them as " "you like." msgstr "" +"Bu kesinlikle sorun değil! Tekrar etkemk, öğrenmenin önemli bir parçasıdır. " +"Slaytların sadece bir destek olduğunu ve istediğiniz gibi atlamakta özgür " +"olduğunuzu unutmayın." #: src/welcome-day-1.md msgid "" @@ -2525,10 +2555,6 @@ msgstr "" msgid "[What is Rust?](./hello-world/what-is-rust.md) (10 minutes)" msgstr "" -#: src/hello-world.md -msgid "[Hello, World](./hello-world/hello-world.md) (5 minutes)" -msgstr "" - #: src/hello-world.md msgid "[Benefits of Rust](./hello-world/benefits.md) (3 minutes)" msgstr "" @@ -2538,7 +2564,7 @@ msgid "[Playground](./hello-world/playground.md) (2 minutes)" msgstr "" #: src/hello-world.md -msgid "This segment should take about 20 minutes" +msgid "This segment should take about 15 minutes" msgstr "" #: src/hello-world/what-is-rust.md @@ -2546,154 +2572,86 @@ msgid "" "Rust is a new programming language which had its [1.0 release in 2015]" "(https://blog.rust-lang.org/2015/05/15/Rust-1.0.html):" msgstr "" +"Rust, [2015'te 1.0 sürümü](https://blog.rust-lang.org/2015/05/15/Rust-1.0." +"html) çıkan yeni bir programlama dilidir:" #: src/hello-world/what-is-rust.md msgid "Rust is a statically compiled language in a similar role as C++" -msgstr "" +msgstr "Rust, C++ ile benzer role sahip statik olarak derlenmiş bir dildir" #: src/hello-world/what-is-rust.md msgid "`rustc` uses LLVM as its backend." -msgstr "" +msgstr "`rustc` arka tarafta (backend) LLVM'yi kullanır." #: src/hello-world/what-is-rust.md msgid "" "Rust supports many [platforms and architectures](https://doc.rust-lang.org/" "nightly/rustc/platform-support.html):" msgstr "" +"Rust birçok [platformu ve mimariyi](https://doc.rust-lang.org/nightly/rustc/" +"platform-support.html) destekler:" #: src/hello-world/what-is-rust.md msgid "x86, ARM, WebAssembly, ..." -msgstr "" +msgstr "x86, ARM, WebAssembly, ..." #: src/hello-world/what-is-rust.md msgid "Linux, Mac, Windows, ..." -msgstr "" +msgstr "Linux, Mac, Windows, ..." #: src/hello-world/what-is-rust.md msgid "Rust is used for a wide range of devices:" -msgstr "" +msgstr "Rust çok çeşitli cihazlarda kullanılır:" #: src/hello-world/what-is-rust.md msgid "firmware and boot loaders," -msgstr "" +msgstr "donanım yazılımlarında (firmwares) ve önyükleyicilerde (boot loaders)," #: src/hello-world/what-is-rust.md msgid "smart displays," -msgstr "" +msgstr "akıllı ekranlarda," #: src/hello-world/what-is-rust.md msgid "mobile phones," -msgstr "" +msgstr "cep telefonlarında," #: src/hello-world/what-is-rust.md msgid "desktops," -msgstr "" +msgstr "masaüstü bilgisayarlarda," #: src/hello-world/what-is-rust.md msgid "servers." -msgstr "" +msgstr "sunucularda." #: src/hello-world/what-is-rust.md msgid "Rust fits in the same area as C++:" -msgstr "" +msgstr "Rust, C++ ile aynı alanda yer almaktadır:" #: src/hello-world/what-is-rust.md msgid "High flexibility." -msgstr "" +msgstr "Yüksek esneklik." #: src/hello-world/what-is-rust.md msgid "High level of control." -msgstr "" +msgstr "Yüksek düzeyde kontrol." #: src/hello-world/what-is-rust.md msgid "" "Can be scaled down to very constrained devices such as microcontrollers." -msgstr "" +msgstr "Mikrodenetleyiciler gibi çok kısıtlı cihazlara ölçeklendirilebilir." #: src/hello-world/what-is-rust.md msgid "Has no runtime or garbage collection." -msgstr "" +msgstr "Çalışma zamanı veya çöp toplama özelliği yoktur." #: src/hello-world/what-is-rust.md msgid "Focuses on reliability and safety without sacrificing performance." msgstr "" - -#: src/hello-world/hello-world.md -msgid "" -"Let us jump into the simplest possible Rust program, a classic Hello World " -"program:" -msgstr "" - -#: src/hello-world/hello-world.md -msgid "\"Hello 🌍!\"" -msgstr "" - -#: src/hello-world/hello-world.md -msgid "What you see:" -msgstr "" - -#: src/hello-world/hello-world.md -msgid "Functions are introduced with `fn`." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "Blocks are delimited by curly braces like in C and C++." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "The `main` function is the entry point of the program." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "Rust has hygienic macros, `println!` is an example of this." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "Rust strings are UTF-8 encoded and can contain any Unicode character." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "" -"This slide tries to make the students comfortable with Rust code. They will " -"see a ton of it over the next four days so we start small with something " -"familiar." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "" -"Rust is very much like other languages in the C/C++/Java tradition. It is " -"imperative and it doesn't try to reinvent things unless absolutely necessary." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "Rust is modern with full support for things like Unicode." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "" -"Rust uses macros for situations where you want to have a variable number of " -"arguments (no function [overloading](../control-flow-basics/functions.md))." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "" -"Macros being 'hygienic' means they don't accidentally capture identifiers " -"from the scope they are used in. Rust macros are actually only [partially " -"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene." -"html)." -msgstr "" - -#: src/hello-world/hello-world.md -msgid "" -"Rust is multi-paradigm. For example, it has powerful [object-oriented " -"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, " -"while it is not a functional language, it includes a range of [functional " -"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)." -msgstr "" +"Performanstan ödün vermeden güvenilirlik ve emniyete (safety) odaklanır." #: src/hello-world/benefits.md msgid "Some unique selling points of Rust:" -msgstr "" +msgstr "Rust'ın bazı benzersiz yok satan noktaları:" #: src/hello-world/benefits.md msgid "" @@ -2703,31 +2661,31 @@ msgstr "" #: src/hello-world/benefits.md msgid "No uninitialized variables." -msgstr "" +msgstr "İlklendirilmemiş değişken yok." #: src/hello-world/benefits.md msgid "No double-frees." -msgstr "" +msgstr "Double free yok." #: src/hello-world/benefits.md msgid "No use-after-free." -msgstr "" +msgstr "Serbest bıraktıktan sonra kullanma (use after free) yok." #: src/hello-world/benefits.md msgid "No `NULL` pointers." -msgstr "" +msgstr "`NULL` göstericileri yok." #: src/hello-world/benefits.md msgid "No forgotten locked mutexes." -msgstr "" +msgstr "Unutulan kilitli muteksler yok." #: src/hello-world/benefits.md msgid "No data races between threads." -msgstr "" +msgstr "İş parçacıkları (threads) arasında veri yarışları (data races) yok." #: src/hello-world/benefits.md msgid "No iterator invalidation." -msgstr "" +msgstr "Adımlayıcıyı (iterator) geçersiz kılma (invalidation) yok." #: src/hello-world/benefits.md msgid "" @@ -2737,11 +2695,11 @@ msgstr "" #: src/hello-world/benefits.md msgid "Array access is bounds checked." -msgstr "" +msgstr "Dizi erişiminde sınırlar kontrol edilir." #: src/hello-world/benefits.md msgid "Integer overflow is defined (panic or wrap-around)." -msgstr "" +msgstr "Tamsayı taşması tanımlandı (panic veya wrap-around)." #: src/hello-world/benefits.md msgid "" @@ -2792,6 +2750,8 @@ msgid "" "Make sure to ask the class which languages they have experience with. " "Depending on the answer you can highlight different features of Rust:" msgstr "" +"Sınıfa hangi dillerde deneyime sahip olduklarını mutlaka sorun. Cevabınıza " +"bağlı olarak Rust'ın farklı özelliklerini vurgulayabilirsiniz:" #: src/hello-world/benefits.md msgid "" @@ -2800,6 +2760,12 @@ msgid "" "have the memory unsafety issues. In addition, you get a modern language with " "constructs like pattern matching and built-in dependency management." msgstr "" +"C veya C++ deneyimi: Rust, ödünç alma denetleyicisi (borrow checker) " +"aracılığıyla tüm _çalışma zamanı hatalarını(runtime errors)_ ortadan " +"kaldırır. C ve C++'daki gibi performans elde edersiniz bununla birlikte " +"bellek güvenliği sorunları yaşamazsınız. Ayrıca desen eşleştirme (pattern " +"matching) ve yerleşik bağımlılık yönetimi (dependency management) gibi " +"yapılara sahip modern bir dil elde edersiniz." #: src/hello-world/benefits.md msgid "" @@ -2808,6 +2774,11 @@ msgid "" "addition you get fast and predictable performance like C and C++ (no garbage " "collector) as well as access to low-level hardware (should you need it)" msgstr "" +"Java, Go, Python, JavaScript... deneyimi: Bu dillerdekiyle aynı bellek " +"emniyetine (safety) ve ayrıca benzer yüksek seviyeli dil hissine sahip " +"olursunuz. Ayrıca, C ve C++ (çöp toplayıcı yok) gibi hızlı ve öngörülebilir " +"performansın yanı sıra düşük seviyeli donanıma erişim (ihtiyaç duymanız " +"halinde) elde edersiniz." #: src/hello-world/playground.md msgid "" @@ -2845,33 +2816,135 @@ msgid "" "assembly." msgstr "" +#: src/types-and-values.md +msgid "[Hello, World](./types-and-values/hello-world.md) (5 minutes)" +msgstr "" + #: src/types-and-values.md msgid "[Variables](./types-and-values/variables.md) (5 minutes)" msgstr "" #: src/types-and-values.md -msgid "[Values](./types-and-values/values.md) (10 minutes)" +msgid "[Values](./types-and-values/values.md) (5 minutes)" msgstr "" #: src/types-and-values.md -msgid "[Arithmetic](./types-and-values/arithmetic.md) (5 minutes)" +msgid "[Arithmetic](./types-and-values/arithmetic.md) (3 minutes)" msgstr "" #: src/types-and-values.md -msgid "[Strings](./types-and-values/strings.md) (10 minutes)" +msgid "[Strings](./types-and-values/strings.md) (5 minutes)" msgstr "" #: src/types-and-values.md -msgid "[Type Inference](./types-and-values/inference.md) (5 minutes)" +msgid "[Type Inference](./types-and-values/inference.md) (3 minutes)" msgstr "" #: src/types-and-values.md -msgid "[Exercise: Fibonacci](./types-and-values/exercise.md) (30 minutes)" +msgid "[Exercise: Fibonacci](./types-and-values/exercise.md) (15 minutes)" msgstr "" -#: src/types-and-values.md src/testing.md src/unsafe-rust.md -msgid "This segment should take about 1 hour and 5 minutes" +#: src/types-and-values.md src/methods-and-traits.md src/iterators.md +msgid "This segment should take about 45 minutes" +msgstr "" + +#: src/types-and-values/hello-world.md +msgid "" +"Let us jump into the simplest possible Rust program, a classic Hello World " +"program:" +msgstr "" +"Mümkün olan en basit Rust programına, klasik bir Merhaba Dünya programına " +"geçelim:" + +#: src/types-and-values/hello-world.md +msgid "\"Hello 🌍!\"" +msgstr "\"Merhaba 🌍!\"" + +#: src/types-and-values/hello-world.md +msgid "What you see:" +msgstr "Ne görüyorsunuz:" + +#: src/types-and-values/hello-world.md +msgid "Functions are introduced with `fn`." +msgstr "Fonksiyonlar `fn` ile tanıtılır." + +#: src/types-and-values/hello-world.md +msgid "Blocks are delimited by curly braces like in C and C++." +msgstr "" +"Bloklar, C ve C++'daki gibi küme parantezleriyle sınırları belirlenmiştir." + +#: src/types-and-values/hello-world.md +msgid "The `main` function is the entry point of the program." +msgstr "'main' fonksiyon programın giriş noktasıdır (entry point)." + +#: src/types-and-values/hello-world.md +msgid "Rust has hygienic macros, `println!` is an example of this." +msgstr "" +"Rust arınmış/pak/izole (hygienic) makrolara sahiptir, `println!` buna bir " +"örnektir." + +#: src/types-and-values/hello-world.md +msgid "Rust strings are UTF-8 encoded and can contain any Unicode character." +msgstr "" +"Rust dilinindeki dizeler (strings) UTF-8 olarak kodlanmıştır ve herhangi bir " +"Unicode karakteri içerebilir." + +#: src/types-and-values/hello-world.md +msgid "" +"This slide tries to make the students comfortable with Rust code. They will " +"see a ton of it over the next four days so we start small with something " +"familiar." +msgstr "" +"Bu slayt öğrencilerin Rust kodu konusunda rahat olmalarını sağlamaya " +"çalışmaktadır. Önümüzdeki dört gün içinde çok şey görecekler, bu yüzden " +"aşina bir şeyle küçükten başlıyoruz." + +#: src/types-and-values/hello-world.md +msgid "" +"Rust is very much like other languages in the C/C++/Java tradition. It is " +"imperative and it doesn't try to reinvent things unless absolutely necessary." +msgstr "" +"Rust, C/C++/Java geleneğindeki diğer dillere çok benzer. Rust emirli bir " +"dildir (imperative) ve kesinlikle gerekmedikçe bir şeyleri yeniden " +"keşfetmeye çalışmaz." + +#: src/types-and-values/hello-world.md +msgid "Rust is modern with full support for things like Unicode." +msgstr "" +"Rust, Unicode gibi şeyleri tam olarak destekleyen modern bir yazılımdır." + +#: src/types-and-values/hello-world.md +msgid "" +"Rust uses macros for situations where you want to have a variable number of " +"arguments (no function [overloading](../control-flow-basics/functions.md))." +msgstr "" +"Rust, değişken sayıda argümana sahip olmak istediğiniz durumlar için " +"makroları kullanır (fonksiyon [yüklemesi](../control-flow-basics/functions." +"md) yoktur)." + +#: src/types-and-values/hello-world.md +msgid "" +"Macros being 'hygienic' means they don't accidentally capture identifiers " +"from the scope they are used in. Rust macros are actually only [partially " +"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene." +"html)." +msgstr "" +"Makroların 'arınmış/pak' olması, kullanıldıkları kapsamdaki (scope) " +"tanımlayıcıları (identifiers) yanlışlıkla yakalamadıkları anlamına gelir. " +"Rust makroları aslında yalnızca [kısmen hijyeniktir](https://veykril.github." +"io/tlborm/decl-macros/minutiae/hygiene.html)." + +#: src/types-and-values/hello-world.md +msgid "" +"Rust is multi-paradigm. For example, it has powerful [object-oriented " +"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, " +"while it is not a functional language, it includes a range of [functional " +"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)." msgstr "" +"Rust çok paradigmalı bir dildir. Örneğin, güçlü [nesne yönelimli programlama " +"özelliklerine](https://doc.rust-lang.org/book/ch17-00-oop.html) sahiptir ve " +"çeşitli [fonksiyonel kavramları](https://doc.rust-lang.org/book/ch13-00-" +"functional-features.html) (fonksiyonel bir dil olmasa da) içerir." #: src/types-and-values/variables.md msgid "" @@ -2879,8 +2952,7 @@ msgid "" "`let`:" msgstr "" -#: src/types-and-values/variables.md src/control-flow-basics/loops.md -#: src/control-flow-basics/break-continue.md +#: src/types-and-values/variables.md src/control-flow-basics/loops/for.md #: src/control-flow-basics/blocks-and-scopes.md msgid "\"x: {x}\"" msgstr "" @@ -2959,7 +3031,7 @@ msgstr "" msgid "Unicode scalar values" msgstr "" -#: src/types-and-values/values.md +#: src/types-and-values/values.md src/android/aidl/types/primitives.md msgid "`char`" msgstr "" @@ -2971,7 +3043,7 @@ msgstr "" msgid "Booleans" msgstr "" -#: src/types-and-values/values.md +#: src/types-and-values/values.md src/android/aidl/types/primitives.md msgid "`bool`" msgstr "" @@ -3077,7 +3149,9 @@ msgstr "" msgid "\"final sentence: {}\"" msgstr "" -#: src/types-and-values/strings.md src/async/control-flow/join.md +#: src/types-and-values/strings.md +#: src/methods-and-traits/traits/associated-types.md +#: src/async/control-flow/join.md msgid "\"{:?}\"" msgstr "" @@ -3122,6 +3196,12 @@ msgid "" "amount of `#` on either side of the quotes:" msgstr "" +#: src/types-and-values/strings.md +msgid "" +"Using `{:?}` is a convenient way to print array/vector/struct of values for " +"debugging purposes, and it's commonly used in code." +msgstr "" + #: src/types-and-values/inference.md msgid "Rust will look at how the variable is _used_ to determine the type:" msgstr "" @@ -3170,9 +3250,8 @@ msgid "// The base case.\n" msgstr "" #: src/types-and-values/exercise.md src/control-flow-basics/exercise.md -#, fuzzy msgid "\"Implement this\"" -msgstr "Gerçekleştirim" +msgstr "" #: src/types-and-values/exercise.md msgid "// The recursive case.\n" @@ -3183,7 +3262,7 @@ msgid "\"fib(n) = {}\"" msgstr "" #: src/control-flow-basics.md -msgid "[Conditionals](./control-flow-basics/conditionals.md) (5 minutes)" +msgid "[if Expressions](./control-flow-basics/if.md) (4 minutes)" msgstr "" #: src/control-flow-basics.md @@ -3192,12 +3271,12 @@ msgstr "" #: src/control-flow-basics.md msgid "" -"[break and continue](./control-flow-basics/break-continue.md) (5 minutes)" +"[break and continue](./control-flow-basics/break-continue.md) (4 minutes)" msgstr "" #: src/control-flow-basics.md msgid "" -"[Blocks and Scopes](./control-flow-basics/blocks-and-scopes.md) (10 minutes)" +"[Blocks and Scopes](./control-flow-basics/blocks-and-scopes.md) (5 minutes)" msgstr "" #: src/control-flow-basics.md @@ -3210,79 +3289,61 @@ msgstr "" #: src/control-flow-basics.md msgid "" -"[Exercise: Collatz Sequence](./control-flow-basics/exercise.md) (30 minutes)" +"[Exercise: Collatz Sequence](./control-flow-basics/exercise.md) (15 minutes)" msgstr "" -#: src/control-flow-basics.md src/tuples-and-arrays.md src/borrowing.md -msgid "This segment should take about 1 hour" -msgstr "" - -#: src/control-flow-basics/conditionals.md -msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:" -msgstr "" - -#: src/control-flow-basics/conditionals.md -msgid "Blocks are delimited by curly braces." -msgstr "" - -#: src/control-flow-basics/conditionals.md -msgid "" -"Line comments are started with `//`, block comments are delimited by `/* ... " -"*/`." -msgstr "" - -#: src/control-flow-basics/conditionals.md -msgid "Keywords like `if` and `while` work the same." -msgstr "" - -#: src/control-flow-basics/conditionals.md -msgid "Variable assignment is done with `=`, comparison is done with `==`." +#: src/control-flow-basics.md src/generics.md src/modules.md +msgid "This segment should take about 40 minutes" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "`if` expressions" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "" "You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/" "if-expr.html#if-expressions) exactly like `if` statements in other languages:" msgstr "" -#: src/control-flow-basics/conditionals.md -msgid "\"small\"" +#: src/control-flow-basics/if.md +msgid "\"zero!\"" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "\"biggish\"" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "\"huge\"" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "" "In addition, you can use `if` as an expression. The last expression of each " "block becomes the value of the `if` expression:" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md +msgid "\"small\"" +msgstr "" + +#: src/control-flow-basics/if.md msgid "\"large\"" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "\"number size: {}\"" msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "" "Because `if` is an expression and must have a particular type, both of its " "branch blocks must have the same type. Show what happens if you add `;` " "after `\"small\"` in the second example." msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md msgid "" "When `if` is used in an expression, the expression must have a `;` to " "separate it from the next statement. Remove the `;` before `println!` to see " @@ -3308,39 +3369,43 @@ msgstr "" msgid "\"Final x: {x}\"" msgstr "" -#: src/control-flow-basics/loops.md -msgid "`for`" +#: src/control-flow-basics/loops/for.md +msgid "" +"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) iterates " +"over ranges of values or the items in a collection:" msgstr "" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops/for.md +msgid "\"elem: {elem}\"" +msgstr "" + +#: src/control-flow-basics/loops/for.md msgid "" -"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) iterates " -"over ranges of values:" +"Under the hood `for` loops use a concept called \"iterators\" to handle " +"iterating over different kinds of ranges/collections. Iterators will be " +"discussed in more detail later." msgstr "" -#: src/control-flow-basics/loops.md -msgid "`loop`" +#: src/control-flow-basics/loops/for.md +msgid "" +"Note that the `for` loop only iterates to `4`. Show the `1..=5` syntax for " +"an inclusive range." msgstr "" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops/loop.md msgid "" "The [`loop` statement](https://doc.rust-lang.org/std/keyword.loop.html) just " "loops forever, until a `break`." msgstr "" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops/loop.md msgid "\"{i}\"" msgstr "" -#: src/control-flow-basics/loops.md -msgid "" -"We will discuss iteration later; for now, just stick to range expressions." -msgstr "" - -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/break-continue.md msgid "" -"Note that the `for` loop only iterates to `4`. Show the `1..=5` syntax for " -"an inclusive range." +"If you want to immediately start the next iteration use [`continue`](https://" +"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)." msgstr "" #: src/control-flow-basics/break-continue.md @@ -3350,33 +3415,31 @@ msgid "" "`loop`, this can take an optional expression that becomes the value of the " "`loop` expression." msgstr "" +"Bir döngüden erken çıkmak istiyorsanız [`break`](https://doc.rust-lang.org/" +"reference/expressions/loop-expr.html#break-expressions) kullanın. `loop` " +"için bu, `loop` ifadesinin değeri haline gelen isteğe bağlı (optional) bir " +"ifadeyi alabilir." -#: src/control-flow-basics/break-continue.md -msgid "" -"If you want to immediately start the next iteration use [`continue`](https://" -"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)." -msgstr "" - -#: src/control-flow-basics/break-continue.md -msgid "\"{result}\"" +#: src/control-flow-basics/break-continue.md src/std-traits/exercise.md +#: src/std-traits/solution.md src/smart-pointers/trait-objects.md +#: src/modules/exercise.md src/modules/solution.md +#: src/android/build-rules/library.md +#: src/android/interoperability/cpp/rust-bridge.md +#: src/async/pitfalls/cancellation.md +msgid "\"{}\"" msgstr "" -#: src/control-flow-basics/break-continue.md +#: src/control-flow-basics/break-continue/labels.md msgid "" "Both `continue` and `break` can optionally take a label argument which is " "used to break out of nested loops:" msgstr "" -#: src/control-flow-basics/break-continue.md -msgid "\"x: {x}, i: {i}\"" -msgstr "" - -#: src/control-flow-basics/break-continue.md -msgid "" -"In this case we break the outer loop after 3 iterations of the inner loop." +#: src/control-flow-basics/break-continue/labels.md +msgid "\"elements searched: {elements_searched}\"" msgstr "" -#: src/control-flow-basics/break-continue.md +#: src/control-flow-basics/break-continue/labels.md msgid "" "Note that `loop` is the only looping construct which returns a non-trivial " "value. This is because it's guaranteed to be entered at least once (unlike " @@ -3405,64 +3468,60 @@ msgid "" msgstr "" #: src/control-flow-basics/blocks-and-scopes.md -msgid "Scopes and Shadowing" -msgstr "Kapsamlar (Scopes) ve Gölgeleme (Shadowing)" +msgid "" +"You can show how the value of the block changes by changing the last line in " +"the block. For instance, adding/removing a semicolon or using a `return`." +msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "A variable's scope is limited to the enclosing block." msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "" "You can shadow variables, both those from outer scopes and variables from " "the same scope:" msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "\"before: {a}\"" msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md src/std-traits/from-and-into.md -#: src/slices-and-lifetimes/solution.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md +#: src/std-traits/from-and-into.md src/slices-and-lifetimes/solution.md msgid "\"hello\"" -msgstr "" +msgstr "\"merhaba\"" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "\"inner scope: {a}\"" msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "\"shadowed in inner scope: {a}\"" msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "\"after: {a}\"" msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md -msgid "" -"You can show how the value of the block changes by changing the last line in " -"the block. For instance, adding/removing a semicolon or using a `return`." -msgstr "" - -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "" "Show that a variable's scope is limited by adding a `b` in the inner block " "in the last example, and then trying to access it outside that block." msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "" "Shadowing is different from mutation, because after shadowing both " "variable's memory locations exist at the same time. Both are available under " "the same name, depending where you use it in the code." msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "A shadowing variable can have a different type." msgstr "" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md msgid "" "Shadowing looks obscure at first, but is convenient for holding on to values " "after `.unwrap()`." @@ -3727,16 +3786,15 @@ msgstr "" #: src/welcome-day-1-afternoon.md src/welcome-day-2-afternoon.md #: src/welcome-day-3-afternoon.md src/welcome-day-4-afternoon.md -#, fuzzy msgid "Welcome Back" -msgstr "Hoşgeldiniz" +msgstr "Tekrar hoşgeldiniz" #: src/welcome-day-1-afternoon.md -msgid "[Tuples and Arrays](./tuples-and-arrays.md) (1 hour)" +msgid "[Tuples and Arrays](./tuples-and-arrays.md) (35 minutes)" msgstr "" #: src/welcome-day-1-afternoon.md -msgid "[References](./references.md) (50 minutes)" +msgid "[References](./references.md) (35 minutes)" msgstr "" #: src/welcome-day-1-afternoon.md @@ -3745,7 +3803,7 @@ msgstr "" #: src/welcome-day-1-afternoon.md msgid "" -"Including 10 minute breaks, this session should take about 2 hours and 55 " +"Including 10 minute breaks, this session should take about 2 hours and 15 " "minutes" msgstr "" @@ -3759,15 +3817,17 @@ msgid "[Array Iteration](./tuples-and-arrays/iteration.md) (3 minutes)" msgstr "" #: src/tuples-and-arrays.md -msgid "[Pattern Matching](./tuples-and-arrays/match.md) (10 minutes)" +msgid "" +"[Patterns and Destructuring](./tuples-and-arrays/destructuring.md) (5 " +"minutes)" msgstr "" #: src/tuples-and-arrays.md -msgid "[Destructuring](./tuples-and-arrays/destructuring.md) (5 minutes)" +msgid "[Exercise: Nested Arrays](./tuples-and-arrays/exercise.md) (15 minutes)" msgstr "" -#: src/tuples-and-arrays.md -msgid "[Exercise: Nested Arrays](./tuples-and-arrays/exercise.md) (30 minutes)" +#: src/tuples-and-arrays.md src/references.md +msgid "This segment should take about 35 minutes" msgstr "" #: src/tuples-and-arrays/tuples-and-arrays.md @@ -3778,7 +3838,6 @@ msgid "" msgstr "" #: src/tuples-and-arrays/tuples-and-arrays.md -#: src/tuples-and-arrays/destructuring.md msgid "Arrays" msgstr "" @@ -3791,7 +3850,6 @@ msgid "`[20, 30, 40]`, `[0; 3]`" msgstr "" #: src/tuples-and-arrays/tuples-and-arrays.md -#: src/tuples-and-arrays/destructuring.md msgid "Tuples" msgstr "" @@ -3899,206 +3957,55 @@ msgid "" "`debug_assert!` compile to nothing in release builds." msgstr "" -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md msgid "" -"The `match` keyword lets you match a value against one or more _patterns_. " -"The comparisons are done from top to bottom and the first match wins." -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "The patterns can be simple values, similarly to `switch` in C and C++:" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "'x'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "'q'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "\"Quitting\"" -msgstr "" - -#: src/tuples-and-arrays/match.md src/std-traits/solution.md -#: src/error-handling/exercise.md src/error-handling/solution.md -msgid "'a'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "'s'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "'w'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "'d'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "\"Moving around\"" -msgstr "" - -#: src/tuples-and-arrays/match.md src/error-handling/exercise.md -#: src/error-handling/solution.md -msgid "'0'" -msgstr "" - -#: src/tuples-and-arrays/match.md src/error-handling/exercise.md -#: src/error-handling/solution.md -msgid "'9'" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "\"Number input\"" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "\"Lowercase: {key}\"" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "\"Something else\"" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"The `_` pattern is a wildcard pattern which matches any value. The " -"expressions _must_ be irrefutable, meaning that it covers every possibility, " -"so `_` is often used as the final catch-all case." -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"Match can be used as an expression. Just like `if`, each match arm must have " -"the same type. The type is the last expression of the block, if any. In the " -"example above, the type is `()`." -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"A variable in the pattern (`key` in this example) will create a binding that " -"can be used within the match arm." -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "A match guard causes the arm to match only if the condition is true." -msgstr "" - -#: src/tuples-and-arrays/match.md src/user-defined-types/named-structs.md -#: src/user-defined-types/enums.md src/methods-and-traits/methods.md -msgid "Key Points:" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"You might point out how some specific characters are being used when in a " -"pattern" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "`|` as an `or`" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "`..` can expand as much as it needs to be" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "`1..=5` represents an inclusive range" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "`_` is a wild card" -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"Match guards as a separate syntax feature are important and necessary when " -"we wish to concisely express more complex ideas than patterns alone would " -"allow." -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"They are not the same as separate `if` expression inside of the match arm. " -"An `if` expression inside of the branch block (after `=>`) happens after the " -"match arm is selected. Failing the `if` condition inside of that block won't " -"result in other arms of the original `match` expression being considered." -msgstr "" - -#: src/tuples-and-arrays/match.md -msgid "" -"The condition defined in the guard applies to every expression in a pattern " -"with an `|`." -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "" -"Destructuring is a way of extracting data from a data structure by writing a " -"pattern that is matched up to the data structure, binding variables to " -"subcomponents of the data structure." -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "You can destructure tuples and arrays by matching on their elements:" -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"on Y axis\"" +"When working with tuples and other structured values it's common to want to " +"extract the inner values into local variables. This can be done manually by " +"directly accessing the inner values:" msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "\"on X axis\"" +msgid "\"left: {left}, right: {right}\"" msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "\"left of Y axis\"" -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"below X axis\"" -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"first quadrant\"" -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"Tell me about {triple:?}\"" -msgstr "" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"First is 0, y = {y}, and z = {z}\"" +msgid "" +"However, Rust also supports using pattern matching to destructure a larger " +"value into its constituent parts:" msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "\"First is 1 and the rest were ignored\"" +msgid "This works with any kind of structured value:" msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "\"All elements were ignored\"" +msgid "\"a: {a}, b: {b}\"" msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "Create a new array pattern using `_` to represent an element." +msgid "" +"The patterns used here are \"irrefutable\", meaning that the compiler can " +"statically verify that the value on the right of `=` has the same structure " +"as the pattern." msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "Add more values to the array." +msgid "" +"A variable name is an irrefutable pattern that always matches any value, " +"hence why we can also use `let` to declare a single variable." msgstr "" #: src/tuples-and-arrays/destructuring.md msgid "" -"Point out that how `..` will expand to account for different number of " -"elements." +"Rust also supports using patterns in conditionals, allowing for equality " +"comparison and destructuring to happen at the same time. This form of " +"pattern matching will be discussed in more detail later." msgstr "" #: src/tuples-and-arrays/destructuring.md -msgid "Show matching against the tail with patterns `[.., b]` and `[a@..,b]`" +msgid "" +"Edit the examples above to show the compiler error when the pattern doesn't " +"match the value being matched on." msgstr "" #: src/tuples-and-arrays/exercise.md @@ -4130,6 +4037,10 @@ msgstr "" msgid "// TODO: remove this when you're done with your implementation.\n" msgstr "" +#: src/tuples-and-arrays/exercise.md src/tuples-and-arrays/solution.md +msgid "//\n" +msgstr "" + #: src/tuples-and-arrays/exercise.md src/tuples-and-arrays/solution.md msgid "// <-- the comment makes rustfmt add a newline\n" msgstr "" @@ -4142,10 +4053,6 @@ msgstr "" msgid "\"transposed: {:#?}\"" msgstr "" -#: src/tuples-and-arrays/solution.md -msgid "//\n" -msgstr "" - #: src/references.md msgid "[Shared References](./references/shared.md) (10 minutes)" msgstr "" @@ -4155,11 +4062,7 @@ msgid "[Exclusive References](./references/exclusive.md) (10 minutes)" msgstr "" #: src/references.md -msgid "[Exercise: Geometry](./references/exercise.md) (30 minutes)" -msgstr "" - -#: src/references.md src/user-defined-types.md src/pattern-matching.md -msgid "This segment should take about 50 minutes" +msgid "[Exercise: Geometry](./references/exercise.md) (15 minutes)" msgstr "" #: src/references/shared.md @@ -4206,8 +4109,8 @@ msgstr "" #: src/references/shared.md msgid "" "Rust will auto-dereference in some cases, in particular when invoking " -"methods (try `r.count_ones()`). There is no need for an `->` operator like " -"in C++." +"methods (try `r.is_ascii()`). There is no need for an `->` operator like in " +"C++." msgstr "" #: src/references/shared.md @@ -4333,6 +4236,10 @@ msgid "" "[Exercise: Elevator Events](./user-defined-types/exercise.md) (15 minutes)" msgstr "" +#: src/user-defined-types.md src/borrowing.md +msgid "This segment should take about 50 minutes" +msgstr "" + #: src/user-defined-types/named-structs.md msgid "Like C and C++, Rust has support for custom structs:" msgstr "" @@ -4354,6 +4261,11 @@ msgstr "" msgid "\"Jackie\"" msgstr "" +#: src/user-defined-types/named-structs.md src/user-defined-types/enums.md +#: src/pattern-matching/match.md src/methods-and-traits/methods.md +msgid "Key Points:" +msgstr "" + #: src/user-defined-types/named-structs.md msgid "Structs work like in C or C++." msgstr "" @@ -4609,7 +4521,7 @@ msgstr "" #: src/user-defined-types/static-and-const.md msgid "\"Welcome to RustOS 3.14\"" -msgstr "" +msgstr "RustOS 3.14'e Hoş Geldiniz" #: src/user-defined-types/static-and-const.md msgid "\"{BANNER}\"" @@ -4849,7 +4761,7 @@ msgstr "" #: src/welcome-day-2.md msgid "Pattern matching: extracting data from structures." -msgstr "" +msgstr "Desen eşleştirme: yapılardan veri çıkarma." #: src/welcome-day-2.md msgid "Methods: associating functions with types." @@ -4873,23 +4785,27 @@ msgid "[Welcome](./welcome-day-2.md) (3 minutes)" msgstr "" #: src/welcome-day-2.md -msgid "[Pattern Matching](./pattern-matching.md) (50 minutes)" +msgid "[Pattern Matching](./pattern-matching.md) (1 hour)" msgstr "" #: src/welcome-day-2.md -msgid "[Methods and Traits](./methods-and-traits.md) (55 minutes)" +msgid "[Methods and Traits](./methods-and-traits.md) (45 minutes)" msgstr "" #: src/welcome-day-2.md -msgid "[Generics](./generics.md) (45 minutes)" +msgid "[Generics](./generics.md) (40 minutes)" msgstr "" #: src/welcome-day-2.md src/welcome-day-4.md msgid "" -"Including 10 minute breaks, this session should take about 3 hours and 5 " +"Including 10 minute breaks, this session should take about 2 hours and 50 " "minutes" msgstr "" +#: src/pattern-matching.md +msgid "[Matching Values](./pattern-matching/match.md) (10 minutes)" +msgstr "" + #: src/pattern-matching.md msgid "[Destructuring](./pattern-matching/destructuring.md) (10 minutes)" msgstr "" @@ -4904,122 +4820,258 @@ msgid "" "minutes)" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "Like tuples, structs and enums can also be destructured by matching:" +#: src/pattern-matching.md src/memory-management.md src/testing.md +msgid "This segment should take about 1 hour" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "Structs" -msgstr "Yapılar (Structs)" +#: src/pattern-matching/match.md +msgid "" +"The `match` keyword lets you match a value against one or more _patterns_. " +"The comparisons are done from top to bottom and the first match wins." +msgstr "" -#: src/pattern-matching/destructuring.md -msgid "\"x.0 = 1, b = {b}, y = {y}\"" +#: src/pattern-matching/match.md +msgid "The patterns can be simple values, similarly to `switch` in C and C++:" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "\"y = 2, x = {i:?}\"" +#: src/pattern-matching/match.md +msgid "'x'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "\"y = {y}, other fields were ignored\"" +#: src/pattern-matching/match.md +msgid "'q'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "" -"Patterns can also be used to bind variables to parts of your values. This is " -"how you inspect the structure of your types. Let us start with a simple " -"`enum` type:" +#: src/pattern-matching/match.md +msgid "\"Quitting\"" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "\"cannot divide {n} into two equal parts\"" +#: src/pattern-matching/match.md src/std-traits/solution.md +#: src/error-handling/exercise.md src/error-handling/solution.md +msgid "'a'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "\"{n} divided in two is {half}\"" +#: src/pattern-matching/match.md +msgid "'s'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "\"sorry, an error happened: {msg}\"" +#: src/pattern-matching/match.md +msgid "'w'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "" -"Here we have used the arms to _destructure_ the `Result` value. In the first " -"arm, `half` is bound to the value inside the `Ok` variant. In the second " -"arm, `msg` is bound to the error message." +#: src/pattern-matching/match.md +msgid "'d'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "Change the literal values in `foo` to match with the other patterns." +#: src/pattern-matching/match.md +msgid "\"Moving around\"" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "Add a new field to `Foo` and make changes to the pattern as needed." +#: src/pattern-matching/match.md src/error-handling/exercise.md +#: src/error-handling/solution.md +msgid "'0'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "" -"The distinction between a capture and a constant expression can be hard to " -"spot. Try changing the `2` in the second arm to a variable, and see that it " -"subtly doesn't work. Change it to a `const` and see it working again." +#: src/pattern-matching/match.md src/error-handling/exercise.md +#: src/error-handling/solution.md +msgid "'9'" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "" -"The `if`/`else` expression is returning an enum that is later unpacked with " -"a `match`." +#: src/pattern-matching/match.md +msgid "\"Number input\"" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "" -"You can try adding a third variant to the enum definition and displaying the " -"errors when running the code. Point out the places where your code is now " -"inexhaustive and how the compiler tries to give you hints." +#: src/pattern-matching/match.md +msgid "\"Lowercase: {key}\"" msgstr "" -#: src/pattern-matching/destructuring.md -msgid "" -"The values in the enum variants can only be accessed after being pattern " -"matched." +#: src/pattern-matching/match.md +msgid "\"Something else\"" msgstr "" -#: src/pattern-matching/destructuring.md +#: src/pattern-matching/match.md msgid "" -"Demonstrate what happens when the search is inexhaustive. Note the advantage " -"the Rust compiler provides by confirming when all cases are handled." +"The `_` pattern is a wildcard pattern which matches any value. The " +"expressions _must_ be exhaustive, meaning that it covers every possibility, " +"so `_` is often used as the final catch-all case." msgstr "" -#: src/pattern-matching/destructuring.md +#: src/pattern-matching/match.md msgid "" -"Save the result of `divide_in_two` in the `result` variable and `match` it " -"in a loop. That won't compile because `msg` is consumed when matched. To fix " -"it, match `&result` instead of `result`. That will make `msg` a reference so " -"it won't be consumed. This [\"match ergonomics\"](https://rust-lang.github." -"io/rfcs/2005-match-ergonomics.html) appeared in Rust 2018. If you want to " -"support older Rust, replace `msg` with `ref msg` in the pattern." +"Match can be used as an expression. Just like `if`, each match arm must have " +"the same type. The type is the last expression of the block, if any. In the " +"example above, the type is `()`." msgstr "" -#: src/pattern-matching/let-control-flow.md +#: src/pattern-matching/match.md msgid "" -"Rust has a few control flow constructs which differ from other languages. " -"They are used for pattern matching:" +"A variable in the pattern (`key` in this example) will create a binding that " +"can be used within the match arm." msgstr "" -#: src/pattern-matching/let-control-flow.md -msgid "`if let` expressions" +#: src/pattern-matching/match.md +msgid "A match guard causes the arm to match only if the condition is true." msgstr "" -#: src/pattern-matching/let-control-flow.md -msgid "`while let` expressions" -msgstr "`while let` ifadeleri" +#: src/pattern-matching/match.md +msgid "" +"You might point out how some specific characters are being used when in a " +"pattern" +msgstr "" -#: src/pattern-matching/let-control-flow.md -msgid "`match` expressions" +#: src/pattern-matching/match.md +msgid "`|` as an `or`" msgstr "" -#: src/pattern-matching/let-control-flow.md -msgid "" +#: src/pattern-matching/match.md +msgid "`..` can expand as much as it needs to be" +msgstr "" + +#: src/pattern-matching/match.md +msgid "`1..=5` represents an inclusive range" +msgstr "" + +#: src/pattern-matching/match.md +msgid "`_` is a wild card" +msgstr "" + +#: src/pattern-matching/match.md +msgid "" +"Match guards as a separate syntax feature are important and necessary when " +"we wish to concisely express more complex ideas than patterns alone would " +"allow." +msgstr "" + +#: src/pattern-matching/match.md +msgid "" +"They are not the same as separate `if` expression inside of the match arm. " +"An `if` expression inside of the branch block (after `=>`) happens after the " +"match arm is selected. Failing the `if` condition inside of that block won't " +"result in other arms of the original `match` expression being considered." +msgstr "" + +#: src/pattern-matching/match.md +msgid "" +"The condition defined in the guard applies to every expression in a pattern " +"with an `|`." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "Like tuples, structs and enums can also be destructured by matching:" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "Structs" +msgstr "Yapılar (Structs)" + +#: src/pattern-matching/destructuring.md +msgid "\"x.0 = 1, b = {b}, y = {y}\"" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "\"y = 2, x = {i:?}\"" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "\"y = {y}, other fields were ignored\"" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"Patterns can also be used to bind variables to parts of your values. This is " +"how you inspect the structure of your types. Let us start with a simple " +"`enum` type:" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "\"cannot divide {n} into two equal parts\"" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "\"{n} divided in two is {half}\"" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "\"sorry, an error happened: {msg}\"" +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"Here we have used the arms to _destructure_ the `Result` value. In the first " +"arm, `half` is bound to the value inside the `Ok` variant. In the second " +"arm, `msg` is bound to the error message." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "Change the literal values in `foo` to match with the other patterns." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "Add a new field to `Foo` and make changes to the pattern as needed." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"The distinction between a capture and a constant expression can be hard to " +"spot. Try changing the `2` in the second arm to a variable, and see that it " +"subtly doesn't work. Change it to a `const` and see it working again." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"The `if`/`else` expression is returning an enum that is later unpacked with " +"a `match`." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"You can try adding a third variant to the enum definition and displaying the " +"errors when running the code. Point out the places where your code is now " +"inexhaustive and how the compiler tries to give you hints." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"The values in the enum variants can only be accessed after being pattern " +"matched." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"Demonstrate what happens when the search is inexhaustive. Note the advantage " +"the Rust compiler provides by confirming when all cases are handled." +msgstr "" + +#: src/pattern-matching/destructuring.md +msgid "" +"Save the result of `divide_in_two` in the `result` variable and `match` it " +"in a loop. That won't compile because `msg` is consumed when matched. To fix " +"it, match `&result` instead of `result`. That will make `msg` a reference so " +"it won't be consumed. This [\"match ergonomics\"](https://rust-lang.github." +"io/rfcs/2005-match-ergonomics.html) appeared in Rust 2018. If you want to " +"support older Rust, replace `msg` with `ref msg` in the pattern." +msgstr "" + +#: src/pattern-matching/let-control-flow.md +msgid "" +"Rust has a few control flow constructs which differ from other languages. " +"They are used for pattern matching:" +msgstr "" + +#: src/pattern-matching/let-control-flow.md +msgid "`if let` expressions" +msgstr "`if let` ifadeleri" + +#: src/pattern-matching/let-control-flow.md +msgid "`while let` expressions" +msgstr "`while let` ifadeleri" + +#: src/pattern-matching/let-control-flow.md +msgid "`match` expressions" +msgstr "`match` ifadeleri" + +#: src/pattern-matching/let-control-flow.md +msgid "" "The [`if let` expression](https://doc.rust-lang.org/reference/expressions/if-" "expr.html#if-let-expressions) lets you execute different code depending on " "whether a value matches a pattern:" @@ -5030,9 +5082,8 @@ msgid "\"slept for {:?}\"" msgstr "" #: src/pattern-matching/let-control-flow.md -#, fuzzy msgid "`let else` expressions" -msgstr "`while let` ifadeleri" +msgstr "`let else` ifadeleri" #: src/pattern-matching/let-control-flow.md msgid "" @@ -5115,7 +5166,7 @@ msgstr "" #: src/pattern-matching/let-control-flow.md msgid "while-let" -msgstr "" +msgstr "while-let" #: src/pattern-matching/let-control-flow.md msgid "" @@ -5198,11 +5249,7 @@ msgid "[Traits](./methods-and-traits/traits.md) (10 minutes)" msgstr "" #: src/methods-and-traits.md -msgid "[Deriving](./methods-and-traits/deriving.md) (5 minutes)" -msgstr "" - -#: src/methods-and-traits.md -msgid "[Trait Objects](./methods-and-traits/trait-objects.md) (10 minutes)" +msgid "[Deriving](./methods-and-traits/deriving.md) (3 minutes)" msgstr "" #: src/methods-and-traits.md @@ -5210,10 +5257,6 @@ msgid "" "[Exercise: Generic Logger](./methods-and-traits/exercise.md) (20 minutes)" msgstr "" -#: src/methods-and-traits.md -msgid "This segment should take about 55 minutes" -msgstr "" - #: src/methods-and-traits/methods.md msgid "" "Rust allows you to associate functions with your new types. You do this with " @@ -5350,36 +5393,79 @@ msgid "" msgstr "" #: src/methods-and-traits/traits.md +msgid "/// Return a sentence from this pet.\n" +msgstr "" + +#: src/methods-and-traits/traits.md +msgid "/// Print a string to the terminal greeting this pet.\n" +msgstr "" + +#: src/methods-and-traits/traits.md +msgid "" +"A trait defines a number of methods that types must have in order to " +"implement the trait." +msgstr "" + +#: src/methods-and-traits/traits.md +msgid "" +"In the \"Generics\" segment, next, we will see how to build functionality " +"that is generic over all types implementing a trait." +msgstr "" + +#: src/methods-and-traits/traits/implementing.md +msgid "Implementing Traits" +msgstr "" + +#: src/methods-and-traits/traits/implementing.md msgid "\"Oh you're a cutie! What's your name? {}\"" msgstr "" -#: src/methods-and-traits/traits.md src/methods-and-traits/trait-objects.md +#: src/methods-and-traits/traits/implementing.md +#: src/smart-pointers/trait-objects.md msgid "\"Woof, my name is {}!\"" msgstr "" -#: src/methods-and-traits/traits.md src/methods-and-traits/trait-objects.md -msgid "\"Miau!\"" +#: src/methods-and-traits/traits/implementing.md +#: src/smart-pointers/trait-objects.md +msgid "\"Fido\"" msgstr "" -#: src/methods-and-traits/traits.md src/methods-and-traits/trait-objects.md -msgid "\"Fido\"" +#: src/methods-and-traits/traits/implementing.md +msgid "" +"To implement `Trait` for `Type`, you use an `impl Trait for Type { .. }` " +"block." msgstr "" -#: src/methods-and-traits/traits.md +#: src/methods-and-traits/traits/implementing.md msgid "" -"A trait defines a number of methods that types must have in order to " -"implement the trait." +"Unlike Go interfaces, just having matching methods is not enough: a `Cat` " +"type with a `talk()` method would not automatically satisfy `Pet` unless it " +"is in an `impl Pet` block." msgstr "" -#: src/methods-and-traits/traits.md -msgid "Traits are implemented in an `impl for { .. }` block." +#: src/methods-and-traits/traits/implementing.md +msgid "" +"Traits may provide default implementations of some methods. Default " +"implementations can rely on all the methods of the trait. In this case, " +"`greet` is provided, and relies on `talk`." msgstr "" -#: src/methods-and-traits/traits.md +#: src/methods-and-traits/traits/associated-types.md +msgid "" +"Associated types allow are placeholder types which are filled in by the " +"trait implementation." +msgstr "" + +#: src/methods-and-traits/traits/associated-types.md +msgid "" +"Associated types are sometimes also called \"output types\". The key " +"observation is that the implementer, not the caller, chooses this type." +msgstr "" + +#: src/methods-and-traits/traits/associated-types.md msgid "" -"Traits may specify pre-implemented (provided) methods and methods that users " -"are required to implement themselves. Provided methods can rely on required " -"methods. In this case, `greet` is provided, and relies on `talk`." +"Many standard library traits have associated types, including arithmetic " +"operators and `Iterator`." msgstr "" #: src/methods-and-traits/deriving.md @@ -5415,200 +5501,73 @@ msgid "" "serialization support for a struct using `#[derive(Serialize)]`." msgstr "" -#: src/methods-and-traits/trait-objects.md +#: src/methods-and-traits/exercise.md msgid "" -"Trait objects allow for values of different types, for instance in a " -"collection:" +"Let's design a simple logging utility, using a trait `Logger` with a `log` " +"method. Code which might log its progress can then take an `&impl Logger`. " +"In testing, this might put messages in the test logfile, while in a " +"production build it would send messages to a log server." msgstr "" -#: src/methods-and-traits/trait-objects.md -msgid "\"Hello, who are you? {}\"" +#: src/methods-and-traits/exercise.md +msgid "" +"However, the `StderrLogger` given below logs all messages, regardless of " +"verbosity. Your task is to write a `VerbosityFilter` type that will ignore " +"messages above a maximum verbosity." msgstr "" -#: src/methods-and-traits/trait-objects.md -msgid "Memory layout after allocating `pets`:" +#: src/methods-and-traits/exercise.md +msgid "" +"This is a common pattern: a struct wrapping a trait implementation and " +"implementing that same trait, adding behavior in the process. What other " +"kinds of wrappers might be useful in a logging utility?" +msgstr "" + +#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md +msgid "/// Log a message at the given verbosity level.\n" +msgstr "" + +#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md +msgid "\"verbosity={verbosity}: {message}\"" +msgstr "" + +#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md +msgid "\"FYI\"" +msgstr "" + +#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md +msgid "\"Uhoh\"" +msgstr "" + +#: src/methods-and-traits/exercise.md +msgid "// TODO: Define and implement `VerbosityFilter`.\n" +msgstr "" + +#: src/methods-and-traits/solution.md +msgid "/// Only log messages up to the given verbosity level.\n" +msgstr "" + +#: src/generics.md +msgid "[Generic Functions](./generics/generic-functions.md) (5 minutes)" +msgstr "" + +#: src/generics.md +msgid "[Generic Data Types](./generics/generic-data.md) (10 minutes)" +msgstr "" + +#: src/generics.md +msgid "[Trait Bounds](./generics/trait-bounds.md) (10 minutes)" +msgstr "" + +#: src/generics.md +msgid "[impl Trait](./generics/impl-trait.md) (5 minutes)" +msgstr "" + +#: src/generics.md +msgid "[Exercise: Generic min](./generics/exercise.md) (10 minutes)" msgstr "" -#: src/methods-and-traits/trait-objects.md -msgid "" -"```bob\n" -" Stack Heap\n" -".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " -"- -.\n" -": : : :\n" -": pets : : +----+----+----+----" -"+ :\n" -": +-----------+-------+ : : +-----+-----+ .->| F | i | d | o " -"| :\n" -": | ptr | o---+---+-----+-->| o o | o o | | +----+----+----+----" -"+ :\n" -": | len | 2 | : : +-|-|-+-|-|-+ " -"`---------. :\n" -": | capacity | 2 | : : | | | | data " -"| :\n" -": +-----------+-------+ : : | | | | +-------+--|-------" -"+ :\n" -": : : | | | '-->| name | o, 4, 4 " -"| :\n" -": : : | | | | age | 5 " -"| :\n" -"`- - - - - - - - - - - - - -' : | | | +-------+----------" -"+ :\n" -" : | | " -"| :\n" -" : | | | " -"vtable :\n" -" : | | | +----------------------" -"+ :\n" -" : | | '---->| \"::talk\" " -"| :\n" -" : | | +----------------------" -"+ :\n" -" : | " -"| :\n" -" : | | " -"data :\n" -" : | | +-------+-------" -"+ :\n" -" : | '-->| lives | 9 " -"| :\n" -" : | +-------+-------" -"+ :\n" -" : " -"| :\n" -" : | " -"vtable :\n" -" : | +----------------------" -"+ :\n" -" : '---->| \"::talk\" " -"| :\n" -" : +----------------------" -"+ :\n" -" : :\n" -" '- - - - - - - - - - - - - - - - - - - - - " -"- -'\n" -"```" -msgstr "" - -#: src/methods-and-traits/trait-objects.md -msgid "" -"Types that implement a given trait may be of different sizes. This makes it " -"impossible to have things like `Vec` in the example above." -msgstr "" - -#: src/methods-and-traits/trait-objects.md -msgid "" -"`dyn Pet` is a way to tell the compiler about a dynamically sized type that " -"implements `Pet`." -msgstr "" - -#: src/methods-and-traits/trait-objects.md -msgid "" -"In the example, `pets` is allocated on the stack and the vector data is on " -"the heap. The two vector elements are _fat pointers_:" -msgstr "" - -#: src/methods-and-traits/trait-objects.md -msgid "" -"A fat pointer is a double-width pointer. It has two components: a pointer to " -"the actual object and a pointer to the [virtual method table](https://en." -"wikipedia.org/wiki/Virtual_method_table) (vtable) for the `Pet` " -"implementation of that particular object." -msgstr "" - -#: src/methods-and-traits/trait-objects.md -msgid "" -"The data for the `Dog` named Fido is the `name` and `age` fields. The `Cat` " -"has a `lives` field." -msgstr "" - -#: src/methods-and-traits/trait-objects.md -msgid "Compare these outputs in the above example:" -msgstr "" - -#: src/methods-and-traits/trait-objects.md src/std-traits/closures.md -msgid "\"{} {}\"" -msgstr "" - -#: src/methods-and-traits/trait-objects.md src/std-traits/exercise.md -#: src/std-traits/solution.md src/modules/exercise.md src/modules/solution.md -#: src/android/build-rules/library.md -#: src/android/interoperability/cpp/rust-bridge.md -#: src/async/pitfalls/cancellation.md -msgid "\"{}\"" -msgstr "" - -#: src/methods-and-traits/exercise.md -msgid "" -"Let's design a simple logging utility, using a trait `Logger` with a `log` " -"method. Code which might log its progress can then take an `&impl Logger`. " -"In testing, this might put messages in the test logfile, while in a " -"production build it would send messages to a log server." -msgstr "" - -#: src/methods-and-traits/exercise.md -msgid "" -"However, the `StderrLogger` given below logs all messages, regardless of " -"verbosity. Your task is to write a `VerbosityFilter` type that will ignore " -"messages above a maximum verbosity." -msgstr "" - -#: src/methods-and-traits/exercise.md -msgid "" -"This is a common pattern: a struct wrapping a trait implementation and " -"implementing that same trait, adding behavior in the process. What other " -"kinds of wrappers might be useful in a logging utility?" -msgstr "" - -#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md -msgid "/// Log a message at the given verbosity level.\n" -msgstr "" - -#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md -msgid "\"verbosity={verbosity}: {message}\"" -msgstr "" - -#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md -msgid "\"FYI\"" -msgstr "" - -#: src/methods-and-traits/exercise.md src/methods-and-traits/solution.md -msgid "\"Uhoh\"" -msgstr "" - -#: src/methods-and-traits/exercise.md -msgid "// TODO: Define and implement `VerbosityFilter`.\n" -msgstr "" - -#: src/methods-and-traits/solution.md -msgid "/// Only log messages up to the given verbosity level.\n" -msgstr "" - -#: src/generics.md -msgid "[Generic Functions](./generics/generic-functions.md) (5 minutes)" -msgstr "" - -#: src/generics.md -msgid "[Generic Data Types](./generics/generic-data.md) (15 minutes)" -msgstr "" - -#: src/generics.md -msgid "[Trait Bounds](./generics/trait-bounds.md) (10 minutes)" -msgstr "" - -#: src/generics.md -msgid "[impl Trait](./generics/impl-trait.md) (5 minutes)" -msgstr "" - -#: src/generics.md -msgid "[Exercise: Generic min](./generics/exercise.md) (10 minutes)" -msgstr "" - -#: src/generics.md src/smart-pointers.md src/iterators.md src/error-handling.md -msgid "This segment should take about 45 minutes" -msgstr "" - -#: src/generics/generic-functions.md +#: src/generics/generic-functions.md msgid "" "Rust supports generics, which lets you abstract algorithms or data " "structures (such as sorting or a binary tree) over the types used or stored." @@ -5837,13 +5796,19 @@ msgid "\"Baumann\"" msgstr "" #: src/welcome-day-2-afternoon.md -msgid "[Standard Library Types](./std-types.md) (1 hour and 10 minutes)" +msgid "[Standard Library Types](./std-types.md) (1 hour and 20 minutes)" msgstr "" #: src/welcome-day-2-afternoon.md msgid "[Standard Library Traits](./std-traits.md) (1 hour and 40 minutes)" msgstr "" +#: src/welcome-day-2-afternoon.md +msgid "" +"Including 10 minute breaks, this session should take about 3 hours and 10 " +"minutes" +msgstr "" + #: src/std-types.md msgid "[Standard Library](./std-types/std.md) (3 minutes)" msgstr "" @@ -5873,11 +5838,11 @@ msgid "[HashMap](./std-types/hashmap.md) (10 minutes)" msgstr "" #: src/std-types.md -msgid "[Exercise: Counter](./std-types/exercise.md) (10 minutes)" +msgid "[Exercise: Counter](./std-types/exercise.md) (20 minutes)" msgstr "" -#: src/std-types.md src/memory-management.md src/slices-and-lifetimes.md -msgid "This segment should take about 1 hour and 10 minutes" +#: src/std-types.md +msgid "This segment should take about 1 hour and 20 minutes" msgstr "" #: src/std-types.md @@ -5921,12 +5886,10 @@ msgid "Rust comes with extensive documentation. For example:" msgstr "" #: src/std-types/docs.md -#, fuzzy msgid "" "All of the details about [loops](https://doc.rust-lang.org/stable/reference/" "expressions/loop-expr.html)." msgstr "" -"[çalışma alanları](https://doc.rust-lang.org/cargo/reference/workspaces.html)" #: src/std-types/docs.md msgid "" @@ -5980,9 +5943,8 @@ msgid "" msgstr "" #: src/std-types/option.md -#, fuzzy msgid "Option" -msgstr "İstisnalar" +msgstr "" #: src/std-types/option.md msgid "" @@ -6102,7 +6064,7 @@ msgstr "" #: src/memory-management/review.md src/testing/unit-tests.md #: src/concurrency/scoped-threads.md msgid "\"Hello\"" -msgstr "" +msgstr "\"Merhaba\"" #: src/std-types/string.md msgid "\"s1: len = {}, capacity = {}\"" @@ -6202,6 +6164,15 @@ msgid "" "boundaries or not." msgstr "" +#: src/std-types/string.md +msgid "" +"Many types can be converted to a string with the [`to_string`](https://doc." +"rust-lang.org/std/string/trait.ToString.html#tymethod.to_string) method. " +"This trait is automatically implemented for all types that implement " +"`Display`, so anything that can be formatted can also be converted to a " +"string." +msgstr "" + #: src/std-types/vec.md msgid "" "[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) is the standard " @@ -6691,7 +6662,7 @@ msgstr "" #: src/std-traits/read-and-write.md src/slices-and-lifetimes/str.md msgid "\"World\"" -msgstr "" +msgstr "\"Dünya\"" #: src/std-traits/read-and-write.md msgid "\"Logged: {:?}\"" @@ -6775,9 +6746,8 @@ msgid "" msgstr "" #: src/std-traits/closures.md -#, fuzzy msgid "\"Calling function on {input}\"" -msgstr "Güvensiz (Unsafe) Fonksiyonları Çağırma" +msgstr "" #: src/std-traits/closures.md msgid "\"add_3: {}\"" @@ -6842,12 +6812,16 @@ msgid "" "keyword makes them capture by value." msgstr "" +#: src/std-traits/closures.md src/smart-pointers/trait-objects.md +msgid "\"{} {}\"" +msgstr "" + #: src/std-traits/closures.md msgid "\"Hi\"" msgstr "" #: src/std-traits/closures.md -msgid "\"there\"" +msgid "\"Greg\"" msgstr "" #: src/std-traits/exercise.md @@ -6903,16 +6877,16 @@ msgid "[Welcome](./welcome-day-3.md) (3 minutes)" msgstr "" #: src/welcome-day-3.md -msgid "[Memory Management](./memory-management.md) (1 hour and 10 minutes)" +msgid "[Memory Management](./memory-management.md) (1 hour)" msgstr "" #: src/welcome-day-3.md -msgid "[Smart Pointers](./smart-pointers.md) (45 minutes)" +msgid "[Smart Pointers](./smart-pointers.md) (55 minutes)" msgstr "" #: src/welcome-day-3.md msgid "" -"Including 10 minute breaks, this session should take about 2 hours and 15 " +"Including 10 minute breaks, this session should take about 2 hours and 20 " "minutes" msgstr "" @@ -6931,7 +6905,7 @@ msgid "[Ownership](./memory-management/ownership.md) (5 minutes)" msgstr "" #: src/memory-management.md -msgid "[Move Semantics](./memory-management/move.md) (10 minutes)" +msgid "[Move Semantics](./memory-management/move.md) (5 minutes)" msgstr "" #: src/memory-management.md @@ -7022,7 +6996,7 @@ msgstr "" #: src/memory-management/review.md msgid "\"world\"" -msgstr "" +msgstr "\"dünya\"" #: src/memory-management/review.md msgid "" @@ -7033,7 +7007,7 @@ msgid "" msgstr "" #: src/memory-management/review.md -msgid "\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\"" +msgid "\"capacity = {capacity}, ptr = {ptr:#x}, len = {len}\"" msgstr "" #: src/memory-management/approaches.md @@ -7157,9 +7131,8 @@ msgid "An assignment will transfer _ownership_ between variables:" msgstr "" #: src/memory-management/move.md -#, fuzzy msgid "\"Hello!\"" -msgstr "Merhaba Dünya!" +msgstr "\"Merhaba!\"" #: src/memory-management/move.md src/slices-and-lifetimes/str.md msgid "\"s2: {s2}\"" @@ -7221,12 +7194,11 @@ msgstr "" #: src/memory-management/move.md msgid "\"Hello {name}\"" -msgstr "" +msgstr "\"Merhaba {name}\"" #: src/memory-management/move.md src/android/interoperability/java.md -#, fuzzy msgid "\"Alice\"" -msgstr "Dilimler (Slices)" +msgstr "\"Alice\"" #: src/memory-management/move.md msgid "// say_hello(name);\n" @@ -7290,7 +7262,7 @@ msgstr "" #: src/memory-management/move.md msgid "Defensive Copies in Modern C++" -msgstr "Modern C++'da Savunma Amaçlı Kopyalamalar" +msgstr "" #: src/memory-management/move.md msgid "Modern C++ solves this differently:" @@ -7640,10 +7612,18 @@ msgstr "" msgid "[Rc](./smart-pointers/rc.md) (5 minutes)" msgstr "" +#: src/smart-pointers.md +msgid "[Trait Objects](./smart-pointers/trait-objects.md) (10 minutes)" +msgstr "" + #: src/smart-pointers.md msgid "[Exercise: Binary Tree](./smart-pointers/exercise.md) (30 minutes)" msgstr "" +#: src/smart-pointers.md src/error-handling.md +msgid "This segment should take about 55 minutes" +msgstr "" + #: src/smart-pointers/box.md msgid "" "[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) is an owned " @@ -7726,8 +7706,8 @@ msgstr "" #: src/smart-pointers/box.md msgid "" "If `Box` was not used and we attempted to embed a `List` directly into the " -"`List`, the compiler would not compute a fixed size of the struct in memory " -"(`List` would be of infinite size)." +"`List`, the compiler would not be able to compute a fixed size for the " +"struct in memory (the `List` would be of infinite size)." msgstr "" #: src/smart-pointers/box.md @@ -7738,9 +7718,10 @@ msgstr "" #: src/smart-pointers/box.md msgid "" -"Remove the `Box` in the List definition and show the compiler error. " -"\"Recursive with indirection\" is a hint you might want to use a Box or " -"reference of some kind, instead of storing a value directly." +"Remove the `Box` in the List definition and show the compiler error. We get " +"the message \"recursive without indirection\", because for data recursion, " +"we have to use indirection, a Box or reference of some kind, instead of " +"storing the value directly." msgstr "" #: src/smart-pointers/box.md @@ -7830,70 +7811,179 @@ msgid "" "cycles that will be dropped properly (likely in combination with `RefCell`)." msgstr "" -#: src/smart-pointers/exercise.md -msgid "" -"A binary tree is a tree-type data structure where every node has two " -"children (left and right). We will create a tree where each node stores a " -"value. For a given node N, all nodes in a N's left subtree contain smaller " -"values, and all nodes in N's right subtree will contain larger values." -msgstr "" - -#: src/smart-pointers/exercise.md -msgid "Implement the following types, so that the given tests pass." -msgstr "" - -#: src/smart-pointers/exercise.md -msgid "" -"Extra Credit: implement an iterator over a binary tree that returns the " -"values in order." -msgstr "" - -#: src/smart-pointers/exercise.md src/smart-pointers/solution.md -msgid "/// A node in the binary tree.\n" -msgstr "" - -#: src/smart-pointers/exercise.md src/smart-pointers/solution.md -msgid "/// A possibly-empty subtree.\n" -msgstr "" - -#: src/smart-pointers/exercise.md src/smart-pointers/solution.md +#: src/smart-pointers/trait-objects.md msgid "" -"/// A container storing a set of values, using a binary tree.\n" -"///\n" -"/// If the same value is added multiple times, it is only stored once.\n" -msgstr "" - -#: src/smart-pointers/exercise.md -msgid "// Implement `new`, `insert`, `len`, and `has`.\n" -msgstr "" - -#: src/smart-pointers/exercise.md src/smart-pointers/solution.md -msgid "// not a unique item\n" +"Trait objects allow for values of different types, for instance in a " +"collection:" msgstr "" -#: src/smart-pointers/solution.md src/testing/googletest.md -msgid "\"bar\"" +#: src/smart-pointers/trait-objects.md +msgid "\"Miau!\"" msgstr "" -#: src/welcome-day-3-afternoon.md -msgid "[Borrowing](./borrowing.md) (1 hour)" -msgstr "" +#: src/smart-pointers/trait-objects.md +msgid "\"Hello, who are you? {}\"" +msgstr "\"Merhaba, nasılsın? {}\"" -#: src/welcome-day-3-afternoon.md -msgid "" -"[Slices and Lifetimes](./slices-and-lifetimes.md) (1 hour and 10 minutes)" +#: src/smart-pointers/trait-objects.md +msgid "Memory layout after allocating `pets`:" msgstr "" -#: src/welcome-day-3-afternoon.md +#: src/smart-pointers/trait-objects.md msgid "" -"Including 10 minute breaks, this session should take about 2 hours and 20 " -"minutes" -msgstr "" - -#: src/borrowing.md -msgid "[Borrowing a Value](./borrowing/shared.md) (10 minutes)" -msgstr "" - +"```bob\n" +" Stack Heap\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " +"- -.\n" +": : : :\n" +": pets : : +----+----+----+----" +"+ :\n" +": +-----------+-------+ : : +-----+-----+ .->| F | i | d | o " +"| :\n" +": | ptr | o---+---+-----+-->| o o | o o | | +----+----+----+----" +"+ :\n" +": | len | 2 | : : +-|-|-+-|-|-+ " +"`---------. :\n" +": | capacity | 2 | : : | | | | data " +"| :\n" +": +-----------+-------+ : : | | | | +-------+--|-------" +"+ :\n" +": : : | | | '-->| name | o, 4, 4 " +"| :\n" +": : : | | | | age | 5 " +"| :\n" +"`- - - - - - - - - - - - - -' : | | | +-------+----------" +"+ :\n" +" : | | " +"| :\n" +" : | | | " +"vtable :\n" +" : | | | +----------------------" +"+ :\n" +" : | | '---->| \"::talk\" " +"| :\n" +" : | | +----------------------" +"+ :\n" +" : | " +"| :\n" +" : | | " +"data :\n" +" : | | +-------+-------" +"+ :\n" +" : | '-->| lives | 9 " +"| :\n" +" : | +-------+-------" +"+ :\n" +" : " +"| :\n" +" : | " +"vtable :\n" +" : | +----------------------" +"+ :\n" +" : '---->| \"::talk\" " +"| :\n" +" : +----------------------" +"+ :\n" +" : :\n" +" '- - - - - - - - - - - - - - - - - - - - - " +"- -'\n" +"```" +msgstr "" + +#: src/smart-pointers/trait-objects.md +msgid "" +"Types that implement a given trait may be of different sizes. This makes it " +"impossible to have things like `Vec` in the example above." +msgstr "" + +#: src/smart-pointers/trait-objects.md +msgid "" +"`dyn Pet` is a way to tell the compiler about a dynamically sized type that " +"implements `Pet`." +msgstr "" + +#: src/smart-pointers/trait-objects.md +msgid "" +"In the example, `pets` is allocated on the stack and the vector data is on " +"the heap. The two vector elements are _fat pointers_:" +msgstr "" + +#: src/smart-pointers/trait-objects.md +msgid "" +"A fat pointer is a double-width pointer. It has two components: a pointer to " +"the actual object and a pointer to the [virtual method table](https://en." +"wikipedia.org/wiki/Virtual_method_table) (vtable) for the `Pet` " +"implementation of that particular object." +msgstr "" + +#: src/smart-pointers/trait-objects.md +msgid "" +"The data for the `Dog` named Fido is the `name` and `age` fields. The `Cat` " +"has a `lives` field." +msgstr "" + +#: src/smart-pointers/trait-objects.md +msgid "Compare these outputs in the above example:" +msgstr "" + +#: src/smart-pointers/exercise.md +msgid "" +"A binary tree is a tree-type data structure where every node has two " +"children (left and right). We will create a tree where each node stores a " +"value. For a given node N, all nodes in a N's left subtree contain smaller " +"values, and all nodes in N's right subtree will contain larger values." +msgstr "" + +#: src/smart-pointers/exercise.md +msgid "Implement the following types, so that the given tests pass." +msgstr "" + +#: src/smart-pointers/exercise.md +msgid "" +"Extra Credit: implement an iterator over a binary tree that returns the " +"values in order." +msgstr "" + +#: src/smart-pointers/exercise.md src/smart-pointers/solution.md +msgid "/// A node in the binary tree.\n" +msgstr "" + +#: src/smart-pointers/exercise.md src/smart-pointers/solution.md +msgid "/// A possibly-empty subtree.\n" +msgstr "" + +#: src/smart-pointers/exercise.md src/smart-pointers/solution.md +msgid "" +"/// A container storing a set of values, using a binary tree.\n" +"///\n" +"/// If the same value is added multiple times, it is only stored once.\n" +msgstr "" + +#: src/smart-pointers/exercise.md +msgid "// Implement `new`, `insert`, `len`, and `has`.\n" +msgstr "" + +#: src/smart-pointers/exercise.md src/smart-pointers/solution.md +msgid "// not a unique item\n" +msgstr "" + +#: src/smart-pointers/solution.md src/testing/googletest.md +msgid "\"bar\"" +msgstr "" + +#: src/welcome-day-3-afternoon.md +msgid "[Borrowing](./borrowing.md) (50 minutes)" +msgstr "" + +#: src/welcome-day-3-afternoon.md +msgid "" +"[Slices and Lifetimes](./slices-and-lifetimes.md) (1 hour and 10 minutes)" +msgstr "" + +#: src/borrowing.md +msgid "[Borrowing a Value](./borrowing/shared.md) (10 minutes)" +msgstr "" + #: src/borrowing.md msgid "[Borrow Checking](./borrowing/borrowck.md) (10 minutes)" msgstr "" @@ -7903,7 +7993,7 @@ msgid "[Interior Mutability](./borrowing/interior-mutability.md) (10 minutes)" msgstr "" #: src/borrowing.md -msgid "[Exercise: Health Statistics](./borrowing/exercise.md) (30 minutes)" +msgid "[Exercise: Health Statistics](./borrowing/exercise.md) (20 minutes)" msgstr "" #: src/borrowing/shared.md @@ -8023,9 +8113,8 @@ msgid "" msgstr "" #: src/borrowing/interior-mutability.md -#, fuzzy msgid "`RefCell`" -msgstr "Cell/RefCell" +msgstr "`RefCell`" #: src/borrowing/interior-mutability.md msgid "\"graph: {root:#?}\"" @@ -8115,7 +8204,8 @@ msgid "" msgstr "" #: src/borrowing/exercise.md src/borrowing/solution.md -#: src/android/build-rules/library.md src/android/aidl/client.md +#: src/android/build-rules/library.md +#: src/android/aidl/example-service/client.md msgid "\"Bob\"" msgstr "" @@ -8152,6 +8242,10 @@ msgid "" "[Exercise: Protobuf Parsing](./slices-and-lifetimes/exercise.md) (30 minutes)" msgstr "" +#: src/slices-and-lifetimes.md +msgid "This segment should take about 1 hour and 10 minutes" +msgstr "" + #: src/slices-and-lifetimes/slices.md msgid "Slices" msgstr "Dilimler (Slices)" @@ -8225,9 +8319,8 @@ msgid "\"s1: {s1}\"" msgstr "" #: src/slices-and-lifetimes/str.md -#, fuzzy msgid "\"Hello \"" -msgstr "Merhaba Dünya!" +msgstr "\"Merhaba \"" #: src/slices-and-lifetimes/str.md msgid "\"s3: {s3}\"" @@ -8629,12 +8722,11 @@ msgstr "" #: src/slices-and-lifetimes/solution.md msgid "b\"hello\"" -msgstr "" +msgstr "b\"merhaba\"" #: src/welcome-day-4.md -#, fuzzy msgid "Welcome to Day 4" -msgstr "Hoşgeldiniz" +msgstr "4. Gün'e Hoş Geldiniz" #: src/welcome-day-4.md msgid "" @@ -8650,9 +8742,8 @@ msgid "Modules and visibility." msgstr "" #: src/welcome-day-4.md -#, fuzzy msgid "Testing." -msgstr "Test Etme" +msgstr "Testing." #: src/welcome-day-4.md msgid "Error handling: panics, `Result`, and the try operator `?`." @@ -8676,7 +8767,7 @@ msgid "[Modules](./modules.md) (40 minutes)" msgstr "" #: src/welcome-day-4.md -msgid "[Testing](./testing.md) (1 hour and 5 minutes)" +msgid "[Testing](./testing.md) (1 hour)" msgstr "" #: src/iterators.md @@ -8848,7 +8939,7 @@ msgid "" msgstr "" #: src/modules.md -msgid "[Modules](./modules/modules.md) (5 minutes)" +msgid "[Modules](./modules/modules.md) (3 minutes)" msgstr "" #: src/modules.md @@ -8868,10 +8959,6 @@ msgid "" "[Exercise: Modules for a GUI Library](./modules/exercise.md) (15 minutes)" msgstr "" -#: src/modules.md -msgid "This segment should take about 40 minutes" -msgstr "" - #: src/modules/modules.md msgid "We have seen how `impl` blocks let us namespace functions to a type." msgstr "" @@ -9134,9 +9221,8 @@ msgid "" msgstr "" #: src/modules/exercise.md -#, fuzzy msgid "Cargo Setup" -msgstr "Kurulum (Setup)" +msgstr "Cargo Kurulumu (Setup)" #: src/modules/exercise.md msgid "" @@ -9307,7 +9393,7 @@ msgid "[Test Modules](./testing/unit-tests.md) (5 minutes)" msgstr "" #: src/testing.md -msgid "[Other Types of Tests](./testing/other.md) (10 minutes)" +msgid "[Other Types of Tests](./testing/other.md) (5 minutes)" msgstr "" #: src/testing.md @@ -9323,7 +9409,7 @@ msgid "[Mocking](./testing/mocking.md) (5 minutes)" msgstr "" #: src/testing.md -msgid "[Compiler Lints and Clippy](./testing/lints.md) (5 minutes)" +msgid "[Compiler Lints and Clippy](./testing/lints.md) (3 minutes)" msgstr "" #: src/testing.md @@ -9354,9 +9440,8 @@ msgid "" msgstr "" #: src/testing/unit-tests.md -#, fuzzy msgid "\"Hello World\"" -msgstr "Merhaba Dünya!" +msgstr "\"Merhaba Dünya\"" #: src/testing/unit-tests.md msgid "This lets you unit test private helpers." @@ -9493,8 +9578,8 @@ msgstr "" #: src/testing/googletest.md msgid "" -"A particularly nice feature is that mismatches in multi-line strings strings " -"are shown as a diff:" +"A particularly nice feature is that mismatches in multi-line strings are " +"shown as a diff:" msgstr "" #: src/testing/googletest.md @@ -9628,7 +9713,7 @@ msgid "" msgstr "" #: src/testing/exercise.md -msgid "Ignore all spaces. Reject number with less than two digits." +msgid "Ignore all spaces. Reject number with fewer than two digits." msgstr "" #: src/testing/exercise.md @@ -9738,17 +9823,13 @@ msgid "\" 0 0 \"" msgstr "" #: src/welcome-day-4-afternoon.md -msgid "[Error Handling](./error-handling.md) (45 minutes)" +msgid "[Error Handling](./error-handling.md) (55 minutes)" msgstr "" #: src/welcome-day-4-afternoon.md msgid "[Unsafe Rust](./unsafe-rust.md) (1 hour and 5 minutes)" msgstr "" -#: src/welcome-day-4-afternoon.md -msgid "Including 10 minute breaks, this session should take about 2 hours" -msgstr "" - #: src/error-handling.md msgid "[Panics](./error-handling/panics.md) (3 minutes)" msgstr "" @@ -9772,7 +9853,7 @@ msgstr "" #: src/error-handling.md msgid "" -"[Exercise: Rewriting with Result](./error-handling/exercise.md) (20 minutes)" +"[Exercise: Rewriting with Result](./error-handling/exercise.md) (30 minutes)" msgstr "" #: src/error-handling/panics.md @@ -9898,7 +9979,7 @@ msgstr "" #: src/error-handling/try.md msgid "" "Note that `main` can return a `Result<(), E>` as long as it implements `std::" -"process:Termination`. In practice, this means that `E` implements `Debug`. " +"process::Termination`. In practice, this means that `E` implements `Debug`. " "The executable will print the `Err` variant and return a nonzero exit status " "on error." msgstr "" @@ -10236,6 +10317,10 @@ msgstr "" msgid "[Exercise: FFI Wrapper](./unsafe-rust/exercise.md) (30 minutes)" msgstr "" +#: src/unsafe-rust.md +msgid "This segment should take about 1 hour and 5 minutes" +msgstr "" + #: src/unsafe-rust/unsafe.md msgid "The Rust language has two parts:" msgstr "" @@ -10394,9 +10479,8 @@ msgid "It is safe to read an immutable static variable:" msgstr "" #: src/unsafe-rust/mutable-static.md -#, fuzzy msgid "\"Hello, world!\"" -msgstr "Merhaba Dünya!" +msgstr "\"Merhaba, dünya!\"" #: src/unsafe-rust/mutable-static.md msgid "\"HELLO_WORLD: {HELLO_WORLD}\"" @@ -10441,7 +10525,7 @@ msgstr "" #: src/unsafe-rust/unions.md msgid "// Undefined behavior!\n" -msgstr "" +msgstr "// Undefined behavior!\n" #: src/unsafe-rust/unions.md msgid "" @@ -10459,7 +10543,7 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md msgid "Calling Unsafe Functions" -msgstr "Güvensiz (Unsafe) Fonksiyonları Çağırma" +msgstr "Emniyetsiz (Unsafe) Fonksiyonları Çağırma" #: src/unsafe-rust/unsafe-functions.md msgid "" @@ -10473,7 +10557,6 @@ msgstr "" #: src/android/interoperability/cpp/cpp-bridge.md #: src/exercises/chromium/build-rules.md src/bare-metal/aps/inline-assembly.md #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md -#: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"C\"" msgstr "" @@ -10498,7 +10581,7 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md msgid "// Undefined behavior if abs misbehaves.\n" -msgstr "" +msgstr "// Undefined behavior if abs misbehaves.\n" #: src/unsafe-rust/unsafe-functions.md msgid "\"Absolute value of -3 according to C: {}\"" @@ -10514,7 +10597,7 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md msgid "Writing Unsafe Functions" -msgstr "Güvensiz (Unsafe) Fonksiyonlar Yazma" +msgstr "Emniyetsiz (Unsafe) Fonksiyonlar Yazma" #: src/unsafe-rust/unsafe-functions.md msgid "" @@ -10571,7 +10654,7 @@ msgstr "" #: src/unsafe-rust/unsafe-traits.md msgid "Implementing Unsafe Traits" -msgstr "Güvensiz Özelliklerin (Unsafe Traits) Gerçekleştirilmesi" +msgstr "Emniyetsiz Özelliklerin (Unsafe Traits) Gerçekleştirilmesi" #: src/unsafe-rust/unsafe-traits.md msgid "" @@ -11094,7 +11177,7 @@ msgstr "" #: src/android/build-rules/binary.md msgid "\"hello_rust\"" -msgstr "" +msgstr "\"hello_rust\"" #: src/android/build-rules/binary.md src/android/build-rules/library.md #: src/android/logging.md @@ -11109,327 +11192,782 @@ msgstr "" msgid "//! Rust demo.\n" msgstr "" -#: src/android/build-rules/binary.md src/android/build-rules/library.md -msgid "/// Prints a greeting to standard output.\n" +#: src/android/build-rules/binary.md src/android/build-rules/library.md +msgid "/// Prints a greeting to standard output.\n" +msgstr "" + +#: src/android/build-rules/binary.md src/exercises/chromium/build-rules.md +msgid "\"Hello from Rust!\"" +msgstr "\"Rust dilinden merhaba!\"" + +#: src/android/build-rules/binary.md +msgid "You can now build, push, and run the binary:" +msgstr "" + +#: src/android/build-rules/binary.md +msgid "" +"```shell\n" +"m hello_rust\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust\" /data/local/tmp\n" +"adb shell /data/local/tmp/hello_rust\n" +"```" +msgstr "" + +#: src/android/build-rules/library.md +msgid "Rust Libraries" +msgstr "" + +#: src/android/build-rules/library.md +msgid "You use `rust_library` to create a new Rust library for Android." +msgstr "" + +#: src/android/build-rules/library.md +msgid "Here we declare a dependency on two libraries:" +msgstr "" + +#: src/android/build-rules/library.md +msgid "`libgreeting`, which we define below," +msgstr "" + +#: src/android/build-rules/library.md +msgid "" +"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`]" +"(https://cs.android.com/android/platform/superproject/+/master:external/rust/" +"crates/)." +msgstr "" + +#: src/android/build-rules/library.md +msgid "\"hello_rust_with_dep\"" +msgstr "" + +#: src/android/build-rules/library.md +msgid "\"libgreetings\"" +msgstr "" + +#: src/android/build-rules/library.md +msgid "\"libtextwrap\"" +msgstr "" + +#: src/android/build-rules/library.md +msgid "// Need this to avoid dynamic link error.\n" +msgstr "" + +#: src/android/build-rules/library.md +msgid "\"greetings\"" +msgstr "" + +#: src/android/build-rules/library.md +#: src/android/aidl/example-service/service.md +#: src/android/interoperability/java.md +msgid "\"src/lib.rs\"" +msgstr "" + +#: src/android/build-rules/library.md +msgid "_hello_rust/src/lib.rs_:" +msgstr "" + +#: src/android/build-rules/library.md +msgid "//! Greeting library.\n" +msgstr "" + +#: src/android/build-rules/library.md +msgid "/// Greet `name`.\n" +msgstr "" + +#: src/android/build-rules/library.md +msgid "\"Hello {name}, it is very nice to meet you!\"" +msgstr "" + +#: src/android/build-rules/library.md +msgid "You build, push, and run the binary like before:" +msgstr "" + +#: src/android/build-rules/library.md +msgid "" +"```shell\n" +"m hello_rust_with_dep\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep\" /data/local/" +"tmp\n" +"adb shell /data/local/tmp/hello_rust_with_dep\n" +"```" +msgstr "" + +#: src/android/aidl.md +msgid "" +"The [Android Interface Definition Language (AIDL)](https://developer.android." +"com/guide/components/aidl) is supported in Rust:" +msgstr "" + +#: src/android/aidl.md +msgid "Rust code can call existing AIDL servers," +msgstr "" + +#: src/android/aidl.md +msgid "You can create new AIDL servers in Rust." +msgstr "" + +#: src/android/aidl/birthday-service.md +msgid "" +"To illustrate how to use Rust with Binder, we're going to walk through the " +"process of creating a Binder interface. We're then going to both implement " +"the described service and write client code that talks to that service." +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "AIDL Interfaces" +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "You declare the API of your service using an AIDL interface:" +msgstr "" + +#: src/android/aidl/example-service/interface.md +#: src/android/aidl/example-service/service-bindings.md +msgid "" +"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" +msgstr "" + +#: src/android/aidl/example-service/interface.md +#: src/android/aidl/example-service/service-bindings.md +#: src/android/aidl/example-service/changing-definition.md +msgid "/** Birthday service interface. */" +msgstr "" + +#: src/android/aidl/example-service/interface.md +#: src/android/aidl/example-service/service-bindings.md +#: src/android/aidl/example-service/changing-definition.md +msgid "/** Generate a Happy Birthday message. */" +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "_birthday_service/aidl/Android.bp_:" +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "\"com.example.birthdayservice\"" +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "\"com/example/birthdayservice/*.aidl\"" +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "// Rust is not enabled by default\n" +msgstr "" + +#: src/android/aidl/example-service/interface.md +msgid "" +"Note that the directory structure under the `aidl/` directory needs to match " +"the package name used in the AIDL file, i.e. the package is `com.example." +"birthdayservice` and the file is at `aidl/com/example/IBirthdayService.aidl`." +msgstr "" + +#: src/android/aidl/example-service/service-bindings.md +msgid "Generated Service API" +msgstr "" + +#: src/android/aidl/example-service/service-bindings.md +msgid "" +"Binder generates a trait corresponding to the interface definition. trait to " +"talk to the service." +msgstr "" + +#: src/android/aidl/example-service/service-bindings.md +msgid "_Generated trait_:" +msgstr "_Generated trait_:" + +#: src/android/aidl/example-service/service-bindings.md +msgid "" +"Your service will need to implement this trait, and your client will use " +"this trait to talk to the service." +msgstr "" + +#: src/android/aidl/example-service/service-bindings.md +msgid "" +"The generated bindings can be found at `out/soong/.intermediates//`." +msgstr "" + +#: src/android/aidl/example-service/service-bindings.md +msgid "" +"Point out how the generated function signature, specifically the argument " +"and return types, correspond the interface definition." +msgstr "" + +#: src/android/aidl/example-service/service-bindings.md +msgid "" +"`String` for an argument results in a different Rust type than `String` as a " +"return type." +msgstr "" + +#: src/android/aidl/example-service/service.md +msgid "Service Implementation" +msgstr "" + +#: src/android/aidl/example-service/service.md +msgid "We can now implement the AIDL service:" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/changing-implementation.md +msgid "_birthday_service/src/lib.rs_:" +msgstr "" + +#: src/android/aidl/example-service/service.md +msgid "/// The `IBirthdayService` implementation.\n" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/changing-implementation.md +#: src/android/aidl/types/file-descriptor.md +msgid "\"Happy Birthday {name}, congratulations with the {years} years!\"" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/server.md +#: src/android/aidl/example-service/client.md +msgid "_birthday_service/Android.bp_:" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/server.md +msgid "\"libbirthdayservice\"" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/server.md +#: src/android/aidl/example-service/client.md +msgid "\"birthdayservice\"" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/server.md +#: src/android/aidl/example-service/client.md +msgid "\"com.example.birthdayservice-rust\"" +msgstr "" + +#: src/android/aidl/example-service/service.md +#: src/android/aidl/example-service/server.md +#: src/android/aidl/example-service/client.md +msgid "\"libbinder_rs\"" +msgstr "" + +#: src/android/aidl/example-service/service.md +msgid "" +"Point out the path to the generated `IBirthdayService` trait, and explain " +"why each of the segments is necessary." +msgstr "" + +#: src/android/aidl/example-service/service.md +msgid "" +"TODO: What does the `binder::Interface` trait do? Are there methods to " +"override? Where source?" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "AIDL Server" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "Finally, we can create a server which exposes the service:" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "_birthday_service/src/server.rs_:" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "//! Birthday service.\n" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "/// Entry point for birthday service.\n" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "\"Failed to register service\"" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "\"birthday_server\"" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "\"src/server.rs\"" +msgstr "\"src/server.rs\"" + +#: src/android/aidl/example-service/server.md +#: src/android/aidl/example-service/client.md +msgid "// To avoid dynamic link error.\n" +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "" +"The process for taking a user-defined service implementation (in this case " +"the `BirthdayService` type, which implements the `IBirthdayService`) and " +"starting it as a Binder service has multiple steps, and may appear more " +"complicated than students are used to if they've used Binder from C++ or " +"another language. Explain to students why each step is necessary." +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "Create an instance of your service type (`BirthdayService`)." +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "" +"Wrap the service object in corresponding `Bn*` type (`BnBirthdayService` in " +"this case). This type is generated by Binder and provides the common Binder " +"functionality that would be provided by the `BnBinder` base class in C++. We " +"don't have inheritance in Rust, so instead we use composition, putting our " +"`BirthdayService` within the generated `BnBinderService`." +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "" +"Call `add_service`, giving it a service identifier and your service object " +"(the `BnBirthdayService` object in the example)." +msgstr "" + +#: src/android/aidl/example-service/server.md +msgid "" +"Call `join_thread_pool` to add the current thread to Binder's thread pool " +"and start listening for connections." +msgstr "" + +#: src/android/aidl/example-service/deploy.md +msgid "We can now build, push, and start the service:" +msgstr "" + +#: src/android/aidl/example-service/deploy.md +msgid "" +"```shell\n" +"m birthday_server\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_server\" /data/local/" +"tmp\n" +"adb root\n" +"adb shell /data/local/tmp/birthday_server\n" +"```" +msgstr "" + +#: src/android/aidl/example-service/deploy.md +msgid "In another terminal, check that the service runs:" +msgstr "" + +#: src/android/aidl/example-service/deploy.md +msgid "You can also call the service with `service call`:" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "AIDL Client" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "Finally, we can create a Rust client for our new service." +msgstr "" + +#: src/android/aidl/example-service/client.md +#: src/android/aidl/example-service/changing-implementation.md +msgid "_birthday_service/src/client.rs_:" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "/// Call the birthday service.\n" +msgstr "" + +#: src/android/aidl/example-service/client.md src/android/aidl/types/objects.md +#: src/android/aidl/types/parcelables.md +#: src/android/aidl/types/file-descriptor.md +msgid "\"Failed to connect to BirthdayService\"" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "// Call the service.\n" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "\"{msg}\"" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "\"birthday_client\"" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "\"src/client.rs\"" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "Notice that the client does not depend on `libbirthdayservice`." +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "Build, push, and run the client on your device:" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "" +"```shell\n" +"m birthday_client\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_client\" /data/local/" +"tmp\n" +"adb shell /data/local/tmp/birthday_client Charlie 60\n" +"```" +msgstr "" + +#: src/android/aidl/example-service/client.md +msgid "" +"`Strong` is the trait object representing the service " +"that the client has connected to." msgstr "" -#: src/android/build-rules/binary.md src/exercises/chromium/build-rules.md -msgid "\"Hello from Rust!\"" +#: src/android/aidl/example-service/client.md +msgid "" +"`Strong` is a custom smart pointer type for Binder. It handles both an in-" +"process ref count for the service trait object, and the global Binder ref " +"count that tracks how many processes have a reference to the object." msgstr "" -#: src/android/build-rules/binary.md -msgid "You can now build, push, and run the binary:" +#: src/android/aidl/example-service/client.md +msgid "" +"Note that the trait object that the client uses to talk to the service uses " +"the exact same trait that the server implements. For a given Binder " +"interface, there is a single Rust trait generated that both client and " +"server use." msgstr "" -#: src/android/build-rules/binary.md +#: src/android/aidl/example-service/client.md msgid "" -"```shell\n" -"m hello_rust\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust\" /data/local/tmp\n" -"adb shell /data/local/tmp/hello_rust\n" -"```" +"Use the same service identifier used when registering the service. This " +"should ideally be defined in a common crate that both the client and server " +"can depend on." msgstr "" -#: src/android/build-rules/library.md -msgid "Rust Libraries" +#: src/android/aidl/example-service/changing-definition.md +msgid "" +"Let us extend the API with more functionality: we want to let clients " +"specify a list of lines for the birthday card:" msgstr "" -#: src/android/build-rules/library.md -msgid "You use `rust_library` to create a new Rust library for Android." +#: src/android/aidl/example-service/changing-definition.md +msgid "This results in an updated trait definition for `IBirthdayService`:" msgstr "" -#: src/android/build-rules/library.md -msgid "Here we declare a dependency on two libraries:" +#: src/android/aidl/example-service/changing-definition.md +msgid "" +"Note how the `String[]` in the AIDL definition is translated as a " +"`&[String]` in Rust, i.e. that idiomatic Rust types are used in the " +"generated bindings wherever possible:" msgstr "" -#: src/android/build-rules/library.md -msgid "`libgreeting`, which we define below," +#: src/android/aidl/example-service/changing-definition.md +msgid "`in` array arguments are translated to slices." msgstr "" -#: src/android/build-rules/library.md -msgid "" -"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`]" -"(https://cs.android.com/android/platform/superproject/+/master:external/rust/" -"crates/)." +#: src/android/aidl/example-service/changing-definition.md +msgid "`out` and `inout` args are translated to `&mut Vec`." msgstr "" -#: src/android/build-rules/library.md -msgid "\"hello_rust_with_dep\"" +#: src/android/aidl/example-service/changing-definition.md +msgid "Return values are translated to returning a `Vec`." msgstr "" -#: src/android/build-rules/library.md -msgid "\"libgreetings\"" +#: src/android/aidl/example-service/changing-implementation.md +msgid "Updating Client and Service" msgstr "" -#: src/android/build-rules/library.md -msgid "\"libtextwrap\"" +#: src/android/aidl/example-service/changing-implementation.md +msgid "Update the client and server code to account for the new API." msgstr "" -#: src/android/build-rules/library.md -msgid "// Need this to avoid dynamic link error.\n" +#: src/android/aidl/example-service/changing-implementation.md +msgid "'\\n'" msgstr "" -#: src/android/build-rules/library.md -msgid "\"greetings\"" +#: src/android/aidl/example-service/changing-implementation.md +msgid "\"Habby birfday to yuuuuu\"" msgstr "" -#: src/android/build-rules/library.md src/android/aidl/implementation.md -#: src/android/interoperability/java.md -msgid "\"src/lib.rs\"" +#: src/android/aidl/example-service/changing-implementation.md +msgid "\"And also: many more\"" msgstr "" -#: src/android/build-rules/library.md -msgid "_hello_rust/src/lib.rs_:" +#: src/android/aidl/example-service/changing-implementation.md +msgid "" +"TODO: Move code snippets into project files where they'll actually be built?" msgstr "" -#: src/android/build-rules/library.md -msgid "//! Greeting library.\n" +#: src/android/aidl/types.md +msgid "Working With AIDL Types" msgstr "" -#: src/android/build-rules/library.md -msgid "/// Greet `name`.\n" +#: src/android/aidl/types.md +msgid "AIDL types translate into the appropriate idiomatic Rust type:" msgstr "" -#: src/android/build-rules/library.md -msgid "\"Hello {name}, it is very nice to meet you!\"" +#: src/android/aidl/types.md +msgid "Primitive types map (mostly) to idiomatic Rust types." msgstr "" -#: src/android/build-rules/library.md -msgid "You build, push, and run the binary like before:" +#: src/android/aidl/types.md +msgid "Collection types like slices, `Vec`s and string types are supported." msgstr "" -#: src/android/build-rules/library.md +#: src/android/aidl/types.md msgid "" -"```shell\n" -"m hello_rust_with_dep\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_with_dep\" /data/local/" -"tmp\n" -"adb shell /data/local/tmp/hello_rust_with_dep\n" -"```" +"References to AIDL objects and file handles can be sent between clients and " +"services." msgstr "" -#: src/android/aidl.md -msgid "" -"The [Android Interface Definition Language (AIDL)](https://developer.android." -"com/guide/components/aidl) is supported in Rust:" +#: src/android/aidl/types.md +msgid "File handles and parcelables are fully supported." msgstr "" -#: src/android/aidl.md -msgid "Rust code can call existing AIDL servers," +#: src/android/aidl/types/primitives.md +msgid "Primitive types map (mostly) idiomatically:" msgstr "" -#: src/android/aidl.md -msgid "You can create new AIDL servers in Rust." +#: src/android/aidl/types/primitives.md +msgid "AIDL Type" +msgstr "AIDL Türü" + +#: src/android/aidl/types/primitives.md src/android/aidl/types/arrays.md +#: src/android/interoperability/cpp/type-mapping.md +msgid "Rust Type" +msgstr "Rust Türü" + +#: src/android/aidl/types/primitives.md +msgid "Note" msgstr "" -#: src/android/aidl/interface.md -msgid "AIDL Interfaces" +#: src/android/aidl/types/primitives.md +msgid "`boolean`" msgstr "" -#: src/android/aidl/interface.md -msgid "You declare the API of your service using an AIDL interface:" +#: src/android/aidl/types/primitives.md +msgid "`byte`" msgstr "" -#: src/android/aidl/interface.md -msgid "" -"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" +#: src/android/aidl/types/primitives.md +msgid "`i8`" msgstr "" -#: src/android/aidl/interface.md src/android/aidl/changing.md -msgid "/** Birthday service interface. */" +#: src/android/aidl/types/primitives.md +msgid "Note that bytes are signed." msgstr "" -#: src/android/aidl/interface.md src/android/aidl/changing.md -msgid "/** Generate a Happy Birthday message. */" +#: src/android/aidl/types/primitives.md +msgid "`u16`" msgstr "" -#: src/android/aidl/interface.md -msgid "_birthday_service/aidl/Android.bp_:" +#: src/android/aidl/types/primitives.md +msgid "Note the usage of `u16`, NOT `u32`." msgstr "" -#: src/android/aidl/interface.md -msgid "\"com.example.birthdayservice\"" +#: src/android/aidl/types/primitives.md +msgid "`int`" msgstr "" -#: src/android/aidl/interface.md -msgid "\"com/example/birthdayservice/*.aidl\"" +#: src/android/aidl/types/primitives.md +msgid "`i32`" msgstr "" -#: src/android/aidl/interface.md -msgid "// Rust is not enabled by default\n" +#: src/android/aidl/types/primitives.md +msgid "`long`" msgstr "" -#: src/android/aidl/interface.md -msgid "" -"Add `vendor_available: true` if your AIDL file is used by a binary in the " -"vendor partition." +#: src/android/aidl/types/primitives.md +msgid "`i64`" msgstr "" -#: src/android/aidl/implementation.md -msgid "Service Implementation" +#: src/android/aidl/types/primitives.md +msgid "`float`" msgstr "" -#: src/android/aidl/implementation.md -msgid "We can now implement the AIDL service:" +#: src/android/aidl/types/primitives.md +msgid "`f32`" msgstr "" -#: src/android/aidl/implementation.md -msgid "_birthday_service/src/lib.rs_:" +#: src/android/aidl/types/primitives.md +msgid "`double`" msgstr "" -#: src/android/aidl/implementation.md -msgid "//! Implementation of the `IBirthdayService` AIDL interface.\n" +#: src/android/aidl/types/primitives.md +msgid "`f64`" msgstr "" -#: src/android/aidl/implementation.md -msgid "/// The `IBirthdayService` implementation.\n" +#: src/android/aidl/types/arrays.md +msgid "" +"The array types (`T[]`, `byte[]`, and `List`) get translated to the " +"appropriate Rust array type depending on how they are used in the function " +"signature:" msgstr "" -#: src/android/aidl/implementation.md -msgid "\"Happy Birthday {name}, congratulations with the {years} years!\"" +#: src/android/aidl/types/arrays.md +msgid "Position" msgstr "" -#: src/android/aidl/implementation.md src/android/aidl/server.md -#: src/android/aidl/client.md -msgid "_birthday_service/Android.bp_:" +#: src/android/aidl/types/arrays.md +msgid "`in` argument" msgstr "" -#: src/android/aidl/implementation.md src/android/aidl/server.md -msgid "\"libbirthdayservice\"" +#: src/android/aidl/types/arrays.md +msgid "`&[T]`" +msgstr "`&[T]`" + +#: src/android/aidl/types/arrays.md +msgid "`out`/`inout` argument" msgstr "" -#: src/android/aidl/implementation.md src/android/aidl/server.md -#: src/android/aidl/client.md -msgid "\"birthdayservice\"" +#: src/android/aidl/types/arrays.md +msgid "`&mut Vec`" +msgstr "`&mut Vec`" + +#: src/android/aidl/types/arrays.md +msgid "Return" msgstr "" -#: src/android/aidl/implementation.md src/android/aidl/server.md -#: src/android/aidl/client.md -msgid "\"com.example.birthdayservice-rust\"" +#: src/android/aidl/types/arrays.md +#: src/android/interoperability/cpp/type-mapping.md +msgid "`Vec`" +msgstr "`Vec`" + +#: src/android/aidl/types/arrays.md +msgid "" +"In Android 13 or higher, fixed-size arrays are supported, i.e. `T[N]` " +"becomes `[T; N]`. Fixed-size arrays can have multiple dimensions (e.g. " +"int\\[3\\]\\[4\\]). In the Java backend, fixed-size arrays are represented " +"as array types." msgstr "" -#: src/android/aidl/implementation.md src/android/aidl/server.md -#: src/android/aidl/client.md -msgid "\"libbinder_rs\"" +#: src/android/aidl/types/arrays.md +msgid "Arrays in parcelable fields always get translated to `Vec`." msgstr "" -#: src/android/aidl/server.md -msgid "AIDL Server" +#: src/android/aidl/types/objects.md +msgid "" +"AIDL objects can be sent either as a concrete AIDL type or as the type-" +"erased `IBinder` interface:" msgstr "" -#: src/android/aidl/server.md -msgid "Finally, we can create a server which exposes the service:" +#: src/android/aidl/types/objects.md +msgid "" +"**birthday_service/aidl/com/example/birthdayservice/IBirthdayInfoProvider." +"aidl**:" msgstr "" -#: src/android/aidl/server.md -msgid "_birthday_service/src/server.rs_:" +#: src/android/aidl/types/objects.md src/android/aidl/types/parcelables.md +#: src/android/aidl/types/file-descriptor.md +msgid "" +"**birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl**:" msgstr "" -#: src/android/aidl/server.md src/android/aidl/client.md -msgid "//! Birthday service.\n" +#: src/android/aidl/types/objects.md +msgid "/** The same thing, but using a binder object. */" msgstr "" -#: src/android/aidl/server.md -msgid "/// Entry point for birthday service.\n" +#: src/android/aidl/types/objects.md +msgid "/** The same thing, but using `IBinder`. */" msgstr "" -#: src/android/aidl/server.md -msgid "\"Failed to register service\"" +#: src/android/aidl/types/objects.md src/android/aidl/types/parcelables.md +#: src/android/aidl/types/file-descriptor.md +msgid "**birthday_service/src/client.rs**:" msgstr "" -#: src/android/aidl/server.md -msgid "\"birthday_server\"" +#: src/android/aidl/types/objects.md +msgid "/// Rust struct implementing the `IBirthdayInfoProvider` interface.\n" msgstr "" -#: src/android/aidl/server.md -msgid "\"src/server.rs\"" +#: src/android/aidl/types/objects.md +msgid "// Create a binder object for the `IBirthdayInfoProvider` interface.\n" msgstr "" -#: src/android/aidl/server.md src/android/aidl/client.md -msgid "// To avoid dynamic link error.\n" +#: src/android/aidl/types/objects.md +msgid "// Send the binder object to the service.\n" msgstr "" -#: src/android/aidl/deploy.md -msgid "We can now build, push, and start the service:" +#: src/android/aidl/types/objects.md +msgid "" +"// Perform the same operation but passing the provider as an `SpIBinder`.\n" msgstr "" -#: src/android/aidl/deploy.md +#: src/android/aidl/types/objects.md msgid "" -"```shell\n" -"m birthday_server\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_server\" /data/local/" -"tmp\n" -"adb root\n" -"adb shell /data/local/tmp/birthday_server\n" -"```" +"Note the usage of `BnBirthdayInfoProvider`. This serves the same purpose as " +"`BnBirthdayService` that we saw previously." msgstr "" -#: src/android/aidl/deploy.md -msgid "In another terminal, check that the service runs:" +#: src/android/aidl/types/parcelables.md +msgid "Binder for Rust supports sending parcelables directly:" msgstr "" -#: src/android/aidl/deploy.md -msgid "You can also call the service with `service call`:" +#: src/android/aidl/types/parcelables.md +msgid "" +"**birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl**:" msgstr "" -#: src/android/aidl/client.md -msgid "AIDL Client" +#: src/android/aidl/types/parcelables.md +msgid "/** The same thing, but with a parcelable. */" msgstr "" -#: src/android/aidl/client.md -msgid "Finally, we can create a Rust client for our new service." +#: src/android/aidl/types/file-descriptor.md +msgid "" +"Files can be sent between Binder clients/servers using the " +"`ParcelFileDescriptor` type:" msgstr "" -#: src/android/aidl/client.md -msgid "_birthday_service/src/client.rs_:" +#: src/android/aidl/types/file-descriptor.md +msgid "/** The same thing, but loads info from a file. */" msgstr "" -#: src/android/aidl/client.md -msgid "/// Connect to the BirthdayService.\n" +#: src/android/aidl/types/file-descriptor.md +msgid "// Open a file and put the birthday info in it.\n" msgstr "" -#: src/android/aidl/client.md -msgid "/// Call the birthday service.\n" +#: src/android/aidl/types/file-descriptor.md +msgid "\"/data/local/tmp/birthday.info\"" msgstr "" -#: src/android/aidl/client.md -msgid "\"Failed to connect to BirthdayService\"" +#: src/android/aidl/types/file-descriptor.md +msgid "\"{name}\"" msgstr "" -#: src/android/aidl/client.md -msgid "\"{msg}\"" +#: src/android/aidl/types/file-descriptor.md +msgid "\"{years}\"" msgstr "" -#: src/android/aidl/client.md -msgid "\"birthday_client\"" +#: src/android/aidl/types/file-descriptor.md +msgid "// Create a `ParcelFileDescriptor` from the file and send it.\n" msgstr "" -#: src/android/aidl/client.md -msgid "\"src/client.rs\"" +#: src/android/aidl/types/file-descriptor.md +msgid "**birthday_service/src/lib.rs**:" msgstr "" -#: src/android/aidl/client.md -msgid "Notice that the client does not depend on `libbirthdayservice`." +#: src/android/aidl/types/file-descriptor.md +msgid "" +"// Convert the file descriptor to a `File`. `ParcelFileDescriptor` wraps\n" +" // an `OwnedFd`, which can be cloned and then used to create a " +"`File`\n" +" // object.\n" msgstr "" -#: src/android/aidl/client.md -msgid "Build, push, and run the client on your device:" +#: src/android/aidl/types/file-descriptor.md +msgid "\"Invalid file handle\"" msgstr "" -#: src/android/aidl/client.md +#: src/android/aidl/types/file-descriptor.md msgid "" -"```shell\n" -"m birthday_client\n" -"adb push \"$ANDROID_PRODUCT_OUT/system/bin/birthday_client\" /data/local/" -"tmp\n" -"adb shell /data/local/tmp/birthday_client Charlie 60\n" -"```" +"`ParcelFileDescriptor` wraps an `OwnedFd`, and so can be created from a " +"`File` (or any other type that wraps an `OwnedFd`), and can be used to " +"create a new `File` handle on the other side." msgstr "" -#: src/android/aidl/changing.md +#: src/android/aidl/types/file-descriptor.md msgid "" -"Let us extend the API with more functionality: we want to let clients " -"specify a list of lines for the birthday card:" +"Other types of file descriptors can be wrapped and sent, e.g. TCP, UDP, and " +"UNIX sockets." msgstr "" #: src/android/logging.md @@ -11468,7 +12006,7 @@ msgstr "" #: src/android/logging.md msgid "\"rust\"" -msgstr "" +msgstr "\"rust\"" #: src/android/logging.md msgid "\"Starting program.\"" @@ -11691,7 +12229,7 @@ msgstr "" #: src/android/interoperability/with-c/bindgen.md msgid "\"general-tests\"" -msgstr "" +msgstr "\"general-tests\"" #: src/android/interoperability/with-c/bindgen.md msgid "\"none\"" @@ -11827,9 +12365,8 @@ msgstr "" #: src/chromium/interoperability-with-cpp/example-bindings.md #: src/chromium/interoperability-with-cpp/error-handling-qr.md #: src/chromium/interoperability-with-cpp/error-handling-png.md -#, fuzzy msgid "\"Rust\"" -msgstr "Rust:" +msgstr "\"Rust\"" #: src/android/interoperability/cpp/bridge.md #: src/android/interoperability/cpp/cpp-bridge.md @@ -11884,9 +12421,8 @@ msgid "// Method on `MyType`\n" msgstr "" #: src/android/interoperability/cpp/rust-bridge.md -#, fuzzy msgid "// Free function\n" -msgstr "fonksiyon:" +msgstr "// Free function\n" #: src/android/interoperability/cpp/rust-bridge.md msgid "" @@ -11952,9 +12488,8 @@ msgid "" msgstr "" #: src/android/interoperability/cpp/shared-enums.md -#, fuzzy msgid "Generated Rust:" -msgstr "Güvensiz (Unsafe) Rust" +msgstr "Oluşturulan (Generated) Rust:" #: src/android/interoperability/cpp/shared-enums.md msgid "Generated C++:" @@ -12017,73 +12552,61 @@ msgid "" "through a `noexcept` C++ function." msgstr "" -#: src/android/interoperability/cpp/type-mapping.md -#, fuzzy -msgid "Rust Type" -msgstr "Özyinelemeli Veri Türleri" - #: src/android/interoperability/cpp/type-mapping.md msgid "C++ Type" -msgstr "" +msgstr "C++ Türü" #: src/android/interoperability/cpp/type-mapping.md -#, fuzzy msgid "`rust::String`" -msgstr "String" +msgstr "`rust::String`" #: src/android/interoperability/cpp/type-mapping.md msgid "`&str`" -msgstr "" +msgstr "`&str`" #: src/android/interoperability/cpp/type-mapping.md msgid "`rust::Str`" -msgstr "" +msgstr "`rust::Str`" #: src/android/interoperability/cpp/type-mapping.md -#, fuzzy msgid "`CxxString`" -msgstr "String" +msgstr "`CxxString`" #: src/android/interoperability/cpp/type-mapping.md -#, fuzzy msgid "`std::string`" -msgstr "string:" +msgstr "`std::string`" #: src/android/interoperability/cpp/type-mapping.md msgid "`&[T]`/`&mut [T]`" -msgstr "" +msgstr "`&[T]`/`&mut [T]`" #: src/android/interoperability/cpp/type-mapping.md msgid "`rust::Slice`" -msgstr "" +msgstr "`rust::Slice`" #: src/android/interoperability/cpp/type-mapping.md msgid "`rust::Box`" -msgstr "" +msgstr "`rust::Box`" #: src/android/interoperability/cpp/type-mapping.md msgid "`UniquePtr`" -msgstr "" +msgstr "`UniquePtr`" #: src/android/interoperability/cpp/type-mapping.md msgid "`std::unique_ptr`" -msgstr "" - -#: src/android/interoperability/cpp/type-mapping.md -msgid "`Vec`" -msgstr "" +msgstr "`std::unique_ptr`" #: src/android/interoperability/cpp/type-mapping.md msgid "`rust::Vec`" -msgstr "" +msgstr "`rust::Vec`" #: src/android/interoperability/cpp/type-mapping.md msgid "`CxxVector`" -msgstr "" +msgstr "`CxxVector`" #: src/android/interoperability/cpp/type-mapping.md msgid "`std::vector`" -msgstr "" +msgstr "`std::vector`" #: src/android/interoperability/cpp/type-mapping.md msgid "" @@ -12117,9 +12640,8 @@ msgstr "" #: src/android/interoperability/cpp/android-build-cpp.md #: src/android/interoperability/cpp/android-cpp-genrules.md #: src/android/interoperability/cpp/android-build-rust.md -#, fuzzy msgid "Building in Android" -msgstr "Android'de Rust" +msgstr "Android'de İnşa Etme (Build)" #: src/android/interoperability/cpp/android-build-cpp.md msgid "" @@ -12268,11 +12790,11 @@ msgstr "" #: src/android/interoperability/java.md msgid "\"system\"" -msgstr "" +msgstr "\"system\"" #: src/android/interoperability/java.md msgid "\"Hello, {input}!\"" -msgstr "" +msgstr "\"Merhaba, {input}!\"" #: src/android/interoperability/java.md msgid "_interoperability/java/Android.bp_:" @@ -12284,7 +12806,7 @@ msgstr "" #: src/android/interoperability/java.md msgid "\"hello_jni\"" -msgstr "" +msgstr "\"hello_jni\"" #: src/android/interoperability/java.md msgid "\"libjni\"" @@ -12300,17 +12822,15 @@ msgstr "" #: src/android/interoperability/java.md msgid "\"helloworld_jni\"" -msgstr "" +msgstr "\"helloworld_jni\"" #: src/android/interoperability/java.md -#, fuzzy msgid "\"HelloWorld.java\"" -msgstr "Merhaba Dünya!" +msgstr "\"HelloWorld.java\"" #: src/android/interoperability/java.md -#, fuzzy msgid "\"HelloWorld\"" -msgstr "Merhaba Dünya!" +msgstr "\"HelloWorld\"" #: src/android/interoperability/java.md msgid "Finally, you can build, sync, and run the binary:" @@ -12338,7 +12858,7 @@ msgstr "" #: src/chromium.md msgid "Welcome to Rust in Chromium" -msgstr "" +msgstr "Chromium'daki Rust'a Hoş Geldiniz" #: src/chromium.md msgid "" @@ -12380,7 +12900,7 @@ msgstr "" #: src/chromium/setup.md msgid "About the exercises" -msgstr "" +msgstr "Alıştırmalar hakkında" #: src/chromium/setup.md msgid "" @@ -12392,9 +12912,9 @@ msgstr "" #: src/chromium/cargo.md msgid "" -"Rust community typically uses `cargo` and libraries from [crates.io](https://" -"crates.io/). Chromium is built using `gn` and `ninja` and a curated set of " -"dependencies." +"The Rust community typically uses `cargo` and libraries from [crates.io]" +"(https://crates.io/). Chromium is built using `gn` and `ninja` and a curated " +"set of dependencies." msgstr "" #: src/chromium/cargo.md @@ -12429,9 +12949,8 @@ msgid "" msgstr "" #: src/chromium/cargo.md -#, fuzzy msgid "Mini exercise" -msgstr "egzersiz:" +msgstr "Küçük bir alıştırma" #: src/chromium/cargo.md msgid "Split into small groups and:" @@ -12548,13 +13067,13 @@ msgstr "" msgid "" "Disclaimer: a unique reason for using `cargo` was unavailability of `gn` " "when building and bootstrapping Rust standard library when building Rust " -"toolchain.)" +"toolchain." msgstr "" #: src/chromium/cargo.md msgid "" "`run_gnrt.py` uses Chromium's copy of `cargo` and `rustc`. `gnrt` depends on " -"third-party libraries downloaded from the internet, by `run_gnrt.py` asks " +"third-party libraries downloaded from the internet, but `run_gnrt.py` asks " "`cargo` that only `--locked` content is allowed via `Cargo.lock`.)" msgstr "" @@ -12678,7 +13197,6 @@ msgid "If this policy changes over time, the course will evolve to keep up." msgstr "" #: src/chromium/build-rules.md -#, fuzzy msgid "Build rules" msgstr "İnşa (Build) Kuralları" @@ -12866,9 +13384,8 @@ msgid "" msgstr "" #: src/exercises/chromium/build-rules.md -#, fuzzy msgid "Build rules exercise" -msgstr "İnşa (Build) Kuralları" +msgstr "İnşa (build) kuralları alıştırması" #: src/exercises/chromium/build-rules.md msgid "" @@ -13050,9 +13567,8 @@ msgid "" msgstr "" #: src/chromium/testing/rust-gtest-interop.md -#, fuzzy msgid "Example:" -msgstr "Örnek" +msgstr "Örnek:" #: src/chromium/testing/build-gn.md msgid "" @@ -13134,9 +13650,8 @@ msgid "" msgstr "" #: src/exercises/chromium/testing.md -#, fuzzy msgid "Testing exercise" -msgstr "egzersiz:" +msgstr "" #: src/exercises/chromium/testing.md msgid "Time for another exercise!" @@ -13389,9 +13904,8 @@ msgid "" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-qr.md -#, fuzzy msgid "CXX Error Handling: QR Example" -msgstr "Hata İşleme" +msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-qr.md msgid "" @@ -13430,9 +13944,8 @@ msgid "" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md -#, fuzzy msgid "CXX Error Handling: PNG Example" -msgstr "Hata İşleme" +msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md msgid "" @@ -13542,9 +14055,8 @@ msgid "" msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md -#, fuzzy msgid "Exercise: Interoperability with C++" -msgstr "Birlikte Çalışabilirlik" +msgstr "Alıştırma: C++ ile Birlikte Çalışabilirlik" #: src/exercises/chromium/interoperability-with-cpp.md msgid "Part one" @@ -13575,7 +14087,7 @@ msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md msgid "Build and run!" -msgstr "" +msgstr "İnşa et (Build) ve çalıştır!" #: src/exercises/chromium/interoperability-with-cpp.md msgid "Part two" @@ -13702,19 +14214,16 @@ msgid "" msgstr "" #: src/chromium/adding-third-party-crates.md -#, fuzzy msgid "C++ library" -msgstr "kütüphane:" +msgstr "C++ kütüphanesi" #: src/chromium/adding-third-party-crates.md -#, fuzzy msgid "Rust crate" -msgstr "Rust Ekosistemi" +msgstr "" #: src/chromium/adding-third-party-crates.md -#, fuzzy msgid "Build system" -msgstr "Rust Ekosistemi" +msgstr "" #: src/chromium/adding-third-party-crates.md msgid "Lots" @@ -13866,9 +14375,8 @@ msgid "This `vendor` command may download:" msgstr "" #: src/chromium/adding-third-party-crates/downloading-crates.md -#, fuzzy msgid "Your crate" -msgstr "Kullanışlı sandıklar (crates)" +msgstr "" #: src/chromium/adding-third-party-crates/downloading-crates.md msgid "Direct and transitive dependencies" @@ -13913,12 +14421,10 @@ msgid "An appropriate `README.chromium`" msgstr "" #: src/chromium/adding-third-party-crates/generating-gn-build-rules.md -#, fuzzy msgid "" "The \"major semver version\" is a [Rust \"semver\" version number](https://" "doc.rust-lang.org/cargo/reference/semver.html)." msgstr "" -"[çalışma alanları](https://doc.rust-lang.org/cargo/reference/workspaces.html)" #: src/chromium/adding-third-party-crates/generating-gn-build-rules.md msgid "" @@ -13970,9 +14476,8 @@ msgid "Checking platform or CPU to configure features on and off" msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems.md -#, fuzzy msgid "Generating code" -msgstr "Jenerikler" +msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems.md msgid "Yes - specify in `gnrt_config.toml`" @@ -14591,9 +15096,8 @@ msgid "// Now we can do things that require heap allocation.\n" msgstr "" #: src/bare-metal/alloc.md -#, fuzzy msgid "\"A string\"" -msgstr "string:" +msgstr "" #: src/bare-metal/alloc.md msgid "" @@ -15126,33 +15630,6 @@ msgstr "" msgid "_src/main.rs_:" msgstr "" -#: src/exercises/bare-metal/compass.md -#: src/exercises/bare-metal/solutions-morning.md -msgid "// Configure serial port.\n" -msgstr "" - -#: src/exercises/bare-metal/compass.md -#: src/exercises/bare-metal/solutions-morning.md -msgid "// Use the system timer as a delay provider.\n" -msgstr "" - -#: src/exercises/bare-metal/compass.md -msgid "" -"// Set up the I2C controller and Inertial Measurement Unit.\n" -" // TODO\n" -msgstr "" - -#: src/exercises/bare-metal/compass.md -#: src/exercises/bare-metal/solutions-morning.md -msgid "\"Ready.\"" -msgstr "" - -#: src/exercises/bare-metal/compass.md -msgid "" -"// Read compass data and log it to the serial port.\n" -" // TODO\n" -msgstr "" - #: src/exercises/bare-metal/compass.md src/exercises/bare-metal/rtc.md msgid "_Cargo.toml_ (you shouldn't need to change this):" msgstr "" @@ -15186,6 +15663,14 @@ msgstr "" msgid "([back to exercise](compass.md))" msgstr "" +#: src/exercises/bare-metal/solutions-morning.md +msgid "// Configure serial port.\n" +msgstr "" + +#: src/exercises/bare-metal/solutions-morning.md +msgid "// Use the system timer as a delay provider.\n" +msgstr "" + #: src/exercises/bare-metal/solutions-morning.md msgid "// Set up the I2C controller and Inertial Measurement Unit.\n" msgstr "" @@ -15195,7 +15680,11 @@ msgid "\"Setting up IMU...\"" msgstr "" #: src/exercises/bare-metal/solutions-morning.md -msgid "// Set up display and timer.\n" +msgid "// Set up display and timer.\n" +msgstr "" + +#: src/exercises/bare-metal/solutions-morning.md +msgid "\"Ready.\"" msgstr "" #: src/exercises/bare-metal/solutions-morning.md @@ -15556,12 +16045,10 @@ msgid "" msgstr "" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md -#: src/exercises/bare-metal/rtc.md msgid "/// Writes a single byte to the UART.\n" msgstr "" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md -#: src/exercises/bare-metal/rtc.md msgid "// Wait until there is room in the TX buffer.\n" msgstr "" @@ -15572,12 +16059,10 @@ msgid "" msgstr "" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md -#: src/exercises/bare-metal/rtc.md msgid "// Write to the TX buffer.\n" msgstr "" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md -#: src/exercises/bare-metal/rtc.md msgid "// Wait until the UART is no longer busy.\n" msgstr "" @@ -15615,7 +16100,7 @@ msgid "" "traits too." msgstr "" -#: src/bare-metal/aps/uart/traits.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/uart/traits.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "" "// Safe because it just contains a pointer to device memory, which can be\n" @@ -15797,43 +16282,43 @@ msgid "" "working with bitflags." msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Flags from the UART flag register.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Clear to send.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Data set ready.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Data carrier detect.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// UART busy transmitting data.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Receive FIFO is empty.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Transmit FIFO is full.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Receive FIFO is full.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Transmit FIFO is empty.\n" msgstr "" -#: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/bitflags.md msgid "/// Ring indicator.\n" msgstr "" @@ -15869,19 +16354,19 @@ msgstr "" msgid "/// Driver for a PL011 UART.\n" msgstr "" -#: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/driver.md msgid "" "// Safe because we know that self.registers points to the control\n" " // registers of a PL011 device which is appropriately mapped.\n" msgstr "" -#: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/driver.md msgid "" "/// Reads and returns a pending byte, or `None` if nothing has been\n" " /// received.\n" msgstr "" -#: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/better-uart/driver.md msgid "// TODO: Check for error conditions in bits 8-11.\n" msgstr "" @@ -15902,13 +16387,11 @@ msgid "" msgstr "" #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md -#: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Base address of the primary PL011 UART.\n" msgstr "" #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md -#: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "" "// Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" @@ -15954,11 +16437,11 @@ msgid "" "`Log` trait." msgstr "" -#: src/bare-metal/aps/logging.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/logging.md msgid "\"[{}] {}\"" msgstr "" -#: src/bare-metal/aps/logging.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/logging.md msgid "/// Initialises UART logger.\n" msgstr "" @@ -15972,7 +16455,7 @@ msgstr "" msgid "We need to initialise the logger before we use it." msgstr "" -#: src/bare-metal/aps/logging/using.md src/exercises/bare-metal/rtc.md +#: src/bare-metal/aps/logging/using.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"{info}\"" msgstr "" @@ -16343,762 +16826,43 @@ msgid "" "Download the [exercise template](../../comprehensive-rust-exercises.zip) and " "look in the `rtc` directory for the following files." msgstr "" - -#: src/exercises/bare-metal/rtc.md -#: src/exercises/bare-metal/solutions-afternoon.md -msgid "/// Base addresses of the GICv3.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -#: src/exercises/bare-metal/solutions-afternoon.md -msgid "\"main({:#x}, {:#x}, {:#x}, {:#x})\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -#: src/exercises/bare-metal/solutions-afternoon.md -msgid "" -"// Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" -" // addresses of a GICv3 distributor and redistributor respectively, and\n" -" // nothing else accesses those address ranges.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// TODO: Create instance of RTC driver and print current time.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// TODO: Wait for 3 seconds.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"_src/exceptions.rs_ (you should only need to change this for the 3rd part of " -"the exercise):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"// Copyright 2023 Google LLC\n" -"//\n" -"// Licensed under the Apache License, Version 2.0 (the \"License\");\n" -"// you may not use this file except in compliance with the License.\n" -"// You may obtain a copy of the License at\n" -"//\n" -"// http://www.apache.org/licenses/LICENSE-2.0\n" -"//\n" -"// Unless required by applicable law or agreed to in writing, software\n" -"// distributed under the License is distributed on an \"AS IS\" BASIS,\n" -"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" -"// See the License for the specific language governing permissions and\n" -"// limitations under the License.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"sync_exception_current\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"irq_current\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"No pending interrupt\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"IRQ {intid:?}\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"fiq_current\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"serr_current\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"sync_lower\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"irq_lower\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"fiq_lower\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"serr_lower\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "_src/logger.rs_ (you shouldn't need to change this):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// ANCHOR: main\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "_src/pl011.rs_ (you shouldn't need to change this):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// ANCHOR: Flags\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// ANCHOR_END: Flags\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"/// Flags from the UART Receive Status Register / Error Clear Register.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "/// Framing error.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "/// Parity error.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "/// Break error.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "/// Overrun error.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// ANCHOR: Registers\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// ANCHOR_END: Registers\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"// ANCHOR: Uart\n" -"/// Driver for a PL011 UART.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"/// Constructs a new instance of the UART driver for a PL011 device at the\n" -" /// given base address.\n" -" ///\n" -" /// # Safety\n" -" ///\n" -" /// The given base address must point to the MMIO control registers of " -"a\n" -" /// PL011 device, which must be mapped into the address space of the " -"process\n" -" /// as device memory and not have any other aliases.\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "// ANCHOR_END: Uart\n" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "_build.rs_ (you shouldn't need to change this):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"linux\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"CROSS_COMPILE\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -#, fuzzy -msgid "\"aarch64-linux-gnu\"" -msgstr "aarch64-paging" - -#: src/exercises/bare-metal/rtc.md -msgid "\"aarch64-none-elf\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"entry.S\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -#, fuzzy -msgid "\"exceptions.S\"" -msgstr "İstisnalar" - -#: src/exercises/bare-metal/rtc.md -msgid "\"idmap.S\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "\"empty\"" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "_entry.S_ (you shouldn't need to change this):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"```armasm\n" -"/*\n" -" * Copyright 2023 Google LLC\n" -" *\n" -" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" -" * you may not use this file except in compliance with the License.\n" -" * You may obtain a copy of the License at\n" -" *\n" -" * https://www.apache.org/licenses/LICENSE-2.0\n" -" *\n" -" * Unless required by applicable law or agreed to in writing, software\n" -" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" -" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" -" * See the License for the specific language governing permissions and\n" -" * limitations under the License.\n" -" */\n" -"\n" -".macro adr_l, reg:req, sym:req\n" -"\tadrp \\reg, \\sym\n" -"\tadd \\reg, \\reg, :lo12:\\sym\n" -".endm\n" -"\n" -".macro mov_i, reg:req, imm:req\n" -"\tmovz \\reg, :abs_g3:\\imm\n" -"\tmovk \\reg, :abs_g2_nc:\\imm\n" -"\tmovk \\reg, :abs_g1_nc:\\imm\n" -"\tmovk \\reg, :abs_g0_nc:\\imm\n" -".endm\n" -"\n" -".set .L_MAIR_DEV_nGnRE,\t0x04\n" -".set .L_MAIR_MEM_WBWA,\t0xff\n" -".set .Lmairval, .L_MAIR_DEV_nGnRE | (.L_MAIR_MEM_WBWA << 8)\n" -"\n" -"/* 4 KiB granule size for TTBR0_EL1. */\n" -".set .L_TCR_TG0_4KB, 0x0 << 14\n" -"/* 4 KiB granule size for TTBR1_EL1. */\n" -".set .L_TCR_TG1_4KB, 0x2 << 30\n" -"/* Disable translation table walk for TTBR1_EL1, generating a translation " -"fault instead. */\n" -".set .L_TCR_EPD1, 0x1 << 23\n" -"/* Translation table walks for TTBR0_EL1 are inner sharable. */\n" -".set .L_TCR_SH_INNER, 0x3 << 12\n" -"/*\n" -" * Translation table walks for TTBR0_EL1 are outer write-back read-allocate " -"write-allocate\n" -" * cacheable.\n" -" */\n" -".set .L_TCR_RGN_OWB, 0x1 << 10\n" -"/*\n" -" * Translation table walks for TTBR0_EL1 are inner write-back read-allocate " -"write-allocate\n" -" * cacheable.\n" -" */\n" -".set .L_TCR_RGN_IWB, 0x1 << 8\n" -"/* Size offset for TTBR0_EL1 is 2**39 bytes (512 GiB). */\n" -".set .L_TCR_T0SZ_512, 64 - 39\n" -".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ." -"L_TCR_RGN_OWB\n" -".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ." -"L_TCR_T0SZ_512\n" -"\n" -"/* Stage 1 instruction access cacheability is unaffected. */\n" -".set .L_SCTLR_ELx_I, 0x1 << 12\n" -"/* SP alignment fault if SP is not aligned to a 16 byte boundary. */\n" -".set .L_SCTLR_ELx_SA, 0x1 << 3\n" -"/* Stage 1 data access cacheability is unaffected. */\n" -".set .L_SCTLR_ELx_C, 0x1 << 2\n" -"/* EL0 and EL1 stage 1 MMU enabled. */\n" -".set .L_SCTLR_ELx_M, 0x1 << 0\n" -"/* Privileged Access Never is unchanged on taking an exception to EL1. */\n" -".set .L_SCTLR_EL1_SPAN, 0x1 << 23\n" -"/* SETEND instruction disabled at EL0 in aarch32 mode. */\n" -".set .L_SCTLR_EL1_SED, 0x1 << 8\n" -"/* Various IT instructions are disabled at EL0 in aarch32 mode. */\n" -".set .L_SCTLR_EL1_ITD, 0x1 << 7\n" -".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << " -"28) | (0x1 << 29)\n" -".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ." -"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n" -".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ." -"L_SCTLR_EL1_RES1\n" -"\n" -"/**\n" -" * This is a generic entry point for an image. It carries out the operations " -"required to prepare the\n" -" * loaded image to be run. Specifically, it zeroes the bss section using " -"registers x25 and above,\n" -" * prepares the stack, enables floating point, and sets up the exception " -"vector. It preserves x0-x3\n" -" * for the Rust entry point, as these may contain boot parameters.\n" -" */\n" -".section .init.entry, \"ax\"\n" -".global entry\n" -"entry:\n" -"\t/* Load and apply the memory management configuration, ready to enable MMU " -"and caches. */\n" -"\tadrp x30, idmap\n" -"\tmsr ttbr0_el1, x30\n" -"\n" -"\tmov_i x30, .Lmairval\n" -"\tmsr mair_el1, x30\n" -"\n" -"\tmov_i x30, .Ltcrval\n" -"\t/* Copy the supported PA range into TCR_EL1.IPS. */\n" -"\tmrs x29, id_aa64mmfr0_el1\n" -"\tbfi x30, x29, #32, #4\n" -"\n" -"\tmsr tcr_el1, x30\n" -"\n" -"\tmov_i x30, .Lsctlrval\n" -"\n" -"\t/*\n" -"\t * Ensure everything before this point has completed, then invalidate any " -"potentially stale\n" -"\t * local TLB entries before they start being used.\n" -"\t */\n" -"\tisb\n" -"\ttlbi vmalle1\n" -"\tic iallu\n" -"\tdsb nsh\n" -"\tisb\n" -"\n" -"\t/*\n" -"\t * Configure sctlr_el1 to enable MMU and cache and don't proceed until " -"this has completed.\n" -"\t */\n" -"\tmsr sctlr_el1, x30\n" -"\tisb\n" -"\n" -"\t/* Disable trapping floating point access in EL1. */\n" -"\tmrs x30, cpacr_el1\n" -"\torr x30, x30, #(0x3 << 20)\n" -"\tmsr cpacr_el1, x30\n" -"\tisb\n" -"\n" -"\t/* Zero out the bss section. */\n" -"\tadr_l x29, bss_begin\n" -"\tadr_l x30, bss_end\n" -"0:\tcmp x29, x30\n" -"\tb.hs 1f\n" -"\tstp xzr, xzr, [x29], #16\n" -"\tb 0b\n" -"\n" -"1:\t/* Prepare the stack. */\n" -"\tadr_l x30, boot_stack_end\n" -"\tmov sp, x30\n" -"\n" -"\t/* Set up exception vector. */\n" -"\tadr x30, vector_table_el1\n" -"\tmsr vbar_el1, x30\n" -"\n" -"\t/* Call into Rust code. */\n" -"\tbl main\n" -"\n" -"\t/* Loop forever waiting for interrupts. */\n" -"2:\twfi\n" -"\tb 2b\n" -"```" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "_exceptions.S_ (you shouldn't need to change this):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"```armasm\n" -"/*\n" -" * Copyright 2023 Google LLC\n" -" *\n" -" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" -" * you may not use this file except in compliance with the License.\n" -" * You may obtain a copy of the License at\n" -" *\n" -" * https://www.apache.org/licenses/LICENSE-2.0\n" -" *\n" -" * Unless required by applicable law or agreed to in writing, software\n" -" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" -" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" -" * See the License for the specific language governing permissions and\n" -" * limitations under the License.\n" -" */\n" -"\n" -"/**\n" -" * Saves the volatile registers onto the stack. This currently takes 14\n" -" * instructions, so it can be used in exception handlers with 18 " -"instructions\n" -" * left.\n" -" *\n" -" * On return, x0 and x1 are initialised to elr_el2 and spsr_el2 " -"respectively,\n" -" * which can be used as the first and second arguments of a subsequent " -"call.\n" -" */\n" -".macro save_volatile_to_stack\n" -"\t/* Reserve stack space and save registers x0-x18, x29 & x30. */\n" -"\tstp x0, x1, [sp, #-(8 * 24)]!\n" -"\tstp x2, x3, [sp, #8 * 2]\n" -"\tstp x4, x5, [sp, #8 * 4]\n" -"\tstp x6, x7, [sp, #8 * 6]\n" -"\tstp x8, x9, [sp, #8 * 8]\n" -"\tstp x10, x11, [sp, #8 * 10]\n" -"\tstp x12, x13, [sp, #8 * 12]\n" -"\tstp x14, x15, [sp, #8 * 14]\n" -"\tstp x16, x17, [sp, #8 * 16]\n" -"\tstr x18, [sp, #8 * 18]\n" -"\tstp x29, x30, [sp, #8 * 20]\n" -"\n" -"\t/*\n" -"\t * Save elr_el1 & spsr_el1. This such that we can take nested exception\n" -"\t * and still be able to unwind.\n" -"\t */\n" -"\tmrs x0, elr_el1\n" -"\tmrs x1, spsr_el1\n" -"\tstp x0, x1, [sp, #8 * 22]\n" -".endm\n" -"\n" -"/**\n" -" * Restores the volatile registers from the stack. This currently takes 14\n" -" * instructions, so it can be used in exception handlers while still leaving " -"18\n" -" * instructions left; if paired with save_volatile_to_stack, there are 4\n" -" * instructions to spare.\n" -" */\n" -".macro restore_volatile_from_stack\n" -"\t/* Restore registers x2-x18, x29 & x30. */\n" -"\tldp x2, x3, [sp, #8 * 2]\n" -"\tldp x4, x5, [sp, #8 * 4]\n" -"\tldp x6, x7, [sp, #8 * 6]\n" -"\tldp x8, x9, [sp, #8 * 8]\n" -"\tldp x10, x11, [sp, #8 * 10]\n" -"\tldp x12, x13, [sp, #8 * 12]\n" -"\tldp x14, x15, [sp, #8 * 14]\n" -"\tldp x16, x17, [sp, #8 * 16]\n" -"\tldr x18, [sp, #8 * 18]\n" -"\tldp x29, x30, [sp, #8 * 20]\n" -"\n" -"\t/* Restore registers elr_el1 & spsr_el1, using x0 & x1 as scratch. */\n" -"\tldp x0, x1, [sp, #8 * 22]\n" -"\tmsr elr_el1, x0\n" -"\tmsr spsr_el1, x1\n" -"\n" -"\t/* Restore x0 & x1, and release stack space. */\n" -"\tldp x0, x1, [sp], #8 * 24\n" -".endm\n" -"\n" -"/**\n" -" * This is a generic handler for exceptions taken at the current EL while " -"using\n" -" * SP0. It behaves similarly to the SPx case by first switching to SPx, " -"doing\n" -" * the work, then switching back to SP0 before returning.\n" -" *\n" -" * Switching to SPx and calling the Rust handler takes 16 instructions. To\n" -" * restore and return we need an additional 16 instructions, so we can " -"implement\n" -" * the whole handler within the allotted 32 instructions.\n" -" */\n" -".macro current_exception_sp0 handler:req\n" -"\tmsr spsel, #1\n" -"\tsave_volatile_to_stack\n" -"\tbl \\handler\n" -"\trestore_volatile_from_stack\n" -"\tmsr spsel, #0\n" -"\teret\n" -".endm\n" -"\n" -"/**\n" -" * This is a generic handler for exceptions taken at the current EL while " -"using\n" -" * SPx. It saves volatile registers, calls the Rust handler, restores " -"volatile\n" -" * registers, then returns.\n" -" *\n" -" * This also works for exceptions taken from EL0, if we don't care about\n" -" * non-volatile registers.\n" -" *\n" -" * Saving state and jumping to the Rust handler takes 15 instructions, and\n" -" * restoring and returning also takes 15 instructions, so we can fit the " -"whole\n" -" * handler in 30 instructions, under the limit of 32.\n" -" */\n" -".macro current_exception_spx handler:req\n" -"\tsave_volatile_to_stack\n" -"\tbl \\handler\n" -"\trestore_volatile_from_stack\n" -"\teret\n" -".endm\n" -"\n" -".section .text.vector_table_el1, \"ax\"\n" -".global vector_table_el1\n" -".balign 0x800\n" -"vector_table_el1:\n" -"sync_cur_sp0:\n" -"\tcurrent_exception_sp0 sync_exception_current\n" -"\n" -".balign 0x80\n" -"irq_cur_sp0:\n" -"\tcurrent_exception_sp0 irq_current\n" -"\n" -".balign 0x80\n" -"fiq_cur_sp0:\n" -"\tcurrent_exception_sp0 fiq_current\n" -"\n" -".balign 0x80\n" -"serr_cur_sp0:\n" -"\tcurrent_exception_sp0 serr_current\n" -"\n" -".balign 0x80\n" -"sync_cur_spx:\n" -"\tcurrent_exception_spx sync_exception_current\n" -"\n" -".balign 0x80\n" -"irq_cur_spx:\n" -"\tcurrent_exception_spx irq_current\n" -"\n" -".balign 0x80\n" -"fiq_cur_spx:\n" -"\tcurrent_exception_spx fiq_current\n" -"\n" -".balign 0x80\n" -"serr_cur_spx:\n" -"\tcurrent_exception_spx serr_current\n" -"\n" -".balign 0x80\n" -"sync_lower_64:\n" -"\tcurrent_exception_spx sync_lower\n" -"\n" -".balign 0x80\n" -"irq_lower_64:\n" -"\tcurrent_exception_spx irq_lower\n" -"\n" -".balign 0x80\n" -"fiq_lower_64:\n" -"\tcurrent_exception_spx fiq_lower\n" -"\n" -".balign 0x80\n" -"serr_lower_64:\n" -"\tcurrent_exception_spx serr_lower\n" -"\n" -".balign 0x80\n" -"sync_lower_32:\n" -"\tcurrent_exception_spx sync_lower\n" -"\n" -".balign 0x80\n" -"irq_lower_32:\n" -"\tcurrent_exception_spx irq_lower\n" -"\n" -".balign 0x80\n" -"fiq_lower_32:\n" -"\tcurrent_exception_spx fiq_lower\n" -"\n" -".balign 0x80\n" -"serr_lower_32:\n" -"\tcurrent_exception_spx serr_lower\n" -"```" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "_idmap.S_ (you shouldn't need to change this):" -msgstr "" - -#: src/exercises/bare-metal/rtc.md -msgid "" -"```armasm\n" -"/*\n" -" * Copyright 2023 Google LLC\n" -" *\n" -" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" -" * you may not use this file except in compliance with the License.\n" -" * You may obtain a copy of the License at\n" -" *\n" -" * https://www.apache.org/licenses/LICENSE-2.0\n" -" *\n" -" * Unless required by applicable law or agreed to in writing, software\n" -" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" -" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" -" * See the License for the specific language governing permissions and\n" -" * limitations under the License.\n" -" */\n" -"\n" -".set .L_TT_TYPE_BLOCK, 0x1\n" -".set .L_TT_TYPE_PAGE, 0x3\n" -".set .L_TT_TYPE_TABLE, 0x3\n" -"\n" -"/* Access flag. */\n" -".set .L_TT_AF, 0x1 << 10\n" -"/* Not global. */\n" -".set .L_TT_NG, 0x1 << 11\n" -".set .L_TT_XN, 0x3 << 53\n" -"\n" -".set .L_TT_MT_DEV, 0x0 << 2\t\t\t// MAIR #0 (DEV_nGnRE)\n" -".set .L_TT_MT_MEM, (0x1 << 2) | (0x3 << 8)\t// MAIR #1 (MEM_WBWA), inner " -"shareable\n" -"\n" -".set .L_BLOCK_DEV, .L_TT_TYPE_BLOCK | .L_TT_MT_DEV | .L_TT_AF | .L_TT_XN\n" -".set .L_BLOCK_MEM, .L_TT_TYPE_BLOCK | .L_TT_MT_MEM | .L_TT_AF | .L_TT_NG\n" -"\n" -".section \".rodata.idmap\", \"a\", %progbits\n" -".global idmap\n" -".align 12\n" -"idmap:\n" -"\t/* level 1 */\n" -"\t.quad\t\t.L_BLOCK_DEV | 0x0\t\t // 1 GiB of device mappings\n" -"\t.quad\t\t.L_BLOCK_MEM | 0x40000000\t// 1 GiB of DRAM\n" -"\t.fill\t\t254, 8, 0x0\t\t\t// 254 GiB of unmapped VA space\n" -"\t.quad\t\t.L_BLOCK_DEV | 0x4000000000 // 1 GiB of device mappings\n" -"\t.fill\t\t255, 8, 0x0\t\t\t// 255 GiB of remaining VA space\n" -"```" + +#: src/exercises/bare-metal/rtc.md +msgid "" +"_src/exceptions.rs_ (you should only need to change this for the 3rd part of " +"the exercise):" msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "_image.ld_ (you shouldn't need to change this):" +msgid "_src/logger.rs_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "" -"```ld\n" -"/*\n" -" * Copyright 2023 Google LLC\n" -" *\n" -" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" -" * you may not use this file except in compliance with the License.\n" -" * You may obtain a copy of the License at\n" -" *\n" -" * https://www.apache.org/licenses/LICENSE-2.0\n" -" *\n" -" * Unless required by applicable law or agreed to in writing, software\n" -" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" -" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" -" * See the License for the specific language governing permissions and\n" -" * limitations under the License.\n" -" */\n" -"\n" -"/*\n" -" * Code will start running at this symbol which is placed at the start of " -"the\n" -" * image.\n" -" */\n" -"ENTRY(entry)\n" -"\n" -"MEMORY\n" -"{\n" -"\timage : ORIGIN = 0x40080000, LENGTH = 2M\n" -"}\n" -"\n" -"SECTIONS\n" -"{\n" -"\t/*\n" -"\t * Collect together the code.\n" -"\t */\n" -"\t.init : ALIGN(4096) {\n" -"\t\ttext_begin = .;\n" -"\t\t*(.init.entry)\n" -"\t\t*(.init.*)\n" -"\t} >image\n" -"\t.text : {\n" -"\t\t*(.text.*)\n" -"\t} >image\n" -"\ttext_end = .;\n" -"\n" -"\t/*\n" -"\t * Collect together read-only data.\n" -"\t */\n" -"\t.rodata : ALIGN(4096) {\n" -"\t\trodata_begin = .;\n" -"\t\t*(.rodata.*)\n" -"\t} >image\n" -"\t.got : {\n" -"\t\t*(.got)\n" -"\t} >image\n" -"\trodata_end = .;\n" -"\n" -"\t/*\n" -"\t * Collect together the read-write data including .bss at the end which\n" -"\t * will be zero'd by the entry code.\n" -"\t */\n" -"\t.data : ALIGN(4096) {\n" -"\t\tdata_begin = .;\n" -"\t\t*(.data.*)\n" -"\t\t/*\n" -"\t\t * The entry point code assumes that .data is a multiple of 32\n" -"\t\t * bytes long.\n" -"\t\t */\n" -"\t\t. = ALIGN(32);\n" -"\t\tdata_end = .;\n" -"\t} >image\n" -"\n" -"\t/* Everything beyond this point will not be included in the binary. */\n" -"\tbin_end = .;\n" -"\n" -"\t/* The entry point code assumes that .bss is 16-byte aligned. */\n" -"\t.bss : ALIGN(16) {\n" -"\t\tbss_begin = .;\n" -"\t\t*(.bss.*)\n" -"\t\t*(COMMON)\n" -"\t\t. = ALIGN(16);\n" -"\t\tbss_end = .;\n" -"\t} >image\n" -"\n" -"\t.stack (NOLOAD) : ALIGN(4096) {\n" -"\t\tboot_stack_begin = .;\n" -"\t\t. += 40 * 4096;\n" -"\t\t. = ALIGN(4096);\n" -"\t\tboot_stack_end = .;\n" -"\t} >image\n" -"\n" -"\t. = ALIGN(4K);\n" -"\tPROVIDE(dma_region = .);\n" -"\n" -"\t/*\n" -"\t * Remove unused sections from the image.\n" -"\t */\n" -"\t/DISCARD/ : {\n" -"\t\t/* The image loads itself so doesn't need these sections. */\n" -"\t\t*(.gnu.hash)\n" -"\t\t*(.hash)\n" -"\t\t*(.interp)\n" -"\t\t*(.eh_frame_hdr)\n" -"\t\t*(.eh_frame)\n" -"\t\t*(.note.gnu.build-id)\n" -"\t}\n" -"}\n" -"```" +msgid "_src/pl011.rs_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "_Makefile_ (you shouldn't need to change this):" +msgid "_build.rs_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "# Copyright 2023 Google LLC" +msgid "_entry.S_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "$(shell uname -s)" +msgid "_exceptions.S_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md -#, fuzzy -msgid "aarch64-linux-gnu" -msgstr "aarch64-paging" +msgid "_idmap.S_ (you shouldn't need to change this):" +msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "stdio -display none -kernel $< -s" +msgid "_image.ld_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md -msgid "cargo clean" +msgid "_Makefile_ (you shouldn't need to change this):" msgstr "" #: src/exercises/bare-metal/rtc.md @@ -17117,6 +16881,10 @@ msgstr "" msgid "_main.rs_:" msgstr "" +#: src/exercises/bare-metal/solutions-afternoon.md +msgid "/// Base addresses of the GICv3.\n" +msgstr "" + #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Base address of the PL031 RTC.\n" msgstr "" @@ -17125,6 +16893,17 @@ msgstr "" msgid "/// The IRQ used by the PL031 RTC.\n" msgstr "" +#: src/exercises/bare-metal/solutions-afternoon.md +msgid "\"main({:#x}, {:#x}, {:#x}, {:#x})\"" +msgstr "" + +#: src/exercises/bare-metal/solutions-afternoon.md +msgid "" +"// Safe because `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" +" // addresses of a GICv3 distributor and redistributor respectively, and\n" +" // nothing else accesses those address ranges.\n" +msgstr "" + #: src/exercises/bare-metal/solutions-afternoon.md msgid "" "// Safe because `PL031_BASE_ADDRESS` is the base address of a PL031 device,\n" @@ -17804,7 +17583,6 @@ msgid "\"Eureka! {} has a new idea!\"" msgstr "" #: src/exercises/concurrency/dining-philosophers.md -#: src/exercises/concurrency/dining-philosophers-async.md #: src/exercises/concurrency/solutions-afternoon.md msgid "// Pick up forks...\n" msgstr "" @@ -18917,9 +18695,8 @@ msgstr "" #: src/exercises/concurrency/dining-philosophers-async.md #: src/exercises/concurrency/solutions-afternoon.md -#, fuzzy msgid "Dining Philosophers --- Async" -msgstr "Filozofların Akşam Yemeği" +msgstr "Filozofların Akşam Yemeği --- Async" #: src/exercises/concurrency/dining-philosophers-async.md msgid "" @@ -18934,6 +18711,11 @@ msgid "" "main.rs`, fill out the blanks, and test that `cargo run` does not deadlock:" msgstr "" +#: src/exercises/concurrency/dining-philosophers-async.md +#: src/exercises/concurrency/solutions-afternoon.md +msgid "// Keep trying until we have both forks\n" +msgstr "" + #: src/exercises/concurrency/dining-philosophers-async.md #: src/exercises/concurrency/solutions-afternoon.md msgid "// Make them think and eat\n" @@ -19005,7 +18787,7 @@ msgid "" "[dependencies]\n" "futures-util = { version = \"0.3.30\", features = [\"sink\"] }\n" "http = \"1.0.0\"\n" -"tokio = { version = \"1.28.1\", features = [\"full\"] }\n" +"tokio = { version = \"1.36.0\", features = [\"full\"] }\n" "tokio-websockets = { version = \"0.5.1\", features = [\"client\", " "\"fastrand\", \"server\", \"sha1_smol\"] }\n" "```" @@ -19161,19 +18943,18 @@ msgstr "" #: src/exercises/concurrency/solutions-afternoon.md msgid "" -"// Add a delay before picking the second fork to allow the execution\n" -" // to transfer to another task\n" +"// If we didn't get the left fork, drop the right fork if we\n" +" // have it and let other tasks make progress.\n" msgstr "" #: src/exercises/concurrency/solutions-afternoon.md -msgid "// The locks are dropped here\n" +msgid "" +"// If we didn't get the right fork, drop the left fork and let\n" +" // other tasks make progress.\n" msgstr "" #: src/exercises/concurrency/solutions-afternoon.md -msgid "" -"// To avoid a deadlock, we have to break the symmetry\n" -" // somewhere. This will swap the forks without deinitializing\n" -" // either of them.\n" +msgid "// The locks are dropped here\n" msgstr "" #: src/exercises/concurrency/solutions-afternoon.md @@ -19533,7 +19314,7 @@ msgstr "" #: src/glossary.md msgid "" "Rust Fundamentals: \n" -"Days 1 to 3 of this course." +"Days 1 to 4 of this course." msgstr "" #: src/glossary.md @@ -19870,9 +19651,6 @@ msgstr "" #~ msgid "Why Rust?" #~ msgstr "Neden Rust?" -#~ msgid "An Example in C" -#~ msgstr "C Dilinde Bir Örnek" - #~ msgid "Compile Time Guarantees" #~ msgstr "Derleme Zamanı Garantileri" @@ -19897,9 +19675,6 @@ msgstr "" #~ msgid "Arrays and for Loops" #~ msgstr "Diziler ve for Döngüleri" -#~ msgid "if expressions" -#~ msgstr "if İfadeleri" - #~ msgid "for expressions" #~ msgstr "for İfadeleri" @@ -19954,6 +19729,9 @@ msgstr "" #~ msgid "Garbage Collection" #~ msgstr "Çöp Toplama" +#~ msgid "Rust Memory Management" +#~ msgstr "Rust Bellek Yönetimi" + #~ msgid "Moved Strings in Rust" #~ msgstr "Rust'da Taşınmış Stringler" @@ -19990,6 +19768,9 @@ msgstr "" #~ msgid "Box" #~ msgstr "Box" +#~ msgid "Recursive Data Types" +#~ msgstr "Özyinelemeli Veri Türleri" + #~ msgid "Rc" #~ msgstr "Rc" @@ -20014,6 +19795,9 @@ msgstr "" #~ msgid "Important Traits" #~ msgstr "Önemli Özellikler (Traits)" +#~ msgid "Iterator" +#~ msgstr "Iterator" + #~ msgid "From and Into" #~ msgstr "From ve Into" @@ -20059,9 +19843,15 @@ msgstr "" #~ msgid "embedded-hal" #~ msgstr "embedded-hal" +#~ msgid "probe-rs, cargo-embed" +#~ msgstr "probe-rs, cargo-embed" + #~ msgid "zerocopy" #~ msgstr "zerocopy" +#~ msgid "aarch64-paging" +#~ msgstr "aarch64-paging" + #~ msgid "buddy_system_allocator" #~ msgstr "buddy_system_allocator" @@ -20162,18 +19952,446 @@ msgstr "" #~ "}\n" #~ "```" +#~ msgid "" +#~ "Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, " +#~ "and `continue`." +#~ msgstr "" +#~ "Kontrol akışı yapıları: `if`, `if let`, `while`, `while let`, `break` ve " +#~ "`continue`." + +#~ msgid "" +#~ "The idea for the first day is to show _just enough_ of Rust to be able to " +#~ "speak about the famous borrow checker. The way Rust handles memory is a " +#~ "major feature and we should show students this right away." +#~ msgstr "" +#~ "İlk günün amacı, ünlü ödünç alma denetleyicisi hakkında konuşabilecek " +#~ "_kadar_ Rust'ı göstermek. Rust'ın hafızayı işleme şekli önemli bir " +#~ "özellik ve bunu öğrencilere hemen göstermeliyiz." + +#~ msgid "" +#~ "If you're teaching this in a classroom, this is a good place to go over " +#~ "the schedule. We suggest splitting the day into two parts (following the " +#~ "slides):" +#~ msgstr "" +#~ "Eğer bunu sınıfta öğretiyorsanız, burası programın üzerinden geçmek için " +#~ "iyi bir yerdir. Günü iki bölüme ayırmanızı öneririz (slaytları takip " +#~ "ederek):" + +#~ msgid "Morning: 9:00 to 12:00," +#~ msgstr "Sabah: 9:00 - 12:00," + +#~ msgid "Afternoon: 13:00 to 16:00." +#~ msgstr "Öğleden sonra: 13:00 - 16:00." + +#~ msgid "" +#~ "You can of course adjust this as necessary. Please make sure to include " +#~ "breaks, we recommend a break every hour!" +#~ msgstr "" +#~ "Elbette bunu gerektiği gibi ayarlayabilirsiniz. Lütfen molaları dahil " +#~ "ettiğinizden emin olun, her saat başı bir mola vermenizi öneririz!" + +#~ msgid "" +#~ "```rust,editable\n" +#~ "fn main() {\n" +#~ " println!(\"Hello 🌍!\");\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable\n" +#~ "fn main() {\n" +#~ " println!(\"Merhaba 🌍!\");\n" +#~ "}\n" +#~ "```" + +#~ msgid "Here is a small example program in Rust:" +#~ msgstr "Rust dilinde küçük bir örnek program:" + +#~ msgid "" +#~ "```rust,editable\n" +#~ "fn main() { // Program entry point\n" +#~ " let mut x: i32 = 6; // Mutable variable binding\n" +#~ " print!(\"{x}\"); // Macro for printing, like printf\n" +#~ " while x != 1 { // No parenthesis around expression\n" +#~ " if x % 2 == 0 { // Math like in other languages\n" +#~ " x = x / 2;\n" +#~ " } else {\n" +#~ " x = 3 * x + 1;\n" +#~ " }\n" +#~ " print!(\" -> {x}\");\n" +#~ " }\n" +#~ " println!();\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable\n" +#~ "fn main() { // Programın giriş noktası\n" +#~ " let mut x: i32 = 6; // Değiştirilebilir değişken bağlama (Mutable " +#~ "variable binding)\n" +#~ " print!(\"{x}\"); // Yazdırma için makro, C dilindeki printf " +#~ "gibi\n" +#~ " while x != 1 { // İfadenin etrafında parantez yok\n" +#~ " if x % 2 == 0 { // Matematik diğer dillerde olduğu gibi\n" +#~ " x = x / 2;\n" +#~ " } else {\n" +#~ " x = 3 * x + 1;\n" +#~ " }\n" +#~ " print!(\" -> {x}\");\n" +#~ " }\n" +#~ " println!();\n" +#~ "}\n" +#~ "```" + +#~ msgid "" +#~ "The code implements the Collatz conjecture: it is believed that the loop " +#~ "will always end, but this is not yet proved. Edit the code and play with " +#~ "different inputs." +#~ msgstr "" +#~ "Bu kod Collatz sanısını içerir: Döngünün her zaman sona ereceğine " +#~ "inanılıyor, ancak bu henüz kanıtlanmadı. Kodu düzenleyin ve farklı " +#~ "girişlerle oynayın." + +#~ msgid "" +#~ "Explain that all variables are statically typed. Try removing `i32` to " +#~ "trigger type inference. Try with `i8` instead and trigger a runtime " +#~ "integer overflow." +#~ msgstr "" +#~ "Tüm değişkenlerin statik olarak türlendiğini (statically typed) " +#~ "açıklayın. Tür çıkarımını (type inference) tetiklemek için `i32`yi " +#~ "kaldırmayı deneyin. Sonra, bunun yerine `i8` ile deneyin ve çalışma " +#~ "zamanı tamsayı taşmasını (runtime integer overflow) tetikleyin." + +#~ msgid "Change `let mut x` to `let x`, discuss the compiler error." +#~ msgstr "" +#~ "`let mut x`i `let x` olarak değiştirin, derleyici hatasını tartışın." + +#~ msgid "" +#~ "Show how `print!` gives a compilation error if the arguments don't match " +#~ "the format string." +#~ msgstr "" +#~ "Argümanlar format dizesiyle (string) eşleşmediğinde `print!`in nasıl " +#~ "derleme hatası verdiğini gösterin." + +#~ msgid "" +#~ "Show how you need to use `{}` as a placeholder if you want to print an " +#~ "expression which is more complex than just a single variable." +#~ msgstr "" +#~ "Tek bir değişkenden daha karmaşık bir ifadeyi (expression) yazdırmak " +#~ "istiyorsanız `{}` ifadesini yer tutucu (placeholder) olarak nasıl " +#~ "kullanmanız gerektiğini gösterin." + +#~ msgid "" +#~ "Show the students the standard library, show them how to search for `std::" +#~ "fmt` which has the rules of the formatting mini-language. It's important " +#~ "that the students become familiar with searching in the standard library." +#~ msgstr "" +#~ "Öğrencilere standart kütüphaneyi gösterin, onlara küçük formatlama " +#~ "dilinin kurallarını içeren `std::fmt`yi nasıl arayacaklarını gösterin. " +#~ "Öğrencilerin standart kütüphanede arama yapmaya aşina olmaları önemlidir." + +#~ msgid "" +#~ "In a shell `rustup doc std::fmt` will open a browser on the local std::" +#~ "fmt documentation" +#~ msgstr "" +#~ "Komut satırına`rustup doc std::fmt` komutunu girmeniz durumunda yerel " +#~ "std::fmt belgeleri varsayılan tarayıcınızda açılacaktır" + +#~ msgid "Compile time memory safety." +#~ msgstr "Derleme zamanı bellek emniyeti (memory safety)." + +#~ msgid "Lack of undefined runtime behavior." +#~ msgstr "" +#~ "Tanımlanmamış çalışma zamanı davranışının (undefined runtime behavior) " +#~ "olmaması." + +#~ msgid "Modern language features." +#~ msgstr "Modern dil özellikleri." + +#~ msgid "Static memory management at compile time:" +#~ msgstr "Derleme zamanında statik bellek yönetimi:" + +#~ msgid "No memory leaks (_mostly_, see notes)." +#~ msgstr "Bellek sızıntısı yok (_mostly_, notlara bakın)." + +#~ msgid "" +#~ "It is possible to produce memory leaks in (safe) Rust. Some examples are:" +#~ msgstr "" +#~ "(Güvenli) Rust'ta bellek sızıntılarının oluşması mümkündür. Bazı örnekler:" + +#~ msgid "" +#~ "You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box." +#~ "html#method.leak) to leak a pointer. A use of this could be to get " +#~ "runtime-initialized and runtime-sized static variables" +#~ msgstr "" +#~ "Bir göstericiyi sızdırmak için [`Box::leak`](https://doc.rust-lang.org/" +#~ "std/boxed/struct.Box.html#method.leak)'i kullanabilirsiniz. Bunun bir " +#~ "kullanımı, çalışma zamanında ilklendirilecek (runtime-initialized) ve " +#~ "çalışma zamanında boyutlandırılacak (runtime-sized) statik değişkenler " +#~ "elde etmek olabilir" + +#~ msgid "" +#~ "You can use [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn." +#~ "forget.html) to make the compiler \"forget\" about a value (meaning the " +#~ "destructor is never run)." +#~ msgstr "" +#~ "Derleyicinin bir değeri \"unutmasını\" sağlamak (sonlandırıcı / " +#~ "destructor fonksiyon asla çalıştırılmaz) için [`std::mem::forget`]" +#~ "(https://doc.rust-lang.org/std/mem/fn.forget.html)'ı kullanabilirsiniz." + +#~ msgid "" +#~ "You can also accidentally create a [reference cycle](https://doc.rust-" +#~ "lang.org/book/ch15-06-reference-cycles.html) with `Rc` or `Arc`." +#~ msgstr "" +#~ "Ayrıca yanlışlıkla `Rc` veya `Arc` ile bir [referans çevrimi](https://doc." +#~ "rust-lang.org/book/ch15-06-reference-cycles.html) oluşturabilirsiniz." + +#~ msgid "" +#~ "In fact, some will consider infinitely populating a collection a memory " +#~ "leak and Rust does not protect from those." +#~ msgstr "" +#~ "Aslında, bazıları bir koleksiyonun sınırsız olarak doldurulmasını bir " +#~ "bellek sızıntısı olarak değerlendirecek ancak Rust bunlardan korumaz." + +#~ msgid "" +#~ "For the purpose of this course, \"No memory leaks\" should be understood " +#~ "as \"Pretty much no _accidental_ memory leaks\"." +#~ msgstr "" +#~ "Bu kursun amacı doğrultusunda, \"Bellek sızıntısı yok\" ifadesi, " +#~ "\"_Yanlışlıkla oluşan_ bellek sızıntısı hemen hemen hiç yok\" olarak " +#~ "anlaşılmalıdır." + +#~ msgid "" +#~ "Integer overflow is defined via the [`overflow-checks`](https://doc.rust-" +#~ "lang.org/rustc/codegen-options/index.html#overflow-checks) compile-time " +#~ "flag. If enabled, the program will panic (a controlled crash of the " +#~ "program), otherwise you get wrap-around semantics. By default, you get " +#~ "panics in debug mode (`cargo build`) and wrap-around in release mode " +#~ "(`cargo build --release`)." +#~ msgstr "" +#~ "Tamsayı taşması, [`overflow-checks`](https://doc.rust-lang.org/rustc/" +#~ "codegen-options/index.html#overflow-checks) derleme zamanı işareti " +#~ "aracılığıyla tanımlanır. Etkinleştirilirse, program panikleyecektir " +#~ "(panic) (programın kontrollü bir şekilde çökmesi), aksi takdirde wrap-" +#~ "around semantiğini elde edersiniz. Varsayılan olarak, hata ayıklama " +#~ "(debug) modunda (`cargo build`) panik yaşarsınız ve sürüm (release) " +#~ "modunda (`cargo build --release`) wrap-around alırsınız." + +#~ msgid "" +#~ "Bounds checking cannot be disabled with a compiler flag. It can also not " +#~ "be disabled directly with the `unsafe` keyword. However, `unsafe` allows " +#~ "you to call functions such as `slice::get_unchecked` which does not do " +#~ "bounds checking." +#~ msgstr "" +#~ "Sınır kontrolü derleyici bayrağıyla (flag) devre dışı bırakılamaz. Ayrıca " +#~ "`unsafe` anahtar kelimesiyle doğrudan devre dışı bırakılamaz. Ancak " +#~ "`unsafe`, sınır denetimi yapmayan `slice::get_unchecked` gibi işlevleri " +#~ "çağırmanıza olanak tanır." + +#~ msgid "Rust is built with all the experience gained in the last decades." +#~ msgstr "Rust, son yıllarda kazanılan tüm deneyimlerle inşa edilmiştir." + +#~ msgid "Language Features" +#~ msgstr "Dil Özellikleri" + +#~ msgid "`String` vs `str`" +#~ msgstr "`String` vs `str`" + +#~ msgid "Function Overloading" +#~ msgstr "Fonksiyon Yüklemesi (Overloading)" + +#~ msgid "Day 1: Morning Exercises" +#~ msgstr "Gün 1: Sabah Alıştırmaları" + +#~ msgid "Arrays and `for` loops." +#~ msgstr "Diziler ve `for` döngüleri." + +#~ msgid "Arrays and `for` Loops" +#~ msgstr "Diziler ve `for` Döngüleri" + +#~ msgid "`loop` expressions" +#~ msgstr "`loop` ifadeleri" + +#~ msgid "Static and Constant Variables" +#~ msgstr "Statik (Static) ve Sabit (Constant) Değişkenler" + +#~ msgid "" +#~ "```rust,editable\n" +#~ "static BANNER: &str = \"Welcome to RustOS 3.14\";\n" +#~ "\n" +#~ "fn main() {\n" +#~ " println!(\"{BANNER}\");\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable\n" +#~ "static BANNER: &str = \"RustOS 3.14'a hoşgeldiniz\";\n" +#~ "\n" +#~ "fn main() {\n" +#~ " println!(\"{BANNER}\");\n" +#~ "}\n" +#~ "```" + +#~ msgid "" +#~ "See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout." +#~ "html)." +#~ msgstr "" +#~ "[Rust Referansına](https://doc.rust-lang.org/reference/type-layout.html) " +#~ "bakın." + +#~ msgid "Day 1: Afternoon Exercises" +#~ msgstr "Gün 1: Öğleden Sonra Alıştırmaları" + #~ msgid "The Luhn algorithm," #~ msgstr "Luhn Algortiması," +#~ msgid "An exercise on pattern matching." +#~ msgstr "Desen eşleştirme üzerine bir alıştırma." + #~ msgid "Structs and methods." -#~ msgstr "Yapılar ve metotlar." +#~ msgstr "Yapılar (struct) ve metotlar." + +#~ msgid "The Stack vs The Heap" +#~ msgstr "Stack vs Heap" #~ msgid "Stack and Heap Example" #~ msgstr "Stack vs Heap Örneği" +#~ msgid "" +#~ "```rust,editable\n" +#~ "fn main() {\n" +#~ " let s1 = String::from(\"Hello\");\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable\n" +#~ "fn main() {\n" +#~ " let s1 = String::from(\"Merhaba\");\n" +#~ "}\n" +#~ "```" + +#~ msgid "C Example" +#~ msgstr "C Örneği" + +#~ msgid "C++ Example" +#~ msgstr "C++ Örneği" + +#~ msgid "Automatic Memory Management" +#~ msgstr "Otomatik Bellek Yönetimi" + +#~ msgid "Java Example" +#~ msgstr "Java Örneği" + +#~ msgid "Memory Management in Rust" +#~ msgstr "Rust Dilinde Bellek Yönetimi" + +#~ msgid "Memory management in Rust is a mix:" +#~ msgstr "Rust dilinde bellek yönetimi bir karışımdır:" + +#~ msgid "Day 2: Morning Exercises" +#~ msgstr "Gün 2: Sabah Alıştırmaları" + +#~ msgid "`Option` and `Result`" +#~ msgstr "`Option` ve `Result`" + +#~ msgid "" +#~ "```rust,editable\n" +#~ "fn main() {\n" +#~ " let five = Box::new(5);\n" +#~ " println!(\"five: {}\", *five);\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable\n" +#~ "fn main() {\n" +#~ " let five = Box::new(5);\n" +#~ " println!(\"beş: {}\", *five);\n" +#~ "}\n" +#~ "```" + +#~ msgid "`Cell` and `RefCell`" +#~ msgstr "`Cell` and `RefCell`" + +#~ msgid "Day 2: Afternoon Exercises" +#~ msgstr "Gün 2: Öğleden Sonra Alıştırmaları" + +#~ msgid "`Add`, `Mul`, ..." +#~ msgstr "`Add`, `Mul`, ..." + +#~ msgid "Day 3: Morning Exercises" +#~ msgstr "Gün 3: Sabah Alıştırmaları" + #~ msgid "Drawing A Simple GUI" #~ msgstr "Basit Bir GUI Çizimi" +#~ msgid "" +#~ "```rust,editable,should_panic\n" +#~ "fn main() {\n" +#~ " let v = vec![10, 20, 30];\n" +#~ " println!(\"v[100]: {}\", v[100]);\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable,should_panic\n" +#~ "fn main() {\n" +#~ " let v = vec![10, 20, 30];\n" +#~ " println!(\"v[100]: {}\", v[100]);\n" +#~ "}\n" +#~ "```" + +#~ msgid "Catching the Stack Unwinding" +#~ msgstr "Yığın Geri Sarımınının Yakalanması" + +#~ msgid "Propagating Errors with `?`" +#~ msgstr "`?` ile Hataların Yayılması" + +#~ msgid "Use `cargo test` to find and run the unit tests." +#~ msgstr "" +#~ "Birim testlerini bulmak ve çalıştırmak için `cargo test` komutunu " +#~ "kullanın." + +#~ msgid "Calling External Code" +#~ msgstr "Harici Kodun Çağrılması" + +#~ msgid "Day 3: Afternoon Exercises" +#~ msgstr "Gün 3: Öğleden Sonra Alıştırmaları" + +#~ msgid "Day 1 Morning Exercises" +#~ msgstr "1. Gün Sabah Alıştırmaları" + +#~ msgid "Day 1 Afternoon Exercises" +#~ msgstr "1. Gün Öğleden Sonra Alıştırmaları" + +#~ msgid "Pattern matching" +#~ msgstr "Desen eşleştirme" + +#~ msgid "Day 2 Morning Exercises" +#~ msgstr "2. Gün Sabah Alıştırmaları" + +#~ msgid "Designing a Library" +#~ msgstr "Kütüphane Tasarlama" + +#~ msgid "([back to exercise](health-statistics.md))" +#~ msgstr "([egzersize geri dön](health-statistics.md))" + +#~ msgid "Day 2 Afternoon Exercises" +#~ msgstr "2. Gün Öğleden Sonra Alıştırmaları" + +#~ msgid "Day 3 Morning Exercise" +#~ msgstr "3. Gün Sabah Alıştırmaları" + +#~ msgid "Day 3 Afternoon Exercises" +#~ msgstr "3. Gün Öğleden Sonra Alıştırmaları" + +#, fuzzy +#~ msgid "\"aarch64-linux-gnu\"" +#~ msgstr "aarch64-paging" + +#, fuzzy +#~ msgid "\"exceptions.S\"" +#~ msgstr "İstisnalar" + +#~ msgid "An Example in C" +#~ msgstr "C Dilinde Bir Örnek" + #~ msgid "concurrency:" #~ msgstr "eşzamanlılık:" @@ -20234,12 +20452,6 @@ msgstr "" #~ msgid "variable:\\" #~ msgstr "değişken:\\" -#~ msgid "Pattern matching" -#~ msgstr "Desen eşleştirme" - -#~ msgid "Designing a Library" -#~ msgstr "Kütüphane Tasarlama" - #~ msgid "Pattern Matching (TBD)" #~ msgstr "Desen Eşleştirme"