İçeriğe atla

Şablon meta programlama

Şablon Metaprogramlama (İng. Template Metaprogramming, TMP), C++ programlama dilinde derleme zamanında hesaplama yapan programlar yazmaktır.

Meta bilgiler

TMP türler hakkında meta bilgi almak için kullanılabilir:

template <class T>
struct meta_bilgi {
  static const bool tam_sayı_mı = false;
};

özelleşmemiş bir şablon tanımlar. Bu şablonun int türü için özelleşmiş şekli:

template <>
struct meta_bilgi<int> {
  static const bool tam_sayı_mı = true;
};

programcı tarafından

static_assert(meta_bilgi<int>::tam_sayı_mı == true);
static_assert(meta_bilgi<double>::tam_sayı_mı == false);

şeklinde derleme öncesinden bilgi almak için kullanılabilir.

Meta fonksiyonlar

TMP sabit değerlerin hesaplamak ve basit şablon meta işlevler yazmak için kullanılabilir.

Değer hesaplama

constexpr double pi = 3.1415;
constexpr double pi_square = pi * pi;

sabit değer hesaplayan bir metaprogramdır.

Basit meta işlevler

Meta işlevler derleme zamanında basit işlemler yapmak için kullanılabilir. Aşağıdaki program iki sayının ortak bölenlerinin en büyüğünü (OBEB) derleme zamanında hesaplar:

#include <iostream>

template <int x, int y>
struct GCD {
  enum { RET = GCD<y, x % y>::RET };
};

template <int x>
struct GCD<x, 0> {
  enum { RET = x };
};

int main() {
  int x[GCD<1001, 156>::RET];
  std::cout << sizeof(x) << std::endl;
  return 0;
}

Dış bağlantılar

  • David Abrahams & Aleksey Gurtovoy (2004), C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (1 bas.), Addison-Wesley Professional, ISBN 0321227255 
  • Boost.Hana 15 Mart 2024 tarihinde Wayback Machine sitesinde arşivlendi. (İngilizce)

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Normal dağılım</span> sürekli olasılık dağılım ailesi

Normal dağılım, aynı zamanda Gauss dağılımı veya Gauss tipi dağılım olarak isimlendirilen, birçok alanda pratik uygulaması olan, çok önemli bir sürekli olasılık dağılım ailesidir.

<span class="mw-page-title-main">Radyan</span>

Radyan, bir dairede yarıçap uzunluğundaki yay parçasını gören merkez açıya eşit açı ölçme birimidir. 1 radyan 180/π ya da yaklaşık 57,2958 derecedir (57°17′45″).

<span class="mw-page-title-main">Monte Carlo yöntemi</span>

Monte Carlo benzetimi, çok sayıda tekrarlanan rastgele örneklemelerle, bir takım nümerik sonuçlar elde etmeye yarayan ve bilimin birçok alanında yaygın olarak kullanılan bir sayısal hesaplama algoritmaları sınıfıdır. Stokastik olayların yer aldığı fiziksel süreçlerin sonuçlarının tahmin edilmesinde çok kullanışlıdır. Ayrıca, rastgele seçimlerin işe yaradığı ve prensipte deterministik olan bir takım problemlerin çözümünde de kullanılmaktadır. Monte-Carlo yöntemi, Nicholas Constantine Metropolis (1915-1999) tarafından bulunmuştur ve Atom bombasının geliştirildiği Los Alamos Ulusal Labratuvarında, bombanın patlamasından sonra dağılan nötronlara karşı kalkan modellemek için Stanislaw Ulam tarafından günümüze taşınmıştır.

Matematikte karmaşık sayı, bir gerçel bir de sanal kısımdan oluşan bir nesnedir. a ve b sayıları gerçek olursa karmaşık sayılar şu biçimde gösterilirler:

<span class="mw-page-title-main">Casimir kuvveti</span>

Casimir kuvveti, 1948'de keşfedilip ilk kez 1997'de ölçülmüştür. Bir kertenkelenin yüzeye sadece tek bir parmağının ucuyla yapışabilme becerisinde görülebilir.

<span class="mw-page-title-main">Riemann zeta işlevi</span>

Matematikte Riemann zeta işlevi , Alman matematikçi Bernhard Riemann tarafından 1859'da bulunmuş olan ve asal sayıların dağılımıyla olan ilişkisinden ötürü sayı kuramında önemli yeri bulunan seçkin bir işlevdir. İşlev; fizik, olasılık kuramı ve uygulamalı istatistikte de kullanılmaktadır.

<span class="mw-page-title-main">Fresnel integrali</span>

Fresnel integrali, S(x) ve C(x), iki transendental fonksiyon'dur. Augustin-Jean Fresnel'e atfedilmiştir ve optikte kullanılmaktadır. Yakın alan Fresnel difraksiyon fenomeninde ortaya çıkar; aşağıdaki integral gösterimi ile tanımlanırlar:

<span class="mw-page-title-main">Beta fonksiyonu</span>

Matematik'te, beta fonksiyonu, Euler integrali'nin ilk türüdür,

<span class="mw-page-title-main">R (programlama dili)</span> istatistik analizi için kullanılan programlama dili

R, istatistiksel hesaplama ve grafikler için yazılım ortamı olup aynı zamanda programlama dilidir. R Foundation tarafından desteklenen ve GNU Tasarısının parçası olan bir özgür yazılımdır. Yeni Zelanda Auckland Üniversitesinden Ross Ihaka ve Robert Gentleman tarafından ortaya çıkarılan R, hâlihazırda R Geliştirme Çekirdek Ekibi tarafından geliştirilmektedir. S programlama diline benzeyen R, S'nin uyarlaması olarak değerlendirilebilir.

Çokbiçimlilik, bir türün bir başka tür gibi davranabilme ve bu tür gibi kullanılabilme özelliğidir. Nesne yönelimli programlama dillerinde çokbiçimlilik özelliği ise aynı temel sınıftan türetilmiş olan sınıflarda paylaşılan, başka bir ifadeyle aşırı yüklenen aynı metodun bu sınıflarda farklı şekillerde uyarlanabilmesidir. Nesnenin davranışı çalışma anında belirlendiği için programcılar, çokbiçimlilik özelliği sayesinde nesnelerin türünü önceden bilmek zorunda kalmaz.

Bilgisayar programlamada dinamik iletim, altyordam çağrılarının ilişkin altyordam başlangıç adresine dinamik olarak bağlanmasıdır. Bir diğer deyişle, dinamik iletim program metnindeki bir çağrı ile işletilen altyordamın programın çalışması sırasında birbirine bağlanması durumudur. Geri çağrı ve çokbiçimliliğin realize edilmesinde kullanılan bu bağlama yöntemi, yordamsal programlama dillerinde altyordam göstericileriyle gerçekleştirilirken, nesne yönelimli dillerde kalıtlama ve gerçekleştirme ilişkilerinin kullanılmasıyla otomatikman sağlanır. Altyordamların birinci sınıf dil öğesi olarak ele alındığı fonksiyonel programlama dillerinde ise, aynı işlevsellik altyordamların argüman olarak geçirilmesi ile sağlanabilir.

Nesne yönelimli programlama dillerinde arayüz, değişik sınıflardan nesnelerin kategorize edilmesini sağlayan bir soyut tür çeşitidir. Tanımlanmakta olan kategorinin birbirleriyle alakasız sınıfları ortak bir çatı altında toplaması nedeniyle, arayüz tanımları, soyut sınıfların aksine, listeledikleri iletilerin gerçekleştirim ayrıntısı olan herhangi bir bilgi içeremezler. Dolayısıyla, bir arayüz tanımı iletilere karşılık gelen bir altyordam gövdesi veya altalan tanımı içeremez. Bir başka açıdan bakarsak, arayüz tanımında yer alan programlama öğelerinin zaman içinde değişme olasılığı düşük öğeler olması gerekir. Buna göre, arayüz tanımları gerçekleştirimci ile kullanıcının paylaştığı ve sabit olma özelliği bulunan altyordam imzaları ile simgesel sabit tanımlarını barındırabilir.

<span class="mw-page-title-main">Küresel harmonikler</span>

Matematikte, küresel harmonikler Laplace denkleminin çözüm kümesinin açısal kısmıdır. Küresel koordinatların bir sistemi içinde küre yüzeyinde tanımlanır, Fourier serisi ise çember üzerinde tanımlanır. Laplace'ın küresel harmonikleri Pierre Simon de Laplace tarafından ilk 1782 yılında tanıtılan bir ortogonal sistemin küresel harmonik formlarının özel bir kümesidir. Küresel harmoniklerden birkaçının kökleri sağda gösterimlenmiştir. Küresel harmonikler pek çok yerde teorik önem taşımaktadır ve özellikle atomik yörünge elektron konfigürasyonları, yerçekimi alanları, geoitleri ve gezegen ve yıldızların manyetik alanlarının temsili ve kozmik mikrodalga arka plan radyasyonu karakterizasyonu hesaplanmasında kullanılan pratik uygulamaları vardır. Küresel harmonikler 3D Bilgisayar grafiklerinde, dolaylı aydınlatma ve 3D şekillerin tanınması gibi konularda geniş bir yelpazede özel bir rol oynamaktadır.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

C++20, C++17'den sonra C++ programlama dili için ISO/IEC standardının revizyonunun adıdır. Bu standart Şubat 2020'de Prag'daki toplantıda WG21 tarafından sonuçlandırıldı. Taslak 4 Eylül 2020 tarihinde onaylandıktan sonra C++20 standardı şu anda son çalışmalardan geçiyor.

C++ Standard Kütüphanesi, C++ programlama dilinde ve C++ ISO Standard'ıyla yazılmış sınıfların ve fonksiyonların koleksiyonudur.

C++17, C++ programlama dili için yayınlanan ISO/IEC 14882 standardının bir versiyonudur. C++17, bir önceki C++ standardı olan C++14'ün yerine geçmiş, sonrasında C++20 ile yerdeğiştirmiştir.

C23, C programlama dilinin açık standard taslağıdır ve ISO/IEC 9899:2024 olarak yayınlanması ve C17'nin yerini alması beklenmektedir. 2016'da gayriresmi olarak C2x ve adıyla üzerinde çalışılmaya başlanmıştır ve Ekim 2024'te yayınlanması beklenmektedir. C23'ün en son taslağı 1 Nisan 2023'te yayınlanmıştır ve genel erişime açıktır. WG14 C2x taslağı için ilk olarak Ekim 2019 toplanmış, 2020'te COVID-19 pandemisi nedeniyle toplantılar sanal olarak uzaktan yapılmış, sonrasında telekonferans toplantıları 2024 boyunca devam etmiştir. Haziran 2024'teki açık standardta 'C23'ün bitiminden sonra, "C2y" olarak adlandırıldığı' belirtilmiştir.