Skip to content

Commit ba018f0

Browse files
committed
Yeni postlar
1 parent bcfc21a commit ba018f0

File tree

3 files changed

+651
-6
lines changed

3 files changed

+651
-6
lines changed

_posts/2025-01-17-modern-cpp.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ türlü başına oturup da bir post yazmayı başaramadım. Artık o akşam bu a
2323

2424
Başta belirtmek isterim ki, bu yazıda C++'ın ne tarihine gireceğim ne de çok bilinen
2525
yok işte variable türleri budur, pointerlar şunlar, referanslar bunlar gibi şeylerden
26-
bahsetmeyeceğim. Çünkü büyüklü küçüklü herkes "Ben C++ gurusuyum" diyip oturup Bejarne diye bir
26+
bahsetmeyeceğim. Çünkü büyüklü küçüklü herkes "Ben C++ gurusuyum" diyip oturup Bjarne diye bir
2727
adam C'nin şu sorunlarını görmüş hede hödö diye bir sürü Wikipedia bilgisini oturup
2828
paylaşıyor. Ama bununla kaldığın zaman C++'ın gurusuyum demek havuzda yüzüp Manş Denizini
2929
geçebilirim demek gibi bir şey. Neyse lafı uzatmadan Modern C++ hikayeleri anlatalım biraz da.
3030

31+
3132
# C++'ın Orta Çağları: C++98 ve C++03
3233

3334
Tarihte C++ 90'ların sonunda bugünkü bildiğimiz ilk iskeletini C++98 ile ISO ortaya attı. Ardından
@@ -40,12 +41,10 @@ hatta verilerin başlangıç tanımlamaları gibi konularda bile C++ oldukça il
4041
Örneğin çokça bildiğimiz aşağıdaki tanımlama C++'ın o dönemlerinde yoktu:
4142

4243
```cpp
43-
4444
class MyClass {
4545
public:
4646
int value = 5; // C++98/03'de derleme hatası verir.
4747
};
48-
4948
```
5049
5150
Bu dönemlerin ardından daha öncesinde bahsettiğim Java ve C# gibi dillerin popülerliği ile 2003-2005
@@ -61,7 +60,8 @@ adlandırıldı.
6160
daha ifade gücü yüksek ve geliştirici dostu hale getiren özellikler tanıttı. Standart kütüphanelerde
6261
oldukça büyük değişiklikler yapıldı ve C++11 ile birlikte C++'ın modern çağı başlamış oldu diyebilirim.
6362
64-
## Buz Devri Öncesi C++'ın Sorunları
63+
64+
## Buz Devri Öncesi C++'ın Sorunları
6565
6666
Esasında C++ dili oldukça güçlü bir dildi, o zamanlar bile... Ancak geliştiricileri konforsuz hale getiren
6767
bazı sıkıntılar var idi.
@@ -73,10 +73,8 @@ gireceğim. Özellikle iteratörler gibi karmaşık türler için tür bildiriml
7373
Örneğin bir iteratör tanımlamak için aşağıdaki gibi bir şey yapmanız gerekiyordu:
7474
7575
```cpp
76-
7776
std::vector<int> vec = {1, 2, 3, 4, 5};
7877
std::vector<int>::iterator it = vec.begin();
79-
8078
```
8179

8280
Bellek yönetimi ve eşzamanlılık eksikleri de C++'ın en baş ağtırıcı sorunlarıydı. C++'ın ham işaretçileri
@@ -87,6 +85,7 @@ C++'ı pek tercih edilmeyen bir dil haline getirilmişti.
8785
Bu açıdan bakldığında C++11 bir güncellemeden çok daha fazlasıydı; adeta bir devrimdi. Standart,
8886
uzun süredir var olan sorunlara çözüm getiren ve dili daha modern, güvenli ve verimli hale getiren
8987
düzinelerce özellik tanıttı ki şimdi bunlardan birkaçına değinelim.
88+
---
9089

9190
# Modern C++'ın Temel Bazı Yenilikleri
9291

@@ -168,6 +167,7 @@ Son olarak `auto` ile `decltype` arasındaki farkı vurgulamakta fayda var:
168167
* auto türler (types) üzerinde çalışır,
169168
* decltype ise ifadeler (expressions) üzerinde çalışır.
170169
170+
---
171171
172172
## Uniform Initialization (Birörnekli Başlatma)
173173
@@ -197,6 +197,7 @@ Birörnekli başlatma, tehlikeli dönüşümleri de derleme aşamasında engelle
197197
int x = 3.14; // İzin verilir ama kesme (truncation) olur
198198
int y{3.14}; // Hata: daraltıcı dönüşüm
199199
```
200+
---
200201

201202
## Akıllı İşaretçiler ve Bellek Yönetimi
202203

@@ -276,6 +277,7 @@ int main() {
276277
return 0;
277278
}
278279
```
280+
---
279281
280282
## Lambda Fonksiyonlar
281283
@@ -294,6 +296,7 @@ std::for_each(vec.begin(), vec.end(), [](int value) {
294296

295297
Bu örnekte `std::for_each` algoritması, `vec` vektöründeki her bir eleman için lambda fonksiyonunu
296298
basitçe çağırır. Bu sayede algoritmaları daha okunabilir hale geldi.
299+
---
297300

298301
## Eşzamanlılık ve Paralellik
299302

@@ -322,6 +325,7 @@ Windows'ta da Linux'ta da macOS'ta da aynı şekilde çalıştırabilirsiniz.
322325
C++11 ayrıca `std::async` ve `std::future` öğeleriyle asenkron görev yönetimini
323326
(async task management) de destekler. Böylece manuel olarak `std::thread` yönetmek yerine,
324327
asenkron olarak çalıştırılan işlerden dönüş değerleri alabilirsiniz.
328+
---
325329

326330
## Meta Programlama Şablonlar ve Derleme Zamanı Hesaplamaları
327331

@@ -377,6 +381,7 @@ int main() {
377381

378382
Bu tarz metaprogramlama, kütüphane geliştiricileri veya çerçeve (framework) yazarları
379383
için özellikle yararlıdır.
384+
---
380385

381386
# Sonraki Blog Yazılarıma Referans Niteliğinde...
382387

0 commit comments

Comments
 (0)