Ada, tasarımı ve dili inşa eden dil
(iqiipi.com)- 1970’lerde ABD Savunma Bakanlığı’nın yazılım karmaşası içinde ortaya çıkan Ada, güçlü statik tip sistemi ve belirtim-uygulama ayrımını merkezine alan bir dildir
- Paket yapısı ve temsili gizleme ile tam kapsülleme sağlar; daha sonra Java, C# ve Go gibi modern dillerin modül sistemlerini etkilemiştir
- Anlamsal kısıt tipleri, generic’ler, eşzamanlılık (task), sözleşme tabanlı tasarım gibi kavramlar Ada’nın onlarca yıl önce sunduğu fikirlerdir; Haskell, Rust ve Swift bunları devralmıştır
- SPARK Ada, biçimsel doğrulama yoluyla veri yarışı ve mantıksal hataları bile ortadan kaldırır; havacılık, demiryolu ve savunma sistemleri gibi yüksek güvenilirlik gerektiren alanlarda kullanılır
- Ada popüler bir dil olmasa da, “sessizce doğru çalışan dil” olarak modern programlama dili tasarımının temel ilkelerini ortaya koyan bir temel niteliğindedir
Ada’nın doğuşu ve tasarım felsefesi
- 1970’lerin başında ABD Savunma Bakanlığı (DoD), silah, lojistik ve iletişim sistemlerinde 450’den fazla dil ve lehçenin bir arada kullanıldığı durumu inceledi
- Her sistem; birlikte çalışamama, bakımın yapılamaması ve özgün yazarların artık bulunmaması gibi sorunlara sahipti
- Bunun sonucunda yazılım tedarik krizi ortaya çıktı
- DoD, mevcut dillerden birini (COBOL, Fortran, PL/1 vb.) seçmek yerine, 5 yıllık bir gereksinim tanımlama süreci yürüttü
- Belgeler Strawman → Woodenman → Tinman → Ironman → Steelman şeklinde evrildi
- Steelman (1978), açık arayüz ayrımı, güçlü statik tip sistemi, yerleşik eşzamanlılık, tutarlı istisna işleme, makineden bağımsızlık, okunabilirlik ve doğrulanabilirlik talep ediyordu
- 1979’da dört ekip (Green, Red, Blue, Yellow) arasındaki yarışta, Jean Ichbiah liderliğindeki Green ekibi seçildi ve dilin adı Ada oldu
- İsim, Ada Lovelace anısına verildi ve dilin niyetini simgeliyordu
Paket yapısı ve kapsülleme
- Ada’nın merkezi yapısı paket (package) kavramıdır; belirtim (specification) ve gövde (body) fiziksel olarak ayrıdır
- Belirtim dışarıya açık sözleşmeyi, gövde ise uygulamayı tanımlar; derleyici bu ilişkiyi zorunlu kılar
- İstemci kodu, belirtimde yer almayan öğelere erişemez
- Bu yapı, modül sisteminin ilk örneği niteliğindedir ve sonraki diller bunu kısmen taklit etmiştir
- Java, Python, JavaScript, C, Go ve Rust’ın hiçbiri Ada’daki tam yapısal ayrımı eksiksiz biçimde uygulamaz
- private tipler yalnızca adlarını dışarıya açar; iç temsil tamamen opaktır
- İstemci, tipin iç yapısını bilemez ve yalnızca izin verilen işlemleri kullanabilir
- Bu, Java’daki
privateerişim denetiminden daha güçlü bir temsili gizleme (representational invisibility) sağlar
- Java ve C#, onlarca yıl boyunca kademeli olarak Ada düzeyindeki kapsüllemeye yaklaşmıştır
Tip sistemi ve anlamsal kısıtlar
- Ada, tip ile alt tip ayrımını matematiksel anlamda tanımlar
- Örneğin,
type Age is range 0 .. 150aralık kısıtına sahip ayrı bir tip oluşturur - Uyumsuz tipler arasında yanlış aktarım, derleme zamanı hatası olarak yakalanır
- Örneğin,
- 1983’te Ada’nın tip sistemi; C, Fortran ve Pascal’dan çok daha yüksek ifade gücüne sahipti
- Anlamsal kısıt tipleri ile alan kaynaklı hatalar önlenir
- Ayırt edicili kayıt (discriminated record), değere göre farklı alanlar taşıyan bir yapıdır
- Bu, modern dillerdeki sum type ya da cebirsel veri tipi (ADT) ile aynıdır
- Haskell, Rust, Swift, Kotlin ve TypeScript aynı kavramı onlarca yıl sonra benimsedi
Generic’ler ve çok biçimlilik
- Ada’daki generic yapılar; tip, değer, alt program ve paketi parametre olarak alabilen birimlerdir
- Derleme anında tip doğrulaması yapan statik çok biçimlilik (parametric polymorphism) sağlar
- C++ (1990), Java (2004), C# (2005) ve Go (2022) gibi diller, benzer özellikleri Ada’dan onlarca yıl sonra ekledi
- Java, type erasure nedeniyle çalışma zamanındaki tip bilgisini kaybeder
- Ada ise çalışma zamanında tip korumasını ve paket parametreleştirmesini de destekler
- Ada’nın generic yapısı, higher-kinded polymorphism düzeyinde ifade gücü sunar
- Bu, Haskell’in type class’larına, Rust’ın trait’lerine ve C++20’deki concepts’e benzer bir anlayıştır
Eşzamanlılık modeli ve güvenlik
- Ada, daha 1983’te dil seviyesinde eşzamanlılık (task) desteğini yerleşik olarak sunuyordu
taskbildirimi ve rendezvous iletişim modeliyle paylaşımsız durum üzerinden mesajlaşma gerçekleştirir- Go’daki channel yapısı da aynı CSP (Communicating Sequential Processes) ailesine aittir
- Ada 95, protected object kavramını getirdi
- Veri erişimini korur ve
procedure,function,entryolarak ayrılır - Otomatik bariyer koşulları ve kilitsiz senkronizasyon sağlar
- Veri erişimini korur ve
- SPARK Ada, biçimsel doğrulama ile veri yarışının, istisnaların, aralık hatalarının ve önkoşul/sonkoşul ihlallerinin olmadığını matematiksel olarak kanıtlar
- Rust’ın borrow checker’ı yalnızca bellek güvenliğini garanti ederken, SPARK mantıksal tutarlılığı da kanıtlar
Sözleşme tabanlı tasarım ve null güvenliği
- Ada 2012, sözleşmeleri (contracts) dili içine entegre etti
- Önkoşul (precondition), sonkoşul (postcondition) ve tip değişmezi (invariant) açıkça belirtilebilir
- SPARK araç zinciri bunları statik kanıtlama için kullanır
- Eiffel’in (1986) Design by Contract kavramını dil düzeyinde resmileştirdi
- C++, Java, Python ve Rust ise kısmi ya da kütüphane düzeyinde uygulamalarla sınırlı kaldı
- Ada 2005,
not nulltipini getirerek derleme zamanında null dışlama desteği sundu- Varsayılan davranış, çalışma zamanında
Constraint_Erroristisnası vererek güvenli biçimde başarısız olmaktır - Bu yaklaşım, C# 8.0’daki nullable reference yapısına benzer
- Varsayılan davranış, çalışma zamanında
İstisna işleme yapısı
- Ada 83, ilk kez yapısal istisna işleme (structured exception handling) sundu
- İstisnalar tanımlanır, sonra kullanılır; kapsam bazında ele alınır ve yayılım kuralları nettir
- Java’daki checked exception, Ada’dakinden daha gelişmiş bir biçimdir; çağıran tarafın istisnayı açıkça belirtmesini gerektirir
- Ada ise istisna yayılımına daha serbest yaklaşır
- Rust, istisnaları kaldırıp
Resulttipi tabanlı hata işleme modelini benimsemiştir- Ada’nın katkısı, istisna yayılımını yapısal ve öngörülebilir hale getirmiş olmasıdır
Annex ve standardizasyon yapısı
- Ada standardı, Annex adı verilen isteğe bağlı bir genişletme yapısına sahiptir
- Annex C~H; sistem, gerçek zamanlı, dağıtık, sayısal ve yüksek güvenilirlik alanlarına yönelik işlevleri tanımlar
- Derleyicilerin her Annex için ayrı sertifikasyon alması gerekir
- ACAA tarafından yürütülen ACATS testleri ile standarda uygunluk doğrulanır
- DO-178C havacılık yazılım sertifikasyonu için Ada’nın standart yapısı doğrudan kullanılabilir
- C/C++ ile de aynı sertifikasyon alınabilir, ancak Ada yapısal olarak daha uygundur
Ada’nın etkisi ve algı dengesizliği
- Ada, devlet güdümlü bir dil olduğu için Silikon Vadisi kültüründe fazla ilgi görmedi
- Bu durum, C tabanlı sade sözdizimini tercih eden kültürle tezat oluşturdu
- Ada’nın başarı örnekleri (havacılık, demiryolu, savunma sistemleri) başarısızlık üretmediği için daha az görünürdür
- Yüksek güvenilirlikli sistemler tartışma ya da olay üretmez
- Modern dillerin evrildiği yön, Ada’nın çoktan ortaya koyduğu ilkelere yakınsıyor
- Belirtim-uygulama ayrımı, statik tip doğrulama, dil seviyesinde eşzamanlılık, sözleşme tabanlı güvenlik gibi
- Ada bugün hâlâ uçak, demiryolu ve uzay aracı gibi yüksek güvenilirlikli sistemlerde kullanılmaya devam ediyor ve “sessizce doğru çalışan dil” olarak varlığını sürdürüyor
1 yorum
Hacker News yorumları
Ada'yı seviyorum. Ama tip işleme konuşulurken ML ailesi dillerin (ML, SML, CML, Caml, OCaml vb.) tamamen atlanmış olması şaşırtıcı
Bu diller yapısal tipleri derleyici düzeyinde destekliyor. Ada'nın sorunu ise PL/I, PHP, Perl gibi dilin kendisinin fazla büyük ve sözdiziminin karmaşık olmasıydı. Yazı bunu bir avantaj gibi sunuyor ama bence Annex olarak ayrılmış standart genişletmeler çok daha iyiydi. Eğer çekirdek dil küçük tutulup Annex merkezli gidilseydi, daha yaygın kullanılmış olabilirdi
Ada'nın göz ardı edilmesinin nedenlerinden biri derleyici fiyatlarının on binlerce dolar olmasıydı. Ücretsiz ya da açık kaynak derleyicilerin olmadığı dönemde, diğer diller bedavaya kullanılabiliyordu. Belirleyici etken buydu
Yazıyı okurken hem Ada hem de yazının kendisi ilgimi çekti ama birkaç olgusal hata gözüme battı. Mesela yalnızca Ada'nın implementasyon ile belirtimi tamamen ayırdığını söylüyordu; oysa JavaScript de ES6 modüllerinde private öğeler tanımlayabiliyor. Java'nın
privategörünürlüğüne dair açıklama da yanlıştı. Bu hatalar yüzünden yazının güvenilirliği düştüprivatetip tanımlarsanız dışarıdan iç alanlara erişilemez. Buna karşılık JavaScript'te herhangi bir nesneye serbestçe özellik ekleyip çıkarabilirsiniz. Yani Ada'nın derleme zamanı koruması JS ile kıyaslanamazsetAccessible(true)ile String'in içi bile değiştirilebilirYazının geneli iyiydi ama durmadan tekrarlanan “X dili bu özelliği Ada'dan daha geç aldı” cümlesi sıkıcıydı. Kod örnekleri olsaydı çok daha ikna edici olurdu
Bu Twitter hesabı 2026 Nisan'ında oluşturulmuş ve yazar belirtilmemiş. Kısa sürede muazzam bir üretkenlik göstermiş olması ve ismini açık etmemesi ilginç
“Tüm diller son 20 yılda sum type ekledi ama Ada'da en başından beri vardı” iddiası doğru, ama kökeni Ada değil. Hope dili ya da NPL daha önce vardı
UNIONanahtar sözcüğünü önerdi; sonrasında ALGOL 68, Hope, Miranda gibi dillerde gelişti. C'dekiunionise bu kavramla aynı şey değilYazıyı o kadar beğendim ki AI tarafından yazılmamış olmasını umdum, ama Twitter'a gönderilme hızı fazla yüksek olduğu için şüphelendim
ABD Hava Kuvvetleri başlangıçta Ada kullanmak istiyordu ama geliştirme gecikince JOVIAL kullandı. İlk projemi 1981'de JOVIAL ile yaptım; o sırada Ada hâlâ belirtim aşamasındaydı
Sitenin ana sayfasında “bu bir duruş değil, bir öneridir” ifadesi var; bunu gerekçe gösterip AI tarafından yazılmış bir site olduğu iddia ediliyor
Yazıda “JavaScript'in modül sistemi Ada'daki gibi tipin iç temsilini gizleyemez” deniyordu, ama aslında JS modülünde export etmezseniz gayet iyi gizleyebilirsiniz. Ada'nın burada özel olarak daha iyi olduğu ne, emin olamadım