⭐️ Rust dilinin bileşenleri sadece std
kütüphane sandığı tarafından değil, derleyici tarafından da uygulanır. Bunlar:
- İlkel türler: Derleyici tarafından tanımlanan metodlar temel türlere doğrudan
std
kütüphanesi tarafından uygulanır. - Standard Makrolar: Hem derleyici hem de
std
tarafından tanımlanır.
std
kütüphanesi, kapsadıkları alanlara göre modüllere ayrılmıştır.
⭐️ Temel türler derleyici tarafından uygulanırken, temel türlere için en yararlı metodları standart kütüphane tarafından doğrudan uygulanır. Ancak, bazı temel türlerin daha az kullanılan dil öğeleri, ilgili std modüllerinde bulunduğundan std modüllerinde hem char
, str
hem de tamsayı türlerini bir arada görmeniz doğaldır.
Derleyici tarafından tanımlanan ve doğrudan std
kütüphanesi tarafından uygulanan metodlar aşağıda yer almaktadır:
bool, char, slice, str
i8, i16, i32, i64, i128, isize
u8, u16, u32, u64, u128, usize
f32, f64
array, tuple
pointer, fn, reference
Hem derleyici hem de std
kütüphanesi tarafından tanımlanan makrolar:
print, println, eprint, eprintln
format, format_args
write, writeln
// concat_idents: yalnızca `nightly` sürümü için deneysel API
concat, concat_idents, stringify
include, include_bytes, include_str
assert, assert_eq, assert_ne
debug_assert, debug_assert_eq, debug_assert_ne
try, panic, compile_error, unreachable, unimplemented
file, line, column, module_path
env, option_env
cfg
// select: yalnızca `nightly` sürümü için deneysel API
select, thread_local
vec
char, str
i8, i16, i32, i64, i128, isize
u8, u16, u32 ,u64, u128, usize
f32, f64
num
// heap: yalnızca `nightly` sürümü için deneysel API
vec, slice, hash, heap, collections
string, ascii, fmt
default
marker, clone, convert, cmp, iter
ops, ffi
option, result, panic, error
io
fs, path
mem, thread, sync
process, env
net
time
os
ptr, boxed, borrow, cell, any, rc
prelude
// intrinsics: yalnızca `nightly` sürümü için deneysel API
intrinsics
// raw: yalnızca `nightly` sürümü için deneysel API
raw
🔎 Rust’un kaynak kodlarını incelediğinizde, src dizininin bir çalışma alanı olduğunu görebilirsiniz. Çok sayıda kütüphane sandığına sahip olmasına rağmen, kök Cargo.toml dosyasını incelediğinizde, temel sandıkların rustc (derleyici) ve libstd (std) olduğunu rahatlıkla fark edersiniz. Std modüllerinin çoğunun orijinal konumu
src/libcore
'dur. Bu modüllerinuse pub
kullanımı yoluyla yeniden dışa aktarılmış olduğunuLibstd/lib.rs
dosyasından görebilirsiniz.
Oldukça önemli std
modüllerinden birkaçı aşağıda sıralanmıştır.
std::io
- Çekirdek I/O işlevselliğistd::fs
- Filesystem Dosya sistemine özgü işlevsellikstd::path
- Cross-platform path platformlar arası yol işlevselliğistd::env
- Process’s environment Sürecin/işlemin çevresel işlevselliğistd::mem
- Memory Hafıza ile ilgili işlevlerstd::net
- TCP/UDP TCP/UDP iletişimistd::os
- OS İşletim sistemine özgü işlevsellikstd::thread
- Yerel **İşliklere"" özgü işlevsellikstd::collections
- Çekirdek koleksiyon türleri
💯 Daha fazla detay için Rust Standard Kütüphane Belgelerini inceleyebilirsiniz.
Rust'ın std
kütüphanesi pekçok modül içermesine rağmen her Rust programı bunların tamamını yüklemez. Bunun yerine bir rust programının başlangıçta ihtiyaç duyabileceği birkaç genel tür yüklenir. Bir Rust programı başlatıldığında ön yüklemeyle gelen bu türlere preludes prelüdler adı verilir. Varsayılan haliyle bir prelüd içinde aşağıdakiler bulunur:
// Yeniden ihraç edilen çekirdek operatörleri
pub use marker::{Copy, Send, Sized, Sync};
pub use ops::{Drop, Fn, FnMut, FnOnce};
// Tekrar ihraç edilen işlevler
pub use mem::drop;
// Tekrar ihraç edilen türler ve özellikler
pub use boxed::Box;
pub use borrow::ToOwned;
pub use clone::Clone;
pub use cmp::{PartialEq, PartialOrd, Eq, Ord};
pub use convert::{AsRef, AsMut, Into, From};
pub use default::Default;
pub use iter::{Iterator, Extend, IntoIterator};
pub use iter::{DoubleEndedIterator, ExactSizeIterator};
pub use option::Option::{self, Some, None};
pub use result::Result::{self, Ok, Err};
pub use slice::SliceConcatExt;
pub use string::{String, ToString};
pub use vec::Vec;
Prelüdler
libstd/lib.rs
üzerine açıkça aktarılmıştır ve bunların tüm listesilibstd/prelude/v1.rs
üzerinde yer almaktadır.
⭐️ Yani teknik olarak Rust:
extern crate std;
: ile her sandığın sandık kökünüuse std::prelude::v1::*;
: ile her modülü otomatik olarak eklediğinden her defasında bu ön yükleme kütüphanelerinin yeniden ithal edilmesine gerek duyulmaz.
Rust kütüphanelerinde prelüd yaklaşımı oldukça sık görülür. Örneğin std::io
gibi std
sandığında bulunan bazı modüllerin ve Diesel
gibi birçok kütüphanenin bile başlangıçta kulandıkları prelude
modülleri bulunur.
⭐️ Bununla birlikte prelüdler, ilgili sandığın kullanımı esnasında gerekli olan tüm önemli bileşenlerin alınabileceği tek bir noktayı temsil ettiklerinden, programcı tarafından özellikle ithal edilmedikçe koda dahil edilmezler. Tüm Rust programlarında otomatik olarak yüklenen tek prelüd std::prelude
kütüphanesidir.