Ada Programlama Dili — Giriş

mozgan
Ada Programlama Dili
9 min readApr 24, 2024

Bir dizi makaleden oluşmasını düşündüğümüz, Ada programlama dili hakkında Türkçe kaynak ve belki bir rehber olmasını temenni ettiğimiz yazılarımızın ilkine Ada dilini kısaca tanıtarak başlayacağız. Bu makalemizde Ada isminin nereden geldiğine, tarihi gelişimine, dilin kullanım alanlarına ve bazı uygulamalara kısaca değindikten sonra Ada dilinde yazılmış bir programın derleme ve çalıştırma aşamalarından bahsedeceğiz. Bu ve gelecek olan yazılarımızda terim karmaşasından kaçınabilmek amacıyla kullanılan terimlerin İngilizce literatüründeki karşılıklarını da parantez içerisinde belirttik. Buna ek olarak makalelerimizi, meraklı okurlara yönelik detaylı bir okuma olanağı sağlaması amacıyla bir çok internet sayfası bağlantıları ile besledik. Bu sayede değinilen konular hakkında daha kapsamlı bilgi elde edilebileceğini düşünüyoruz.

https://people.cs.kuleuven.be/~dirk.craeynest/ada-belgium/pictures/ada-strong.html

Ada, yapısal (structured), nesne yönelimli (object-oriented), eş zamanlı (concurrent) ve dağıtık (distributed) tabanlı bir bilgisayar programlama dilidir. Ada ismi, 19. yülyılda yaşamış İngiliz matematikçi Ada Lovelace’den gelmektedir. Peki, Ada Lovelace kimdir?

Ada Lovelace

Augusta Ada King (Lovelace Kontesi, daha çok Ada Lovelace olarak bilinir), 19. yüzyılda yaşamış İngiliz matematikçi ve yazardır. Şair Lord Byron ve Anne Isabella Milbanke’in tek meşru çocuğudur. Ada, 10 Aralık 1815'te Londra’da doğdu ve 27 Kasım 1852'de 36 yaşında kanserden öldü.

Ada Lovelace küçük yaşlardan itibaren matematikle ve bilimle ilgilendi ve 17 yaşındayken matematikçi Charles Babbage ile tanıştı. O sıralar Charles Babbage “Analitik Makine” adlı bir bilgisayar tasarlıyordu. Ada, Charles’ın notlarını incelemeye başladı ve karmaşık matematiksel problemleri çözmek için bu makinenin nasıl kullanılabileceğini gösteren bir dizi not yazdı. Bu notlar “Analitik Motor Üzerine Notlar” başlığıyla 1843 yılında yayınlandı. Ada, makalesinde Charles’ın fikirlerini matematiksel terimlerle açıklamış ve Bernoulli sayılarını hesaplamak için bir algoritma geliştirmişti. Bu algoritma önceden belirlenmiş bir dizi talimatı takip ederek bir görevi yerine getirme yeteneğini gösteren ilk programdır, ve bundan ötürü modern bilgisayar programlamasının ilk örneklerinden biri olarak kabul edilir.

Ada Lovelace’ın çalışmaları ne yazık ki 1950'lere kadar keşfedilmedi. 1953 yılında matematikçi ve filozof B. V. Bowden, Ada’nın notlarını “Faster than Thought: A Symposium on Digital Computing Machines” başlığıyla yeniden yayınladı. Bu sayede Ada’nın çalışmaları bilgisayar bilimi alanında ün kazandı. Böylece Ada, ilk bilgisayar programcısı ünvanına sahip oldu.

Ada Programlama Dili

Ada, 1979 yılında Jean Ichbiah ve ekibi tarafından geliştirilen bir programlama dilidir. Bu ekibin asıl amacı yüksek güvenlik ve güvenilirlik gerektiren kritik sistemlerde kullanılabilecek bir dil oluşturmaktı. Ada dili resmi olarak ISO 8652 adıyla standart bir hale gelmiştir. Bu standart, dilin tüm kurallarını ve özelliklerini tanımlar.

Ada dilinin geliştirilmesi, ABD Savunma Bakanlığı (DoD)’nın bir projesi olan “Ada Programming Support Environment (CAPSE)” ile başladı. Bu proje farklı platformlarda çalışabilen ve yüksek güvenlik sunan bir programlama dili oluşturmayı amaçlıyordu. Ada dili ilk olarak 1983 yılında ABD Savunma Bakanlığı tarafından kabul edildi, ve ardından birçok ulusal ve uluslararası kuruluş tarafından da tanındı.

Ada’nın gelişim süreci kronolojik olarak şu şekildedir:

  • 1975: ABD Savunma Bakanlığı’nın bilgisayar sistemlerine uygun üst seviyeli bir programlama dili oluşturmak amacıyla Yüksek Dereceli Dil Çalışma Grubu (High Order Language Working Group) kuruldu ve bir isterler listesi yayınlandı.
  • 1979: Ada dilinin ilk taslağı yayınlandı ve Ada 80 olarak adlandırıldı.
  • 1980: Askeri referans kılavuzu 10 Aralık 1980 tarihinde (Ada Lovelace’in doğum günü) onaylandı ve Ada’nın doğum yılı onuruna ANSI standardı olan ANSI/MIL-STD 1815 olarak yayınlandı.
  • 1983: ANSI/MIL-STD 1815 standardı bir çok hata ve tutarsızlık içerdiğinden ötürü revize edildi. Düzenlenen versiyon ANSI/MIL-STD 1815A olarak yayınlandı. Ada 83 Uluslararası Standart Teşkilatı (ISO) tarafından da kabul edildi.
  • 1987: Ada 83 üzerinde herhangi bir değişiklik yapılmadan Ada 87 olarak ISO 8652:1987 standard haline geldi.
  • 1995: Ada 95, ISO/IEC/ANSI ortak standardı olan ISO/IEC 8652:1995 ile yayınlandı ve nesne yönelimli (object-oriented) programlama paradigmasına sahip bir dil haline geldi.
  • 2005: Ada 95'e yönelik teknik düzeltmeler yapıldı ve yeni bir standart olan Ada 2005 üzerine odaklanıldı.
  • 2012: Ada 2012 standardı, Ada 2005'e ek olarak sözleşmeye dayalı programlama (ön koşullar (preconditions), son koşullar (postconditions), tür değişmezleri (type invariants)) ve başka bir çok geliştirme eklenerek ISO/IEC 8652:2012 standardı olarak yayınlandı.
  • 2023: 2 Mayıs 2023 tarihinde Ada‘nın son standardı olan Ada 2022 açıklandı.

Dilin Özellikleri

Ada programlama dili öncelikle savunma ve havacılık endüstrisinde kullanılmak üzere tasarlanmıştır. Hal böyle olunca Ada dilinde güvenlik (security), taşınabilirlik (portability), modülerlik (modularity), ölçeklenebilirlik (scalability), eş zamanlılık (concurrency) ve paralellik (parallelity) gibi özellikler ön plana çıkmaktadır. Nitekim Ada’nın tasarım felsefesi okunabilirliğe (readability), dayanıklılığa (robustness), güvenilirliğe (reliability) ve sürdürülebilirliğe (maintainability) güçlü bir vurgu yapmaktadır.

1970 yıllarında kullanılan yazılım dilleri ALGOL 68 ve Pascal olduğu için Ada doğal olarak bu dillerden etkilenmiştir. Ada dilinin bazı temel özelliklerini aşağıdaki gibi sıralayabiliriz:

  • Güçlü Tür Denetimi: Ada, veri türlerini ve değişkenleri derleme aşamasında sıkı bir şekilde denetler. Bu sayede programlama hatalarının büyük çoğunluğu henüz derleme sırasında yakalanır ve önlenir. Bu özellik Ada’yı yüksek güvenlik ve hata toleransı gerektiren uygulamalar için ideal bir dil haline getirir.
  • Modülerlik: Ada dili güçlü modülerlik yapısı sayesinde büyük ve karmaşık sistemleri kolayca geliştirilebilir, yönetilebilir ve sürdülebilir hale getirir.
  • Nesne Yönelimli Programlama: Ada, nesne yönelimli programlama paradigmasını tam olarak destekler; bu sayede karmaşık yazılımların tasarlanması ve geliştirilmesi kolaylaşır.
  • Güvenlik: Ada, yüksek güvenlikli yazılımların geliştirilmesi için özel olarak tasarlanmıştır. Erişim kontrolü, veri gizliliği ve şifreleme gibi güvenlik özellikleri sunar.
  • Güvenli ve Korunmuş Bellek: Ada, bellek yönetimini otomatik olarak ele alır ve denetler. Böylece bellek sızıntıları ve diğer bellek hatalarının önüne geçilmiş olur. Bu da Ada programlarını daha güvenli ve sağlam hale gelmesine yardımcı olur.
  • Taşınabilirlik: Ada, işlemci ve işletim sistemlerinden bağımsız olarak programlanabilen bir dildir. Böylece Ada ile yazılan bir kod farklı platformlarda çalışabilmektedir. Bu da dilin endüstriyel uygulamalarda ve gömülü sistemlerde geniş bir kullanım alanına sahip olmasını sağlar.
  • Olağan Dışı Durumların İşlenmesi: Ada, hataların ve istisnai durumların sistemli bir şekilde ele alınması için kapsamlı bir olağan dışı durum işleme (exception handling) mekanizması sunar. Bu sayede programın beklenmedik durumlarda kapanması önlenir ve hatasız bir şekilde çalışmaya devam etmesi sağlanır.

Kullanım Alanları

Ada dili güçlü tür sistemi, paralel ve eş zamanlı işlem desteği, güvenli ve korunmuş bellek gibi birçok önemli özelliğe sahip olması sebebiyle pek çok farklı alanda kullanılmaktadır. Daha açık bir şekilde ifade etmek gerekirse Ada, sahip olduğu özellikler sayesinde yüksek güvenlik ve hata toleransı gerektiren uygulamalar için ideal bir dildir.

Ada’nın kullanıldığı bazı önemli sektörler aşağıdaki gibi örnek olarak verilebilir:

Ada Uygulamaları

Ada ile yazılan uygulamalar, ister FreeBSD, GNU/Linux veya macOS gibi bir işletim sisteminde, ister gerçek zamanlı bir işletim sisteminde (RTOS), isterse de işletim sistemi olmayan donanım üzerinde yütürülsünler hep aynı anlama (semantics) sahiptirler. Yukarıda da değinildiği gibi, Ada’nın geliştirilme amacı taşınabilirliğe hizmet etmesiydi ve buna uygun olarak tasarlandı. Sonuç olarak Ada yazılımları ARM, PowerPC, x86–64, MIPS ve RISC-V gibi pek çok farklı platform üzerinde çalışabilmektedir.

Ada, Ravenscar ve Jorvik gibi teknik özelliklere sahip bir dildir. Bu özellikler yazılımın performansını ölçmeye ve geliştirmeye yardımcı olurlar. Böylece verimlilik (efficiency), öngörülebilirlilik (predictability), analiz edilebilirlilik (analyzability), kilitlenmenin (deadlock) olmaması, öncelik değişiminin (priority inversion) olmaması ve gerçek zamanlı bir zamanlayıcı (real-time scheduler) desteğinden ötürü Ada, gömülü ve gerçek zamanlı (embedded and real-time) sistemler, sistem programlama vb. alanlarda kullanılmak amacıyla büyük şirketler tarafından tercih edilir.

Ada kullanılarak geliştirilen bazı uygulamalara örnek verecek olursak şunları sayabiliriz:

Merhaba Dünyalı!

Ada dilinde yazılmış basit bir program aşağıdaki gibidir:

Burada gözümüze hemen şunlar çarpmaktadır:

  • İlk satırda bulunan with anahtar kelimesi ile bir modül kullanılacağı belirtilmiş. Bunun bir benzeri, C ve C++ dillerinde #include ile kendini göstermektedir.
  • Ardından kullanılan use anahtar kelimesi ise C++ dilindeki using namespace ifadesine denk düşmektedir. Şayet use Ada.Text_IO; kullanılmamış olsaydı 8. satırda bulunan Put_Line yerine Ada.Text_IO.Put_Line yazılmalıydı.
  • Selamlama bir metottur (procedure); yani program başladığında çalıştırılacak ve bir takım işler yapacak olan kod parçasıdır. Bu metotun içeriği is anahtar kelimesi ile başlar ve end ile sonlanır.
  • Bir metot içerisinde kullanılacak olan öğeler (veri türleri (data types), değişkenler (variables) vb.) is ve begin anahtar kelimeleri arasında yazılır.
  • 8. satırda bulunan Put_Line da Selamlama gibi bir metottur fakat Ada.Text_IO modülünde bulunur ve oradan çağırılır. C dilindeki printf gibi düşünülebilir.
  • Yorum satırları -- ile başlar ve derleyici tarafından gözardı edilir.

Derleyici Kurulumu

Ada da diğer pek çok programlama dilleri (C, C++, Pascal v.s.) gibi derlenen bir dildir. Ada ile yazılmış bir programı derlemek için bir çok derleyici bulunmaktadır. Fakat biz gcc tabanlı derleyici kullanacağımızdan ötürü yalnızca FreeBSD ve bazı GNU/Linux işletim sistemleri için derleyici kurulumuna değineceğiz.

GNAT

GNAT, GNU derleyici koleksiyonun bir parçasını oluşturan Ada programlama dili için ücretsiz bir derleyicidir. Günümüzde (2024 yılında) GNAT, Ada’nın tüm versiyonlarını desteklemektedir ve GCC 11 versiyonundan itibaren Ada 2022 standardı için geliştirmeler yapılmaya devam etmektedir.

  • FreeBSD
pkg install gps-ide
  • Debian, Ubuntu, Linux Mint
sudo apt install gnat
  • Arch Linux
pacman -S gcc-ada

Eğer bir geliştirme ortamı yardımıyla hızlı bir başlangıç yapmak isterseniz GNAT Studio Community Edition arayüzünü buradan indirebilirsiniz.

GNAT Studio

Şayet Ada derleyicisini işletim sisteminize kurmak istemiyorsanız Docker ile devam edebilirsiniz. Başlangı için bu sayfada güzel bir döküman bulabilirsiniz.

Bunlara ek olarak, JDoddle internet sitesini kullanarak da Ada ile yazdığınız programları deneyebilirsiniz.

Ve son olarak, hem C hem de C++ için de kullandığım Compiler Explorer sitesini de Ada programlarını derlemek için kullanabilirsiniz. Tek yapmanız gereken üst menüdeki Templates kısmından Ada IDE özelliğini aktif etmeniz.

Alire: Ada LIbrary REpository

Alire, Ada/SPARK topluluğu tarafından bu diller için üretilmiş kaynak tabanlı bir paket yöneticisidir. Alire’i şu sayfadan indirerek kurabilirsiniz. İndirdiğiniz zip dosyasını açıp alr programının bulunduğu dizini PATH içinde tanımlamanız yeterli olacaktır:

$ export PATH="<PATH_TO_EXTRACTED>/bin/:$PATH"

Daha detaylı anlatım için, lütfen Alire dökümanını okuyunuz.

Kodu Derleme ve Programı Çalıştırma

Ada programları derleme işlemleri için adb ve ads uzantılı iki farklı dosya formatı kullanmaktadır. ads (ADa Definition) uzantılı dosya, tanımlamalar için kullanılır; örneğin C++ dilindeki header dosyaları gibi. adb (ADa Body) içerisinde ise çalışacak olan kodlar bulunur.

Yukarıda verdiğimiz örneği selamlama.adb dosyası olarak kaydedelim ve ardından gnatmake komutu yardımıyla derleyelim. Derleme işlemi tamamlandıktan sonra programımızı çalıştıralım:

$ gnatmake selamlama.adb
gcc -c selamlama.adb
gnatbind -x selamlama.ali
gnatlink selamlama.ali
$ ./selamlama
Merhaba Dünyalı!

Söz Dizimi Kuralları ve Semantiği

Ada programlama dili, okunabilir ve anlaşılır kod yazmayı amaçlayan katı bir söz dizime sahiptir. Aşağıda Ada’nın söz dizimine (syntax) ait bazı önemli noktalar vurgulanmıştır:

1. Değişken Tanımlama (Variable Declaration): Ada dilinde bir değişkenin türü tanım sırasında belirtilir ve söz dizimi şu kalıbı takip eder:

variable_name : data_type [:= value];

Örneğin;

-- Tamsayı türünde ve x adında bir değişken tanımla
x: Integer;

-- String türünde bir y değişkeni tanımla ve ilk değer olarak "Merhaba!" ile başla
y: String := "Merhaba!" ;

2. Metot (Procedure): Bir metot, esasında belirli görevi gerçekleştiren bir alt programdır. Metotlar herhangi bir değer döndürmezler ve yan etkileri nedeniyle çağırılırlar. Ada dilinde bir metot aşağıdaki gibi tanımlanır:

procedure <Procedure_Name> [(<Params>)] is
-- metotun öğeleri
begin
-- metotun içeriği
end <Procedure_Name>;

Bu tanımdan da anlaşılacağı üzere bir metot çağırılırken parametre alabileceği gibi parametresiz de olabilir.

3. Fonksiyonlar (Functions): Ada dilinde fonksiyonlar, metotlar gibi alt programdırlar; ancak bir farkla: Metotlar herhangi bir değer döndürmezken fonksiyonlar bir değer döndürürler. Bir fonksiyon aşağıdaki gibi tanımlanır:

function <Function_Name> [(<Params>)] return <retval> is
-- fonksiyonun öğeleri
begin
-- fonksiyonun içeriği
end <Function_Name>;

4. Kontrol Yapıları (Control Structures): Ada dili, yazılımcıya if , case , loop , while gibi çeşitli kontrol yapıları sağlar.

5. Yorum Satırları (Comments): Ada, yalnızca tek satırlık yorumları destekler. Eğer -- ile başlayan bir ifade varsa bu, satır sonuna kadar yorum olarak kabul edilir ve derleyici tarafından dikkate alınmaz.

6. Veri Türleri (Data Types): Ada, oldukça zengin veri türlerine sahip bir dildir ve yazılımcıya kendi türlerini oluşturmasına da olanak sağlar.

7. Paketler (Packages): Bir paket, ilgili veri türleri, alt programları ve diğer ilgili unsurları bir araya getiren yapısal birimdir. Ayrıca paketler, ilgili tanımları mantıksal ve yönetilebilir bir yapı halinde düzenleyen bir alan adı (namespace) sağlar.

8. Olağan Dışı Durumların İşlenmesi (Exception Handling): Ada, bir programın yürütülmesi sırasında ortaya çıkan olağan dışı durumların ele alınması konusunda güçlü bir desteğe sahiptir.

Ada ve Gelecek

Ada programlama dili, kullanımı pek yaygın olmamasına rağmen büyük şirketlerde ve ciddi projelerde gücünü gösteriyor. Örneğin 2018 yılında Scandinavian Real Heart adlı İsveçli şirket, Yapay Kalp adlı projede optimum güvenirlik ve kalite güvencesini dikkate alarak Ada’yı seçtiğini duyurdu. Kolorado Üniversitesi de NASA projelerinde cihazların kontrollerini, PathFinder uçuş yazılım orkestrasyonunu ve arayüz kısımlarını geliştirmek için C dili yerine Ada dilini kullanacağını duyurdu. Ayrıca bu kararın alınmasında, Ada’nın C kadar verimli olmasıyla birlikte nesne yönelimli tasarıma izin vermesinin, güvenirliliği artırmasının ve dilin bir çok özelliğinin rol oynadığı da belirtildi. Avrupa Uzay Ajansı da uzun süredir Ada’yı kullanıyor; bunun sebebi olarak da endüstriyel güvenirliğin en önemli faktör olması ve Ada’nın bu beklentileri sağladığını, bakım kolaylığı, gelişen taleplere hızlıca uyarlanabilirliği gibi dilin diğer özelliklerini savundu. Bunlara ek olarak, Ada dilinin hangi projelerde kullanıldığı hususunda şöyle bir liste de mevcut.

Diğer dilleri kullanan programcıların Ada’ya geçiş yapma ve uzmanlaşma konusundaki isteksizlikler anlaşılabilir bir durum. Fakat bunlar telafi edilebilir etkenlerdir. Örneğin; döküman eksikliği hızlı bir şekilde girediliyor. Bununla beraber internette örnek kod bulmak her geçen gün daha da kolaylaşıyor.

Sonuç olarak Ada, sağlamlığı, güvenliği ve uzun ömürlü yazılımlar geliştirme imkanları ile birçok alanda öne çıkan bir dildir. Gelecekte Ada’nın kullanımının artması ve daha da önemli bir yere sahip olması beklenmektedir.

--

--