You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: FinalExam.md
+180Lines changed: 180 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -500,3 +500,183 @@ pub fn do_something() {
500
500
**c)** Deadlock
501
501
502
502
**d)** Handles değişkeni için derleme zamanında Value Moved Here hatası alınır
503
+
504
+
## Soru 12
505
+
506
+
Rust’ın güçlü bir paket yönetim sistemi vardır. Yardımcı küfeler **Crates.io** portali üzerinde yayınlanır. **rand**, **tokio**, **serde** gibi birçok araç vardır. Aşağıdaki komutlardan hangisi bir rust projesine doğru şekilde paket ekler.
507
+
508
+
**a)** cargo add tokio -F full
509
+
510
+
**b)** cargo expand with tokio
511
+
512
+
**c)** add crate tokio
513
+
514
+
**d)** crate add tokio
515
+
516
+
## Soru 13
517
+
518
+
**Thread**’ ler arasında veri transferi için kanallar _(channels)_ kullanılır. Rust standart kütüphanesi varsayılan olarak **Multi-Producer Single Consumer _(MPSC)_** modelini kullanır. Aşağıdaki örnek kod parçasında örnek bir kanal kullanımı ele alınmaktadır. Bu programın çıktısı şıklardan hangisinde doğru şekilde açıklanmıştır.
**a)** Transmitter nesnesi klonlanmasına rağmen value moved here hatası oluşmasına neden olur, bu yüzden kod derlenmez.
571
+
572
+
**b)** thread :sleep metodu ile gerçekleşen duraksama ana thread’ in kilitlenmesine neden olacağından deadlock durumu oluşur
573
+
574
+
**c)** Program rapor dosyalarını sıralı olarak ele alan thread’ ler başlatır. Dosya işlemleri sembolik olarak rastgele üretilen sürelerde tamamlanır, işlem sonuçları kanal üzerinden yakalanır ve durumları ekrana basılır.
575
+
576
+
**d)** Program rapor dosyalarını sistemde bulamayacağından FileNotFoundException vererek sonlanır.
577
+
578
+
## Soru 14
579
+
580
+
Rust dilinde **meta programlama** yetkinlikleri için **makrolar** yaygın şekilde kullanılır. Makrolar yardımıyla kod tekrarları azaltılabilir, daha okunabilir kodlar oluşturulabilir, derleme zamanında kaynak kod üzerinde değişiklikler yapılabilir.
Makrolar, Declarative ve Procedural olmak üzere iki ana katgoriye ayrılır. Bu enstrümanlarla ilgili olarak aşağıdaki seçeneklerde bahsedilen kavramlardan hangisi/hangileri doğrudur?
614
+
615
+
-**I.** Declarative makrolar hızlıdır ve derleme zamanına etkisi minimal seviyededir ancak Procedural makrolar derleme sürelerinin artmasına neden olur.
616
+
-**II.** Procedural makrolar proc-macro olarak adlandırılan ayrı kütüphaneler içerisinde tasarlanır ve dilin sentaksını anlamak için TokenStream’ ler kullanılır.
617
+
-**III.** Procedural makrolar derive direktifi ile birlikte kullanılabilirler.
618
+
-**IV.** Declarative makrolar macro_rules! makrosu ile oluşturulurlar.
619
+
620
+
**a)** Sadece IV
621
+
622
+
**b)** I, II, III
623
+
624
+
**c)** Hepsi doğrudur
625
+
626
+
**d)** II ve IV
627
+
628
+
## Soru 16
629
+
630
+
Rust eş zamanlı programlama haricinde **asenkron** programlamayı da destekler. Asenkron programlama dosya I/O işlemleri, network stream operasyonları, zaman bazlı görevler ve servis iletişimi gibi alanlarda sıklıkla kullanılır. Asenkron görevlerde **async** ve **await** operatörleri yer alır. Asenkron yapılarda genellikle bir yürütücü mekanizma olur. **Tokio** küfesi bu amaçla kullanılan harici küfelerdendir. Aşağıda bu kabiliyet ile ilgili örnek bir kod parçası verilmiştir.
631
+
632
+
```rust
633
+
userand::Rng;
634
+
usestd::time::Duration;
635
+
usetokio::sync::mpsc;
636
+
usetokio::task;
637
+
usetokio::time::sleep;
638
+
639
+
#[tokio::main]
640
+
asyncfnmain() {
641
+
let (log_transmitter, mutlog_receiver) =mpsc::channel(100);
**c)** logger_task isimli değişken farklı bir asenkron görevi işletir ve kanala gelen metrik değerleri Receiver nesnesi aracılığıyla okuyarak ekrana yazdırır.
681
+
682
+
**d)** Concurrent başlatılan görevler birbirine bekler konumda kalan thread’ler oluşmasına sebep olur ve bu durum çalışma zamanında deadlock oluşmasına sebebiyet verir.
0 commit comments