• 1970 के दशक में अमेरिकी रक्षा विभाग के सॉफ़्टवेयर अव्यवस्था के बीच जन्मी Ada एक ऐसी भाषा है जिसकी मुख्य विशेषताएँ strong static typing और specification-implementation separation हैं
  • package संरचना और representational invisibility के जरिए यह पूर्ण encapsulation लागू करती है, और बाद में Java·C#·Go जैसी आधुनिक भाषाओं के module systems को प्रभावित करती है
  • semantic constraint types, generic, concurrency(task), contract-based design जैसी अवधारणाएँ Ada ने कई दशक पहले पेश की थीं, जिन्हें बाद में Haskell·Rust·Swift आदि ने आगे बढ़ाया
  • SPARK Ada formal verification के जरिए data race और logical errors तक को हटाता है, और aviation·railway·defense systems जैसे high-reliability क्षेत्रों में इस्तेमाल होता है
  • Ada भले ही जनप्रिय भाषा न हो, लेकिन “चुपचाप सही ढंग से काम करने वाली भाषा” के रूप में यह आधुनिक programming language design के मूल सिद्धांतों की आधारशिला है

Ada की उत्पत्ति की पृष्ठभूमि और डिज़ाइन दर्शन

  • 1970 के दशक की शुरुआत में अमेरिकी रक्षा विभाग(DoD) ने हथियार, logistics और communication systems में 450 से अधिक भाषाओं और dialects के मिश्रण वाली स्थिति का अध्ययन किया
    • हर system में interoperability की कमी, maintenance की असंभवता, और मूल लेखक के अनुपस्थित होने जैसी समस्याएँ थीं
    • इससे software procurement crisis पैदा हुआ
  • DoD ने मौजूदा भाषाएँ (COBOL, Fortran, PL/1 आदि) अपनाने के बजाय, 5 साल तक requirements definition की प्रक्रिया चलाई
    • Strawman → Woodenman → Tinman → Ironman → Steelman दस्तावेज़ों तक विकास हुआ
    • Steelman(1978) ने explicit interface separation, strong static typing, built-in concurrency, consistent exception handling, machine independence, readability और verifiability की मांग की
  • 1979 में 4 टीमों (Green, Red, Blue, Yellow) के बीच प्रतिस्पर्धा में Jean Ichbiah के नेतृत्व वाली Green टीम चुनी गई और उसका नाम Ada रखा गया
    • यह नाम Ada Lovelace के सम्मान में रखा गया था और भाषा के उद्देश्य का प्रतीक था

package संरचना और encapsulation

  • Ada की केंद्रीय संरचना package है, जिसमें specification और body भौतिक रूप से अलग होते हैं
    • specification बाहरी रूप से दिखाई देने वाला contract है, जबकि body implementation है, और compiler दोनों के संबंध को enforce करता है
    • client code specification में न होने वाले तत्वों तक पहुँच नहीं सकता
  • यह संरचना module system के prototype जैसी है, जिसे बाद की भाषाओं ने आंशिक रूप से अपनाया
    • Java, Python, JavaScript, C, Go, Rust में भी Ada जैसी पूर्ण structural separation नहीं है
  • private type में केवल नाम दिखता है और उसका internal representation पूरी तरह opaque रहता है
    • client type की आंतरिक संरचना नहीं जान सकता और केवल अनुमति प्राप्त operations ही उपयोग कर सकता है
    • यह Java के private access control से भी अधिक शक्तिशाली representational invisibility है
  • Java और C# ने कई दशकों में धीरे-धीरे Ada-स्तर के encapsulation की दिशा में विकास किया

type system और semantic constraints

  • Ada type और subtype के अंतर को गणितीय अर्थ में परिभाषित करती है
    • उदाहरण: type Age is range 0 .. 150 range constraint के साथ एक अलग type बनाता है
    • गलत types के बीच passing को compile-time error के रूप में पकड़ा जाता है
  • 1983 के समय Ada का type system, C, Fortran और Pascal की तुलना में कहीं अधिक expressive था
    • semantic constraint types के जरिए domain errors को रोका जाता था
  • discriminated record ऐसी संरचना है जिसमें value के आधार पर fields बदलते हैं
    • यह आधुनिक भाषाओं के sum type या algebraic data type(ADT) के समान है
    • Haskell, Rust, Swift, Kotlin, TypeScript आदि ने कई दशक बाद यही अवधारणा अपनाई

generic और polymorphism

  • Ada के generic ऐसे units हैं जो type, value, subprogram और package को parameters के रूप में लेते हैं
    • यह compile time पर type checking करने वाला static polymorphism(parametric polymorphism) लागू करता है
  • C++(1990), Java(2004), C#(2005), Go(2022) आदि ने Ada के कई दशक बाद समान सुविधाएँ जोड़ीं
    • Java में type erasure के कारण runtime type information खो जाती है
    • Ada runtime type preservation और package parameterization तक को support करता है
  • Ada के generic higher-kinded polymorphism स्तर की expressive power देते हैं
    • Haskell के type classes, Rust के traits, और C++20 के concepts जैसी अवधारणाओं से मिलते-जुलते

concurrency model और safety

  • Ada में 1983 से ही language-level concurrency(task) built-in है
    • task declaration और rendezvous communication model के जरिए shared state के बिना message passing लागू किया जाता है
    • Go के channel इसी CSP(Communicating Sequential Processes) परिवार की अवधारणा हैं
  • Ada 95 ने protected object पेश किया
    • यह data access को सुरक्षित रखता है और procedure, function, entry में विभाजित होता है
    • automatic barrier conditions और lock-free synchronization देता है
  • SPARK Ada formal verification के जरिए यह गणितीय रूप से सिद्ध करता है कि data race, exceptions, range errors, और pre/postcondition violations नहीं होंगे
    • जहाँ Rust का borrow checker केवल memory safety सुनिश्चित करता है, SPARK logical consistency तक सिद्ध कर सकता है

contract-based design और null safety

  • Ada 2012 ने contracts को भाषा में एकीकृत किया
    • precondition, postcondition, और type invariant को स्पष्ट रूप से लिखा जा सकता है
    • SPARK toolchain इन्हें static proof में इस्तेमाल करती है
  • Eiffel(1986) की Design by Contract अवधारणा को भाषा-स्तर पर औपचारिक रूप दिया गया
    • C++, Java, Python, Rust आदि अभी भी आंशिक या library-level implementations तक सीमित हैं
  • Ada 2005 ने not null type पेश किया, जिससे compile-time null exclusion संभव हुआ
    • default रूप से runtime exception(Constraint_Error) के जरिए safe failure सुनिश्चित होती है
    • यह C# 8.0 के nullable reference जैसी पद्धति है

exception handling संरचना

  • Ada 83 ने सबसे पहले structured exception handling प्रस्तुत किया
    • exception को declare करने के बाद उपयोग किया जाता है, scope स्तर पर handle किया जाता है, और propagation rules स्पष्ट हैं
  • Java की checked exception Ada से अधिक विकसित रूप है, जहाँ caller को exception स्पष्ट करना होता है
    • Ada exception propagation को स्वतंत्र रूप से अनुमति देती है
  • Rust exceptions को हटाकर Result type आधारित error handling अपनाता है
    • Ada का योगदान यह था कि उसने exception propagation को structured और predictable बनाया

Annex और standardization संरचना

  • Ada standard में Annex नाम की optional extension संरचना है
    • Annex C~H system, real-time, distributed, numeric, और high-reliability क्षेत्रों की सुविधाएँ परिभाषित करते हैं
    • compiler को हर Annex के लिए independent certification लेना होता है
  • ACAA के ACATS tests के जरिए standard conformance की जाँच होती है
    • DO-178C aviation software certification में Ada की standard संरचना सीधे उपयोगी हो सकती है
    • C/C++ भी वही certification पा सकते हैं, लेकिन Ada संरचनात्मक रूप से अधिक उपयुक्त है

Ada का प्रभाव और पहचान का असंतुलन

  • Ada एक government-led language होने के कारण Silicon Valley की संस्कृति में खास ध्यान नहीं पा सकी
    • यह C-आधारित संक्षिप्त syntax को पसंद करने वाली संस्कृति से विपरीत थी
  • Ada की सफलताएँ (aviation, railway, defense systems) विफलता न होने के कारण कम दिखाई देती हैं
    • उच्च विश्वसनीयता वाले systems आम तौर पर चर्चा या घटनाएँ पैदा नहीं करते
  • आधुनिक भाषाओं की विकास दिशा उन सिद्धांतों की ओर जा रही है जिन्हें Ada पहले ही प्रस्तुत कर चुकी थी
    • specification-implementation separation, static type verification, language-level concurrency, contract-based safety आदि
  • Ada आज भी aircraft, railway, spacecraft जैसे high-reliability systems में संचालन में है, “चुपचाप सही ढंग से काम करने वाली भाषा” के रूप में बनी हुई है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.