C++ Nedir ve Modern C++ Diline Giriş

Merhaba arkadaşlar, mobilhanem.com da yepyeni bir yazı serisi, Modern C++ Eğitimine başlıyoruz. Bu dersimizde C++ nedir, kullanım alanları nerelerdir ve bizim bu eğitim serisinde nasıl ilerleyeceğimiz hakkında bahsedeceğiz. Sizlerde derslerimizi takipte kalarak Temel Seviye C++ ‘dan başlayarak, İleri Seviye Modern C++ kullanımında ilerleyip bu alanda profesyonelleşebilirsiniz.

C++ Nedir

Çoğunlukla sistem kaynaklarına yüksek performansla erişim gerektiren, işlem hızı gereksinimlerinin yüksek olduğu, hafıza yönetiminin elle yapılabildiği düşük seviyeli ve birden fazla programlama yaklaşımına destek veren bir dil olarak nitelendirilebilir. Başlangıç olarak C dilinin üzerine nesne yönelimli programlama yaklaşımının uygulanması fikri ile tasarlanılmaya başlayan C++’ya zaman içerisinde exception, template metaprogramming, smart pointer, asenkron ve paralel işlem desteği gibi eklentilerle oldukça çok geniş ve derin bir detay seviyesine erişmiştir. Temelinden ötürü hemen hemen her C programı, C++ derleyicisi aracılığıyla da derlenebilmektedir.

Derlenen programlar, direkt hedef sistemin işlemcisi tarafından işlenebilen yönergeler barındırdığı ve manuel hafıza yönetiminden ötürü kullanımı oldukça zor, hata yapma riski doğru programlama disiplinleri uygulandığı durumlarda dahi yüksek bir dildir. Fakat bunlarla beraber, çalışma zamanı performansının yüksek kesinlikte öngörülebilmesi sayesinde interaktif ve yüksek görsel içeriğe sahip uygulamalarda veya çalışma performansının kestirilebilir davranış sergilemesi gereken senaryolarda kullanımı için oldukça idealdir.

Saydığımız özellikler ve çok daha fazlası zaman içerisinde dil standardına eklendiği için, eğitimlerimizde çoğunlukla C++14 ve C++17 standartlarına uyan yaklaşımlarla örnekler vermeye gayret edeceğiz. Dilin en güncel sürümü olan C++20’ya sade bir lisanla nadiren değinmeyi hedefliyoruz, zira çoğunlukla kullanılan derleyiciler tarafından henüz yeterince desteklenmemektedir.

Kullanım Alanları

Yüksek performans gereksinimi olan uygulamalarda, sistem kaynaklarının diğer programlama dillerine nispeten daha açık bir yöntemle yönetilmesi gereken senaryolarda çoğunlukla kullanım gören C++, ekseriyetle bilgisayar destekli tasarım ve mühendislik uygulamaları, endüstriyel, medikal ve benzeri gömülü sistemlerde kullanılmaktadır. Bu programlama dilini kullanarak tasarlanmış olan uygulamalara örnek olarak:

  • Bilgisayar oyunlarının büyük bir kısmı
  • Grafik motorları(Unreal Engine, CryEngine, Unity)
  • Solidworks, Catia, Ansys, Matlab/Simulink gibi mühendislik uygulamaları
  • Windows işletim sistemi(Kernel ve bazı düşük seviye kısımlar hariç)
  • İşletim sistemi kütüphaneleri
  • Donanım sürücülerinin bir kısmı
  • Tensorflow (Backend)
  • OpenCV
  • Veritabanı yönetim sistemleri(MySQL, MS-SQL)

Her ne kadar yukarıda tanımladığımız uygulamalar C++ kullanıyor olsa da, kimi kısımlarında farklı programlama dilleri de kullanılmaktadır. Mesela, işletim sistemi çekirdeklerinin en kritik kısımları assembly ve C ile birlikte tasarlanırken, daha dış seviyelerde ise zaman zaman C++ kullanılmaktadır. Benzer şekilde, veritabanı yönetim sistemlerinin bazı kısımları C ile yazılırken, diğer kısımlarında C++’dan da yararlanılmaktadır.

Gömülü sistemlerde C++ kullanım oranı yıllar geçtikçe bilhassa daha güçlü sistemlerin tasarlanmasıyla yükselse de, düşük güç tüketimli sistemlerde kullanım oranı C’ye nispeten oldukça düşüktür. Bu durumun önündeki en büyük engel derleyici desteğinin zayıflığı ve derleme sonrası oluşan programda istenilmeyen kodların oluşması denilebilir. Bu duruma örnek olarak geçici nesne içeren fonksiyon bloklarında oluşturulan construct/destruct çağrıları ve exception mekanizmasının kod yapısını muğlak bir vaziyete getirmesi verilebilir.

Derleyiciler ve Hata Ayıklayıcılar

C++ dili, günümüzde ISO tarafından yönetilen bir standart olduğundan ötürü farklı kurumlar ve gruplar tarafından tasarlanmış derleyiciler aracılığıyla derlenebilir. Mesela, Microsoft ve Intel kurumları ile GNU ve LLVM projelerinin farklı standartları destekleyen(C++11,17 gibi) derleyicileri mevcuttur. Malesef, standartta açıkça belirtilmeyen kısımlardan ötürü dilin davranışı derleyiciler arasında farklılık gösterebilmekte, hatta derleyiciler standartta belirtilmeyen ek dil ve kütüphane özelliklerine de destek vermektedirler. Bu yüzden birden fazla platform için C++ tabanlı uygulama geliştirilmesi kodun birden fazla derleyiciyle derlenmesini ve program davranışlarının doğrulanmasını gerektirir.

Windows ve alakalı işletim sistemlerinde kullanılabilen Microsoft Visual Studio aracılığıyla hem derleyici(MSVC++) hem de hata ayıklayıcı birlikte gelmektedir.

Linux eksenli açık kaynak kod dünyasında genellikle kullanılan derleyici GNU projesi tabanlı g++ iken, GDB de hata ayıklayıcısıdır.

Microsoft ve GNU eksenlerine paralel olarak açık kaynak kodlu LLVM projesine bağlı clang derleyicisi ve LLDB hata ayıklayıcısı örnek verilebilir.

Belirttiğimiz bu derleyicilerin dışında çeşitli gömülü sistem veya entegre devre üreticilerinin de kendilerine has derleyicileri mevcuttur, fakat dilin güncel standartlarına destekleri masaüstü veya mobil platformlardaki kadar iyi değildir.

Modern C++ Eğitim Planı

Eğitimimiz daha ziyade dilin teknik özelliklerine odaklanacağı için, eğitim öncesi başka herhangi bir programlama diliyle tecrübeniz olmasını tavsiye ederiz.

C++ dilinin takriben 40 yıldır biriktirdiği derinlik ve genişliği kapsamlı bir şekilde ele alamayacağımızdan ötürü, endüstride genellikle kullanılan dil özelliklerinden bahsetmeye çalışacağız. Fakat eminiz ki, burada anlatmadığımız bir çok dil özelliğini ve kütüphaneleri farklı uygulama kaynak kodlarında bulmanız mümkün. Bununla beraber elimizden geldiğince dile ait beklenmedik davranışlara da değinmeye çalışacağız.

Konuların incelenmesini birkaç başlık altında toplarsak:

Temel C++ Dili

  1. Basit Program Yapısı, Temel Değişken Tipleri ve Fonksiyonlar
  2. Standart Değişken Tipleri ve Operatörler
  3. Kontrol ve Döngü İfadeleri
  4. Temel Kompozit Yapılar
  5. Exception Mekanizması
  6. Program Hafıza Modeli ve Hafıza Yönetimi
  7. Sınıf Yapısı, Kalıtım ve Erişim Seviyeleri
  8. Derleme ve Bağlama Modeli
  9. Tip Dönüşümleri
  10. Operator Yükleme
  11. Template Tanımları
  12. STL  Bileşenleri
  13. Iterator Yapıları

Orta Seviye C++ Dili

  1. Program Arayüz Tanımlama ve Name Mangling
  2. Constexpr ve Preprocessor Tanımlama
  3. Derleme Zamanı Hata Ayıklama Tanımları
  4. Otomatik Hafıza Yönetimi
  5. Otomatik Tip Döndürme
  6. Lambda İfadeleri
  7. Arayüz ve Fonksiyon Bağlama İfadeleri

İleri C++ Dili

  1. Type Traitler ile İleri Template Sınırlama
  2. Gelişmiş STL Hafıza Yönetimi
  3. Gömülü Assembly ve Intrinsic İfadeler (x86_64)
  4. Rvalue/Lvalue Referanslar, “Move” Mekanizması
  5. Attribute Tanımları

Yazılım Araçları

  1. Hata Ayıklayıcılar ve Sembol Çözümleme
  2. Performans ve Davranış Analizi
  3. Derleme Yönerge Sistemleri

Eğitimimizde işlerimizi kolaylaştırma amacıyla Microsoft Visual Studio Community ile dağıtılan derleyicileri kullanmayı hedefliyoruz, fakat uygulamaların GNU(g++) ve LLVM(clang) aracılığıyla da nasıl derleneceğine kısaca değineceğiz.

Bu dersimizde C++ Nedir ve Modern C++ hakkında giriş niteliğinde bilgiler paylaştık. Bundan sonra her fırsatta derslerimizi ekleyeceğiz.  Bir sonraki yazımızda görüşmek üzere!

Tüm C++ Dersleri için tıklayınız.

19

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?