Bugün öğrendim ki: Ada programlama dilinin 1977 yılında ABD Savunma Bakanlığı tarafından o dönemde kullanılan 450 programlama dilinin yerini almak üzere tasarlandığı

1980 yılında ilk kez piyasaya sürülen yüksek seviyeli programlama dili

AdaParadigmÇoklu paradigma: yapılandırılmış, emredici, nesne yönelimli, yön yönlü,[1] eşzamanlı, dizi, dağıtılmış, genel, yordamsal, metaFamilyPascalTarafından tasarlandı

MIL-STD-1815, Ada 83: Jean Ichbiah

Ada 95: Tucker Taft

Ada 2005: Tucker Taft

Ada 2012: Tucker Taft

İlk olarak Şubat 1980'de çıktı; 44 yıl önce ( )Sabit sürüm

Ada 2022 / Mayıs 2023

Yazım disiplinleriStatik, güçlü, güvenli, nominalOSÇoklu veya çapraz platformDosya uzantıları.adb, .adsWeb sitesiwww .adaic .orgÖnemli uygulamalarAdaCore GNAT,[2]

Green Hills Software Optimize Edilmiş Ada 95 derleyicisi,

PTC ApexAda ve ObjectAda,[3]

MapuSoft Ada-C/C++ değiştirici,[4] eski adıyla "AdaMagic with C Intermediate",[5]

DDC-I ScoreSözcüklerSPARK, Ravenscar profiliEtki edildiALGOL 68, Pascal, Simula 67,[6] C++ (Ada 95), Smalltalk (Ada 95), Modula-2 (Ada 95) Java (Ada 2005), Eiffel (Ada 2012)Etki ettiC++, Chapel,[7] Drago,[8] D, Eiffel, Griffin,[9] Java, Nim, ParaSail, PL/SQL, PL/pgSQL, Python, Ruby, Seed7, SPARforte,[10] Sparkel, SQL/PSM, VHDL

Wikibooks'ta Ada Programlama

Ada, Pascal ve diğer dillerden esinlenen, yapılandırılmış, statik olarak yazılmış, emredici ve nesne yönelimli bir üst düzey programlama dilidir. Sözleşmeyle tasarım (DbC), son derece güçlü yazım, açık eşzamanlılık, görevler, senkron mesajlaşma, korumalı nesneler ve belirsizliğe yönelik yerleşik dil desteği sunar. Ada, hata ayıklamayı çalışma zamanı hataları lehine derleyici kullanarak kod güvenliğini ve sürdürülebilirliğini artırır. Ada, Uluslararası Standartlar Örgütü (ISO) ve Uluslararası Elektroteknik Komisyonu (IEC) tarafından ortaklaşa tanımlanan uluslararası bir teknik standarttır. Mayıs 2023 itibarıyla, gayrı resmi olarak Ada 2022 adı verilen standart, ISO/IEC 8652:2023'tür.[11]

Ada, başlangıçta Fransız bilgisayar bilimci Jean Ichbiah liderliğindeki Honeywell'deki bir ekip tarafından, 1977'den 1983'e kadar ABD Savunma Bakanlığı (DoD) için, o sırada DoD tarafından kullanılan 450'den fazla programlama dilini değiştirmek üzere tasarlandı.[12] Ada, ilk bilgisayar programcısı olarak kabul edilen Ada Lovelace (1815–1852) adını almıştır.[13]

Özellikler

[düzenle]

Ada, başlangıçta gömülü ve gerçek zamanlı sistemler için tasarlanmıştı. Intermetrics'ten S. Tucker Taft tarafından 1992 ile 1995 arasında tasarlanan Ada 95 revizyonu, sistemler, sayısal, finansal ve nesne yönelimli programlama (OOP) için desteği iyileştirdi.

Ada'nın özellikleri şunlardır: güçlü yazım, modüler programlama mekanizmaları (paketler), çalışma zamanı denetimi, paralel işleme (görevler, senkron mesajlaşma, korumalı nesneler ve belirsiz select ifadeleri), istisna işleme ve generics. Ada 95, dinamik gönderim dahil olmak üzere nesne yönelimli programlama desteği ekledi.

Ada'nın sözdizimi, temel işlemleri gerçekleştirmenin yolları için seçenekleri en aza indirir ve semboller (örneğin "||" ve "&&") yerine İngilizce anahtar kelimeleri (örneğin "or else" ve "and then") tercih eder. Ada, temel aritmetik operatörleri "+", "-", "*", ve "/" kullanır, ancak diğer sembolleri kullanmaktan kaçınır. Kod blokları, "declare", "begin" ve "end" gibi kelimelerle sınırlandırılır, burada "end" (çoğu durumda) kapattığı bloğun tanımlayıcısını takip eder (örneğin, if ... end if, loop ... end loop). Koşullu bloklar durumunda bu, diğer dillerde (C veya Java gibi) yanlış iç içe if ifadesiyle eşleşebilecek bir dangling else'ten kaçınır.

Ada, çok büyük yazılım sistemleri geliştirmek için tasarlanmıştır. Ada paketleri ayrı ayrı derlenebilir. Ada paket spesifikasyonları (paket arayüzü) ayrıca uyumluluk açısından kontrol etmek için uygulama olmadan ayrı ayrı derlenebilir. Bu, uygulamaya başlamadan önce tasarım aşamasında erken sorunları tespit etmeyi mümkün kılar.

Bazı diğer dillerde çalışma zamanına kadar tespit edilemeyen veya kaynak koduna açık denetimler eklenmesini gerektiren hatalardan kaçınmaya yardımcı olmak için çok sayıda derleme zamanı denetimi desteklenir. Örneğin, sözdizimi, eşleşmeyen end belirteçlerinden kaynaklanan hataları önlemek için açıkça adlandırılmış blokların kapatılmasını gerektirir. Güçlü yazım türüne uyulması, derleme zamanında veya çalışma zamanında birçok yaygın yazılım hatasını (yanlış parametreler, aralık ihlalleri, geçersiz referanslar, eşleşmeyen türler vb.) tespit etmeyi sağlar. Eşzamanlılık dil spesifikasyonunun bir parçası olduğundan, derleyici bazı durumlarda potansiyel kilitlenmeleri tespit edebilir.[14] Derleyiciler ayrıca genellikle yanlış yazılmış tanımlayıcıları, paketlerin görünürlüğünü, gereksiz bildirimleri vb. kontrol eder ve hata hakkında uyarılar ve nasıl düzeltileceğine dair faydalı öneriler sağlayabilir.

Ada ayrıca ayrılmamış belleğe erişime, tampon taşma hatalarına, aralık ihlallerine, off-by-one hatalarına, dizi erişim hatalarına ve diğer tespit edilebilir hatalara karşı koruma sağlamak için çalışma zamanı denetimlerini destekler. Bu denetimler, çalışma zamanı verimliliği açısından devre dışı bırakılabilir, ancak genellikle verimli bir şekilde derlenebilir. Ayrıca program doğrulamasını kolaylaştırmak için araçlar içerir. Bu nedenlerden dolayı, Ada bazen herhangi bir anormalliğin çok ciddi sonuçlara yol açabileceği kritik sistemlerde kullanılır, örneğin kaza sonucu ölüm, yaralanma veya ağır mali kayıp. Ada'nın kullanıldığı sistemlere örnek olarak havacılık, hava trafik kontrolü, demiryolları, bankacılık, askeri ve uzay teknolojisi verilebilir.[15][16]

Ada'nın dinamik bellek yönetimi yüksek seviyeli ve tür açısından güvenlidir. Ada'da genel veya yazımlanmamış işaretçiler yoktur; ayrıca herhangi bir işaretçi türünü örtük olarak da bildirmez. Bunun yerine, tüm dinamik bellek tahsisi ve serbest bırakma, açıkça bildirilen erişim türleri aracılığıyla gerçekleşmelidir. Her erişim türünün, bellek yönetiminin düşük seviyeli ayrıntılarını yöneten ilişkili bir depolama havuzu vardır; programcı varsayılan depolama havuzunu kullanabilir veya yenilerini tanımlayabilir (bu, Düzensiz Bellek Erişimi için özellikle önemlidir). Aynı türü belirten ancak farklı depolama havuzları kullanan birkaç farklı erişim türü bile bildirmek mümkündür. Ayrıca, dil, bir erişim değerinin işaret ettiği nesnenin türünden daha uzun süre yaşayamamasını sağlayan, hem derleme zamanında hem de çalışma zamanında erişilebilirlik denetimleri sağlar.[17]

Dilin anlam bilgisi erişilemeyen nesnelerin otomatik çöp toplamasına izin verse de, çoğu uygulama bunu varsayılan olarak desteklemez, çünkü bu gerçek zamanlı sistemlerde tahmin edilemez davranışa neden olabilir. Ada, bölge tabanlı bellek yönetiminin sınırlı bir biçimini destekler; ayrıca, depolama havuzlarının yaratıcı kullanımı, bir depolama havuzunun yok edilmesi havuzdaki tüm nesneleri de yok ettiğinden, otomatik çöp toplamasının sınırlı bir biçimi sağlayabilir.

Çift tire ("--"), bir em tiresi andırır, yorum metnini gösterir. Yorumlar satır sonunda biter; yorumun birden fazla satıra yayılmasının kasıtlı olarak bir yolu yoktur, böylece kapalı olmayan yorumların yanlışlıkla kaynak kodunun tüm bölümlerini geçersiz kılmasını önlemek için. Bu nedenle, bir kod bloğunu devre dışı bırakmak, her satırın (veya sütunun) başında "--" ile ön eklenmesini gerektirir. Bu, sayfada tekrarlanan "--" sütunu oluşturarak devre dışı bırakılmış kodu açıkça belirtirken, blok yorumlama desteği olmayan düzenleyicilerde büyük blokların deneysel olarak devre dışı bırakılmasını/yeniden etkinleştirilmesini daha uzun bir süreç haline getirir.

Noktalı virgül (";") bir ifade sonlandırıcıdır ve null veya no-operation ifadesi null;'dir. Sonlandırılacak bir ifade olmadan tek bir ;'e izin verilmez.

Çoğu ISO standardından farklı olarak, Ada dil tanımlaması (Ada Referans Kılavuzu veya ARM olarak bilinir veya bazen Dil Referans Kılavuzu veya LRM olarak bilinir) ücretsiz içeriktir. Bu nedenle, yalnızca Ada derleyicilerini uygulayan programcılar değil, Ada programcıları için de yaygın bir referanstır. Referans kılavuzunun yanı sıra, dil tasarımını ve çeşitli dil yapılandırmalarının kullanımını açıklayan kapsamlı bir gerekçe belgesi de vardır. Bu belge de programcılar tarafından yaygın olarak kullanılmaktadır. Dil revize edildiğinde, yeni bir gerekçe belgesi yazıldı.

Birçok Ada programcısı tarafından Ada kaynak kodunu yazarken kendilerine yardımcı olmak için kullanılan dikkat çekici bir ücretsiz yazılım aracı, GNAT Programming Studio ve GNU Derleyici Koleksiyonunun bir parçası olan GNAT'dır.

Tarihçe

[düzenle]

1970'lerde ABD Savunma Bakanlığı (DoD), gömülü bilgisayar sistemi projeleri için kullanılan farklı programlama dillerinin sayısından endişe duymaya başladı, bunların çoğu eski veya donanım bağımlıydı ve hiçbiri güvenli modüler programlamayı desteklemiyordu. 1975'te, bu sayıyı, departmanın ve İngiltere Savunma Bakanlığı'nın gereksinimleri için genel olarak uygun bir programlama dili bularak veya oluşturarak azaltma amacıyla bir çalışma grubu olan Yüksek Düzey Dil Çalışma Grubu (HOLWG) kuruldu. Başlangıçta bir taslak öneri ile başlayan birçok yinelemeden sonra[18], nihai programlama diline Ada adı verildi. Bu tür projelerde kullanılan yüksek seviyeli programlama dillerinin toplam sayısı, 1983'te 450'den fazla iken 1996'da 37'ye düştü.

HOLWG, bir programlama dilinin karşılaması gerektiğini düşündükleri gereksinimleri belirten bir dizi belge olan Steelman dil gereksinimlerini hazırladı. Mevcut birçok dil resmi olarak incelendi, ancak ekip 1977'de mevcut hiçbir dilin spesifikasyonları karşılamadığı sonucuna vardı.

Yeni bir programlama dili için teklif çağrıları yayınlandı ve dört yüklenici, Red (Benjamin Brosgol liderliğindeki Intermetrics), Green (Jean Ichbiah liderliğindeki Honeywell), Blue (John Goodenough liderliğindeki SofTech)[19] ve Yellow (Jay Spitzen liderliğindeki SRI International) isimleri altında önerilerini geliştirmek için işe alındı. Nisan 1978'de, kamuoyu incelemesinden sonra, Red ve Green önerileri bir sonraki aşamaya geçti. Mayıs 1979'da, Jean Ichbiah'ın Honeywell'de tasarladığı Green önerisi seçildi ve Augusta Ada King, Lovelace Kontesi'nden, genellikle Ada Lovelace olarak bilinen Ada adını aldı. Bu öneri, Ichbiah ve grubunun 1970'lerde geliştirdiği LIS dili tarafından etkilenmişti. Ön Ada referans kılavuzu, Haziran 1979'da ACM SIGPLAN Notices'ta yayınlandı. Askeri Standart referans kılavuzu, 10 Aralık 1980'de (Ada Lovelace'in doğum günü) onaylandı ve Ada Lovelace'in doğum yılı onuruna MIL-STD-1815 numarası verildi. 1981'de Tony Hoare, Turing Ödülü konuşmasından yararlanarak Ada'yı aşırı karmaşık ve dolayısıyla güvenilmez olmakla eleştirdi,[20] ancak daha sonra bir Ada ders kitabı için yazdığı önsözde bu söylemlerinden vazgeçmiş gibiydi.[21]

Ada, erken günlerinde programlama topluluğunun tamamından büyük ilgi gördü. Destekçileri ve diğerleri, yalnızca savunma ile ilgili çalışmalarda değil, genel amaçlı programlama için de baskın bir dil haline gelebileceğini tahmin ettiler.[22] Ichbiah, kamuoyu önünde on yıl içinde yalnızca iki programlama dilinin kalacağını belirtti: Ada ve Lisp.[23] İlk Ada derleyicileri, büyük ve karmaşık dili uygulamakta zorlandı ve hem derleme zamanı hem de çalışma zamanı performansı yavaş olma eğiliminde oldu ve araçlar ilkeldi.[22] Derleyici satıcıları, Ada dil çabasının başka bir yeni özelliği olan ve hükümet tarafından zorunlu tutulan büyük, dil uyumluluğu test etme, hükümet tarafından zorunlu tutulan Ada Derleyici Doğrulama Yeterliliği (ACVC) doğrulama paketini geçmekte çabalarının çoğunu harcadılar.[23] 1975-1983 yıllarında başlayan bir bilgisayar hackerı argosu sözlüğü olan Jargon File, Ada'da, "bu tür bir zorunlu onayın beklendiği gibi olduğu bir girdide; komite tarafından tasarlanmış... kullanması zor ve genel olarak felaketli, milyarlarca dolara mal olan bir rezalet... Ada Lovelace... isminin sonradan kullanıldığı şekilde neredeyse kesinlikle ürperirdi; bunun hakkında söylenen en nazik şey, muhtemelen dev, fil gibi vücudunun içinde dışarı çıkmaya çalışan iyi bir küçük dil olduğu" şeklinde belirtmektedir.[24]

Doğrulanan ilk Ada uygulaması, 11 Nisan 1983'te sertifikalandırılan NYU Ada/Ed çevirmeniydi.[25] NYU Ada/Ed, yüksek seviyeli set dili SETL'de uygulanmıştır.[26] Alsys, TeleSoft, DDC-I, Advanced Computer Techniques, Tartan Laboratories, Irvine Compiler, TLD Systems ve Verdix dahil olmak üzere birkaç ticari şirket, Ada derleyicileri ve ilgili geliştirme araçları sunmaya başladı.[27] Savunma, havacılık veya ilgili sektörlerde önemli bir iş yapan bilgisayar üreticileri de platformlarında Ada derleyicileri ve araçlar sundular; bunlara Concurrent Computer Corporation, Cray Research, Inc., Digital Equipment Corporation, Harris Computer Systems ve Siemens Nixdorf Informationssysteme AG dahildir.[27]

1991'de ABD Savunma Bakanlığı, tüm yazılımlar için Ada kullanımını (Ada zorunluluğu) uygulamaya başladı,[28] ancak bu kurala sık sık istisnalar verildi.[22] Savunma Bakanlığı Ada zorunluluğu, DoD ticari hazır ürün (COTS) teknolojisini benimsemeye başladığında 1997'de fiilen kaldırıldı.[22] Benzer zorunluluklar diğer NATO ülkelerinde de vardı: Ada, komuta ve kontrol ve diğer işlevleri içeren NATO sistemleri için zorunluydu ve Ada, İsveç, Almanya ve Kanada gibi ülkelerde savunma ile ilgili uygulamalar için zorunlu veya tercih edilen dildi.[29]

1980'lerin sonu ve 1990'ların başında, Ada derleyicileri performans açısından iyileşti, ancak çoğu gerçek zamanlı programcının alışkın olduğu tasking modelinin farklı olması da dahil olmak üzere Ada'nın yeteneklerinden tam olarak yararlanmak için hala engeller vardı.[23]

Ada'nın güvenlik açısından kritik destek özellikleri nedeniyle, artık yalnızca askeri uygulamalar için değil, aynı zamanda bir yazılım hatasının ciddi sonuçlara yol açabileceği ticari projelerde de kullanılıyor, örneğin havacılık ve hava trafik kontrolü, Ariane 4 ve 5 gibi ticari roketler, uydu ve diğer uzay sistemleri, demiryolu taşımacılığı ve bankacılık.[16] Örneğin, Boeing 777'deki fly-by-wire sistem yazılımı olan Birincil Uçuş Kontrol Sistemi, aerodinamik olarak dengesiz Eurofighter Typhoon,[30] Saab Gripen,[31] Lockheed Martin F-22 Raptor ve Grumman F-14 Tomcat için DFCS yedek uçuş kontrol sistemi gibi fly-by-wire sistemleri için de yazılmıştır. Kanada Otomatik Hava Trafik Sistemi, 1 milyon satır Ada (SLOC sayımı) ile yazılmıştır. Gelişmiş dağıtık işleme, dağıtık bir Ada veritabanı ve nesne yönelimli tasarım içeriyordu. Ada, diğer hava trafik sistemlerinde de kullanılıyor, örneğin, İngiltere'nin yeni nesil Geçici Gelecek Alan Kontrol Araçları Desteği (iFACTS) hava trafik kontrol sistemi, SPARK Ada kullanılarak tasarlanıyor ve uygulanıyor.[32] Ayrıca, TGV yüksek hızlı demiryolu sistemindeki Fransız TVM kabin içi sinyal sisteminde ve Paris, Londra, Hong Kong ve New York City'deki metro banliyö trenlerinde de kullanılıyor.[16][33]

Standardizasyon

[düzenle]

Ada dilinin zaman çizelgesi Yıl Gayrı resmi isim ANSI Standardı ISO/IEC Standardı 1980 Ada MIL-STD 1815 — 1983 Ada 83/87 MIL-STD 1815A 8652:1987 1995 Ada 95 — 8652:1995 2007 Ada 2005 — 8652:1995/Amd 1:2007 2012 Ada 2012 — 8652:2012 2023 Ada 2022 — 8652:2023

Ön Ada, ACM Sigplan Notices Cilt 14, No 6, Haziran 1979'da bulunabilir[34]

Ada, ilk olarak 1980'de ANSI standardı ANSI/MIL-STD 1815 olarak yayınlandı. Bu ilk versiyon birçok hata ve tutarsızlık içeriyordu,[a] revize edilmiş baskı 1983'te ANSI/MIL-STD 1815A olarak yayınlandı. Başka herhangi bir değişiklik olmadan 1987'de ISO standardı oldu.[36] Dilin bu versiyonu, ANSI tarafından benimsenme tarihinden itibaren genellikle Ada 83 olarak bilinir, ancak bazen ISO tarafından benimsenme tarihinden itibaren Ada 87 olarak da adlandırılır.[37] Ayrıca Fransızca bir çeviri de var; DIN, 1988'de DIN 66268 olarak Almanca'ya çevirdi.

Ada 95, ortak ISO/IEC/ANSI standardı ISO/IEC 8652:1995[38][39], Şubat 1995'te yayınlandı ve onu ilk ISO standardı nesne yönelimli programlama dili yaptı. Standart revizyonuna ve gelecekte kabul edilmesine yardımcı olmak için, ABD Hava Kuvvetleri GNAT Derleyicisinin geliştirilmesini finanse etti. Şu anda, GNAT Derleyicisi GNU Derleyici Koleksiyonunun bir parçasıdır.

Ada dilinin teknik içeriğini iyileştirme ve güncelleme çalışmaları devam etti. Ada 95'e bir Teknik Düzeltme Ekim 2001'de yayınlandı,[40][41] ve büyük bir Ek, ISO/IEC 8652:1995/Amd 1:2007 [42][43], 9 Mart 2007'de yayınlandı, yeni standardın üzerindeki çalışmalar o yıl tamamlandığı için genellikle Ada 2005 olarak bilinir.

Ada-Europe 2012 konferansında, Stockholm'de, Ada Kaynak Derneği (ARA) ve Ada-Europe, Ada dilinin en son sürümünün tasarımının tamamlandığını ve referans kılavuzunun Uluslararası Standartlar Örgütü (ISO) ve Uluslararası Elektroteknik Komisyonu'nun (IEC) ISO/IEC JTC 1/SC 22/WG 9'una onay için gönderildiğini duyurdu. ISO/IEC 8652:2012[44] (Ada 2012 RM'ye bakın) Aralık 2012'de yayınlandı, Ada 2012 olarak bilinir. Bir teknik düzeltme, ISO/IEC 8652:2012/COR 1:2016, yayınlandı [45] (TC 1 ile birlikte RM 2012'ye bakın).

2 Mayıs 2023'te Ada topluluğu, programlama dili standardının Ada 2022 baskısının resmi yayın onayını gördü.[11]

Ada 83, 95 vb. isimlere rağmen, yasal olarak yalnızca bir Ada standardı vardır, son ISO/IEC standardının standardı: yeni bir standart sürümünün kabulüyle, öncekisi geri çekilir. Diğer isimler yalnızca belirli bir baskıya atıfta bulunan gayrı resmi isimlerdir.

Diğer ilgili standartlar arasında ISO/IEC 8651-3:1988 Bilgi işleme sistemleri—Bilgisayar grafikleri—Grafik Çekirdek Sistemi (GKS) dil bağlamaları—Bölüm 3: Ada bulunur.

Dil yapılandırmaları

[düzenle]

Ada, if, then, else, while, for ve benzeri ayrılmış kelimelerle kontrol yapıları içeren ALGOL benzeri bir programlama dilidir. Ancak Ada, orijinal ALGOL 60'a dahil edilmeyen birçok veri yapılandırma olanağı ve diğer soyutlamaya da sahiptir, örneğin tür tanımları, kayıtlar, işaretçiler, sayılandırmalar. Bu tür yapılar kısmen Pascal'dan devralındı veya ondan esinlendi.

Ada'da "Merhaba dünya!"

[düzenle]

Bir dilin sözdiziminin yaygın bir örneği Merhaba dünya programıdır: (hello.adb)

with Ada.Text_IO; procedure Hello is begin Ada.Text_IO.Put_Line ("Hello, world!"); end Hello;

Bu program, ücretsiz olarak sunulan açık kaynaklı derleyici GNAT kullanılarak, aşağıdaki komutu çalıştırarak derlenebilir:

gnatmake hello.adb

Veri türleri

[düzenle]

Ada'nın tür sistemi, önceden tanımlanmış bir dizi ilkel türe dayanmaz, ancak kullanıcıların kendi türlerini bildirmelerine olanak tanır. Bu bildirim, türün içsel gösterimine değil, elde edilmesi gereken amacı tanımlamaya dayanır. Bu, derleyicinin tür için uygun bir bellek boyutunu belirlemesini ve derleme zamanında ve çalışma zamanında tür tanımının ihlallerini kontrol etmesini sağlar (yani, aralık ihlalleri, tampon taşmaları, tür uyumluluğu vb.). Ada, bir aralık tarafından tanımlanan sayısal türleri, modulo türleri, toplu türleri (kayıtlar ve diziler) ve sayılandırma türlerini destekler. Erişim türleri, belirtilen bir türün bir örneğine bir referans tanımlar; yazımlanmamış işaretçilere izin verilmez. Dil tarafından sağlanan özel türler, görev türleri ve korumalı türlerdir.

Örneğin, bir tarih şu şekilde temsil edilebilir:

type Day_type is range 1 .. 31; type Month_type is range 1 .. 12; type Year_type is range 1800 .. 2100; type Hours is mod 24; type Weekday is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); type Date is record Day : Day_type; Month : Month_type; Year : Year_type; end record;

Önemli Not: Day_type, Month_type, Year_type, Hours uyumsuz türlerdir, yani örneğin aşağıdaki ifade geçersizdir:

Today: Day_type := 4; Current_Month: Month_type := 10; ... Today + Current_Month ... -- geçersiz

Önceden tanımlanmış artı operatörü yalnızca aynı türdeki değerleri ekleyebilir, bu nedenle ifade geçersizdir.

Türler, alt türler bildirerek rafine edilebilir:

subtype Working_Hours is Hours range 0 .. 12; -- günde en fazla 12 saat çalışma subtype Working_Day is Weekday range Monday .. Friday; -- çalışma günleri Work_Load: constant array(Working_Day) of Working_Hours -- örtük tür bildirimi := (Friday => 6, Monday => 4, others => 10); -- başlatma ile arama tablosu

Türlerin limited, abstract, private vb. gibi değiştiricileri olabilir. Özel türler iç yapıları göstermez; limited türdeki nesneler kopyalanamaz.[46] Ada 95, türlerin nesne yönelimli genişletilmesi için daha fazla özellik ekler.

Kontrol yapıları

[düzenle]

Ada, yapılandırılmış bir programlama dilidir, yani kontrol akışı standart ifadelere yapılandırılmıştır. Tüm standart yapılandırmalar ve derinlemesine erken çıkış desteklenir, bu nedenle desteklenen "go to" komutlarının kullanımı nadiren gereklidir.

-- a, b'ye eşit olmadığı sürece döngü. while a /= b loop Ada.Text_IO.Put_Line ("Bekleme"); end loop; if a > b then Ada.Text_IO.Put_Line ("Koşul karşılandı"); else Ada.Text_IO.Put_Line ("Koşul karşılanmadı"); end if; for i in 1 .. 10 loop Ada.Text_IO.Put ("Yineleme: "); Ada.Text_IO.Put (i); Ada.Text_IO.Put_Line; end loop; loop a := a + 1; exit when a = 10; end loop; case i is when 0 => Ada.Text_IO.Put ("sıfır"); when 1 => Ada.Text_IO.Put ("bir"); when 2 => Ada.Text_IO.Put ("iki"); -- case ifadeleri tüm olası durumları kapsamalıdır: when others => Ada.Text_IO.Put ("yukarıdakilerin hiçbiri"); end case; for aWeekday in Weekday'Range loop -- bir sayılandırmanın üzerine döngü Put_Line ( Weekday'Image(aWeekday) ); -- bir sayılandırmanın dize gösterimini çıktı if aWeekday in Working_Day then -- bir sayılandırmanın alt türünün kontrolü Put_Line ( " to work for " & Working_Hours'Image (Work_Load(aWeekday)) ); -- bir arama tablosuna erişim end if; end loop;

Paketler, yordamlar ve işlevler

[düzenle]

Bir Ada programının parçaları arasında paketler, yordamlar ve işlevler bulunur.

İşlevler, yordamlardan bir değer döndürmeleri gerektiği açısından farklıdır. İşlev çağrıları "bir ifade olarak" kullanılamaz ve sonucu bir değişkene atanmalıdır. Ancak, Ada 2012'den itibaren, işlevlerin saf olmaması ve uygun şekilde bildirilen parametrelerini veya küresel durumu değiştirebilmeleri gerekir.[47]

Örnek: Paket spesifikasyonu (example.ads)

package Example is type Number is range 1 .. 11; procedure Print_and_Increment (j: in out Number); end Example;

Paket gövdesi (example.adb)

with Ada.Text_IO; package body Example is i : Number := Number'First; procedure Print_and_Increment (j: in out Number) is function Next (k: in Number) return Number is begin return k + 1; end Next; begin Ada.Text_IO.Put_Line ( "Toplam şu: " & Number'Image(j) ); j := Next (j); end Print_and_Increment; -- paket başlatma, paket hazırlandığında yürütülür begin while i < Number'Last loop Print_and_Increment (i); end loop; end Example;

Bu program, örneğin, ücretsiz olarak sunulan açık kaynaklı derleyici GNAT kullanılarak, aşağıdaki komutu çalıştırarak derlenebilir:

gnatmake -z example.adb

Paketler, yordamlar ve işlevler isteğe bağlı olarak iç içe geçebilir ve her biri mantıksal en dış blok da olabilir.

Her paket, yordam veya işlev, sabitlerin, türlerin, değişkenlerin ve diğer yordamların, işlevlerin ve paketlerin kendi bildirimlerine sahip olabilir, bunlar herhangi bir sırada bildirilebilir.

Pragmalar

[düzenle]

Pragma, derleyiciye derlenmiş çıktının belirli şekilde işlenmesi için bilgi veren bir derleyici yönergesidir.[48] Belirli pragmalar dile yerleşiktir,[49] diğerleri ise uygulamaya özgüdür.

Derleyici pragmalarının yaygın kullanımına örnek olarak, çalışma zamanı tür denetimi veya dizi alt sınır denetimi gibi belirli özellikleri devre dışı bırakmak veya derleyiciye bir işlev çağrısı yerine nesne kodu eklemeyi belirtmek (C/C++'ın satır içi işlevler için yaptığı gibi) verilebilir.

Generics

[düzenle]

Ayrıca bakınız

[düzenle]

Bilgisayar programlama portalı

Ada derleyicileri

APSE – Ada'da yazılım geliştirmeyi desteklemek için bir programlama ortamı için bir spesifikasyon

Ravenscar profili – güvenlik açısından kritik zorlu gerçek zamanlı bilgi işlem için tasarlanmış Ada görev özelliklerinin bir alt kümesi

SPARK – istenen bileşen davranışını ve bireysel çalışma zamanı gereksinimlerini tanımlayan meta bilgi ile işaretlenen, Ada'nın son derece kısıtlanmış bir alt kümesini içeren bir programlama dili

VHDL, Ada tabanlı donanım tanımlama dili

Notlar

[düzenle]

Referanslar

[düzenle]

Uluslararası standartlar

[düzenle]

ISO/IEC 8652: Bilgi teknolojisi—Programlama dilleri—Ada

ISO/IEC 15291: Bilgi teknolojisi—Programlama dilleri—Ada Anlamsal Arayüz Spesifikasyonu (ASIS)

ISO/IEC 18009: Bilgi teknolojisi—Programlama dilleri—Ada: Bir dil işlemcisinin uyumluluk değerlendirmesi (ACATS)

IEEE Standardı 1003.5b-1996, POSIX Ada bağlaması

Ada Dil Eşleme Spesifikasyonu, CORBA arayüz tanımlama dili (IDL) ile Ada eşlemesi

Gerekçe

[düzenle]

Bu belgeler, baskı dahil olmak üzere çeşitli biçimlerde yayınlanmıştır.

Ichbiah, Jean D.; Barnes, John G. P.; Firth, Robert J.; Woodger, Mike (1986), Ada Programlama Dilinin Tasarımının Gerekçesi, orijinalinden 2007-02-02 tarihinde arşivlendi Ayrıca apps.dtic.mil, pdf'de mevcuttur

Barnes, John G. P. (1995), Ada 95 gerekçesi: dil: standart kitaplıklar

Barnes, John (2006) [2005], Ada 2005 için gerekçe

Kitaplar

[düzenle]

Daha fazla okuma

[düzenle]

Barnes, John (2014). Ada 2022'de Programlama. Cambridge University Press. ISBN 978-1-009-56477-9.

Barnes, John (2014). Ada 2012'de Programlama: Ada 2022'nin Önizlemesiyle. Cambridge University Press. ISBN 978-1-009-18134-1.

Barnes, John (2014). Ada 2012'de Programlama. Cambridge University Press. ISBN 978-1-107-42481-4.

Barnes, John (2006). Ada 2005'te Programlama. Addison-Wesley. ISBN 0-321-34078-7.

Barnes, John (1991). Ada artı Dil Referans Kılavuzu'nda Programlama. Addison-Wesley. ISBN 0-201-56539-0.

Barnes, John (1998). Ada 95'te Programlama. Addison-Wesley. ISBN 0-201-34293-6.

Barnes, John (1997). Yüksek Bütünlük Ada: SPARK Yaklaşımı. Addison-Wesley. ISBN 0-201-17517-7.

Barnes, John (2003). Yüksek Bütünlük Yazılımı: Güvenlik ve Güvenliğe SPARK Yaklaşımı. Addison-Wesley. ISBN 0-321-13616-0.