ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Rust¡¯a Giri? 
v.1 
Rust versiyon: 0.4 
MAHMUT BULUT
Telif Haklar? 
? Her hakk? sakl?d?r. 
Normal ve kanun? iktibaslarda kaynak g?sterilmesi zorunludur. 
i
Mahmut BULUT, Eski?ehir Osmangazi ?niversitesi Bilgisayar M¨¹hendisli?i 
b?l¨¹m¨¹nde ??renimini s¨¹rd¨¹rmektedir. Yapay zeka ve topluluk zekas? konusunda 
?al??malar yapmaktad?r, Haskell¡¯in Hackage veritaban?nda Planlama ve MAS 
sistem deste?i ¨¹zerinde ?al??maktad?r. Mageia Linux da??t?m?n?n QA sorum-lusudur. 
2012 y?l? itibariyle Rust programlama dilinin olu?turulmas?nda rol alm??t?r 
ve ana geli?tiricilerinden biridir. ?zel bir ?irkette ?al??mas?na devam etmekte ve 
Rust programlama dilini de geli?tirmektedir. 
ii
?ns?z 
Bu kitap Rust programlama diline basit bir giri? olmas? niteli?inde yaz?ld?, dilin kul-lan?m?n? 
artt?rmak ve T¨¹rk geli?tiricilere/kullan?c?lara dili tan?tmak amac? g¨¹t-mektedir. 
Rust ?u anda prototip seviyesinde oldu?undan; keskinle?tirilmi? ve 
yap?n?n iskeletini olu?turan k?s?mlar? buraya ald?m. Dilin daha ¨¹zerinde tart???lan 
ve gelecek versiyonlar?nda yer alacak t¨¹m semantik ve sentaks yap?s? bu kitab?n 
i?eri?inde de?ildir. Rust¡¯?n derin semantik yap?s?na ve ?ekirdek ilkelerine de?inerek 
okuyucu zorlamak istemedi?imden basit ve sade, g¨¹nl¨¹k hayatta kullan?labilecek 
cinsten ?rnekler vermeye ?nem verdim. Kitap Rust¡¯a yeni ba?layanlar ve ilgi duy-anlar 
i?in birebirdir. Ayr?ca bu kitap Rust programlama dilinin yaz?ld??? zamana 
ait T¨¹rk?e d?k¨¹mantasyonu olma ?zelli?ini de ta??r. T¨¹rk?e bili?im terminolojisine 
girmeyen ama yeni tan?mlanm?? baz? terimleri de T¨¹rk?eye kazand?rmak amac? 
da g¨¹tmektedir. 
iii
?thaf 
Anneme... 
iv
??indekiler 
1- Rust¡¯a Genel Bak?? 6 
1.1- Kitap Konvansiyonlar? 6 
1.2- Nedenler ve Ama?lar 6 
1.3- ?zellikler 6 
2- Rust¡¯?n Temelleri 8 
2.1- Kurulum 8 
2.1.1- Par?alar ve ?n?aa Sistemi ?nbilgisi 8 
2.1.2- ??letim Sistemine Kurulum 8 
2.1.3- Edit?r ve Geli?tirme Ortamlar? 10 
2.2- ?lk Ad?mlar 10 
2.3- De?i?kenler 11 
2.3.1- Immutable(De?i?mez) De?i?kenler 11 
2.3.2- Mutable(De?i?en) De?i?kenler 12 
2.3.3- Tip Tan?mlamalar? 12 
2.3.4- ?fade Yap?s?/Sentaks 13 
2.4- Veri Tipleri 17 
2.4.1- Literaller 19 
2.4.2- Sabitler 19 
2.4.3- Operat?rler 19 
2.4.4- Sentaks Geni?letmeleri 20 
3- Program Ak??? 21 
3.1- Kontrol Yap?lar? 21 
3.1.1- Ko?ullu Yap?lar 21 
3.1.2- ?rnek E?leme 22 
3.1.3- D?ng¨¹ler 23 
3.2- Veri Yap?lar? 24 
3.2.1- Struct 24 
3.2.2- Enumeration 25 
3.2.3- Tuple 26 
v
B?L?M 1 
Rust¡¯a Genel Bak?? 
Kitap Konvansiyonlar? 
Bu kitapta m¨¹mk¨¹n oldu?unca basit ve anla??l?r bir konvansiyon kullanmak iste-dim. 
Bundan dolay? sadece kodlar, uyar?lar ve ?rnekler yer alacak. 
Kodlar?n ve komutlar?n yaz?m stili ise ¡±bu ?ekilde¡± olacakt?r. 
Uyar?lar?n yaz?m stili italik olacak ?ekildedir. ?rnekler ve kod par?ac?klar?(snip-pets) 
yine kod konvansiyonu ?eklinde yaz?lacakt?r. 
Nedenler ve Ama?lar 
?uana kadar geli?tirilen hi?bir programlama dili bize tam manal? paralelizm, 
statik tip tan?mlamas?nda kesinlik, haf?za y?netiminde ve performansta g¨¹?l¨¹l¨¹k 
sa?lamad?. Bunu yapan diller ?ok az oldu?u gibi ata olan C bize tip tan?mlama-lar?nda 
zorluk ve haf?za y?netiminde g¨¹? kayb? ya?att?. G¨¹n¨¹m¨¹zde me?hur olan 
scripting dillerine ra?men derlenebilir ve her ortamda ?al??abilmesi ?ng?r¨¹len 
di?er derlenebilir dillerden farkl?, komplex ak??lar?n uygulanabildi?i dillere ihtiya? 
duyuldu. Bu dillere ?rnek olarak Haskell ve OCaml verilebilir fakat bu diller alt-seviye 
dillerle aralar?nda soyut bir ayr?m oldu?u i?in d¨¹?¨¹k seviyeye yak?n program 
yaz?m?n? zorla?t?r?yordu. Bu zorlu?u ??zebilmek ad?na C ve C++¡¯?n ?zelliklerin-den 
de al?nmas? ve harmanlanmas? gerekiyordu. Mozilla Arge¡¯si t¨¹m bunlar?n so-nucunda 
b¨¹t¨¹n iyi ?zellikleri alan bir programlama dili olan Rust¡¯? ortaya ??kard?. 
?zellikler 
Rust esnektir. En belirgin ?zelliklerinden biri de bu ?zelli?idir. Esnekli?in sebebi 
tip tan?mlamalar?n?n zorunlu olmamas?d?r. Tipleri keskinle?tirip yumu?atmak ve 
birbirlerine ?evrimini sa?lamak sizin elinizdedir. Belirtilen her tip tan?mlamas? ke- 
6
skin tipi olu?turup d?n¨¹?¨¹m¨¹n¨¹ zor hale getirirken, belirtilmeyen tipler ayn? isimli 
ba?ka de?i?kenlerin olu?umuna engel olmaktad?r. Bu iyi bir?eydir ve ayn? ada sahip 
iki tane farkl? de?i?ken olu?turabilmenize olanak sa?lar. 
Rust ayn? zamanda paralelizme ?nem verir, mesaj aktar?m? yoluyla paralel 
?al??may? destekler bu hafif ve i?lemci yormayan bir sistemdir. Di?er bellek pay-la??ml? 
?al??an sistemlere nazaran daha iyi bir performans? da beraberinde getirir. 
Ba?ta da belirtti?imiz gibi y¨¹ksek seviyeli programlama dillerinden ?rnek 
al?nan kompleks sistem dizayn?na olanak sa?layan dereceli fonksiyon tan?mlama-lar?na 
izin verir. Bu Haskell ve Ocaml¡¯?n da bir ?zelli?idir. 
C¡¯deki struct, enum ve typedef kal?plar?n? daha da g¨¹?lendirerek sunar. 
Rust bir?ok programlama dilinin uygulama bi?imlerini de kendine dahil et-mi?tir, 
?rnek olarak: 
? Go programlama dilinden y???n b¨¹y¨¹me algoritmas? 
? SML¡¯in veri yap?lar? 
? C#¡®?n makine kodu olu?turma ve birle?tirme sekans? 
? C++¡¯?n haf?za referanslama ve destructor ?zelli?i 
? Cyclone ve ML Kit¡¯in haf?za belirleme ve s?z?nt? ?nleme sistemleri 
? Haskell¡¯in tip s?n?flar? ve d?n¨¹?¨¹m sistemleri 
? Python¡¯?n lexer sistemi 
? Ruby¡¯nin blok sentaks? (parantezlemesiz sistem) 
Rust tamam?yla orijinal bir dil de?ildir bunun nedeni t¨¹m dillerin en g¨¹?l¨¹ ?zel-liklerini 
alarak ar?nd?r?lm?? sentaks? ile t¨¹m i?leri ba?arabilen bir sisteme evrilme 
amac?nda olmas?d?r. Rust gelecek senelerde en g¨¹?l¨¹ ve en kolay programlama dili 
olma, sistem kontrol¨¹, paralelizm ve hata toleransl? sistemlerin ?ekirde?inde rol ala-cak 
bir arac? olma misyonunu y¨¹klenerek en iyi yere gelmeyi planlamaktad?r. 
7
B?L?M 2 
Rust¡¯?n Temelleri 
Kurulum 
Par?alar ve ?n?aa Sistemi ?nbilgisi 
Kurulum ¨¹? ?al??t?r?labilir ve k¨¹t¨¹phanelerden olu?maktad?r. Bunlar: 
? rustc (Rust Derleyicisi) 
? rustdoc (Rust Dok¨¹mantasyon Olu?turucu) 
? cargo (Rust Paket Y?neticisi) 
? librustllvm, librustrt, libcore, libstd, librustc, libsyntax ve libmorestack 
k¨¹t¨¹phaneleri (sistem olu?turulurken kullan?lan di?er k¨¹t¨¹phaneler ?nceden 
yaz?lm?? a??k kaynak k¨¹t¨¹phanelerdir) 
?n?aa sistemi 3 fazdan olu?maktad?r her bir derleyici faz? kendinden sonraki der-leyici 
faz?n? yapacak ?ekilde d¨¹zenlenmi?tir. Faz.3 derleyicisi son derleyiciyi 
yapt???nda(kendini) Faz.2 ile birebir ayn? bir imaj olu?turur(kendini yapan ile). 
B¨¹t¨¹n bu i?lemlere ?n-ayak olan ise bir ?nceki rust derleyicisi versiyonun son der-leyicisidir. 
Bu derleyici yeni sistemin Faz.0¡®?d?r. 
??letim Sistemine Kurulum 
?Windows 
E?er Windows kullan?yorsan?z sisteminize s?ras?yla 
? MinGW ve MSYS paketi (versiyon numaras? 20110802 olmak ¨¹zere) 
? MsysGit (Kurduktan sonra MinGW kurulum dizinindeki .bashrc dosy-as?na 
a?a??daki sat?r? ekleyin 
8
export PATH=$PATH:/c/Program Files/Git/bin 
ve kaydedin. 
? libpthread k¨¹t¨¹phanesini kurun versiyon numaras? 2.8.0-3 
(libpthread-2.8.0-3-mingw32-dll-2.tar.lzma) 
t¨¹m bu yaz?l?mlar? sisteminize kurduktan sonra http://www.rust-lang.org/ ad-resindeki 
y¨¹kleyici¡¯yi indirmelisiniz. Bu paket haz?r derlenmi? ve kullan?ma haz?r 
win32 ?al??t?r?labilirlerini ve k¨¹t¨¹phanelerini i?ermektedir. Kurulum s?ras?nda 
PATH ortam de?i?kenine Rust¡¯? ekle se?ene?inin i?aretli oldu?undan emin olun. 
Kurulum tamamland???nda art?k Rust¡¯? kullanabilir durumda olacaks?n?z. 
?*NIX t¨¹revleri ve Linux 
E?er *NIX t¨¹revi (buna MacOS¡¯da dahil olmak ¨¹zere) veya Linux da??t?mlar?n-dan 
birini kullan?yorsan?z 
? g++ 4.4 veya clang++ 3.x serisi 
? python 2.6 veya sonraki bir s¨¹r¨¹m (fakat 3.x serisi olmamak kayd? ile) 
? perl 5.0 veya daha sonraki bir s¨¹r¨¹m 
? gnu make 3.81 veya daha sonraki bir s¨¹r¨¹m 
? curl 
yaz?l?mlar?n?n sisteminizde y¨¹kl¨¹ oldu?undan emin olun. T¨¹m bu gereksinimler-den 
emin olduktan sonra Rust¡¯? derlemek ?u ?ekildedir: 
$ wget http://dl.rust-lang.org/dist/rust-0.4.tar.gz 
$ tar -xzf rust-0.4.tar.gz 
$ cd rust-0.4 
$ ./configure 
$ make && make install 
Benim yazd???m zamanda Rust derleyicisinin versiyonu 0.4¡¯t¨¹, ?imdi yenilenmi? 
olabilir g¨¹ncel kaynak kodu yine Rust¡¯?n kendi sitesinde bulabilirsiniz. 
9
Edit?r ve Geli?tirme Ortamlar? 
Rust kodu yazabilmek i?in ?e?itli edit?rler ve destekler mevcuttur. Bunlara ?r-nek 
vermek gerekirse Eclipse geli?tirme ortam?, TextMate edit?r¨¹, Vim ve Emacs 
edit?rleri verilebilir. 
? TextMate i?in destek paketi: Rust.tmbundle 
? Eclipse plugin deste?i: Oxide 
? Emacs ve Vim i?in destek ise rust¡¯?n kendi kaynak kodunda src/etc dizini 
alt?nda bulunmaktad?r. 
? Sublime Text 2 i?in Sublime Package Manager yoluyla Rust deste?i y¨¹klene-bilir. 
? KDE¡¯nin edit?r¨¹ Kate i?in ise yine kaynak kodun src/etc/kate dizini alt?nda 
deste?ini bulabilirsiniz. 
Rust daha ?ok yeni bir dil oldu?undan dolay? tam anlam?yla ba??ms?z bir IDE 
geli?tirilmedi. ?imdilik elimizdeki edit?r ve destek miktar?n?n bu kadar oldu?unu 
belirtmekle yetinelim. Geli?tirmeler olduk?a kitab?n yeni revizyonlar?nda bunlar? 
belirtece?im. 
?lk Ad?mlar 
Rust genel olarak veri yap?lar?nda C¡¯den farkl? de?ildir, tiplerin tamam? C¡¯nin 
birebir kopyas?d?r fakat baz? tipler ¨¹zerinde fazlaca ?al???lm?? ayr?ca ba?ka tiplerde 
ekleme yap?lm??t?r, Rust¡¯? anlat?rken ?o?u zaman C ile kar??la?t?raca??z. Rust pro-gramlar? 
.rs dosya uzant?s?n? kullan?rlar, .rc uzant?s? ise Crate denilen ba??ms?z 
derleme birimlerinin ?zelliklerini belirten dosyalard?r. ?imdilik bunlara de?inme-den 
sadece bir dosyadan olu?an ?al??t?r?labilirleri anlataca??z. 
?lk program?m?z klasik bir Merhaba D¨¹nya olup helloworld.rs isimli bir 
dosya a?arak: 
fn main() { 
io::println("Merhaba D¨¹nya! Rust¡¯a ho?geldin!"); 
} 
10
metnini kaydediyoruz. Rust derleyicisini sisteminize ba?ar? ile y¨¹klediyseniz 
rustc helloworld.rs 
komutunu verdi?inizde size e?er *nix sistem ¨¹zerinde iseniz helloworld isimli 
bir ?al??t?r?labilir olu?turulacakt?r(e?er windows ¨¹zerinde iseniz bu ?al??t?r?labilirin 
ad? helloworld.exe olur). ?al??t?rd???n?zda ise 
Merhaba D¨¹nya! Rust¡¯a ho?geldin! 
??kt?s?n? al?rs?n?z. Rust e?er ?al??t?r?labilir olu?turulacaksa C¡¯deki gibi bir main 
fonksiyonuna ihtiya? duyar, ayn? zamanda e?er k¨¹t¨¹phanelerinde bulunmayan bir 
fonksiyonla kar??la??rsa hata mesaj?n? en dar ?ekilde vererek deterministik bir hata 
??kt?s? verir. ?imdi kodumuzu biraz de?i?tirerek ?u hale getirelim 
fn main() { 
io::bu_sat?r?_bas("Merhaba D¨¹nya! Rust¡¯a 
ho?geldin!"); 
} 
derleyip ?al??t?rd???m?zda ise kar??m?za ?u mesaj ??kacakt?r 
helloworld.rs:2:4: 2:21 error: unresolved name: io::bu_sat?r?_bas 
helloworld.rs:2 io::bu_sat?r?_bas("Merhaba D¨¹nya! Rust¡¯a ho?geldin!"); 
"" ^~~~~~~~~~~~~~~~~ 
error: aborting due to previous error 
Bu hatan?n sebebi ise bu_sat?r?_bas isimli bir fonksiyonun olmamas?d?r. 
De?i?kenler 
Rust¡¯ta de?i?kenler ba?ta bahsetti?imiz gibi tip tan?mlamas?na ba?l? ?ekilde ad-land?r?l?p 
haf?zada yer edinirler. Rust¡¯ta de?i?kenler iki tiptir mutable(de?i?ebilen) 
ve immutable(de?i?meyen) de?i?kenler. 
Immutable(De?i?mez) De?i?kenler 
E?er tipini Rust¡¯?n belirlemesini istedi?iniz ve de?i?mez olmas?n? istedi?iniz bir 
de?i?ken varsa tan?mlama ?u ?ekildedir: 
11
let merhaba = "merhabalar" 
Rust¡¯ta de?i?kenler varsay?lan olarak manip¨¹le edilemez haldedir. Nas?l oluyor da de?i?ken 
oluyorlar? sorusunun cevab? ise dilin olu?turulma amac?na bir referans niteli?inde-dir 
G¨¹venli thread olu?umu(Thread-safe) ?zelli?i bu yetenekten ileri gelir. 
Mutable(De?i?en) De?i?kenler 
Tan?mland?klar?nda C¡¯deki herhangi bir s?radan lokal de?i?kenden pek farklar? 
yoktur. ?u ?ekilde tan?mlan?rlar: 
let mut toplam = 0; 
g?r¨¹ld¨¹?¨¹ ¨¹zere mut keyword¡¯¨¹ de?i?kenin mutable olaca??n? ve de?i?ebilir 
?ekilde yarat?lmas? gerekti?ini belirtmekte kullan?l?r. Mutable de?i?kenlerin kul-lan?m?na 
bir ?rnek vermek gerekirse ??yle bir ?rnek verebiliriz: 
fn main() { 
let mut ?evrim = 0; 
"while (?evrim <= 10){ 
"" io::println("harika"); 
"" ?evrim+=1; 
"} 
} 
Tip Tan?mlamalar? 
Tip tan?mlamalar?nda tip ise C¡¯deki gibi ba?ta prefix (?nek ?eklinde) belirtil-mez. 
Bunun yerine ikinoktadan sonra belirtilir. ?rnek olarak; 
let karpuz: float = 57.8; 
let kavun = karpuz * 10.0; 
let karpuz: int = 50; 
io::println(fmt!("%d", monster_size)); 
12
?lk de?i?ken olan karpuz kavun¡¯u olu?turmak i?in kullan?lm??t?r. G?revi bittik-ten 
sonra yeniden farkl? bir tip ile yarat?labilir. Ama bu kodu derledi?imizde bize 
kavun ve karpuz¡¯u kullanmad???m?z? s?yleyen bir uyar? gelecektir. Bu bize son kar-puzu( 
integer olarak deklare etti?imiz) bir i?lemde kullanmad???m?z? ve immutable 
olarak olu?turdu?umuz kavun¡¯u da bir i?leme sokmad???m?z? s?ylemektedir. Bu 
uyar?dan kurtulmak ad?na kullanmad???n?z de?i?kenlerin ba??na ¡°_¡± koyman?z ye-terlidir. 
Rust¡¯ta tan?mlay?c?lar C¡¯deki gibi alfabetik karakter veya alttan ?izgi ile ba?lar-lar 
ve yine C¡¯deki gibi numaralar, alfabetik karakterler ve alttan ?izgi kombinasyon-lar? 
ile devam edebilirler. Rust¡¯ta tan?mlay?c? yaz?m konvansiyonu ilk harfin k¨¹?¨¹k ol-mas? 
ve gerekli yerlerde(kelimeler aras?nda vb.) alttan ?izgi kullan?lmas? ¨¹zerinedir. ?r-nek 
olarak: 
let yak???kl?_de?i?ken = 100; 
verilebilir. Fakat yeni tip tan?mlamalar? bu konvansiyonu kullanmaz, bunun yerine 
camelCasing dedi?imiz ilk harfi k¨¹?¨¹k sonraki her kelimenin ilk harfi b¨¹y¨¹k olma 
ko?uluna uyarlar, ?rnek bir yeni tip tan?mlamas? ise ?u ?ekildedir: 
type yeniBirTipTan?mlamas? = int; 
Rust¡¯ta kod yazarken T¨¹rk?e karakter kullanabilirsiniz. Bu size ta??nabilirlikte 
de kullan?labilirlikte de sorun ??karmaz. 
?fade Yap?s?/Sentaks 
Rust kendisi de?er d?nd¨¹rebilen ve de?eri yerle?tirebilen bir yap?ya sahiptir. Bu 
yap? tan?mlay?c?lar?n tekrar tekrar kullan?lmas?n? ?nlemekle beraber return key-word¡¯¨¹nde 
bile blok yazmam?z? da sa?lamaktad?r. ?imdi C¡¯deki bir yap?y? Rust¡¯ta 
g?sterelim. 
let ?eker; 
if item == "re?el" { 
?eker = 3.50; 
} else if item == "kek" { 
13
?eker = 2.25; 
} else { 
?eker = 2.00; 
} 
Bu stil C¡¯deki tan?mlaman?n birebir uyarlamas?d?r. Bunun yerine biz Rust¡¯ta bu 
yap?y? yazmak istesek daha g¨¹zel ve mant?ksal bir yol izleyerek; 
let ?eker = 
if item == "re?el" { 
3.50 
} else if item == "kek" { 
2.25 
} else { 
2.00 
}; 
bu ?ekilde tan?mlayacakt?k. Bu bize sadece atamay? de?il ayn? zamanda i?eride so-nucu 
olu?turabilecek bir fonksiyonu da kullanabilmemizi sa?l?yor. Dikkat ettiyseniz 
2. ?rnekte noktal?virg¨¹l s?zkonusu de?ildir son bloktaki noktal? virg¨¹l t¨¹m blok zin-cirinin 
ba?l?ba??na bir kod olarak ?al??t?r?lmas?n? tetikler, bu bize esneklikte sa?lar 
ayn? zamanda ?rnek olarak 3.50 de?eri yerine 3.50 de?erini olu?turan bir fonksiyo-nun 
varolabilmesi hatta bu fonksiyonun di?er durumlara da ba?l? olabilen tek para-metreli 
bir fonksiyon da olabilmesi gibi. Rust i?te bu ?ekilde bizim yapabilecek-lerimizi 
esneterek ve k?saltarak kolayl?k sa?lamaktad?r. Ayn? zamanda Rust i?lemci 
¨¹zerindeki bo? i?lemci vaktini paralel threadler ?al??t?rarak minimize etmektedir. 
Yukar?daki ?rnekte 3.50, 2.25 ve 2.00 olarak de?er atad???m?z sat?rlar e?er ¡°;¡± 
ile kullan?lsalard?, ifade mekanizmas? ?al??mayacakt?. Bunun nedeni bahsetti?imiz 
bloklamad?r. B?yle bir atama yine de ?al???r fakat atanma de?i?kene d?nd¨¹r¨¹l¨¹y-orsa 
nil fonksiyona d?nd¨¹r¨¹l¨¹yorsa void olur. Bu da istedi?imiz sonucu vermez. 
14
De?i?kenler i?in let, fonksiyonlar i?in fn , trait tan?mlamalar?, enumlar 
ve constantlar harici dil dahilinde kalan her?ey ifade kapsam?na girmektedir. 
Rust¡¯ta ifade olmas? i?in fonksiyon i?eri?i olmak bile yeterlidir. ?rne?in; 
fn d?rt_d?nd¨¹r(x: int) -> bool { 
x==4 
} 
return ifadesine gerek duyulmadan al?nan de?er return de?eri amac?yla kullan?la-cakt?r. 
E?er sat?rlar atama, binary veya unary operasyonlar i?in kullan?lm?yor ve fonksi-yonlar 
kullan?l?yorsa; 
let x = foo(); 
if x { 
bar(); 
} else { 
baz(); 
} 
Bu ?ekilde fonksiyon sonras? ¡°;¡± ifadesi kullan?larak yaz?l?rlar. Burada ?nemli olan 
?u noktad?r: e?er biz bu fonksiyonlardan bir de?er d?nd¨¹rm¨¹yorsak ve fonksiyon-lar?m?z 
C¡¯deki void fonksiyonlar gibi ise(ki bu Rust¡¯ta nil-type¡¯a kar??l?k gelir) her 
ifade ?evriminin sonuna yukar?da belirtti?imiz gibi bir ¡°;¡± konulur. 
Bu durumlar ¡°;¡±¨¹n konuldu?u durumlard?r. Konulmad??? durumlar?n genel 
?zelli?i ise kesin bir de?er d?nd¨¹r¨¹p bu de?er¡¯in nil¡¯den farkl? oldu?u durumlar ol-maktad?r. 
??te buna bir ?rnek ise: 
fn bar() -> int { 
"let a = 9; 
"return a; 
15
} 
fn baz() -> int { 
"return 10; 
} 
fn main() { 
"let x = false; 
"io::println(fmt!("Cevap %d", 
"if x { 
"bar() 
"} else { 
"baz() 
"})); 
} 
G?r¨¹ld¨¹?¨¹ ¨¹zere bar() ve baz() de?er d?nd¨¹rd¨¹kleri i?in ¡°;¡± koymuyoruz hatta 
blok sonuna da koymamam?z?n nedeni println()¡¯in onu hesaplama giri?iminde bu-lunaca??d?r. 
16
Veri Tipleri 
Tipler genel olarak C¡¯deki gibidirler ve ?u ?ekilde g?sterilebilirler: 
Tipler A??klama 
() Bir tek de?er i?eren, Birim 
bool true veya false de?erlerine sahip olan, 
Kompozit tipler de genel yap?lar? itibariyle a?a??daki ?ekildedir. Burada her T 
bir ba?ka tipi g?stermektedir. 
Baz? tipler hi?bir zaman pointer olmadan de?i?tirilemezler. ?rne?in string ola-rak 
tan?mlanm?? de?erlere ~, @ ve & i?aret?ilerinden biri kullan?lmadan eri?im 
yap?lamaz. Bu kullan?ma sahip olan tipler genellikle dinamik geni?leyebilen(karak-ter, 
saf veri vb. ile) tiplerdir. 
17 
Boolean 
int, uint 
?zerinde ?al??t??? makinenin 
tan?mlamalar?na ba?l? i?aretli ve i?aretsiz 
tamsay?lar, signed & unsigned integer 
i8, i16, i32, i64 Belirli bit b¨¹y¨¹kl¨¹?¨¹nde i?aretli tamsay?lar, 
signed sized integers 
u8, u16, u32, u64 Belirli bit b¨¹y¨¹kl¨¹?¨¹nde i?aretsiz 
tamsay?lar, unsigned sized integers 
float 
?zerinde ?al??t??? makinenin ¨¹zerinde 
genel konvansiyonda en iyi ?al??abilecek 
en b¨¹y¨¹k ondal?kl? say?, float 
f32, f64 Belirli bit b¨¹y¨¹kl¨¹?¨¹nde ondal?kl? say?lar, 
floating type 
char Unicode karakter setini kullanan karakter 
(32 bit) 
Kompozit Tipler A??klama 
[T * N] Vekt?r (Vekt?r di?er dillerdeki diziyi 
temsil eder) 
[mut T * N] Mutable vekt?r 
(T1, T2) Tuple tipleri 
&T, ~T, @T Pointer tipleri
Dinamik geni?leyen tiplere ise ?u ?rnekleri verebiliriz: 
Dinamik Geni?leyen Tipler A??klama 
fn(a: T1, b: T2) -> T3 Fonksiyon tipleri 
str String(Katar) tipleri (UTF-8) 
[T] Uzunlu?u bilinmeyen vekt?r (di?er ad?yla 
Fonksiyon tiplerinde de?er d?nd¨¹rme -> i?areti ile belirtilir fonksiyon deklerasy-onunda 
ise ?u ?ekildedir: 
fn foo() -> bool { } 
Rust¡¯?n en g¨¹zel ?zelliklerinden biri de anlams?z veya i?inize yaramayan bir de?er 
d?nd¨¹rmeniz gerekti?inde -> () ?eklinde bir yaz?m yapabilmenizdir. Bunun 
yan?nda bu yaz?m yap?lmasa da olur. 
Yeni tip tan?mlamalar? takmaad olarak da kullan?labilir ve ?u ?ekilde tan?m-lan?r: 
type B¨¹y¨¹kVeri = uint; 
Bu tan?mlama B¨¹y¨¹kVeri tipiyle uint tipini ayn? ba?lamda kullanabiliriz. Burada 
?nemli olan k?s?m bu tan?mlamada B¨¹y¨¹kVeri ve uint tiplerinin birbirinden ba??ms?z olduk-lar?n? 
san?p d?n¨¹?t¨¹r¨¹lemeyece?ini d¨¹?¨¹nmektir, fakat durum b?yle de?ildir veriler birbirl-erine 
d?n¨¹?t¨¹r¨¹lebilirler ?¨¹nk¨¹ tipler saklan?rken yap?lar?na g?re saklan?r 
B¨¹y¨¹kVeri¡¯nin ?z¨¹nde uint oldu?u bilinmektedir. 
Rust¡¯ta tiplerimizin ismen ba?lanmas?n? ve yap?sall?kla ili?ki kurmamas?n? istiy-orsak 
struct ve enum anahtar kelimelerini kullanabiliriz. 
18 
dilim) 
[mut T] Uzunlu?u bilinmeyen mutable vekt?r
Literaller 
Integerlar(tamsay?) decimal, hexadecimal veya binary formatlarda yaz?labilirler. 
Bu yaz?mlar?n tamam?na integral tip denir. T¨¹m integral tipler son ek¡¯e sahiptir ve 
literalin ?e?idini belirler. int i?in i, uint i?in u, int8 i?in i8 tipi gibi. 
Literaller konulmazsa Rust fonksiyon arg¨¹manlar? ve tip tan?mlamalar?yla lit-eral 
olmaks?z?n tan?mlamay? tahmin eder ve ona g?re yorumlar genellikle bu yo-rumlama 
sisteme en yak?n varsay?lan ¨¹zerinedir. ?rnek olarak; 
let a = 1; // a varsay?lan olarak int atan?r 
let b = 10i; // b int oldu, i son ekinden dolay? 
let c = 100u; // c uint oldu 
let d = 1000i32; 
verilebilir. 
Sabitler 
Derleme zaman? sabitleri const anahtar kelimesi ile tan?mlan?r. 
const PAROLAM: int = 12345; 
const KATAR_PAROLAM: &static/str = "12345"; 
const EV_PAROLAM: int = PAROLAM + 1; 
Operat?rler 
Aritmetik operat?rler 
*, /, %, +, - (?arp, b?l, mod al, topla, ??kar) ayr?ca - unary operat?r 
olup say?lar? negatif yapmakta kullan?l?r. C¡¯deki gibi bit operat?rleri >>, <<, &, |, 
ve ^ ¡®dir. 
! t¨¹m bitleri ters ?evirir ve C¡¯deki ~ operat?r¨¹ gibi.Rust¡¯?n kar??la?t?rma oper-at?rleri 
C¡¯deki kar??la?t?rma operat?rleriyle ayn?d?r. 
== , !=, <, >, <=, >=, &&, || gibi... 
19
Tip d?n¨¹?¨¹m¨¹ yaparken Rust as operat?r¨¹n¨¹ kullan?r. ?rnek olarak 
let x: float = 4.0; 
let y: uint = x as uint; 
assert y == 4u; 
Sentaks Geni?letmeleri 
Dilin saf haline entegre olmam?? ama sonradan k¨¹t¨¹phaneler yard?m?yla dahil 
edilmi? ?zelliklerdir. ?u anda std::core k¨¹t¨¹phanesi bu geni?letmeleri yeterli 
miktarda kar??lamaktad?r. C formatlamas?n?n benzer ?zellikleri k¨¹t¨¹phaneler 
yard?m?yla al?nm??t?r. Katar formatlaman?n geli?tirilmesi g¨¹ndemdedir. 
io::println(fmt!("%s bence %d", "cevap", 43)); 
io::println(fmt!("Bu nedir %?", gizli_nesne)); 
Yukar?daki ?rne?imizde %? t¨¹m tipleri i?ine alabilen ve manip¨¹le ederek for-mata 
uyduran ibaredir. Dikkat ederseniz fmt!() olmadan formatlama yap?lama-maktad?r. 
Bu fonksiyon ?ekirdek k¨¹t¨¹phaneyi kullanarak formatlama yapacaksak 
mecburidir. Kendi sentaks geni?letmelerinizi de yazabilirsiniz. Rust buna izin verir. 
Bu geni?letmelerin genel ad? makrolard?r. 
20
B?L?M 3 
Program Ak??? 
Kontrol Yap?lar? 
Ko?ullu Yap?lar 
If yap?s?n? ?nceki b?l¨¹mlerde g?zden ge?irdik k?sa bir ?rnekle ?zetleyelim: 
if false { 
io::println("yanl?? olan k?s?m"); 
} else if true { 
io::println("do?ru yer"); 
} else { 
io::println("ne do?ru ne yanl??"); 
} 
Fakat e?er her blokta de?er d?nd¨¹r¨¹lme mekanizmas? ?eklinde ?al???yorsa if 
yap?s? t¨¹m blok i?lerindeki de?erler kesinlikle ayn? tipte olmak zorundad?r. ?rnek olarak: 
fn signum(x: int) -> int { 
if x < 0 { -1 } 
else if x > 0 { 1 } 
else { return 0 } 
} 
21
?rnek E?leme 
Rust ?rnek e?leme mekanizmas?n? di?er mekanizmalara tercih eder bundan do-lay? 
?rnek e?leme mekanizmas? geli?mi?tir. match mekanizmas? C¡¯deki 
switch¡¯in bir benzeri olabilece?i gibi return durumlar?nda d?nd¨¹r¨¹lecek se?e-neklerin 
belirlenmesini sa?lamaktad?r. 
match numara { 
0 => io::println("s?f?r"), 
1 | 2 => io::println("bir veya iki"), 
3..10 => io::println("3ten 10a kadar"), 
_ => io::println("geri kalan t¨¹m durumlar") 
} 
C¡¯deki gibi bir case yap?ld?ktan sonra kald??? yerden devam etmez. Bu yap? 
sabittir ve sadece bir dal? yapar ve i?lemini bitirir. ( _ ) wildcard e?lemesi olarak ad-land?r?lan 
ifadedir ve anlam? ¡°en az bir e?le?me¡±dir. ( * ) ise ¡°enum tan?mla-mas?nda 
bir veya daha fazla e?le?me¡± anlam?na gelmektedir. 
Kollar her zaman => i?aretiyle tan?mlanmas?na ba?lan?r. 
match numara { 
0 => { io::println("s?f?r") } 
_ => { io::println("ba?ka bir?ey") } 
} 
numara de?eri 0¡¯a e?itse ¡°s?f?r¡± string¡¯ini ekrana bast?r?rken di?er t¨¹m girdi du-rumlar?nda 
¡°ba?ka bir?ey¡± ??kt?s?n? verecektir. 
match t¨¹m kollar? arar ve t¨¹m olas? durumlar? ko?ul ¨¹zerinden ge?irir. 
match¡¯in en ?nemli i?levlerinden biri de?i?ken isimleri ile verilerin ba?lanabilmesi-dir. 
A?a??daki ?rnekte (veri1, veri2) tuple veritipine ?rnektir. 
22
fn angle(vector: (float, float)) -> float { 
let pi = float::consts::pi; 
match vector { 
(0f, y) if y < 0f => 1.5 * pi, 
(0f, y) => 0.5 * pi, 
(x, y) => float::atan(y / x) 
} 
} 
De?i?kenin ismi ?rnekteki veriyle e?lenmi?tir. ?lk kolda g?r¨¹len ve y yaz?lan 
yerde bulunan veri kontrol ve manip¨¹le edilebilir. Ayn? zamanda ¨¹?¨¹nc¨¹ koldaki 
(x, y) ?rne?i tamamen ?rnek e?lemeye y?nelik bir tuple¡¯d?r. Her match kolu 
if ile takip ediliyorsa bu if ifadesine ?rnek bek?isi denir. ?rnek bek?isi ifadenin 
do?rulu?unu kontrol ettikten sonra koldaki ifadeyi yapmaya y?nelir. ?fade ister 
de?er d?nd¨¹rme olsun ister bir fn d?nd¨¹rme tipine bak?larak i?lem yap?l?r, ne 
oldu?una bak?lmaz. 
D?ng¨¹ler 
Rust¡¯ta d?ng¨¹ yap?m? sadece while ile sa?lanabilir. Array kavram? vekt?r olarak 
yer ald??? i?in vekt?r ¨¹zerinde iterasyon sadece bek?i i?eren ifadeler ile yap?labilir. 
For d?ng¨¹s¨¹ Rust i?in gelecekte planlanan bir ?zelliktir. While d?ng¨¹s¨¹ yine C¡¯den 
?ok farkl? olmamakla birlikte a?a??daki gibidir: 
let mut cake_amount = 8; 
while cake_amount > 0 { 
cake_amount -= 1; 
} 
Rust¡¯ta while (true) ifadesi i?in geli?tirilmi? ?zel bir sentaks vard?r bu ifade 
loop ¡®tur. Sonsuz d?ng¨¹y¨¹ ifade eder: 
23
let mut x = 5; 
loop { 
x += x - 3; 
if x % 5 == 0 { break; } 
io::println(int::str(x)); 
} 
Bu kod birka? say? yazd?ktan sonra 5¡¯e b?l¨¹nebilen bir say? buldu?unda sonsuz 
d?ng¨¹den ??kacak ?ekilde yaz?lm??t?r. 
Veri Yap?lar? 
Struct 
?lk olarak struct yap?s?yla ba?layabiliriz. Struct yap?s? C¡¯dekine benzer bir yap? 
sergilemektedir hatta haf?zada tutulma ?ekilleri ayn?d?r. Kullan?m? C¡¯deki kullan?m 
?ekliyle ayn?d?r. 
struct Stack { 
content: ~[int], 
mut head: uint 
} 
Y?k?c? sentaks bir de?eri yerine tan?mlanm?? ba?ka bir de?i?kenle manip¨¹le etmektir. Daha ?nce 
de bahsetti?imiz y?k?c? yap? structlar i?in de kullan?labilir. ?rne?in; 
match Noktam { 
Nokta { x: 0.0, y: yy } => { 
io::println(yy.to_str());} 
Nokta { x: xx, y: yy } => { 
io::println(xx.to_str() + " " + yy.to_str()); } 
24
} 
Enumeration 
Enumlar birden fazla ?ekilde g?sterilebilirler. En basit g?sterimlerinden biri; 
enum ?ekil { 
Daire(Point, float), 
Dikd?rtgen(Point, Point) 
} 
?eklindedir. Arg¨¹man olarak atama yap?labildi?i gibi s?radan C enumlar? gibi 
kendi i?lerinde b¨¹y¨¹kten k¨¹?¨¹?e indeks s?ralamas? yapan enumlar da vard?r. ?r-nek 
olarak: 
enum Y?n { 
Kuzey, 
G¨¹ney, 
Do?u, 
Bat? 
} 
Kuzey 0, G¨¹ney 1, Do?u 2 ve Bat? 3 de?erini almaktad?r. Fakat di?er atamal? 
enumlarda bu tan?mlama ge?erli olmay?p her belirtme atamaya g?re yap?l?r. 
Dereferans(deref) i?lemi de bir unary operat?r olup enumlar ¨¹zerinde i?erisin-deki 
de?eri almalar?n? sa?lamaktad?r. 
enum Ses { Ses (int) } 
let ses_seviyesi: Ses = Ses(10); 
let anl?k_ses_seviyesi: int = *ses_seviyesi; 
Ba?ka bir i?erikten bilgi al?nmas? bu ?ekilde sa?lanabilir. 
25
Enumlar ayn? zamanda ?rnek e?lemede de kullan?labilirler: 
fn bu_noktadan_tarif(dir: Y?n) -> Nokta { 
match dir { 
Kuzey => Point {x: 0f, y: 1f}, 
Do?u => Point {x: 1f, y: 0f}, 
G¨¹ney => Point {x: 0f, y: -1f}, 
Bat? => Point {x: -1f, y: 0f} 
} 
} 
Tuple 
Rust¡¯ta tuplelar enumlar gibi ?al???r dakat enumlar gibi alanadlar? yoktur. 
Arg¨¹manla?t?rma i?lemi yap?l?r fakat bu i?lemde 0 veya 1 arg¨¹man olarak verilemez. Enumda 
bu yap?l?rken tuple da bu yap?lamaz. ?rnek bir tuple ise ?u ?ekildedir: 
let mytup: (int, int, float) = (10, 20, 30.0); 
match mytup { 
(a, b, c) => log(info, a + b + (c as int)) 
} 
Rust¡¯a dair 0.4 versiyonuyla kesinle?mi? ve temele oturmu? ?zellikler ve yap?lar 
bunlard?r. Traitler, yeni d?ng¨¹ler, REPL(read evaluate print loop), Exception 
mekanizmas? gibi ?zellikler yeni yeni geli?tirilmektedir. Ayr?ca fonksiyonlar?n safl??? 
ve saf olmamalar? ve bu safl?k yap?s?n?n nas?l olmas? gerekti?i hakk?nda hala bir 
tak?m belirlenmemi? k?s?mlar vard?r. 
26

More Related Content

What's hot (20)

Introdu??o ao KubernetesIntrodu??o ao Kubernetes
Introdu??o ao Kubernetes
Matheus Mendes
?
Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...
Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...
Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...
Gluster.org
?
A crash course in CRUSH
A crash course in CRUSHA crash course in CRUSH
A crash course in CRUSH
Sage Weil
?
How Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar LeibovichHow Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar Leibovich
DevOpsDays Tel Aviv
?
VMworld 2017 vSAN Network Design
VMworld 2017 vSAN Network Design VMworld 2017 vSAN Network Design
VMworld 2017 vSAN Network Design
Cormac Hogan
?
½ñ¤µ¤é„¤±¤Ê¤¤£¡ Windows Server 2016 Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT
½ñ¤µ¤é„¤±¤Ê¤¤£¡Windows Server 2016Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT½ñ¤µ¤é„¤±¤Ê¤¤£¡Windows Server 2016Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT
½ñ¤µ¤é„¤±¤Ê¤¤£¡ Windows Server 2016 Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT
Trainocate Japan, Ltd.
?
Kubernetes Architecture
 Kubernetes Architecture Kubernetes Architecture
Kubernetes Architecture
Knoldus Inc.
?
Performance evolution of raid
Performance evolution of raidPerformance evolution of raid
Performance evolution of raid
Zubair Sami
?
Introduction to CNI (Container Network Interface)
Introduction to CNI (Container Network Interface)Introduction to CNI (Container Network Interface)
Introduction to CNI (Container Network Interface)
HungWei Chiu
?
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
Eueung Mulyana
?
What is Object storage ?
What is Object storage ?What is Object storage ?
What is Object storage ?
Nabil Kassi
?
Kubernetes security
Kubernetes securityKubernetes security
Kubernetes security
Thomas Fricke
?
Terraform 101: What's infrastructure as code?
Terraform 101: What's infrastructure as code?Terraform 101: What's infrastructure as code?
Terraform 101: What's infrastructure as code?
GDX Wu
?
Introduction to the Container Network Interface (CNI)
Introduction to the Container Network Interface (CNI)Introduction to the Container Network Interface (CNI)
Introduction to the Container Network Interface (CNI)
Weaveworks
?
Microsoft Windows Server 2022 Overview
Microsoft Windows Server 2022 OverviewMicrosoft Windows Server 2022 Overview
Microsoft Windows Server 2022 Overview
David J Rosenthal
?
¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]
¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]
¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]
¥ª¥é¥¯¥ë¥¨¥ó¥¸¥Ë¥¢Í¨ÐÅ
?
Kubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating SystemKubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating System
mikaelbarbero
?
TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿
TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿
TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿
Kuniyasu Suzaki
?
Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2
Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2
Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2
apidays
?
¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)
¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)
¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)
¥ª¥é¥¯¥ë¥¨¥ó¥¸¥Ë¥¢Í¨ÐÅ
?
Introdu??o ao KubernetesIntrodu??o ao Kubernetes
Introdu??o ao Kubernetes
Matheus Mendes
?
Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...
Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...
Deploying pNFS over Distributed File Storage w/ Jiffin Tony Thottan and Niels...
Gluster.org
?
A crash course in CRUSH
A crash course in CRUSHA crash course in CRUSH
A crash course in CRUSH
Sage Weil
?
How Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar LeibovichHow Linux Processes Your Network Packet - Elazar Leibovich
How Linux Processes Your Network Packet - Elazar Leibovich
DevOpsDays Tel Aviv
?
VMworld 2017 vSAN Network Design
VMworld 2017 vSAN Network Design VMworld 2017 vSAN Network Design
VMworld 2017 vSAN Network Design
Cormac Hogan
?
½ñ¤µ¤é„¤±¤Ê¤¤£¡ Windows Server 2016 Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT
½ñ¤µ¤é„¤±¤Ê¤¤£¡Windows Server 2016Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT½ñ¤µ¤é„¤±¤Ê¤¤£¡Windows Server 2016Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT
½ñ¤µ¤é„¤±¤Ê¤¤£¡ Windows Server 2016 Active Directory¥É¥á¥¤¥ó¥µ©`¥Ó¥¹ÈëéT
Trainocate Japan, Ltd.
?
Kubernetes Architecture
 Kubernetes Architecture Kubernetes Architecture
Kubernetes Architecture
Knoldus Inc.
?
Performance evolution of raid
Performance evolution of raidPerformance evolution of raid
Performance evolution of raid
Zubair Sami
?
Introduction to CNI (Container Network Interface)
Introduction to CNI (Container Network Interface)Introduction to CNI (Container Network Interface)
Introduction to CNI (Container Network Interface)
HungWei Chiu
?
What is Object storage ?
What is Object storage ?What is Object storage ?
What is Object storage ?
Nabil Kassi
?
Terraform 101: What's infrastructure as code?
Terraform 101: What's infrastructure as code?Terraform 101: What's infrastructure as code?
Terraform 101: What's infrastructure as code?
GDX Wu
?
Introduction to the Container Network Interface (CNI)
Introduction to the Container Network Interface (CNI)Introduction to the Container Network Interface (CNI)
Introduction to the Container Network Interface (CNI)
Weaveworks
?
Microsoft Windows Server 2022 Overview
Microsoft Windows Server 2022 OverviewMicrosoft Windows Server 2022 Overview
Microsoft Windows Server 2022 Overview
David J Rosenthal
?
¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]
¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]
¡¾¾É°æ¡¿Oracle Database Cloud Service£º¥µ©`¥Ó¥¹¸ÅÒª¤Î¤´½B½é [2021Äê7Ô°æ]
¥ª¥é¥¯¥ë¥¨¥ó¥¸¥Ë¥¢Í¨ÐÅ
?
Kubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating SystemKubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating System
mikaelbarbero
?
TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿
TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿
TEE (Trusted Execution Environment)¤ÏµÚ¶þ¤Î¢Ï뻯¼¼Ðg¤Ë¤Ê¤ë¤«£¿
Kuniyasu Suzaki
?
Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2
Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2
Apidays Paris 2023 - Kubernetes Gateways, Pubudu Gunatilaka, WSO2
apidays
?
¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)
¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)
¤¢¤Ê¤¿¤Î¥¯¥é¥¦¥É¤Ï´óÕÉ·ò£¿NRIŒg„ÕÕߤ¬½Ì¤¨¤ë¥»¥­¥å¥ê¥Æ¥£¤ÎƒAÏò¤ÈŒ²ß (Oracle Cloud¥¦¥§¥Ó¥Ê©`¥·¥ê©`¥º: 2021Äê11ÔÂ24ÈÕ)
¥ª¥é¥¯¥ë¥¨¥ó¥¸¥Ë¥¢Í¨ÐÅ
?

Similar to Rust'a Giri? v1 (20)

Kabuk / bash proglama
Kabuk / bash  proglamaKabuk / bash  proglama
Kabuk / bash proglama
Cyber-Warrior.org
?
Introduction to BASH and Terminal
Introduction to BASH and TerminalIntroduction to BASH and Terminal
Introduction to BASH and Terminal
furkan mataraci
?
Temel linux
Temel linuxTemel linux
Temel linux
emreberber07
?
Linux Komut Sat?r?
Linux Komut Sat?r? Linux Komut Sat?r?
Linux Komut Sat?r?
Kemal Demirez
?
Li?nux-101
Li?nux-101Li?nux-101
Li?nux-101
Beg¨¹m Erol
?
Linux Sistem Y?netimi
Linux Sistem Y?netimiLinux Sistem Y?netimi
Linux Sistem Y?netimi
Kurtulu? Karasu
?
Zemberek Projesi
Zemberek ProjesiZemberek Projesi
Zemberek Projesi
Serkan Kaba
?
Osman kurt & zahide aytar
Osman kurt & zahide aytarOsman kurt & zahide aytar
Osman kurt & zahide aytar
Osman Kurt
?
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedir
bykezza
?
Pwnlydays - Linux 101
Pwnlydays - Linux 101Pwnlydays - Linux 101
Pwnlydays - Linux 101
canyoupwn.me
?
Linux ??letim Sistemi - G¨¹ncelleme - 2023
Linux ??letim Sistemi - G¨¹ncelleme - 2023Linux ??letim Sistemi - G¨¹ncelleme - 2023
Linux ??letim Sistemi - G¨¹ncelleme - 2023
Murat KARA
?
Linux101 Temel Komutlar-Dizin Yap?s?
Linux101 Temel Komutlar-Dizin Yap?s?Linux101 Temel Komutlar-Dizin Yap?s?
Linux101 Temel Komutlar-Dizin Yap?s?
SDU CYBERLAB
?
Linux ??letim Sistemi - G¨¹ncelleme-2018
Linux ??letim Sistemi - G¨¹ncelleme-2018Linux ??letim Sistemi - G¨¹ncelleme-2018
Linux ??letim Sistemi - G¨¹ncelleme-2018
Murat KARA
?
Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?
Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?
Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?
?brahim U?AR
?
Roket Yaz?l?m? E?itimi Hafta 1
Roket Yaz?l?m? E?itimi Hafta 1Roket Yaz?l?m? E?itimi Hafta 1
Roket Yaz?l?m? E?itimi Hafta 1
U?urkan Ate?
?
Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.
Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.
Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.
?brahim U?AR
?
Introduction to BASH and Terminal
Introduction to BASH and TerminalIntroduction to BASH and Terminal
Introduction to BASH and Terminal
furkan mataraci
?
Osman kurt & zahide aytar
Osman kurt & zahide aytarOsman kurt & zahide aytar
Osman kurt & zahide aytar
Osman Kurt
?
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedir
bykezza
?
Pwnlydays - Linux 101
Pwnlydays - Linux 101Pwnlydays - Linux 101
Pwnlydays - Linux 101
canyoupwn.me
?
Linux ??letim Sistemi - G¨¹ncelleme - 2023
Linux ??letim Sistemi - G¨¹ncelleme - 2023Linux ??letim Sistemi - G¨¹ncelleme - 2023
Linux ??letim Sistemi - G¨¹ncelleme - 2023
Murat KARA
?
Linux101 Temel Komutlar-Dizin Yap?s?
Linux101 Temel Komutlar-Dizin Yap?s?Linux101 Temel Komutlar-Dizin Yap?s?
Linux101 Temel Komutlar-Dizin Yap?s?
SDU CYBERLAB
?
Linux ??letim Sistemi - G¨¹ncelleme-2018
Linux ??letim Sistemi - G¨¹ncelleme-2018Linux ??letim Sistemi - G¨¹ncelleme-2018
Linux ??letim Sistemi - G¨¹ncelleme-2018
Murat KARA
?
Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?
Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?
Linux Yaz Kamp? 2017 GNU/Linux E?itim D?k¨¹man?
?brahim U?AR
?
Roket Yaz?l?m? E?itimi Hafta 1
Roket Yaz?l?m? E?itimi Hafta 1Roket Yaz?l?m? E?itimi Hafta 1
Roket Yaz?l?m? E?itimi Hafta 1
U?urkan Ate?
?
Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.
Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.
Linux T¨¹revi ??letim Sistemlerinde Paket Haz?rlama.
?brahim U?AR
?

Rust'a Giri? v1

  • 1. Rust¡¯a Giri? v.1 Rust versiyon: 0.4 MAHMUT BULUT
  • 2. Telif Haklar? ? Her hakk? sakl?d?r. Normal ve kanun? iktibaslarda kaynak g?sterilmesi zorunludur. i
  • 3. Mahmut BULUT, Eski?ehir Osmangazi ?niversitesi Bilgisayar M¨¹hendisli?i b?l¨¹m¨¹nde ??renimini s¨¹rd¨¹rmektedir. Yapay zeka ve topluluk zekas? konusunda ?al??malar yapmaktad?r, Haskell¡¯in Hackage veritaban?nda Planlama ve MAS sistem deste?i ¨¹zerinde ?al??maktad?r. Mageia Linux da??t?m?n?n QA sorum-lusudur. 2012 y?l? itibariyle Rust programlama dilinin olu?turulmas?nda rol alm??t?r ve ana geli?tiricilerinden biridir. ?zel bir ?irkette ?al??mas?na devam etmekte ve Rust programlama dilini de geli?tirmektedir. ii
  • 4. ?ns?z Bu kitap Rust programlama diline basit bir giri? olmas? niteli?inde yaz?ld?, dilin kul-lan?m?n? artt?rmak ve T¨¹rk geli?tiricilere/kullan?c?lara dili tan?tmak amac? g¨¹t-mektedir. Rust ?u anda prototip seviyesinde oldu?undan; keskinle?tirilmi? ve yap?n?n iskeletini olu?turan k?s?mlar? buraya ald?m. Dilin daha ¨¹zerinde tart???lan ve gelecek versiyonlar?nda yer alacak t¨¹m semantik ve sentaks yap?s? bu kitab?n i?eri?inde de?ildir. Rust¡¯?n derin semantik yap?s?na ve ?ekirdek ilkelerine de?inerek okuyucu zorlamak istemedi?imden basit ve sade, g¨¹nl¨¹k hayatta kullan?labilecek cinsten ?rnekler vermeye ?nem verdim. Kitap Rust¡¯a yeni ba?layanlar ve ilgi duy-anlar i?in birebirdir. Ayr?ca bu kitap Rust programlama dilinin yaz?ld??? zamana ait T¨¹rk?e d?k¨¹mantasyonu olma ?zelli?ini de ta??r. T¨¹rk?e bili?im terminolojisine girmeyen ama yeni tan?mlanm?? baz? terimleri de T¨¹rk?eye kazand?rmak amac? da g¨¹tmektedir. iii
  • 6. ??indekiler 1- Rust¡¯a Genel Bak?? 6 1.1- Kitap Konvansiyonlar? 6 1.2- Nedenler ve Ama?lar 6 1.3- ?zellikler 6 2- Rust¡¯?n Temelleri 8 2.1- Kurulum 8 2.1.1- Par?alar ve ?n?aa Sistemi ?nbilgisi 8 2.1.2- ??letim Sistemine Kurulum 8 2.1.3- Edit?r ve Geli?tirme Ortamlar? 10 2.2- ?lk Ad?mlar 10 2.3- De?i?kenler 11 2.3.1- Immutable(De?i?mez) De?i?kenler 11 2.3.2- Mutable(De?i?en) De?i?kenler 12 2.3.3- Tip Tan?mlamalar? 12 2.3.4- ?fade Yap?s?/Sentaks 13 2.4- Veri Tipleri 17 2.4.1- Literaller 19 2.4.2- Sabitler 19 2.4.3- Operat?rler 19 2.4.4- Sentaks Geni?letmeleri 20 3- Program Ak??? 21 3.1- Kontrol Yap?lar? 21 3.1.1- Ko?ullu Yap?lar 21 3.1.2- ?rnek E?leme 22 3.1.3- D?ng¨¹ler 23 3.2- Veri Yap?lar? 24 3.2.1- Struct 24 3.2.2- Enumeration 25 3.2.3- Tuple 26 v
  • 7. B?L?M 1 Rust¡¯a Genel Bak?? Kitap Konvansiyonlar? Bu kitapta m¨¹mk¨¹n oldu?unca basit ve anla??l?r bir konvansiyon kullanmak iste-dim. Bundan dolay? sadece kodlar, uyar?lar ve ?rnekler yer alacak. Kodlar?n ve komutlar?n yaz?m stili ise ¡±bu ?ekilde¡± olacakt?r. Uyar?lar?n yaz?m stili italik olacak ?ekildedir. ?rnekler ve kod par?ac?klar?(snip-pets) yine kod konvansiyonu ?eklinde yaz?lacakt?r. Nedenler ve Ama?lar ?uana kadar geli?tirilen hi?bir programlama dili bize tam manal? paralelizm, statik tip tan?mlamas?nda kesinlik, haf?za y?netiminde ve performansta g¨¹?l¨¹l¨¹k sa?lamad?. Bunu yapan diller ?ok az oldu?u gibi ata olan C bize tip tan?mlama-lar?nda zorluk ve haf?za y?netiminde g¨¹? kayb? ya?att?. G¨¹n¨¹m¨¹zde me?hur olan scripting dillerine ra?men derlenebilir ve her ortamda ?al??abilmesi ?ng?r¨¹len di?er derlenebilir dillerden farkl?, komplex ak??lar?n uygulanabildi?i dillere ihtiya? duyuldu. Bu dillere ?rnek olarak Haskell ve OCaml verilebilir fakat bu diller alt-seviye dillerle aralar?nda soyut bir ayr?m oldu?u i?in d¨¹?¨¹k seviyeye yak?n program yaz?m?n? zorla?t?r?yordu. Bu zorlu?u ??zebilmek ad?na C ve C++¡¯?n ?zelliklerin-den de al?nmas? ve harmanlanmas? gerekiyordu. Mozilla Arge¡¯si t¨¹m bunlar?n so-nucunda b¨¹t¨¹n iyi ?zellikleri alan bir programlama dili olan Rust¡¯? ortaya ??kard?. ?zellikler Rust esnektir. En belirgin ?zelliklerinden biri de bu ?zelli?idir. Esnekli?in sebebi tip tan?mlamalar?n?n zorunlu olmamas?d?r. Tipleri keskinle?tirip yumu?atmak ve birbirlerine ?evrimini sa?lamak sizin elinizdedir. Belirtilen her tip tan?mlamas? ke- 6
  • 8. skin tipi olu?turup d?n¨¹?¨¹m¨¹n¨¹ zor hale getirirken, belirtilmeyen tipler ayn? isimli ba?ka de?i?kenlerin olu?umuna engel olmaktad?r. Bu iyi bir?eydir ve ayn? ada sahip iki tane farkl? de?i?ken olu?turabilmenize olanak sa?lar. Rust ayn? zamanda paralelizme ?nem verir, mesaj aktar?m? yoluyla paralel ?al??may? destekler bu hafif ve i?lemci yormayan bir sistemdir. Di?er bellek pay-la??ml? ?al??an sistemlere nazaran daha iyi bir performans? da beraberinde getirir. Ba?ta da belirtti?imiz gibi y¨¹ksek seviyeli programlama dillerinden ?rnek al?nan kompleks sistem dizayn?na olanak sa?layan dereceli fonksiyon tan?mlama-lar?na izin verir. Bu Haskell ve Ocaml¡¯?n da bir ?zelli?idir. C¡¯deki struct, enum ve typedef kal?plar?n? daha da g¨¹?lendirerek sunar. Rust bir?ok programlama dilinin uygulama bi?imlerini de kendine dahil et-mi?tir, ?rnek olarak: ? Go programlama dilinden y???n b¨¹y¨¹me algoritmas? ? SML¡¯in veri yap?lar? ? C#¡®?n makine kodu olu?turma ve birle?tirme sekans? ? C++¡¯?n haf?za referanslama ve destructor ?zelli?i ? Cyclone ve ML Kit¡¯in haf?za belirleme ve s?z?nt? ?nleme sistemleri ? Haskell¡¯in tip s?n?flar? ve d?n¨¹?¨¹m sistemleri ? Python¡¯?n lexer sistemi ? Ruby¡¯nin blok sentaks? (parantezlemesiz sistem) Rust tamam?yla orijinal bir dil de?ildir bunun nedeni t¨¹m dillerin en g¨¹?l¨¹ ?zel-liklerini alarak ar?nd?r?lm?? sentaks? ile t¨¹m i?leri ba?arabilen bir sisteme evrilme amac?nda olmas?d?r. Rust gelecek senelerde en g¨¹?l¨¹ ve en kolay programlama dili olma, sistem kontrol¨¹, paralelizm ve hata toleransl? sistemlerin ?ekirde?inde rol ala-cak bir arac? olma misyonunu y¨¹klenerek en iyi yere gelmeyi planlamaktad?r. 7
  • 9. B?L?M 2 Rust¡¯?n Temelleri Kurulum Par?alar ve ?n?aa Sistemi ?nbilgisi Kurulum ¨¹? ?al??t?r?labilir ve k¨¹t¨¹phanelerden olu?maktad?r. Bunlar: ? rustc (Rust Derleyicisi) ? rustdoc (Rust Dok¨¹mantasyon Olu?turucu) ? cargo (Rust Paket Y?neticisi) ? librustllvm, librustrt, libcore, libstd, librustc, libsyntax ve libmorestack k¨¹t¨¹phaneleri (sistem olu?turulurken kullan?lan di?er k¨¹t¨¹phaneler ?nceden yaz?lm?? a??k kaynak k¨¹t¨¹phanelerdir) ?n?aa sistemi 3 fazdan olu?maktad?r her bir derleyici faz? kendinden sonraki der-leyici faz?n? yapacak ?ekilde d¨¹zenlenmi?tir. Faz.3 derleyicisi son derleyiciyi yapt???nda(kendini) Faz.2 ile birebir ayn? bir imaj olu?turur(kendini yapan ile). B¨¹t¨¹n bu i?lemlere ?n-ayak olan ise bir ?nceki rust derleyicisi versiyonun son der-leyicisidir. Bu derleyici yeni sistemin Faz.0¡®?d?r. ??letim Sistemine Kurulum ?Windows E?er Windows kullan?yorsan?z sisteminize s?ras?yla ? MinGW ve MSYS paketi (versiyon numaras? 20110802 olmak ¨¹zere) ? MsysGit (Kurduktan sonra MinGW kurulum dizinindeki .bashrc dosy-as?na a?a??daki sat?r? ekleyin 8
  • 10. export PATH=$PATH:/c/Program Files/Git/bin ve kaydedin. ? libpthread k¨¹t¨¹phanesini kurun versiyon numaras? 2.8.0-3 (libpthread-2.8.0-3-mingw32-dll-2.tar.lzma) t¨¹m bu yaz?l?mlar? sisteminize kurduktan sonra http://www.rust-lang.org/ ad-resindeki y¨¹kleyici¡¯yi indirmelisiniz. Bu paket haz?r derlenmi? ve kullan?ma haz?r win32 ?al??t?r?labilirlerini ve k¨¹t¨¹phanelerini i?ermektedir. Kurulum s?ras?nda PATH ortam de?i?kenine Rust¡¯? ekle se?ene?inin i?aretli oldu?undan emin olun. Kurulum tamamland???nda art?k Rust¡¯? kullanabilir durumda olacaks?n?z. ?*NIX t¨¹revleri ve Linux E?er *NIX t¨¹revi (buna MacOS¡¯da dahil olmak ¨¹zere) veya Linux da??t?mlar?n-dan birini kullan?yorsan?z ? g++ 4.4 veya clang++ 3.x serisi ? python 2.6 veya sonraki bir s¨¹r¨¹m (fakat 3.x serisi olmamak kayd? ile) ? perl 5.0 veya daha sonraki bir s¨¹r¨¹m ? gnu make 3.81 veya daha sonraki bir s¨¹r¨¹m ? curl yaz?l?mlar?n?n sisteminizde y¨¹kl¨¹ oldu?undan emin olun. T¨¹m bu gereksinimler-den emin olduktan sonra Rust¡¯? derlemek ?u ?ekildedir: $ wget http://dl.rust-lang.org/dist/rust-0.4.tar.gz $ tar -xzf rust-0.4.tar.gz $ cd rust-0.4 $ ./configure $ make && make install Benim yazd???m zamanda Rust derleyicisinin versiyonu 0.4¡¯t¨¹, ?imdi yenilenmi? olabilir g¨¹ncel kaynak kodu yine Rust¡¯?n kendi sitesinde bulabilirsiniz. 9
  • 11. Edit?r ve Geli?tirme Ortamlar? Rust kodu yazabilmek i?in ?e?itli edit?rler ve destekler mevcuttur. Bunlara ?r-nek vermek gerekirse Eclipse geli?tirme ortam?, TextMate edit?r¨¹, Vim ve Emacs edit?rleri verilebilir. ? TextMate i?in destek paketi: Rust.tmbundle ? Eclipse plugin deste?i: Oxide ? Emacs ve Vim i?in destek ise rust¡¯?n kendi kaynak kodunda src/etc dizini alt?nda bulunmaktad?r. ? Sublime Text 2 i?in Sublime Package Manager yoluyla Rust deste?i y¨¹klene-bilir. ? KDE¡¯nin edit?r¨¹ Kate i?in ise yine kaynak kodun src/etc/kate dizini alt?nda deste?ini bulabilirsiniz. Rust daha ?ok yeni bir dil oldu?undan dolay? tam anlam?yla ba??ms?z bir IDE geli?tirilmedi. ?imdilik elimizdeki edit?r ve destek miktar?n?n bu kadar oldu?unu belirtmekle yetinelim. Geli?tirmeler olduk?a kitab?n yeni revizyonlar?nda bunlar? belirtece?im. ?lk Ad?mlar Rust genel olarak veri yap?lar?nda C¡¯den farkl? de?ildir, tiplerin tamam? C¡¯nin birebir kopyas?d?r fakat baz? tipler ¨¹zerinde fazlaca ?al???lm?? ayr?ca ba?ka tiplerde ekleme yap?lm??t?r, Rust¡¯? anlat?rken ?o?u zaman C ile kar??la?t?raca??z. Rust pro-gramlar? .rs dosya uzant?s?n? kullan?rlar, .rc uzant?s? ise Crate denilen ba??ms?z derleme birimlerinin ?zelliklerini belirten dosyalard?r. ?imdilik bunlara de?inme-den sadece bir dosyadan olu?an ?al??t?r?labilirleri anlataca??z. ?lk program?m?z klasik bir Merhaba D¨¹nya olup helloworld.rs isimli bir dosya a?arak: fn main() { io::println("Merhaba D¨¹nya! Rust¡¯a ho?geldin!"); } 10
  • 12. metnini kaydediyoruz. Rust derleyicisini sisteminize ba?ar? ile y¨¹klediyseniz rustc helloworld.rs komutunu verdi?inizde size e?er *nix sistem ¨¹zerinde iseniz helloworld isimli bir ?al??t?r?labilir olu?turulacakt?r(e?er windows ¨¹zerinde iseniz bu ?al??t?r?labilirin ad? helloworld.exe olur). ?al??t?rd???n?zda ise Merhaba D¨¹nya! Rust¡¯a ho?geldin! ??kt?s?n? al?rs?n?z. Rust e?er ?al??t?r?labilir olu?turulacaksa C¡¯deki gibi bir main fonksiyonuna ihtiya? duyar, ayn? zamanda e?er k¨¹t¨¹phanelerinde bulunmayan bir fonksiyonla kar??la??rsa hata mesaj?n? en dar ?ekilde vererek deterministik bir hata ??kt?s? verir. ?imdi kodumuzu biraz de?i?tirerek ?u hale getirelim fn main() { io::bu_sat?r?_bas("Merhaba D¨¹nya! Rust¡¯a ho?geldin!"); } derleyip ?al??t?rd???m?zda ise kar??m?za ?u mesaj ??kacakt?r helloworld.rs:2:4: 2:21 error: unresolved name: io::bu_sat?r?_bas helloworld.rs:2 io::bu_sat?r?_bas("Merhaba D¨¹nya! Rust¡¯a ho?geldin!"); "" ^~~~~~~~~~~~~~~~~ error: aborting due to previous error Bu hatan?n sebebi ise bu_sat?r?_bas isimli bir fonksiyonun olmamas?d?r. De?i?kenler Rust¡¯ta de?i?kenler ba?ta bahsetti?imiz gibi tip tan?mlamas?na ba?l? ?ekilde ad-land?r?l?p haf?zada yer edinirler. Rust¡¯ta de?i?kenler iki tiptir mutable(de?i?ebilen) ve immutable(de?i?meyen) de?i?kenler. Immutable(De?i?mez) De?i?kenler E?er tipini Rust¡¯?n belirlemesini istedi?iniz ve de?i?mez olmas?n? istedi?iniz bir de?i?ken varsa tan?mlama ?u ?ekildedir: 11
  • 13. let merhaba = "merhabalar" Rust¡¯ta de?i?kenler varsay?lan olarak manip¨¹le edilemez haldedir. Nas?l oluyor da de?i?ken oluyorlar? sorusunun cevab? ise dilin olu?turulma amac?na bir referans niteli?inde-dir G¨¹venli thread olu?umu(Thread-safe) ?zelli?i bu yetenekten ileri gelir. Mutable(De?i?en) De?i?kenler Tan?mland?klar?nda C¡¯deki herhangi bir s?radan lokal de?i?kenden pek farklar? yoktur. ?u ?ekilde tan?mlan?rlar: let mut toplam = 0; g?r¨¹ld¨¹?¨¹ ¨¹zere mut keyword¡¯¨¹ de?i?kenin mutable olaca??n? ve de?i?ebilir ?ekilde yarat?lmas? gerekti?ini belirtmekte kullan?l?r. Mutable de?i?kenlerin kul-lan?m?na bir ?rnek vermek gerekirse ??yle bir ?rnek verebiliriz: fn main() { let mut ?evrim = 0; "while (?evrim <= 10){ "" io::println("harika"); "" ?evrim+=1; "} } Tip Tan?mlamalar? Tip tan?mlamalar?nda tip ise C¡¯deki gibi ba?ta prefix (?nek ?eklinde) belirtil-mez. Bunun yerine ikinoktadan sonra belirtilir. ?rnek olarak; let karpuz: float = 57.8; let kavun = karpuz * 10.0; let karpuz: int = 50; io::println(fmt!("%d", monster_size)); 12
  • 14. ?lk de?i?ken olan karpuz kavun¡¯u olu?turmak i?in kullan?lm??t?r. G?revi bittik-ten sonra yeniden farkl? bir tip ile yarat?labilir. Ama bu kodu derledi?imizde bize kavun ve karpuz¡¯u kullanmad???m?z? s?yleyen bir uyar? gelecektir. Bu bize son kar-puzu( integer olarak deklare etti?imiz) bir i?lemde kullanmad???m?z? ve immutable olarak olu?turdu?umuz kavun¡¯u da bir i?leme sokmad???m?z? s?ylemektedir. Bu uyar?dan kurtulmak ad?na kullanmad???n?z de?i?kenlerin ba??na ¡°_¡± koyman?z ye-terlidir. Rust¡¯ta tan?mlay?c?lar C¡¯deki gibi alfabetik karakter veya alttan ?izgi ile ba?lar-lar ve yine C¡¯deki gibi numaralar, alfabetik karakterler ve alttan ?izgi kombinasyon-lar? ile devam edebilirler. Rust¡¯ta tan?mlay?c? yaz?m konvansiyonu ilk harfin k¨¹?¨¹k ol-mas? ve gerekli yerlerde(kelimeler aras?nda vb.) alttan ?izgi kullan?lmas? ¨¹zerinedir. ?r-nek olarak: let yak???kl?_de?i?ken = 100; verilebilir. Fakat yeni tip tan?mlamalar? bu konvansiyonu kullanmaz, bunun yerine camelCasing dedi?imiz ilk harfi k¨¹?¨¹k sonraki her kelimenin ilk harfi b¨¹y¨¹k olma ko?uluna uyarlar, ?rnek bir yeni tip tan?mlamas? ise ?u ?ekildedir: type yeniBirTipTan?mlamas? = int; Rust¡¯ta kod yazarken T¨¹rk?e karakter kullanabilirsiniz. Bu size ta??nabilirlikte de kullan?labilirlikte de sorun ??karmaz. ?fade Yap?s?/Sentaks Rust kendisi de?er d?nd¨¹rebilen ve de?eri yerle?tirebilen bir yap?ya sahiptir. Bu yap? tan?mlay?c?lar?n tekrar tekrar kullan?lmas?n? ?nlemekle beraber return key-word¡¯¨¹nde bile blok yazmam?z? da sa?lamaktad?r. ?imdi C¡¯deki bir yap?y? Rust¡¯ta g?sterelim. let ?eker; if item == "re?el" { ?eker = 3.50; } else if item == "kek" { 13
  • 15. ?eker = 2.25; } else { ?eker = 2.00; } Bu stil C¡¯deki tan?mlaman?n birebir uyarlamas?d?r. Bunun yerine biz Rust¡¯ta bu yap?y? yazmak istesek daha g¨¹zel ve mant?ksal bir yol izleyerek; let ?eker = if item == "re?el" { 3.50 } else if item == "kek" { 2.25 } else { 2.00 }; bu ?ekilde tan?mlayacakt?k. Bu bize sadece atamay? de?il ayn? zamanda i?eride so-nucu olu?turabilecek bir fonksiyonu da kullanabilmemizi sa?l?yor. Dikkat ettiyseniz 2. ?rnekte noktal?virg¨¹l s?zkonusu de?ildir son bloktaki noktal? virg¨¹l t¨¹m blok zin-cirinin ba?l?ba??na bir kod olarak ?al??t?r?lmas?n? tetikler, bu bize esneklikte sa?lar ayn? zamanda ?rnek olarak 3.50 de?eri yerine 3.50 de?erini olu?turan bir fonksiyo-nun varolabilmesi hatta bu fonksiyonun di?er durumlara da ba?l? olabilen tek para-metreli bir fonksiyon da olabilmesi gibi. Rust i?te bu ?ekilde bizim yapabilecek-lerimizi esneterek ve k?saltarak kolayl?k sa?lamaktad?r. Ayn? zamanda Rust i?lemci ¨¹zerindeki bo? i?lemci vaktini paralel threadler ?al??t?rarak minimize etmektedir. Yukar?daki ?rnekte 3.50, 2.25 ve 2.00 olarak de?er atad???m?z sat?rlar e?er ¡°;¡± ile kullan?lsalard?, ifade mekanizmas? ?al??mayacakt?. Bunun nedeni bahsetti?imiz bloklamad?r. B?yle bir atama yine de ?al???r fakat atanma de?i?kene d?nd¨¹r¨¹l¨¹y-orsa nil fonksiyona d?nd¨¹r¨¹l¨¹yorsa void olur. Bu da istedi?imiz sonucu vermez. 14
  • 16. De?i?kenler i?in let, fonksiyonlar i?in fn , trait tan?mlamalar?, enumlar ve constantlar harici dil dahilinde kalan her?ey ifade kapsam?na girmektedir. Rust¡¯ta ifade olmas? i?in fonksiyon i?eri?i olmak bile yeterlidir. ?rne?in; fn d?rt_d?nd¨¹r(x: int) -> bool { x==4 } return ifadesine gerek duyulmadan al?nan de?er return de?eri amac?yla kullan?la-cakt?r. E?er sat?rlar atama, binary veya unary operasyonlar i?in kullan?lm?yor ve fonksi-yonlar kullan?l?yorsa; let x = foo(); if x { bar(); } else { baz(); } Bu ?ekilde fonksiyon sonras? ¡°;¡± ifadesi kullan?larak yaz?l?rlar. Burada ?nemli olan ?u noktad?r: e?er biz bu fonksiyonlardan bir de?er d?nd¨¹rm¨¹yorsak ve fonksiyon-lar?m?z C¡¯deki void fonksiyonlar gibi ise(ki bu Rust¡¯ta nil-type¡¯a kar??l?k gelir) her ifade ?evriminin sonuna yukar?da belirtti?imiz gibi bir ¡°;¡± konulur. Bu durumlar ¡°;¡±¨¹n konuldu?u durumlard?r. Konulmad??? durumlar?n genel ?zelli?i ise kesin bir de?er d?nd¨¹r¨¹p bu de?er¡¯in nil¡¯den farkl? oldu?u durumlar ol-maktad?r. ??te buna bir ?rnek ise: fn bar() -> int { "let a = 9; "return a; 15
  • 17. } fn baz() -> int { "return 10; } fn main() { "let x = false; "io::println(fmt!("Cevap %d", "if x { "bar() "} else { "baz() "})); } G?r¨¹ld¨¹?¨¹ ¨¹zere bar() ve baz() de?er d?nd¨¹rd¨¹kleri i?in ¡°;¡± koymuyoruz hatta blok sonuna da koymamam?z?n nedeni println()¡¯in onu hesaplama giri?iminde bu-lunaca??d?r. 16
  • 18. Veri Tipleri Tipler genel olarak C¡¯deki gibidirler ve ?u ?ekilde g?sterilebilirler: Tipler A??klama () Bir tek de?er i?eren, Birim bool true veya false de?erlerine sahip olan, Kompozit tipler de genel yap?lar? itibariyle a?a??daki ?ekildedir. Burada her T bir ba?ka tipi g?stermektedir. Baz? tipler hi?bir zaman pointer olmadan de?i?tirilemezler. ?rne?in string ola-rak tan?mlanm?? de?erlere ~, @ ve & i?aret?ilerinden biri kullan?lmadan eri?im yap?lamaz. Bu kullan?ma sahip olan tipler genellikle dinamik geni?leyebilen(karak-ter, saf veri vb. ile) tiplerdir. 17 Boolean int, uint ?zerinde ?al??t??? makinenin tan?mlamalar?na ba?l? i?aretli ve i?aretsiz tamsay?lar, signed & unsigned integer i8, i16, i32, i64 Belirli bit b¨¹y¨¹kl¨¹?¨¹nde i?aretli tamsay?lar, signed sized integers u8, u16, u32, u64 Belirli bit b¨¹y¨¹kl¨¹?¨¹nde i?aretsiz tamsay?lar, unsigned sized integers float ?zerinde ?al??t??? makinenin ¨¹zerinde genel konvansiyonda en iyi ?al??abilecek en b¨¹y¨¹k ondal?kl? say?, float f32, f64 Belirli bit b¨¹y¨¹kl¨¹?¨¹nde ondal?kl? say?lar, floating type char Unicode karakter setini kullanan karakter (32 bit) Kompozit Tipler A??klama [T * N] Vekt?r (Vekt?r di?er dillerdeki diziyi temsil eder) [mut T * N] Mutable vekt?r (T1, T2) Tuple tipleri &T, ~T, @T Pointer tipleri
  • 19. Dinamik geni?leyen tiplere ise ?u ?rnekleri verebiliriz: Dinamik Geni?leyen Tipler A??klama fn(a: T1, b: T2) -> T3 Fonksiyon tipleri str String(Katar) tipleri (UTF-8) [T] Uzunlu?u bilinmeyen vekt?r (di?er ad?yla Fonksiyon tiplerinde de?er d?nd¨¹rme -> i?areti ile belirtilir fonksiyon deklerasy-onunda ise ?u ?ekildedir: fn foo() -> bool { } Rust¡¯?n en g¨¹zel ?zelliklerinden biri de anlams?z veya i?inize yaramayan bir de?er d?nd¨¹rmeniz gerekti?inde -> () ?eklinde bir yaz?m yapabilmenizdir. Bunun yan?nda bu yaz?m yap?lmasa da olur. Yeni tip tan?mlamalar? takmaad olarak da kullan?labilir ve ?u ?ekilde tan?m-lan?r: type B¨¹y¨¹kVeri = uint; Bu tan?mlama B¨¹y¨¹kVeri tipiyle uint tipini ayn? ba?lamda kullanabiliriz. Burada ?nemli olan k?s?m bu tan?mlamada B¨¹y¨¹kVeri ve uint tiplerinin birbirinden ba??ms?z olduk-lar?n? san?p d?n¨¹?t¨¹r¨¹lemeyece?ini d¨¹?¨¹nmektir, fakat durum b?yle de?ildir veriler birbirl-erine d?n¨¹?t¨¹r¨¹lebilirler ?¨¹nk¨¹ tipler saklan?rken yap?lar?na g?re saklan?r B¨¹y¨¹kVeri¡¯nin ?z¨¹nde uint oldu?u bilinmektedir. Rust¡¯ta tiplerimizin ismen ba?lanmas?n? ve yap?sall?kla ili?ki kurmamas?n? istiy-orsak struct ve enum anahtar kelimelerini kullanabiliriz. 18 dilim) [mut T] Uzunlu?u bilinmeyen mutable vekt?r
  • 20. Literaller Integerlar(tamsay?) decimal, hexadecimal veya binary formatlarda yaz?labilirler. Bu yaz?mlar?n tamam?na integral tip denir. T¨¹m integral tipler son ek¡¯e sahiptir ve literalin ?e?idini belirler. int i?in i, uint i?in u, int8 i?in i8 tipi gibi. Literaller konulmazsa Rust fonksiyon arg¨¹manlar? ve tip tan?mlamalar?yla lit-eral olmaks?z?n tan?mlamay? tahmin eder ve ona g?re yorumlar genellikle bu yo-rumlama sisteme en yak?n varsay?lan ¨¹zerinedir. ?rnek olarak; let a = 1; // a varsay?lan olarak int atan?r let b = 10i; // b int oldu, i son ekinden dolay? let c = 100u; // c uint oldu let d = 1000i32; verilebilir. Sabitler Derleme zaman? sabitleri const anahtar kelimesi ile tan?mlan?r. const PAROLAM: int = 12345; const KATAR_PAROLAM: &static/str = "12345"; const EV_PAROLAM: int = PAROLAM + 1; Operat?rler Aritmetik operat?rler *, /, %, +, - (?arp, b?l, mod al, topla, ??kar) ayr?ca - unary operat?r olup say?lar? negatif yapmakta kullan?l?r. C¡¯deki gibi bit operat?rleri >>, <<, &, |, ve ^ ¡®dir. ! t¨¹m bitleri ters ?evirir ve C¡¯deki ~ operat?r¨¹ gibi.Rust¡¯?n kar??la?t?rma oper-at?rleri C¡¯deki kar??la?t?rma operat?rleriyle ayn?d?r. == , !=, <, >, <=, >=, &&, || gibi... 19
  • 21. Tip d?n¨¹?¨¹m¨¹ yaparken Rust as operat?r¨¹n¨¹ kullan?r. ?rnek olarak let x: float = 4.0; let y: uint = x as uint; assert y == 4u; Sentaks Geni?letmeleri Dilin saf haline entegre olmam?? ama sonradan k¨¹t¨¹phaneler yard?m?yla dahil edilmi? ?zelliklerdir. ?u anda std::core k¨¹t¨¹phanesi bu geni?letmeleri yeterli miktarda kar??lamaktad?r. C formatlamas?n?n benzer ?zellikleri k¨¹t¨¹phaneler yard?m?yla al?nm??t?r. Katar formatlaman?n geli?tirilmesi g¨¹ndemdedir. io::println(fmt!("%s bence %d", "cevap", 43)); io::println(fmt!("Bu nedir %?", gizli_nesne)); Yukar?daki ?rne?imizde %? t¨¹m tipleri i?ine alabilen ve manip¨¹le ederek for-mata uyduran ibaredir. Dikkat ederseniz fmt!() olmadan formatlama yap?lama-maktad?r. Bu fonksiyon ?ekirdek k¨¹t¨¹phaneyi kullanarak formatlama yapacaksak mecburidir. Kendi sentaks geni?letmelerinizi de yazabilirsiniz. Rust buna izin verir. Bu geni?letmelerin genel ad? makrolard?r. 20
  • 22. B?L?M 3 Program Ak??? Kontrol Yap?lar? Ko?ullu Yap?lar If yap?s?n? ?nceki b?l¨¹mlerde g?zden ge?irdik k?sa bir ?rnekle ?zetleyelim: if false { io::println("yanl?? olan k?s?m"); } else if true { io::println("do?ru yer"); } else { io::println("ne do?ru ne yanl??"); } Fakat e?er her blokta de?er d?nd¨¹r¨¹lme mekanizmas? ?eklinde ?al???yorsa if yap?s? t¨¹m blok i?lerindeki de?erler kesinlikle ayn? tipte olmak zorundad?r. ?rnek olarak: fn signum(x: int) -> int { if x < 0 { -1 } else if x > 0 { 1 } else { return 0 } } 21
  • 23. ?rnek E?leme Rust ?rnek e?leme mekanizmas?n? di?er mekanizmalara tercih eder bundan do-lay? ?rnek e?leme mekanizmas? geli?mi?tir. match mekanizmas? C¡¯deki switch¡¯in bir benzeri olabilece?i gibi return durumlar?nda d?nd¨¹r¨¹lecek se?e-neklerin belirlenmesini sa?lamaktad?r. match numara { 0 => io::println("s?f?r"), 1 | 2 => io::println("bir veya iki"), 3..10 => io::println("3ten 10a kadar"), _ => io::println("geri kalan t¨¹m durumlar") } C¡¯deki gibi bir case yap?ld?ktan sonra kald??? yerden devam etmez. Bu yap? sabittir ve sadece bir dal? yapar ve i?lemini bitirir. ( _ ) wildcard e?lemesi olarak ad-land?r?lan ifadedir ve anlam? ¡°en az bir e?le?me¡±dir. ( * ) ise ¡°enum tan?mla-mas?nda bir veya daha fazla e?le?me¡± anlam?na gelmektedir. Kollar her zaman => i?aretiyle tan?mlanmas?na ba?lan?r. match numara { 0 => { io::println("s?f?r") } _ => { io::println("ba?ka bir?ey") } } numara de?eri 0¡¯a e?itse ¡°s?f?r¡± string¡¯ini ekrana bast?r?rken di?er t¨¹m girdi du-rumlar?nda ¡°ba?ka bir?ey¡± ??kt?s?n? verecektir. match t¨¹m kollar? arar ve t¨¹m olas? durumlar? ko?ul ¨¹zerinden ge?irir. match¡¯in en ?nemli i?levlerinden biri de?i?ken isimleri ile verilerin ba?lanabilmesi-dir. A?a??daki ?rnekte (veri1, veri2) tuple veritipine ?rnektir. 22
  • 24. fn angle(vector: (float, float)) -> float { let pi = float::consts::pi; match vector { (0f, y) if y < 0f => 1.5 * pi, (0f, y) => 0.5 * pi, (x, y) => float::atan(y / x) } } De?i?kenin ismi ?rnekteki veriyle e?lenmi?tir. ?lk kolda g?r¨¹len ve y yaz?lan yerde bulunan veri kontrol ve manip¨¹le edilebilir. Ayn? zamanda ¨¹?¨¹nc¨¹ koldaki (x, y) ?rne?i tamamen ?rnek e?lemeye y?nelik bir tuple¡¯d?r. Her match kolu if ile takip ediliyorsa bu if ifadesine ?rnek bek?isi denir. ?rnek bek?isi ifadenin do?rulu?unu kontrol ettikten sonra koldaki ifadeyi yapmaya y?nelir. ?fade ister de?er d?nd¨¹rme olsun ister bir fn d?nd¨¹rme tipine bak?larak i?lem yap?l?r, ne oldu?una bak?lmaz. D?ng¨¹ler Rust¡¯ta d?ng¨¹ yap?m? sadece while ile sa?lanabilir. Array kavram? vekt?r olarak yer ald??? i?in vekt?r ¨¹zerinde iterasyon sadece bek?i i?eren ifadeler ile yap?labilir. For d?ng¨¹s¨¹ Rust i?in gelecekte planlanan bir ?zelliktir. While d?ng¨¹s¨¹ yine C¡¯den ?ok farkl? olmamakla birlikte a?a??daki gibidir: let mut cake_amount = 8; while cake_amount > 0 { cake_amount -= 1; } Rust¡¯ta while (true) ifadesi i?in geli?tirilmi? ?zel bir sentaks vard?r bu ifade loop ¡®tur. Sonsuz d?ng¨¹y¨¹ ifade eder: 23
  • 25. let mut x = 5; loop { x += x - 3; if x % 5 == 0 { break; } io::println(int::str(x)); } Bu kod birka? say? yazd?ktan sonra 5¡¯e b?l¨¹nebilen bir say? buldu?unda sonsuz d?ng¨¹den ??kacak ?ekilde yaz?lm??t?r. Veri Yap?lar? Struct ?lk olarak struct yap?s?yla ba?layabiliriz. Struct yap?s? C¡¯dekine benzer bir yap? sergilemektedir hatta haf?zada tutulma ?ekilleri ayn?d?r. Kullan?m? C¡¯deki kullan?m ?ekliyle ayn?d?r. struct Stack { content: ~[int], mut head: uint } Y?k?c? sentaks bir de?eri yerine tan?mlanm?? ba?ka bir de?i?kenle manip¨¹le etmektir. Daha ?nce de bahsetti?imiz y?k?c? yap? structlar i?in de kullan?labilir. ?rne?in; match Noktam { Nokta { x: 0.0, y: yy } => { io::println(yy.to_str());} Nokta { x: xx, y: yy } => { io::println(xx.to_str() + " " + yy.to_str()); } 24
  • 26. } Enumeration Enumlar birden fazla ?ekilde g?sterilebilirler. En basit g?sterimlerinden biri; enum ?ekil { Daire(Point, float), Dikd?rtgen(Point, Point) } ?eklindedir. Arg¨¹man olarak atama yap?labildi?i gibi s?radan C enumlar? gibi kendi i?lerinde b¨¹y¨¹kten k¨¹?¨¹?e indeks s?ralamas? yapan enumlar da vard?r. ?r-nek olarak: enum Y?n { Kuzey, G¨¹ney, Do?u, Bat? } Kuzey 0, G¨¹ney 1, Do?u 2 ve Bat? 3 de?erini almaktad?r. Fakat di?er atamal? enumlarda bu tan?mlama ge?erli olmay?p her belirtme atamaya g?re yap?l?r. Dereferans(deref) i?lemi de bir unary operat?r olup enumlar ¨¹zerinde i?erisin-deki de?eri almalar?n? sa?lamaktad?r. enum Ses { Ses (int) } let ses_seviyesi: Ses = Ses(10); let anl?k_ses_seviyesi: int = *ses_seviyesi; Ba?ka bir i?erikten bilgi al?nmas? bu ?ekilde sa?lanabilir. 25
  • 27. Enumlar ayn? zamanda ?rnek e?lemede de kullan?labilirler: fn bu_noktadan_tarif(dir: Y?n) -> Nokta { match dir { Kuzey => Point {x: 0f, y: 1f}, Do?u => Point {x: 1f, y: 0f}, G¨¹ney => Point {x: 0f, y: -1f}, Bat? => Point {x: -1f, y: 0f} } } Tuple Rust¡¯ta tuplelar enumlar gibi ?al???r dakat enumlar gibi alanadlar? yoktur. Arg¨¹manla?t?rma i?lemi yap?l?r fakat bu i?lemde 0 veya 1 arg¨¹man olarak verilemez. Enumda bu yap?l?rken tuple da bu yap?lamaz. ?rnek bir tuple ise ?u ?ekildedir: let mytup: (int, int, float) = (10, 20, 30.0); match mytup { (a, b, c) => log(info, a + b + (c as int)) } Rust¡¯a dair 0.4 versiyonuyla kesinle?mi? ve temele oturmu? ?zellikler ve yap?lar bunlard?r. Traitler, yeni d?ng¨¹ler, REPL(read evaluate print loop), Exception mekanizmas? gibi ?zellikler yeni yeni geli?tirilmektedir. Ayr?ca fonksiyonlar?n safl??? ve saf olmamalar? ve bu safl?k yap?s?n?n nas?l olmas? gerekti?i hakk?nda hala bir tak?m belirlenmemi? k?s?mlar vard?r. 26