Skip to content

Latest commit

 

History

History
145 lines (104 loc) · 6.32 KB

std-primitives-and-preludes.md

File metadata and controls

145 lines (104 loc) · 6.32 KB

Standart kütüphane, temel türler ve prelüdler

⭐️ 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.

Temel türler

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

Standard makrolar

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

Std modülleri

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üllerin use pub kullanımı yoluyla yeniden dışa aktarılmış olduğunu Libstd/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ği
  • std::fs - Filesystem Dosya sistemine özgü işlevsellik
  • std::path - Cross-platform path platformlar arası yol işlevselliği
  • std::env - Process’s environment Sürecin/işlemin çevresel işlevselliği
  • std::mem - Memory Hafıza ile ilgili işlevler
  • std::net - TCP/UDP TCP/UDP iletişimi
  • std::os - OS İşletim sistemine özgü işlevsellik
  • std::thread - Yerel **İşliklere"" özgü işlevsellik
  • std::collections - Çekirdek koleksiyon türleri

💯 Daha fazla detay için Rust Standard Kütüphane Belgelerini inceleyebilirsiniz.

Prelüdler

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 listesi libstd/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.