Ada (programlama dili) - Ada (programlama dili). her şeyi bilmek istiyorum

Ada (programlama dili) - Ada (programlama dili).  her şeyi bilmek istiyorum
Ada (programlama dili) - Ada (programlama dili). her şeyi bilmek istiyorum

(Ada 2005), Eyfel (Ada 2012)

C++, Şapel, "Drago". , Eyfel , "Griffin" . , Java , Nim , teknenin arkasında paraşüt , PL/SQL , PL/PgSQL , yakut , Seed7 , "SPARforte" . , Kıvılcım, SQL/PSM, VHDL

Ada'nın özellikleri şunları içerir: güçlü yazım, modülerlik mekanizmaları (paketler), çalışma zamanı doğrulaması, paralel işleme (görevler, eşzamanlı mesaj iletimi, korumalı nesneler ve deterministik olmayan seçim ifadeleri), istisna işleme ve jenerikler. Ada 95, dinamik gönderim dahil olmak üzere nesne yönelimli programlama için destek ekledi.

Ada sözdizimi, temel işlemleri gerçekleştirme yollarının seçimini en aza indirir ve İngilizce'yi tercih eder anahtar kelimeler("veya" ve "ve sonra") karakterlere ("||" ve "&&" gibi) dönüştürün. Ada, '+', '-', '*' ve '/' temel aritmetik işleçlerini kullanır, ancak diğer karakterleri kullanmaktan kaçınır. Kod blokları, "bildir", "başla" ve "bitiş" gibi sözcüklerle ayrılır; burada "bitiş" (çoğu durumda) ardından kapattığı bloğun kimliği gelir (örneğin, eğer biterse, eğer... , döngü...döngü sonu). Koşullu engellemeler durumunda bu, hala sarkıyor C veya Java gibi diğer dillerdeki yanlış iç içe if ifadeleriyle eşleşebilen.

Ada, çok büyük yazılım sistemleri geliştirmek için tasarlanmıştır. Ada paketleri ayrı ayrı oluşturulabilir. Ada paketi spesifikasyonları (paket arayüzü) uygunluk kontrolü yapılmadan ayrı olarak da derlenebilir. Bu, uygulama başlamadan önce sorunların tasarım aşamasında erken tespit edilmesini sağlar.

Diğer bazı dillerde çalışma zamanına kadar yakalanamayacak veya kaynak koduna açık denetimlerin eklenmesini gerektirecek hataların önlenmesine yardımcı olmak için çok sayıda derleme zamanı denetimi desteklenir. Örneğin, sözdizimi, eşleşmeyen bitiş işaretlerinden kaynaklanan hataları önlemek için blokları kapatmak için açık bir ad gerektirir. Güçlü yazma, derleme zamanında veya çalışma zamanında standart yazılım hatalarının (yanlış parametreler, aralık ihlalleri, geçersiz referanslar, eşleşmeyen türler vb.) varlığını algılamanıza olanak tanır. Eşzamanlılık, dil belirtiminin bir parçası olduğundan, derleyici bazı durumlarda olası kilitlenmeleri algılayabilir. Derleyiciler ayrıca tanımlayıcılardaki yazım hatalarını, paketlerin görünürlüğünü, gereksiz bildirimleri vb. düzenli olarak kontrol eder ve hatanın nasıl düzeltileceği konusunda uyarılar ve yardımcı ipuçları sağlayabilir.

Ada ayrıca, ayrılmamış bellek erişimlerine, arabellek taşma hatalarına, aralık ihlallerine, hat dışı hatalara, dizi erişim hatalarına ve diğer algılanabilir hatalara karşı koruma sağlamak için çalışma zamanı denetimlerini destekler. Bu kontroller, yürütme verimliliği açısından devre dışı bırakılabilir, ancak genellikle verimli bir şekilde toplanabilir. Ayrıca, programın doğrulanmasına yardımcı olacak araçlar da içerir. Bu nedenlerden dolayı Ada, herhangi bir anormalliğin kaza sonucu ölüm, yaralanma veya ciddi mali kayıp gibi çok ciddi sonuçlara yol açabileceği kritik sistemlerde yaygın olarak kullanılmaktadır. Ada'nın kullanıldığı sistemlere örnek olarak aviyonik, ATC, demiryolları, bankacılık, askeriye ve uzay teknolojisi verilebilir.

Ada'nın dinamik bellek yönetimi, üst düzey ve tür açısından güvenlidir. Ada'nın genel veya türlenmemiş işaretçileri yoktur; ve örtülü olarak herhangi bir işaretçi türü bildirmeyin. Bunun yerine, tüm dinamik bellek tahsisi ve serbest bırakma, açıkça beyan edilen erişim türleri. Her erişim türünün karşılık gelen bir depolama havuzu bellek yönetiminin alt düzey ayrıntılarını işleyen; programcı varsayılan depolama havuzunu kullanabilir veya yenilerini tanımlayabilir (bu özellikle Tekdüze Olmayan Bellek Erişimi için geçerlidir). Hepsi aynı türü temsil eden ancak farklı depolama havuzları kullanan birkaç farklı erişim türü bile bildirebilirsiniz. Ayrıca, dil sağlar erişilebilirlik kontrolleri, hem derleme zamanında hem de çalışma zamanında, bu da şunu sağlar: erişim maliyeti belirttiği nesne tipini çözemez.

Dilin anlamı, erişilemeyen nesnelerin otomatik olarak çöp toplamasına izin verse de, gerçek zamanlı sistemlerde öngörülemeyen davranışlara yol açacağından, çoğu uygulama varsayılan olarak bunu desteklemez. Ada, bellek yönetimine dayalı sınırlı bir bölge biçimini destekler; Ek olarak, depolama havuzlarının yaratıcı kullanımı, sınırlı bir otomatik çöp toplama biçimi sağlayabilir, çünkü bir depolama havuzunu yok etmek aynı zamanda havuzdaki tüm nesneleri de yok eder.

hikaye

Ada programlama dilinin teknik içeriğinin iyileştirilmesi ve güncellenmesi için çalışmalar devam etmektedir. Ada 95'e teknik bir düzeltme Ekim 2001'de yayınlandı ve büyük bir değişiklik olan ISO/IEC 8652:1995/Amd 1:2007 9 Mart 2007'de yayınlandı. Stockholm'deki Ada-Europe 2012 konferansında, Ada Kaynakları Derneği (ARA) ve Ad-Europe tasarımın tamamlandığını duyurdu En son sürüm Ada programlama dili ve görünümleri başvuru Kılavuzu onay için Uluslararası Standardizasyon Örgütü'ne (ISO) gönderilir. ISO/IEC 8652:2012, Aralık 2012'de yayınlandı.

Diğer ilgili standartlar arasında ISO 8651-3:1988 bulunmaktadır. Bilgi işlem sistemleri, bilgisayar grafikleri, Grafik Çekirdek Sistemi (GCS) Bağlama Dili - Bölüm 3: Ada .

Dil yapıları

"Selam Dünya!" Ada'da

Söz diziminde böyle bir dilin tipik bir örneği Hello world programıdır: (hello.adb)

Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Merhaba başlıyor Put_Line("Merhaba dünya!" ); Merhaba bitirmek;

Bu program, serbestçe dağıtılan bir açık kaynak kullanılarak derlenebilir. kaynak kodu GNAT derleyicisini çalıştırarak

gnatmake merhaba.adb

Veri tipleri

Ada'nın tip sistemi, önceden tanımlanmış bir dizi ilkel tipe dayalı değildir, ancak kullanıcıların kendi tiplerini bildirmelerine izin verir. Bu ifade, tipin içsel temsiline değil, ulaşılmak istenen hedefin tanımına dayanmaktadır. Bu, derleyicinin uygun bellek boyutunu belirlemesini sağlar. bu türden ve derleme zamanı ve çalışma zamanı typedef ihlali olup olmadığını kontrol etmek için (yani, aralık ihlali, arabellek taşması, tür tutarlılığı vb.). Ada, aralıkta tanımlanan sayısal türleri, modulo türlerini, toplama türlerini (kayıtlar ve diziler) ve numaralandırma türlerini destekler. Erişim türleri, belirtilen türün bir örneğine başvuruyu tanımlar; türlenmemiş işaretçilere izin verilmez. Görev tipi dilinde sağlanan özel tipler ve korunan tipler.

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

tip Day_type 1 .. 31 aralığındadır; type Month_type 1 .. 12 aralığındadır; type Year_type 1800 .. 2100 aralığındadır; Saat türü mod 24'tür; type Hafta içi (Pazartesi , Salı , Çarşamba , Perşembe , Cuma , Cumartesi , Pazar ); type Tarih kayıttır Gün: Day_type; Ay: Ay_türü; Yıl: Year_type; bitiş kaydı;

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

alt tip Working_Hours, Saat aralığı 0 .. 12'dir; -- günde en fazla 12 saat çalışmak alt tip Working_Day Hafta içi aralığıdır Pazartesi .. Cuma ; -- Çalışılacak gün sayısı Work_Load : Working_Hours sabit dizisi (Working_Day ) -- örtük tip bildirimi := (Cuma => 6 , Pazartesi => 4 , diğerleri => 10 ); -- başlatma ile çalışma saatleri için arama tablosu

Türler gibi değiştiricilere sahip olabilir sınırlı, soyut, özel vesaire. Özel türlere yalnızca erişilebilir ve kısıtlanmış türler yalnızca onları tanımlayan paket içinde değiştirilebilir veya kopyalanabilir. Ada 95, nesne yönelimli tip uzantısı için ek özellikler ekler.

Kontrol Yapıları

Ada'nın da sunduğu korunan nesneler Karşılıklı dışlama için. Korunan nesneler monitör benzeri bir tasarımdır, ancak sinyalleşme için koşul değişkenleri yerine korumalar kullanır (koşullu kritik alanlara benzer). Korumalı nesneler, veri kapsüllemesini ve monitörlerden güvenli karşılıklı dışlamayı ve koşullu kritik alanlardan girişi korumayı birleştirir. Klasik monitörlere göre ana avantajı, koşul değişkenlerinin sinyalleşme için gerekli olmaması ve yanlış kilitleme semantiği nedeniyle olası kilitlenmelerden kaçınmasıdır. Görevler gibi, güvenli bir yerleşik kısıtlı türdür ve ayrıca bir parça bildirimi ve gövdesi vardır.

Korunan bir nesne, kapsüllenmiş kişisel verilerden (yalnızca korunan nesne içinde erişilebilen) ve birbirini dışlaması garanti edilen prosedürlerden, işlevlerden ve kayıtlardan oluşur (tek istisnası, yalnızca korunan nesne içinde erişilebilir olması gereken işlevlerdir). yan etki Bu şekilde ücretsiz ve diğer işlevlerle aynı anda çalışabilir). Korunan bir nesneyi çağırma görevi, şu anda aynı güvenliği sağlanabilir nesne üzerinde başka bir görev yürütülüyorsa bloke eder ve bu diğer görev, güvenliği sağlanabilir nesneden ayrıldığında serbest bırakılır. Engellenen görevler, sipariş edilen varış saatinin korunan nesnesinde kuyruğa alınır.

Korunan nesne verileri, prosedürlere benzer, ancak ek olarak güvenlik. Koruma yanlış olarak değerlendirirse, çağıran görev bloke edilir ve o girdinin kuyruğuna eklenir; Artık güvenli hale getirilebilir nesneye başka bir görev kabul edilebilir, çünkü şu anda görevlerin hiçbiri güvenli hale getirilebilir nesne içinde çalışmıyor. Bir görev korunan bir tesisten çıktığında gardiyanlar abartılır, çünkü bu, gardiyanların puanının değiştirilebileceği tek zamandır.

Kayıt aramaları olabilir yeniden kuyruğa alındı aynı imzaya sahip diğer girişler için. Yeniden kuyruğa alınan görev engellenir ve hedef girdinin kuyruğuna eklenir; bu, güvenli hale getirilebilir nesnenin serbest bırakıldığı ve başka bir görevin kabul edilmesine izin verdiği anlamına gelir.

Seçme Ada'daki operatör, bloke olmayan oturum açma çağrılarını ve kabullerini, belirleyici olmayan kayıt seçimini (ayrıca korumalı), zaman aşımlarını ve iptalleri uygulamak için kullanılabilir.

Aşağıdaki örnek, Ada'daki bazı paralel programlama kavramlarını göstermektedir.

Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Trafik, Airplane_ID tipindedir, aralık 1'dir. 10; -- 10 uçak görev türü Uçak (ID : Airplane_ID ); -- başlatma parametresi olarak ID ile uçakları temsil eden görev type Airplane_Access erişim Airplane'dir; -- Uçak korumalı tip Pist için referans tipi: -- paylaşılan pist (eşzamanlı erişime izin vermek için korumalı) giriş Assign_Aircraft (ID : Airplane_ID ); -- tüm girişler birbirini dışlama garantilidir giriş Cleared_Runway (ID : Airplane_ID ); Wait_For_Clear girişi; özel Sil : Boolean := True ; -- korunan özel veriler - genellikle bir bayraktan daha fazlası... Pist sonu; Runway_Access türü, tüm Pistlere erişimdir; -- hava trafik kontrolörü görevi, kalkış ve iniş taleplerini alır görev türü Denetleyici (My_Runway : Runway_Access ) -- senkronize mesaj geçişi için görev girişleri request_Takeoff girişi (ID: Airplane_ID içinde; Takeoff: Runway_Access dışında); request_Approach girişi (ID: Airplane_ID içinde; Approach: Runway_Access dışında); Son Denetleyici; -- örneklerin tahsisi Runway1 : takma Runway ; -- bir koşu yolu başlat Controller1 : Controller(Runway1 " Access ); -- ve onu yönetmek için bir denetleyici ------ yukarıdaki türlerin uygulamaları ------ korumalı gövde Pist, Temizle olduğunda Assign_Aircraft (ID : Airplane_ID ) girişidir -- giriş koruması - koşul doğru olana kadar arama görevleri engellenir startClear := Yanlış ; Put_Line (Airplane_ID " Image (ID ) & " on pist " ); end ; Cleared_Runway (ID : Airplane_ID ) girişi Clear değilken başlar Clear := True ; Put_Line (Airplane_ID " Image (ID ) & " temizlenmiş pist " ); son ; Wait_For_Clear girişi, Clear start null olduğunda; -- burada herhangi bir şey yapmanıza gerek yok - bir görev yalnızca "Temizle" doğruysa girebilir son ; Pist sonu; görev gövdesi Denetleyici başlangıç ​​döngüsüdür My_Runway . Wait_For_Clear ; -- pist müsait olana kadar bekleyin (çağrı engelleme) seçme -- iki tür istek için bekleyin (hangisi önce çalıştırılabilirse) request_Approach " sayısı = 0 => olduğunda -- koruma bildirimi - yalnızca Request_Approach'ta sırada bekleyen görev yoksa kabul edin Request_Takeoff'u kabul et (ID: Airplane_ID içinde; Takeoff: Runway_Access dışında) yap - My_Runway senkronize bölümünün başlangıcı. _Aircraft(ID); -- yedek pist (korunan nesne meşgulse veya giriş koruması yanlışsa potansiyel olarak aramayı engeller) Kalkış := My_Runway ; -- uçağa hangi pisti söylemek için "out" parametre değerini atayın request_Takeoff'u sonlandırın; -- senkronize parçanın sonu veya Request_Approach'ı kabul edin (ID: Airplane_ID'de; Approach: Runway_Access'te) My_Runway yapın. _Aircraft(ID); Yaklaşma := My_Runway ; request_Approach'u sonlandırın; veya -- arayabilecek görev kalmamışsa sonlandırın sonlandırmak; bitiş seçimi; son döngü; son ; görev gövdesi Airplane is Rwy : Runway_Access ; Denetleyici1'i başlatın. Request_Takeoff(ID, Rwy); -- Bu çağrı, Denetleyici görevi kabul bloğunu kabul edip tamamlayana kadar engeller Put_Line (Airplane_ID " Image (ID ) & " kalkış..." ); gecikme 2.0 ; Rwy . Cleared_Runway (ID ); -- Rwy'deki "Temizle" artık yanlış olduğundan ve korunan nesnenin içinde başka hiçbir görev olmaması gerektiğinden çağrı engellenmeyecek gecikme5.0 ; -- biraz uçun... döngü seçimi -- bir pist Denetleyici1 talep etmeye çalışın . Request_Approach(ID , Rwy ); -- bu bir engelleme çağrısıdır - kontrolör kabul bloğuna ulaştığında çalışır ve tamamlandığında geri dönerçıkış; -- çağrı geri dönerse iniş için uygunuz - seçme bloğunu bırakın ve devam edin... veya gecikme 3.0 ; -- zaman aşımı - 3 saniye içinde yanıt gelmezse, başka bir şey yapın (her şey sonraki blokta) Put_Line (Airplane_ID " Image (ID ) & " in holding pattern" ); -- basitçe bir mesaj yazdırın end select ; end loop ; delay 4.0 ; -- inişe yaklaşın... Put_Line (Airplane_ID " Image (ID ) & " dokundu aşağı!"); Rwy. Cleared_Runway(ID); -- piste burada işimizin bittiğini bildirin. son ; Yeni_Uçak: Uçak_Erişimi; Airplane_ID " Menzil döngüsünde I için başla -- birkaç uçak görevi oluşturun Yeni_Uçak := yeni Uçak(I); -- oluşturulduktan hemen sonra çalışmaya başlayacak gecikme4.0 ; son döngü; Son Trafik ;

Pragmalar

Bir pragma, derlenmiş çıktıyı özel olarak işlemek için derleyiciye bilgi ileten bir derleyici yönergesidir. Bazı pragmalar dile yerleşiktir, diğerleri ise uygulamalardır.

Derleyici pragmalarının yaygın kullanımına ilişkin örnekler, çalışma zamanı türü denetimi veya dizi dizini sınır denetimi gibi belirli özellikleri devre dışı bırakır veya derleyiciye bir işlev çağırmak yerine satır içi nesne kodu talimatını verir (C/C++'da satır içi işlevlerle yapar).

  • APSE - Ada'da yazılım geliştirmeyi desteklemek için bir programlama ortamı belirtimi
  • Ravenscar profili, Ada'nın görev açısından kritik zor gerçek zamanlı bilgi işlemi güvence altına almak için tasarlanmış çoklu görev özelliklerinin bir alt kümesidir.
  • SPARK (programlama dili) - Ada'nın çok sınırlı bir alt kümesinden oluşan, bileşenin istenen davranışını ve çalışma zamanında bireysel gereksinimleri açıklayan meta bilgilerle açıklamalı programlama dili

Konuyla ilgili özet:

ada



Plan:

    giriiş
  • 1 Dil özellikleri
  • 2 "Merhaba dünya!" cehennemde
  • 3 Tarih
  • 4 SSCB ve Rusya'da Ada
  • 5 Eleştiri
  • 6 Dağıtım, beklentiler
  • 7 Ada ile yazılmış işletim sistemleri
    • 7.1 Gömülü sistemler
    • 7.2 Geliştirme aşamasındaki sistemler
    • 7.3 Artık mevcut olmayan sistemler
  • 8 Cehennem derleyicileri
  • 9 Türetilmiş diller
  • 10 İlginç gerçekler
  • notlar
    Edebiyat

giriiş

ada (ada), ABD Savunma Bakanlığı tarafından gömülü sistemler (yani, otomatikleştirilmiş kompleksler için gerçek zamanlı kontrol sistemleri) için birleşik bir programlama dili geliştirmek üzere üstlenilen bir projenin sonucu olarak 1979-1980'de oluşturulan bir programlama dilidir. Bu, her şeyden önce askeri tesisler (gemiler, uçaklar, tanklar, füzeler, mermiler vb.) için yerleşik kontrol sistemleri anlamına geliyordu. Geliştiricilerin evrensel bir dil oluşturma görevi yoktu, bu nedenle Ada'nın yazarları tarafından verilen kararlar seçilen konu alanının özellikleri bağlamında alınmalıdır. Dil, Ada Lovelace'in adını almıştır.


1. Dilin özellikleri

1983 yılında standardize edilen orijinal haliyle Ada, üst düzey programlama araçlarını içeren yapılandırılmış, modüler bir programlama dilidir. paralel süreçler. Ada'nın sözdizimi, Algol veya Pascal gibi dillerden miras alınmıştır, ancak genişletilmiş ve daha titiz ve mantıklı hale getirilmiştir. Ada kesin olarak yazılmış bir dildir, türleri olmayan nesnelerle çalışmayı hariç tutar ve otomatik tür dönüştürmeleri mutlak minimuma indirilir. 1995 standardında dile temel nesne yönelimli programlama araçları eklendi; 2007 standardında bu araçlar tamamlandı, yani modern Ada nesne yönelimli bir programlama dilidir.

Sözdizimi özellikleri şunları içerir:

  • Dil, büyük/küçük harfe duyarsızdır.
  • Programlar modülerdir, modüller arasında tanımların içe-dışa aktarılmasını kontrol eden mekanizma iki farklı direktif içerir: biri başka bir modülü (ile) bağlamak için, diğeri tanımlarını içe aktarmak (kullanmak) için. İçe aktarma sırasında modülü yeniden adlandırmak da mümkündür (yeniden adlandırma) - bu seçenek, programcının paketi belirlemesi için daha uygun olan tanımlayıcıları kullanmanıza olanak tanır.
  • Paketler (modül türlerinden biri) bir başlık ve kişisel bir bölüm içerebilir - içindekiler dışa aktarılmaz ve diğer modüller tarafından kullanılamaz.
  • Genelleştirilmiş (özel) modüllerin mekanizması desteklenir: belirli bir tür belirtmeden genelleştirilmiş veri işleme algoritmalarını tanımlamaya izin veren paketler, prosedürler ve işlevler.
  • Hem yerleşik hem de programcı tarafından oluşturulmuş gelişmiş tipte bir sistem. Yeni türler oluşturmanın birçok yolu vardır, dil iki farklı kavramı destekler: "alt tür" ve "türetilmiş tür". Bir türün ve bir alt türün değişkenleri uyumludur, bir türün değişkenleri ve onun türetilmiş türü uyumlu değildir.
  • İstisna işleme tesisleri.
  • Prosedürleri ve işlevleri çağırmanın gelişmiş yolları: giriş ve çıkış parametreleri desteklenir, gerçek parametreler resmi adlarla keyfi bir sırayla, varsayılan değerlerle parametreler iletilir.
  • Prosedürlerin, fonksiyonların ve işleçlerin yeniden tanımlanması desteklenir - aynı ada ancak farklı imzalara (parametre türleri ve sayısı) sahip bir yordamın, işlevin veya işlecin birkaç çeşidinin oluşturulması.
  • Dile yerleşik paralel programlama destek yapıları: "görev" (paralel olarak yürütülen program parçası), "görev girişi" (paralel görevleri senkronize etme ve iletme aracı) kavramları desteklenir, buluşma mekanizması desteklenir (etkileşim için protokol) bunlardan birinin girişi yoluyla paralel görevler ), koşullu iplikler arası etkileşimi düzenlemek için bir SELECT seçim ifadesi vardır (bir buluşma için hazır olma durumuna ve diğer bazı koşullara bağlı olarak etkileşim kurulacak paralel bir görev seçme). Prensip olarak, dilde mevcut olan paralel programlama araçları, aşağıdakiler gibi harici araçlara başvurmadan paralel işlem gerektiren geniş bir görev sınıfını çözmek için yeterlidir. ek kütüphaneler veya işletim sistemi API'si.

Güvenilirlik gereksinimlerini karşılamak için dil, derleme aşamasında mümkün olduğu kadar çok hata tespit edilecek şekilde tasarlanmıştır. Ayrıca dilin geliştirilmesindeki gerekliliklerden biri de program metinlerinin yazma kolaylığı zararına da olsa en kolay okunabilirliğiydi. Bu yaklaşımın sonucu, biraz "ağır" bir sözdizimi ve en yaygın endüstriyel dillerde (C ve C ++) bulunmayan ve genellikle profesyonel programcılar tarafından gereksiz olarak algılanan birçok kısıtlamaydı, örneğin, aynı güçlü yazıyor. Bu, Ada'nın karmaşık, belirsiz ve kullanımı elverişsiz bir dil olduğu fikrinin oluşmasına yol açtı.


2. "Merhaba dünya!" cehennemde

"Merhaba dünya!" Vikikitap'ta görülebilir. Farklılıklar, Put_Line kitaplık işlevini kullanma ihtiyacından kaynaklanmaktadır - bu dilde bu kullanımı düzenlemenin üç farklı yolu vardır.

Ada.Text_IO ile; prosedür Merhaba Ada.Text_IO kullanmaktır; begin Put_Line("Merhaba dünya!") ; Merhaba bitirmek;

Burada, Put_Line işlevini uygulamak için, onu içeren Ada.Text_IO paketi, işlevi nitelik olmadan ada göre çağırmayı mümkün kılan - çağrıda işlevi içeren paketin adını belirterek - use yapısı kullanılarak içe aktarılır.


3. Tarih

Dilin gelişimi, ABD Savunma Bakanlığı tarafından düzenlenen ve finanse edilen uluslararası bir yarışmanın parçası olarak gerçekleştirildi. Geliştirmenin amacı, askeri departman tarafından görevlendirilen projelerin geliştirilmesi için, özellikle gömülü askeri sistemlerin ve büyük askeri bilgisayarların (Intel'den iAPX 432 işlemciye dayalı) geliştirilmesi için tek bir dil haline gelebilecek bir programlama dili elde etmekti. ). Çalışma, 1975 yılında, bu tür sistemlerin geliştiricilerini tamamen tatmin edecek bir dil için bir dizi gereksinimin oluşturulmasıyla başladı. "Straw" kod adı altında yayınlanan ilk gereksinimler listesi, inceleme için bir dizi kuruluş ve firmaya sunulmuş, iki yıl boyunca sürekli olarak rafine edilmiş ve sonunda "Çelik" adlı nihai bir belgeye dönüşmüştür.

Gereksinimlerin oluşturulması tamamlandıktan sonra, mevcut programlama dillerinden hiçbirinin gereksinimleri yeterince karşılamadığını gösteren bir analiz yapıldı ve bu nedenle yeni bir dil geliştirilmesine karar verildi. 1977'de yaratılması için bir yarışma ilan edildi, geliştiricilerden üç dilden birini temel almaları istendi: Pascal, Algol-68 veya PL / 1.

Yarışmaya sunulan 15 projeden 4'ü seçildi (hepsi Pascal'a göre). Bu projeler daha da geliştirilmesi için gönderildi. Bir sonraki aşamada 4 projeden ikisi seçildi ve bunlardan bir başka revizyondan sonra biri seçildi. Bu dile "Ada" adı verildi - Fransız Jean Ishbia liderliğindeki onu geliştiren grup, dile programlar geliştiren şair J. Byron'ın kızı Augusta Ada Kralı Lovelace'ın (1815-1852) onuruna adını verdi. Babbage'nin bilgisayarı ve dünyadaki ilk programcı olarak kabul ediliyor.

1983'te dil, ANSI tarafından resmi olarak standartlaştırıldı. ANSI/MIL-STD-1815-A-1983 dil standardı 17 Şubat 1983'te onaylandı. ABD Savunma Bakanlığı, "Ada" adını tescilli bir ticari marka haline getirerek, standartlara uygunluk için resmi test prosedürünü geçemeyen dil çevirmenlerinin serbest bırakılmasını yasakladı. Prosedür, test edilen derleyici aracılığıyla çok sayıda (1000'den fazla) test programının (ACVC seti olarak adlandırılır) çalıştırılmasından oluşuyordu ve bunların her biri için test sonucu açık bir şekilde belirlendi: ya başarılı bir derleme ya da çok belirli bir hata mesajı. Test, "ya hep ya hiç" ilkesine göre gerçekleştirildi - en az bir test durumunun işlenmesinde bir hata varsa, derleyicinin testi geçmediği kabul edildi ve test yalnızca donanım ve yazılım platformunda geçerliydi üzerinde gerçekleştirilmiştir. Böylece Ada dilinin "versiyonlarının" veya "lehçelerinin" oluşma olasılığı daha tomurcuk halinde ortadan kalktı.

1987'de Ada dili ISO tarafından resmi olarak standardize edildi. O zamandan beri, ABD Savunma Bakanlığı dili halka açık hale getirdi.

1990'da dünyada Ada dil standardına karşılık gelen yaklaşık 200 derleyici vardı.

1995 yılında Ada95 olarak bilinen yeni bir Ada standardı kabul edildi. Araçlar dile getirildi nesne programlama. Ek olarak, dil, diğer dillerde yazılmış programlarla etkileşim için daha gelişmiş araçlarla desteklendi.

Mart 2007'de Ada standardında yapılan değişiklikler yayınlandı. Esas olarak nesne yönelimli programlamanın olasılıklarına değindiler: arayüzler tanıtıldı, çoğu hibrit dilde ortak olan yöntem çağrısı sözdizimi benimsendi ve bir dizi ekleme yapıldı.


4. SSCB ve Rusya'da Ada

SSCB'de, 1980'lerde, Devlet Bilim ve Teknoloji Komitesi bünyesinde Cehennemin Dili Üzerine Çalışma Grubu örgütlendi. Grup, Ada'nın diliyle ilgili tüm açık (ve söylentilere göre gizli istihbarat tarafından elde edilen) verileri incelemekle meşguldü ve Ada'yı SSCB'de geliştirme ve kullanma olasılığını ve uygunluğunu araştırdı. Bu grubun faaliyetleri, 80'lerin sonunda, SSCB'de kullanılan hemen hemen tüm bilgisayarlar için Ada derleyicilerinin geliştirilmesine öncülük etti. Ada dili üzerine birçok kitap Rusça olarak yayınlandı.

Moskova Devlet Üniversitesi'nde Ada çevirmenlerinin standartlara uygunluk testi için kendi paketlerini oluşturma çalışmaları yürütülmüştür. Leningrad Devlet Üniversitesi'nde Ada sisteminin oluşturulması için daha önce Algol-68'in uygulanması için geliştirilen ve Ada'ya aktarılan Pallada sistemi kullanıldı. Sistem entegre bir geliştirme ortamı, bir derleyici, bir metin düzenleyici, bir hata ayıklayıcı, kitaplıklar, bir sürüm kontrol sistemi ve bir komut yorumlayıcı içerir.

SSCB'nin dağılmasından sonra Ada'nın dağıtımıyla ilgili çalışmalar fiilen kesintiye uğradı. Doğru, Ada'da (Savunma Bakanlığı, Sivil Havacılık Bakanlığı ve Eğitim ve Bilim Bakanlığı'nda) üç yazılım geliştirme programı kabul edildi, ancak bunların gelişimi yavaş ve koordinesiz. Sonuç olarak, Ada dili Rusya'da çok az biliniyor, çoğu modern Rus programcı onu "ölü bir dil" olarak görüyor ve onun hakkında hiçbir şey bilmiyor. Ada, Rusya ve BDT'de bireysel meraklılar tarafından kullanılmaktadır. Ancak, dil endüstriyel yazılım geliştirme için kullanılır. Ada üzerinde geliştirilmiş ve Rusya'da çalışan birkaç proje var. Aralarında:

  • RF Savunma Bakanlığı'nın belgesel iletişim istasyonu. Ana görev, Rusya Federasyonu Savunma Bakanlığı'nın veri iletim ağlarında belgesel bilgi alışverişini sağlamaktır. Yazılım ve donanım kompleksi, "Bilgisayar Mühendisliği ve Otomasyon" Üretim Organizasyonu tarafından ortaklaşa geliştirildi ( Donanım) ve Kuzey Kafkasya hava trafik kontrol merkezi "Strela"nın pist dışı sektöründen bir grup programcı. Kompleksin yazılımı TBMM derleyicisi kullanılarak Ada programlama dili ile yazılmıştır. Dağıtılmış bilgi işlem, ek bir GLADE bileşeni tarafından desteklenir.
  • Rus amfibi uçağı için standart uçuş navigasyon ve iletişim ekipmanı kompleksi Beriev Be-200. Geliştirme, Zhukovsky'deki Havacılık Ekipmanları Araştırma Enstitüsü tarafından Amerikan şirketi Allied Signal, Florida, ABD ile birlikte gerçekleştirildi. DDC-I şirketinin Intel 80486 platformundaki Ada sistemlerinin geliştirme kompleksi kullanıldı.

5. Eleştiri

Başlangıcından bu yana Ada, programlama dili geliştirme alanındaki bazı tanınmış otoriteler tarafından öncelikle sözdiziminin karmaşıklığı ve büyük hacmi nedeniyle eleştirildi. Dil özellikle Charles Hoare ve Niklaus Wirth (projeleriyle bu yarışmaya katılan ancak ilk aşamadan sonra ayrılan) ve Edsger Dijkstra tarafından eleştirildi.

Dijkstra, Ada kadar karmaşık bir dilin görülebileceğinden ve yönetilebileceğinden şüpheliydi.

Ada bir standart yayınlayacaksa, bunun açık bir şekilde belgelenmesi arzu edilir. En az iki grup bunu yapmaya çalıştı; sonuç olarak, her ikisi de yaklaşık 600 sayfalık resmi metin üretti. Bu, her iki belgenin de aynı dili tanımladığını kesin olarak belirlemenin imkansız olduğundan emin olmak için gerekenden çok daha fazlasıdır. Bu iki belgenin görünürdeki yönetilemezliğindeki hata, onları derleyen iki grupta, benimsedikleri biçimcilikte değil, yalnızca dilin kendisinde yatmaktadır: resmi bir tanım sağlamadan, geliştiricileri yönetilemez bir canavar sunduklarını gizleyebilirler mi? . Ada'nın programlama problemlerini azaltacağı ve tasarımlarımızın güvenilirliğini kabul edilebilir sınırlara çıkaracağı, ancak askeri geçmişi olanların inanabileceği masallardan sadece biri.

Bilgisayar Biliminde Bilim Kurgu ve Bilimsel Gerçeklik (Edsger W. Dijkstra, EWD952)

Hoare, "çıngıraklar ve ıvır zıvırların güvenilirlik ve emniyetin temel gereksinimlerinin önüne geçmesinden" duyduğu üzüntüyü dile getirdi ve "Ada derleyicisinde tespit edilemeyen bir hata nedeniyle yanlış yöne uçan bir füze donanmasına" karşı uyarıda bulundu. Niklaus Wirth daha çekingen ama aynı zamanda olumsuz konuştu. “Programcıya çok fazla şey atılıyor. Ada'nın üçte birini çalışmış birinin normal çalışabileceğini düşünmüyorum. Dilin tüm ayrıntılarına hakim değilseniz, gelecekte onlara rastlayabilirsiniz ve bu, hoş olmayan sonuçlara yol açacaktır. Ada'nın geliştirme ekibi lideri Jean Ishbia, Wirth'e "saygı ve hayranlığını" ifade ederken, "Wirt karmaşık sorunlara basit çözümlere inanır. Ben böyle mucizelere inanmıyorum. Karmaşık sorunlar, karmaşık çözümler gerektirir.”

Derleyicinin dil standardına uygunluğunu test ederek kontrol etme prosedürü de şüphe uyandırır. Genel değerlendirmelerden, testin tutarsızlıkları bulabileceği ancak doğruluğu garanti edemeyeceği açıktır. Bunun pratik bir teyidi, sertifikalı derleyicilerin farklı bir dizi testte test edildiğinde .

Ada'nın destekçileri, büyük projelerde büyük ve karmaşık bir dilin tek alternatifinin, Ada'nın kurtulmak için icat edildiği, kaçınılmaz olarak uyumluluk sorunları yaratan birkaç kompakt dilin kullanılması olduğunu savunuyorlar. Ayrıca, Ada geliştirmedeki karmaşıklık kavramının yalnızca kısmen doğru olduğunu belirtiyorlar: Ada'da basit bir program yazmak, C gibi diğer daha az resmi dillere göre daha fazla zaman alıyor, ancak programlarda, özellikle büyük ve karmaşık programlarda hata ayıklama ve bakım büyük ölçüde basitleştirilmiştir. Rational Software Corporation'dan Stephen Zeiger'e göre, Ada'da yazılım geliştirme genellikle %60 daha ucuzdur ve geliştirilen program C dilini kullanmaktan 9 kat daha az kusur içerir.


6. Dağıtım, beklentiler

Uygulamada, orduda ve gömülü sistemlerin ilgili gelişmelerinde kendisine yönelik nişi işgal eden Ada'nın ne Batı'da, ne SSCB'de ne de Sovyet sonrası alanda bu nişin ötesine geçmediği ortaya çıktı. . Bunun için birçok nedeni vardır. Dilin muhalifleri, karmaşıklığına ve eksikliklerine dayanır, destekçiler, her şeyden önce, dilin ortaya çıkışının nesnel koşulları ve uygulama sürecinin olumsuz yönleri hakkında konuşurlar. Moskova Devlet Üniversitesi Araştırma ve Geliştirme Merkezi'nde kıdemli araştırmacı, dil standardı üzerine ISO çalışma grubunun Ada dili uzmanı AdaCore EU danışmanı S. I. Rybin'in görüşü ilginç. Ada'nın başarısızlıklarını iki ana nedene borçlu olduğuna inanıyor:

  • Dilin tasarımı sırasında Pentagon, tüm yeni yazılımların yalnızca Ada'da oluşturulacağını varsaydı. Bu nedenle Ada, diğer dillerdeki programlarla etkileşim kurmanın son derece ilkel yollarını aldı. Uygulamada, genel olarak her şeyi Ada'da yazmanın gerçekçi olmadığı ortaya çıktı (sadece diğer dillerdeki hazır geliştirmelerle etkileşime ihtiyaç duyulduğu için). Bu nedenle, “yalnızca Ada'da yazma” gibi katı bir zorunluluğun olmadığı sektörlerde, çok dilli ortama daha uyumlu olan diğer diller tercih edildi. 1995 standardında, diğer dillerle birlikte çalışabilirlik sorunu çözüldü, ancak zaman kaybedildi.
  • Paradoksal olarak Ada'nın yayılması Pentagon'un mali ve örgütsel desteğiyle engellendi. Ordu için yazılan Ada programları, mevcut en güçlü bilgi işlem teknolojisi üzerinde çalışıyordu, bu nedenle derleyici geliştiricileri önce ACVC testlerini geçmeye, ancak o zaman derleyicinin ve oluşturduğu kodun verimliliğine önem verdiler. 1980'lerin başında mikrobilgisayar patlaması başladı ve ortak diller (Pascal, C, BASIC) için çevirmenler, düşük güçlü sistemler için hızla optimize edildi. Ada için böyle bir modernizasyon için bir teşvik yoktu, sonuç olarak birkaç yıl içinde dünyanın bilgisayar parkının büyük bir kısmı haline geldiler. kişisel bilgisayarlar kendilerini kaliteli bir Ada tercümanı olmadan buldular. Doğal olarak Ada bu pazar segmentini kaybetti. Nispeten yakın zamanda TBMM derleyicisi, kaliteli ve verimli ortaya çıktı, ancak burada da zaman kaybedildi.

Şu anda Ada, güvenilirliği artırılmış büyük gömülü sistemlerin geliştirilmesinde oldukça sağlam bir şekilde kurulmuştur, burada neredeyse hiç güçlü rakibi yoktur. Dilin kullanımı oldukça yavaş da olsa giderek artıyor. Bazı temkinli tahminlere göre [ ] , donanım daha ucuz hale geldikçe ve daha karmaşık yazılımlara sahip gömülü sistemler çoğaldıkça, Ada yazılımı pazarı ve dolayısıyla dilin kullanımı önemli ölçüde büyüyebilir.

Ayrıca Ada'nın çok sınırlı da olsa uygulama alanı vardır. Yüksek öğretim. Ada ile ilgili özel kurslar, Moskova Devlet Üniversitesi ve Kharkov Üniversitesi'nde verilmektedir. Ancak, aynı SI Rybin'e göre,

... şimdi Sovyet sonrası alanda yazılım endüstrisi ve eğitim alanında bariz bir kısır döngü gelişti: endüstride sırasıyla Ada hakkında pratik olarak bilmiyorlar, endüstriden eğitime talep yok. Ada uzmanları yetiştiriyor ve üniversitelerden sektöre neredeyse Ada hakkında hiçbir şey bilmeyen yeni insanlar geliyor.


7. Ada ile yazılmış işletim sistemleri

7.1. Gömülü sistemler

  • MART
  • RTEMS, ABD Savunma Bakanlığı DARPA tarafından geliştirilen açık kaynaklı bir işletim sistemidir.
  • Ravenskar
  • RTOS-32 - tescilli işletim sistemi

7.2. Geliştirme aşamasındaki sistemler

  • AuroraUX (OpenSolaris çekirdeğini ve ardından DragonFly BSD'yi Ada diline yeniden yazma projesi)
  • Lovelace (L4 çekirdeğine dayalı işletim sistemi)

7.3. Artık mevcut olmayan sistemler

  • BiiN™
  • Nabız™
  • AdaOS

8. Cehennem derleyicileri

İsim Şirket Sürüm işletim sistemi İnternet sitesi
AdaMagic SofCheck Ada 95 ? www.sofcheck.com
AdaMULTİ Green Hills Yazılımı Ada 83, Ada 95, C, C++, Fortran Solaris SPARC, GNU/Linux x86, Windows www.ghs.com
Aralık Ada Hewlett Packard Ada 83 açık vm'ler h71000.www7.hp.com
TBMM AdaCore Ada 83, Ada 95, Ada 2005, C Solaris SPARC, Linux x86/x86-64, Windows, diğerleri libre.adacore.com
ICC Irvine Derleyici Şirketi Ada 83, Ada 95 DEC VAX/VMS, HP 9000/700, Solaris SPARC, DEC Alpha OSF/1, PC Linux, SGI IRIX, Windows www.irvine.com
Janus/Ada Gerçek Gerçeklik Yazılımı Ada 83, Ada 95 SCO, UnixWare, Etkileşimli, MS-DOS, Windows www.rrsoftware.com
MAXAda Eşzamanlı Ada 95 Linux/Xeon, PowerPC www.ccur.com
NesneAda Aonix Ada 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
GüçAda OC Sistemleri Ada 83, Ada 95 Linux, AIX (Ada 95); IBM Sistemi 370/390 (Ada 83) www.ocsystems.com
Rasyonel Tepe IBM Rasyonel Ada, C, C++ Solaris SPARC Linux www-01.ibm.com
GOL DDC-ı Ada 83, Ada 95, C, Fortran Solaris SPARC, Pencereler www.ddci.com
XD Ada SWEP-EDS Ada 83 OpenVMS Alfa/VAX www.swep-eds.com
XGC Ada XGC Yazılımı Ada 83, Ada 95, Ç Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

TBMM ve XGC (bazı platformlar için) haricinde yukarıdaki derleyiciler ücretlidir. Aonix gibi bazı şirketler, zaman veya işlevsellik açısından sınırlı ücretsiz demolar sunar.

NetBeans ve Eclipse geliştirme ortamlarında Ada ile çalışmak için eklentiler bulunur.


9. Türetilmiş diller

Ada dili sözdizimi aşağıdaki gibi dillerde kullanılır:

  • PL/SQL

10. İlginç gerçekler

  • Resmi olarak, Ada diliyle sonuçlanan dil tasarımı yarışması isimsizdi - geliştirme ekipleri projelerini kod adları altında sundular, böylece yarışma komitesi bir kazanan seçerken geliştiricilerin kimliklerini dikkate alamazdı. Ancak pratikte komisyon üyelerinden birinin yazdığı gibi, geliştiricilerin zevkleri o kadar farklıydı ki, projenin yazarını belirlemek zor olmadı.
  • Bu yarışmanın son tura kalan tüm dilleri Pascal tabanlıydı. Bu bağlamda Ada, geçici olarak, verilen beş temel gereksinime göre geliştirilmiş bir Pascal olarak karakterize edilebilir. Aynı zamanda, yazarlar esas olarak Pascal'ı yeni unsurlarla genişletme yolunda ilerlediler. Sonuç çok daha karmaşık bir dildir.
  • Rusça'da "Cennet Dili" olarak da bilinen Rus Algoritmik Dili ile paralelliğe dayananlar da dahil olmak üzere "Cehennem Dili" ifadesinin belirsizliğine ilişkin fıkralar vardır. Sovyet propagandacısı Malor Sturua'nın (1984) yazdığı bir makalenin sonucu, programlama folkloruna da girdi:

Pentagon'un dili dünyanın düşmanıdır. "Ada"nın dili termonükleer cehennemin sesidir... "Ada"nın dilinde insan ırkına bir lanet işitilir.


notlar

  1. Ada Dil Başvuru Kılavuzu 83. Bölüm 1.3. Geliştirme hedefleri ve kaynakları - www.ada-ru.org/arm83/ch01s03.html
  2. Vadim Stankeviç. Cehennemin Leydisi - www.kv.by/index2006451104.htm
  3. iso.org'da güncellenmiş standart - www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Bryabrin V. M. Kişisel bilgisayarlar için yazılım. Moskova: Nauka, 1988.
  5. 1 2 S. I. Rybin ile röportaj - www.ada-ru.org/wiki/rybin
  6. , Nesne Yönelimli Programlama Dilleri, NET Platform Programlama Dilleri, Ada, Kod örnekleri içeren makaleler Ada.
    Metin, Creative Commons Attribution-ShareAlike lisansı altında mevcuttur.

Üst düzey, gerçek zamanlı sistemlerde uygulamaya odaklanmış ve örneğin yerleşik (gemi, havacılık) bilgisayarlarda süreçlerin ve / veya cihazların kontrol görevlerini otomatikleştirmek için tasarlanmıştır.

Ada dili, 1980'lerde ABD Savunma Bakanlığı'nın girişimiyle geliştirildi ve adını matematikçi Ada Augusta Lovelace'den (1815-1851) alıyor. Dili tasarlarken, her şeyden önce dikkat, güvenilirlik ve verimliliğe odaklandı - dil, özellikle büyük geliştirme için yaratıldı yazılım sistemleri yüksek güvenilirlik gereksinimleri olan gömülü sistemler için gerçek zamanlı; Her şeyden önce bunlar askeri sistemlerdir.
Ada dili, yapılandırılmış programlama fikirlerine dayanmaktadır ve karmaşık çok modüllü programların geliştirilmesini, yüksek derecede makine bağımsızlığını ve taşınabilirliği sağlar. Ada, tip tanımları, genel kontrol yapıları ve altyordamlar gibi Pascal benzeri dillerin bu tür özelliklerini ve 1970'lerden bu yana programlama dili teorisindeki gelişmeleri içerir. Dil, verilerin, türlerin ve alt programların hepsinin paket olabileceği mantıksal modülerliği destekler. Fiziksel modülerlik, ayrı derleme ile elde edilir. Ada dili, paralelleştirme ve istisna işleme mekanizmaları aracılığıyla gerçek zamanlı programlamayı destekler. Sistem Programlama sisteme bağlı parametrelere erişim ve veri sunumunda kesinlik kontrolü ile desteklenir.

1974 yılına gelindiğinde ABD Savunma Bakanlığı bünyesinde birçok farklı programlama dili kullanılmaya başlandı. Bu, personelin teknik olarak yeniden eğitilmesi için yeni sistemlerin geliştirilmesine harcanan zamanı ve parayı artırdı. Bakanlığın liderleri, tek bir programlama dili kullanmanın gerekli olduğu sonucuna vardılar. 1975'te, böyle bir dil için bir gereksinimler listesi üzerinde anlaşmaya varıldı. O dönemde var olan programlama dillerinin hiçbiri (Pascal, ALGOL-68 veya PL/1 gibi) öne sürülen gereksinimleri karşılamadı. Bu nedenle 1977'de yeni bir dil yaratılmasına karar verildi ve geliştirilmesi için bir yarışma ilan edildi. Tüm tekliflerden dördü (her biri Pascal'ın bir uzantısıydı) müteakip revizyon ve iyileştirme için seçildi. Daha sonra, daha fazla açıklama için, ikisi seçildi ve finalde Cii-Honeywell Bull tarafından sunulan projeyi seçtiler. Bu dile Ada adı verildi (başlangıçta dil DOD-1 olarak adlandırılıyordu).

1983'te ANSI / MIL-STD-1815A dil standardı ve 1987'de - uluslararası standart ISO 8652 kabul edildi. 1987'de ilk verimli Ada çevirmenleri ortaya çıktı. ISO standardı 1995'in başlarında revize edildi (ANSI/ISO/IEC 8652). Yeni standart, orijinal dildeki eksikliklerin ve eksikliklerin birçoğunu düzeltti ve buna prosedürel tipler, tabanlı işaretçi tipleri (yani, dinamik olmayan nesnelere işaretçiler), hiyerarşik kitaplıklar, ek eşzamanlılık kontrolleri gibi birçok yeni kullanışlı özellik ekledi. ve birçok standart kitaplık. Ek olarak, Ada-95 nesne yönelimli programlama için destek getirmiştir.
Bir sonraki standart, 2005 yılında henüz kabul edilmemiş olmasına rağmen gayri resmi olarak Ada-2005 olarak adlandırıldı. Ada topluluğu, standardı yayın yılına göre gayri resmi olarak adlandırma geleneğinden uzaklaşmaya karar verdi, çünkü 2005'te tüm ana parametreleri üzerinde anlaşmaya varıldı. Dil, çoklu kalıtım, nesne yöntemlerine erişim ön eki, daha esnek referans türleri, geliştirilmiş görev yönetimi ve çok sayıda yeni standart kitaplıklar. Ayrıca Ada-2005, tanımlayıcı adlarında (değişken adları, işlevler) Rus ve Yunan alfabesindeki harflerin kullanılmasını mümkün kılan ISO/IEC 10646 (2003) standardına uygundur.
Ada, hem ABD ordusu hem de NATO için ortak programlama dili olarak kabul edilir.

Buna ek olarak, Ada, aşağıdakiler gibi yüksek güvenilirlik gereklilikleri uygulanan büyük sistemler oluşturmak için kullanılır: havacılık için bilgisayar kontrol sistemleri (sivil dahil); yüksek hızlı demiryolları için kontrol bilgisayar sistemleri; bankacılık sistemleri; endüstriyel otomasyon ve robotik; Tıbbi malzeme; telekomünikasyon sistemleri.

Ada daha yüksek kullanılır Eğitim Kurumları ABD ve Batı Avrupa, programlamayı incelemek için temel olarak araştırma ve geliştirmede sıklıkla kullanılır. Ada programı, Paris metrosunda sürücüsüz trenlerin hareketini kontrol ediyor. Çok sayıda şirket, çok çeşitli donanım platformlarını kapsayan derleyicilerin, çeşitli kitaplıkların ve araçların geliştirilmesinde uzmanlaşmıştır. işletim sistemleri. Ticari geliştirme araçlarına ek olarak, Aonix'ten ObjectAda veya Ada Core Technologies'den GNAT gibi derleyicilerin ücretsiz olarak kullanılabilen sürümleri bulunmaktadır.

Ada en standart programlama dilidir. Uluslararası standart, Ada'nın farklı lehçeleri arasındaki uyumsuzluğu önleyen çevirmenlerin ilk çalışan versiyonları ortaya çıkmadan önce kabul edildi. Ada, katı veri yazma, ayrı derleme esnekliği, son derece güvenilir gerçek zamanlı sistemler oluşturma yeteneği, işlev parametreleri üzerinde katı denetimin mevcudiyeti ve dizi sınırlarının ötesine geçen dizinler (ortaya çıkan hataların %80'i) açısından SI ve C++'dan daha iyi performans gösterir. C/C++ programlarını oluştururken bundan kaynaklanmaktadır) ve ikili değerlerin makineden bağımsız gösterimi (bit işlemleri yerine, kayıt alanları örneklenir). Aynı zamanda Ada anlamsal ve sözdizimsel olarak şeffaftır, bu nedenle öğrenmesi Java'dan daha kolaydır.

Ada, yeni işletim sistemlerini desteklemenin yanı sıra bakım, hata ayıklama ve grafik arayüzlerin oluşturulması açısından C / C ++ 'dan daha düşüktür. Ancak dil standardı, diğer programlama dilleriyle kenetlenmek için otomatik olarak oluşturulmuş spesifikasyonları içerir ve pratikte Ada, Fortran matematik kütüphaneleri, C ile yazılmış sistem fonksiyonları, İnternet ile çalışmak için Java sınıfları kullanılır. Bu nedenle, IBM Rational Ada Developer (C/C++/Ada) gibi Ada dışındaki dilleri destekleyen çok dilli IDE'ler vardır.

Ada, hem otomatik çöp toplamayı (Java veya C#'ta olduğu gibi) hem de belleği doğrudan serbest bırakma yeteneğini (C, C++, Pascal'da olduğu gibi) uygular. C/C++'da olduğu gibi, Ada'da da zengin alt düzey tesisler mevcuttur. Çoklu görev için yerleşik destek, onu çoğu programlama dilinden ayıran Ada programlama dilinin benzersiz bir özelliğidir. Bu destek, uzantılar veya harici kitaplıklar tarafından değil, doğrudan programlama diline yerleşik standartlaştırılmış araçlar tarafından sağlanır.

Ada programlama dili, 1970'lerin ortalarında ABD Savunma Bakanlığı ve İngiliz Savunma Bakanlığı'nın askeri projelerde giderek daha fazla kullanılan gömülü bilgi işlem sistemleri için yüzlerce özel programlama dilini değiştirmeye karar vermesiyle doğdu. Ada dili, özel sistemlerin güvenilirliğini ve hızını sağlarken, tüm bu gömülü sistemlerde çalışabilecek tek dil olacak şekilde tasarlanmıştır.

1995'teki güncellemeden sonra dil, güvenilirlik, bakım kolaylığı ve verimlilik gibi temel değerleri gözden kaçırmadan nesne yönelimli programlama ekleyerek genel amaçlı sistemler için uyarlandı. Günümüzde Ada ile yazılan yazılımlar sadece askeri teçhizatın değil, aviyonik ve hava trafik kontrol sistemleri alanındaki ticari projelerin de temelini oluşturmaktadır. Ada'nın kodu, Ariane 4 ve 5 gibi roketleri, birçok uyduyu ve küçük arızaların ciddi sonuçlara yol açabileceği sayısız başka sistemi kontrol eder.

Belki Ada, bir sonraki gömülü projenizde kullanıma uygun olacaktır.

Askeri kalite planlaması

Yeni bir programlama dili seçmek için Savunma Bakanlığı toplandı " çalışma Grubu Görevi bir talep listesi derlemek ve aday dilleri seçmek olan askeri ve bilimsel uzmanlardan oluşan Yüksek Düzey Dil Çalışma Grubu (HOLWG). Sonuç olarak, sözde. "Çelikçi Sorguları":

Soruşturmanın ana noktaları şunlardı:

  • Katıştırılmış bilgi işlem uygulamalarının gereksinimlerine uyum sağlayan esnek, genel amaçlı bir şema.
  • Güvenilirlik. Dil, güvenilir programların tasarımını ve geliştirilmesini kolaylaştırmalıdır.
  • Destek kolaylığı. Kod okunabilir olmalı ve programlama kararları net olmalıdır.
  • Verimli kod üretme kolaylığı. Verimsiz tasarımları kolayca tespit etmek mümkün olmalıdır.
  • Gereksiz karmaşıklık yok. Anlamsal yapı tutarlı olmalı ve kavram sayısını en aza indirmelidir.
  • Makineden bağımsızlık. Dil, herhangi bir işletim sistemi veya donanım detayına bağlı olmamalıdır.
  • Tam tanım. Dilin tüm bölümleri eksiksiz ve açık bir şekilde tanımlanmalıdır.
Rapor, yazılım sorunlarına karşı ilk savunma hattının programcıların hata yapmasını önlemek olduğu görüşüyle ​​sona erdi. Örtük tür dönüştürmeleri veya diğer tehlikeli yapılar gibi ince bir hata yapma olasılığını ortadan kaldırarak, kodu otomatik olarak daha güvenli ve bakımı kolay hale getiriyoruz.

Grup, o dönemde var olan dillerin hiçbiri Savunma Bakanlığı'nın ihtiyaçlarına uygun olmasa da, tüm bu konulara uyacak yeni bir dil yaratmanın oldukça mümkün olduğu sonucuna vardı. Dört tasarımcı bunu yapmalı. Bir ara seçim süreci en uygun iki çalışma yöntemini seçti ve sonunda sadece bir dil yarışmayı kazandı ve "Ada" adını aldı.

Varsayılan olarak yerleşik koruma

Ada'nın yazı sistemi sadece katı değildir - bazen süper katı olarak adlandırılır, çünkü herhangi bir örtük tip atımına izin vermez. Örneğin, bu C kod parçacığını ele alalım:

Typedef uint32_t myInt; myInt foo = 42; uint32_t bar = foo;
Bu geçerli bir koddur; derleyecek, çalıştıracak ve bariz bir çıktı üretecek, yaşam, evren ve diğer her şeye dair nihai sorunun cevabını gösteriyor. Cehennemde bu işe yaramayacak:

Tip MyInt Tamsayıdır; foo: MyInt; çubuk: Tamsayı; foo:=42; çubuk:=foo;
Tamsayı ve MyInt aynı şey olmadığı için derleyici bir hata atar. Bu yaklaşımın ana avantajı, programcı daha sonra tip tanımını değiştirirse, kod tabanı boyunca binlerce örtük tip atamasının programı patlatmayacağıdır. Bunun yerine, tip belirleme açık olmalıdır - bu, "yeterince benzer" türlerin karıştırılmasını önleyerek iyi kodu destekler.

Standart C, Linux ve Win32 tür tanımlarının karışımına saplanan herhangi bir programcı, hangi typedef veya makronun derlemeyi engelleyen bir şeyin gerçek tanımını içerdiğini bulmak için sayısız belge sayfasını ve kötü biçimlendirilmiş kodu araştırmak zorunda kalmamayı takdir edebilir. veya hata ayıklama sırasında çıktı.

Ada, derleme ve çalıştırma aşamalarındaki denetimlere ek koruma katmanları ekler. Ada'da programcı, bloklar için kapanış ifadelerini ve değişkenin değerinin sığması gereken sınırları açıkça belirtmelidir. Ada tanımlamıyor standart tipler int veya float gibi, ancak programcının baştan belirli bir aralıkta türler oluşturmasını gerektirir. Bu, diziler için de geçerlidir - sınırsız diziler dışında, tüm dizilerin sabit bir uzunluğu vardır.

Çalışma aşamasında yanlış hafıza erişimi, arabellek taşması, sınırların dışında, hata ±1, diziye erişim gibi hataları kontrol edebilirsiniz. Daha sonra tüm uygulamayı bırakmak yerine güvenli bir şekilde ele alınabilirler.

Ada, düşük seviye işaretçiler yerine bir referans tipi modeli uygular. Her referans türü, varsayılan olarak veya daha sıra dışı NUMA bellek uygulamalarıyla çalışmak için gerektiğinde programcı tarafından bir bellek havuzu tarafından işlenir. Programcının belleğe doğrudan erişmesi gerekmez, bir bellek havuzu işleyicisi kullanması gerekir.

Son olarak, derleyici veya program, çalışma zamanında işleve veya işlevden nasıl veri aktarılacağına karar verir. Ve her bir parametrenin geçiş yönünün belirtilmesi gerekmesine rağmen ('in', 'out' veya 'in out'), verilerin kayıtlardan mı, yığından mı yoksa referans yoluyla mı geçirileceğine ilişkin nihai karar derleyici veya çalışma zamanında program, ancak bir programcı değil. Bu, yığın taşması sorunlarını önler.

Ravenscar profili ve SPARK lehçesi Ada'nın alt kümeleridir ve ikincisi sözleşmelere odaklanır. Zamanla, bu alt kümelerin özellikleri ana dilin özelliklerine aktarıldı.

Ada programlama bugün

ANSI, Ada 83 spesifikasyonunu 1983'te oluşturdu. Intel 80286 yeni çıkmıştı ve Motorola 68000 işlemcisi sadece dört yaşındaydı. Evde bilgi işlemin doğuşu ve aynı zamanda mikrodenetleyicilerin popülaritesinin artmaya başladığı 1970'lerden 80'lere garip bir geçişti. Intel 8051 mikrodenetleyiciyi ve onun muhteşem 4K EPROM'unu ve 128B RAM'i hayal edin.

Bugün popüler olan mikrodenetleyiciler, 1983'tekinden çok daha güçlüdür. Herhangi bir ARM, AVR, RISC-V, vb. alabilirsiniz. (veya Lego Mindstorms NXT kiti) ve aynı C tabanlı araçları kullanarak geliştirmeye başlayın.Popüler GNAT Ada derleyicisinin GCC'ye dayalı olması şaşırtıcı değildir. Ayrıca DragonEgg projesi kapsamında geliştirilmekte olan araçlar LLVM'ye dayalıdır.

GCC tabanlı Ada araçlarının iki versiyonu vardır. AdaCore varyantı ticari olarak desteklenir, ancak kendine has tuhaflıkları vardır. Free Software Foundation'dan alınan sürüm elbette ücretsizdir ve işlevsellik açısından AdaCore ile karşılaştırılabilir.

Kolay bir başlangıç ​​için AdaCore ile birlikte gelen GNAT Programlama Stüdyosu IDE'sini (GPS) kullanın (Github'a kopyalayın) veya kodu Metin düzeltici ve manuel olarak veya Makefiles ile derleyin. Buradaki araç seti, C veya C++'dan biraz daha karmaşıktır, ancak geliştirme, tüm araçları içeren ve GCC'ye çok benzeyen gnatmake yardımcı programı tarafından kolaylaştırılır.

Sizin tarafınızdan gerçekten bir komut satırı bağımsız değişken ayrıştırıcısı olarak yazılmış küçük ama önemsiz olmayan bir Ada projesi örneği. Orada, projenin ada/ klasöründe yer alan ve paket belirtim dosyalarının (.ads) ve paketlerin kendilerinin (.adb) bulunabileceği klasörleri tanımlayan bir Makefile bulacaksınız.

Bu dosyalar kabaca C ve C++'daki başlık ve kod dosyalarına karşılık gelir, ancak önemli farklılıkları da vardır. C'den farklı olarak, Ada'nın bir önişlemcisi yoktur ve derlenmiş dosyalar oluşturmak için kod ve başlıkları birleştirmez. Bunun yerine, şartnamede belirtilen paket adına bir bağlantı vardır. .ads dosyasının adı da paketin adıyla aynı olmak zorunda değildir. Bu, çok fazla esneklik sağlar ve döngüsel bağımlılıklarla ilgili yaygın C sorunlarını veya başlıkları belirli bir sırayla bağlama ihtiyacını önler.

Bundan sonra nereye gitmeli?

TBMM araç setini indirdikten, GPS veya Vim/Emacs'ı çalıştırdıktan ve ekranda yanıp sönen imlece baktıktan sonra boş sayfa, nereden başlayacağınızı merak edebilirsiniz. Neyse ki yakın zamanda PicoRV32 RISC-V çekirdeğini kullanan Ada tabanlı bir projeyi ele aldık. Yosys gibi açık kaynaklı FPGA araç setleri tarafından desteklenen ortak ICE40LP8K CPLD'yi kullanır.

Dokümantasyon planı, Java ve C++ geliştiricileri için giriş makaleleri, AdaCore referansı, WikiBooks referansı ve tabii ki Programming in Ada 2012 dokümantasyonunu içerir. Bunlar, 945 sayfalık Ada 2012 Dil Referans Kılavuzu (LRM) dışında belki de en kapsamlı referanslardır.

Ada dili, programlama meraklıları için oldukça nadir olmasına rağmen, güvenilir geliştirme araçlarına sahip tamamen açık bir dildir. ticari destek ve kıtalararası balistik füzeler ve F-15'lerden tıbbi cihazlara yönelik ürün yazılımına kadar her şey için yazılım oluşturmak için kullanılır. Oldukça karmaşık bir dil olmasına rağmen, temel dillerin ötesine geçerseniz - sadece özgeçmişinizi daha havalı göstermek için bile olsa - kesinlikle projelerinizde kullandığınız diller listesinde yer almalıdır.

Cehennemin dili aşağı yukarı her zaman duyulmuştur. Okulda adına güldük, üniversite programında ABD Savunma Bakanlığı'nın isteği üzerine geliştirilen bir dil olarak kuru bir şekilde bahsedildi, ancak yalnızca nadir programcılar doğrudan sözdizimi veya uygulama çalışmasına geldi. Bu nedenle, Ada dilinin sadece geçen yüzyılın donanımı üzerinde işlev gördüğü ve doğal modernleşme ile birlikte buna olan ihtiyacın ortadan kalkacağı konusunda yanlış bir görüş vardı.

Ve bu gerçeklerden çok uzak.

Dış görünüş

20. yüzyılın 70'lerinde, Soğuk Savaş'ın zirvesinde, ABD Savunma Bakanlığı, askeri kullanım için bir programlama dili seçmenin gerekli olduğu sonuçlarına göre uluslararası bir yarışma düzenledi. Bununla birlikte, mevcut dillerin hiçbiri komisyon üyelerini tatmin etmedi, bu nedenle uzun bir seçim ve çeşitli iyileştirmelerle Ada Lovelace'in adını taşıyan Ada dili doğdu. Ardından standardizasyon, ticari marka tescili, özel tercümanlara getirilen yasaklar ve geniş kitleleri Ada ile çalışmaktan caydıran diğer eylemlerle yıllarca süren bürokrasi başladı.

Çıktının, artan güvenlik gereksinimleri olan karmaşık bilgi işlem sistemleri için tasarlanmış oldukça niş bir dil olduğu ortaya çıktı. Yine Pentagon'un gereklilikleri ve katı standartlar nedeniyle diğer programlama dilleriyle etkileşim son derece zordur, bu nedenle yakın zamana kadar Ada'nın kitlesel pazara çıkma şansı neredeyse hiç yoktu. Ancak ekipman maliyetinin düşmesi ve kullanılan teknolojilerin karmaşıklığı ile böyle bir şans ortaya çıkıyor.

Sözdizimi

Başlangıçta Ada, sözdizimini Pascal ve Algol'dan miras alan, kesin olarak yazılmış modüler bir programlama dilidir. Önce okulda veya kolejde ders verdiyseniz, ardından "Merhaba Dünya!" nostalji yaşamalı:

Ada.Text_IO ile;

Merhaba Prosedür
Ada.Text_IO'yu kullanın;
başlamak
Put_Line("Merhaba dünya!");
Merhaba bitirmek;

Dil için temel gereksinimlerden biri, kullanımının güvenilirliğiydi. Buna göre bu, yapı, türler, imla ve daha fazlası üzerinde katı kısıtlamalar gerektiriyordu. Ayrıca buradaki hemen hemen tüm hatalar derleme zamanında yakalanır.

Diğer bir gereklilik, ortaya çıkan dilin ağırlığına ve düşük esnekliğe yol açan basılı formdaki kodun maksimum okunabilirliğiydi.

Daha sonraki standartlar bu sorunları kısmen çözdü, ancak bariz sebeplerden dolayı cehennemden ikinci bir Python çıkarmadılar.

cehennem bugün

Geniş bir kitlenin görüşünün aksine, Ada'nın dili sadece Amerika Birleşik Devletleri'nde ve sadece askeri endüstride aktif olarak kullanılmaktadır. Örneğin, Beriev Be-200 amfibi uçağının yazılımının bir kısmı Ada'da yazılmıştır. Birçok büyük şehirde (Paris, Londra, New York vb.) çalışan sürücüsüz metro trenleri de Amerikan askeri dil ekipmanlarını kullanıyor.

Ve evet, elbette, "müşteriler" arasında askeri ve sivil havacılık (özellikle Boeing 777), füzeler, mekikler, uydular vardı - genel olarak, sonsuz derecede pahalı Amerikan ürünlerinin neredeyse tamamı, en yüksek dereceyi düşündürüyor. güvenlik.

umutlar

Cehennemin dili, hem ortaya çıktığı sırada hem de Pentagon'un görkemli planlarının gerçeğe tam olarak uymadığı ve şimdi daha da fazla olduğu anlaşıldığında eleştirildi. Bunun nedeni, uygun olmayan dil, 1983 ve 1995'te yazılan standartların karmaşıklığı ve ayrıca Ada dilini geniş bir kitleden mahrum bırakan geliştiricilerin basiretsizliğidir.

Bununla birlikte, neredeyse 40 yıllık aktif kullanım, Ada dilinin belki de ana görevinin üstesinden geldiğini doğrulamaktadır - artan güvenlik gereksinimleri olan sistemler için güvenilir kod oluşturmak için hala kullanılabilir. Bununla birlikte, mevcut eğilimlere bakarsanız, bu tür ürünlerin sayısı giderek artıyor: sürücüsüz arabalar ve hibrit motorlar, özel uzay araçları ve küçük uçaklar, hızlı trenler ve çok sayıda gömülü sistem. Bütün bunlar, Ada dilinin faaliyeti için potansiyel bir alandır. Buna 2012 yılında standardın ciddi bir şekilde revize edilerek modernize edildiğini de ekleyince işe yarayan araçlar da çıkıyor ve güncelleniyor.

Dolayısıyla Cehennem dili, hem pek hoş olmayan bir geçmişin parçası hem de parlak bir gelecek inşa etmenin araçlarından biridir. Ve kesinlikle emekli olmayacak.