เอด้า (ภาษาโปรแกรม)

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
อดา
Ada Mascot กับ slogan.svg
กระบวนทัศน์หลายกระบวนทัศน์ : มีโครงสร้าง , จำเป็น , เชิงวัตถุ , พร้อมกัน , อาร์เรย์ , กระจาย , ทั่วไป , ขั้นตอน , เมตา
ตระกูลปาสกาล
ออกแบบโดย
  • MIL-STD-1815, Ada 83: Jean Ichbiah
  • Ada 95: Tucker Taft
  • Ada 2005: Tucker Taft
  • Ada 2012: Tucker Taft
ปรากฏตัวครั้งแรกกุมภาพันธ์ 2523 ; 42 ปีที่แล้ว ( 1980-02 )
ปล่อยที่มั่นคง
เอด้า 2012 TC1 [1] [2]
วินัยการพิมพ์คงที่ , แข็งแรง , ปลอดภัย , เสนอชื่อ
OSหลาย หรือข้ามแพลตฟอร์ม
นามสกุลไฟล์.adb, .ads
เว็บไซต์www .adaic .org
การใช้งานหลัก
AdaCore GNAT , [3]
Green Hills Software Optimizing Ada 95 คอมไพเลอร์,
PTC ApexAda และ ObjectAda, [4]
MapuSoft Ada-C/C++ changer, [5]เดิมชื่อ "AdaMagic with C Intermediate", [6]
DDC-I Score
ภาษาถิ่น
SPARK , โปรไฟล์ Ravenscar
ได้รับอิทธิพลจาก
ALGOL 68 , Pascal , Simula 67 , [7] C++ (Ada 95), Smalltalk (Ada 95), Modula-2 (Ada 95) Java (Ada 2005), Eiffel (Ada 2012)
ได้รับอิทธิพล
C++ , Chapel , [8] Drago , [9] D , Eiffel , Griffin, [10] Java , Nim , ParaSail , PL/SQL , PL/pgSQL , Python , Ruby , Seed7 , SPARforte, [11] Sparkel , SQL/ PSM , VHDL

Adaเป็นภาษาการเขียนโปรแกรมระดับสูงแบบ มี โครงสร้าง แบบ สแตติกจำเป็นและเชิงวัตถุ ขยายจากPascalและภาษาอื่นๆ มีการสนับสนุนภาษาในตัวสำหรับการออกแบบตามสัญญา (DbC) การพิมพ์ที่แข็งแกร่ง มาก การทำงานพร้อมกันอย่างชัดเจน งาน การส่งข้อความแบบซิงโครนัส อ็อบเจ็กต์ที่ได้รับการป้องกัน และ การ ไม่กำหนด Ada ปรับปรุงความปลอดภัยและความสามารถในการบำรุงรักษาของโค้ดโดยใช้คอมไพเลอร์เพื่อค้นหาข้อผิดพลาดเพื่อสนับสนุนข้อผิดพลาดรันไทม์ Ada เป็นมาตรฐานทางเทคนิคระดับสากลซึ่งกำหนดร่วมกันโดย องค์การระหว่างประเทศเพื่อการมาตรฐาน (ISO) และคณะกรรมการไฟฟ้าระหว่างประเทศ (IEC) ในปี 2020 มาตรฐานนี้เรียกว่า Ada 2012 อย่างไม่เป็นทางการ[12]คือ ISO/IEC 8652:2012 [13]

Ada ได้รับการออกแบบโดยทีมที่นำโดยนักวิทยาศาสตร์คอมพิวเตอร์ ชาวฝรั่งเศส Jean IchbiahจากCII Honeywell Bullภายใต้สัญญากับกระทรวงกลาโหมของสหรัฐอเมริกา (DoD) ตั้งแต่ปี 1977 ถึง 1983 เพื่อแทนที่ภาษาโปรแกรมมากกว่า 450 ภาษาที่กระทรวงกลาโหมใช้ในขณะนั้น [14]เอดาได้รับการตั้งชื่อตามเอดา เลิฟเลซ (ค.ศ. 1815–1852) ซึ่งได้รับการยกย่องว่าเป็นโปรแกรมเมอร์คอมพิวเตอร์คนแรก [15]

คุณสมบัติ

Ada ได้รับการออกแบบมาสำหรับระบบฝังตัวและเรียลไทม์ การแก้ไข Ada 95 ซึ่งออกแบบโดย S. Tucker Taft แห่งIntermetricsระหว่างปี 1992 และ 1995 ปรับปรุงการรองรับสำหรับระบบ การเขียนโปรแกรมเชิงตัวเลข การเงิน และเชิงวัตถุ (OOP)

คุณสมบัติของ Ada ได้แก่: การพิมพ์ที่รัดกุมกลไก การ เขียนโปรแกรมแบบแยกส่วน (แพ็คเกจ) การตรวจสอบรันไทม์ การประมวลผล แบบขนาน ( งาน การ ส่งข้อความแบบซิงโครนัส ออบเจ็กต์ที่ได้รับการป้องกัน และคำสั่งการเลือก แบบไม่ กำหนด) การจัดการข้อยกเว้นและชื่อสามัญ Ada 95 เพิ่มการรองรับสำหรับการเขียนโปรแกรมเชิงวัตถุรวมถึง การ สั่ง งานแบบไดนามิก

วากยสัมพันธ์ของ Ada ช่วยลดตัวเลือกวิธีการดำเนินการขั้นพื้นฐานให้เหลือน้อยที่สุด และชอบใช้คำหลักภาษาอังกฤษ (เช่น "หรืออย่างอื่น" และ "แล้ว") เป็นสัญลักษณ์ (เช่น "||" และ "&&") Ada ใช้ตัวดำเนินการเลขคณิตพื้นฐาน "+", "-", "*" และ "/" แต่หลีกเลี่ยงการใช้สัญลักษณ์อื่น บล็อคโค้ดถูกคั่นด้วยคำต่างๆ เช่น "declare" "begin" และ "end" โดยที่ "end" (ในกรณีส่วนใหญ่) ตามด้วยตัวระบุของบล็อกที่ปิด (เช่นif ... end if , ลูป ... ลูปสิ้นสุด ) ในกรณีของการบล็อกแบบมีเงื่อนไข วิธีนี้จะช่วยหลีกเลี่ยงปัญหาอื่นๆที่อาจจับคู่กับ if-expression ที่ซ้อนกันไม่ถูกต้องในภาษาอื่นๆ เช่น C หรือ Java

Ada ออกแบบมาเพื่อพัฒนาระบบซอฟต์แวร์ขนาดใหญ่มาก แพ็คเกจ Ada สามารถรวบรวมแยกกันได้ ข้อมูลจำเพาะแพ็คเกจ Ada (อินเทอร์เฟซแพ็คเกจ) สามารถคอมไพล์แยกกันได้โดยไม่ต้องใช้เพื่อตรวจสอบความสอดคล้อง ทำให้สามารถตรวจพบปัญหาได้ตั้งแต่เนิ่นๆ ระหว่างขั้นตอนการออกแบบ ก่อนเริ่มใช้งาน

รองรับการตรวจสอบเวลาคอมไพล์จำนวนมากเพื่อช่วยหลีกเลี่ยงจุดบกพร่องที่ตรวจไม่พบจนกว่าจะรันไทม์ในภาษาอื่นบางภาษา หรือจะต้องเพิ่มการตรวจสอบอย่างชัดแจ้งในซอร์สโค้ด ตัวอย่างเช่น ไวยากรณ์กำหนดให้ปิดบล็อกที่มีชื่ออย่างชัดเจน เพื่อป้องกันข้อผิดพลาดเนื่องจากโทเค็นสิ้นสุดที่ไม่ตรงกัน การยึดมั่นในการพิมพ์ที่รัดกุมทำให้สามารถตรวจจับข้อผิดพลาดทั่วไปของซอฟต์แวร์ได้หลายอย่าง (พารามิเตอร์ผิด การละเมิดช่วง การอ้างอิงที่ไม่ถูกต้อง ประเภทที่ไม่ตรงกัน ฯลฯ) ทั้งในช่วงเวลาคอมไพล์หรืออย่างอื่นระหว่างรันไทม์ เนื่องจากการทำงานพร้อมกันเป็นส่วนหนึ่งของข้อกำหนดภาษา คอมไพเลอร์สามารถตรวจจับการหยุดชะงักที่อาจเกิดขึ้นได้ในบางกรณี [16]คอมไพเลอร์มักจะตรวจหาตัวระบุที่สะกดผิด การมองเห็นแพ็คเกจ การประกาศซ้ำซ้อน ฯลฯ และสามารถให้คำเตือนและคำแนะนำที่เป็นประโยชน์เกี่ยวกับวิธีการแก้ไขข้อผิดพลาด

Ada ยังสนับสนุนการตรวจสอบรันไทม์เพื่อป้องกันการเข้าถึงหน่วยความจำที่ไม่ได้ถูกจัดสรร ข้อผิดพลาด บัฟเฟอร์โอเวอร์โฟลว์ การละเมิดช่วง ข้อผิดพลาดแบบแยก ส่วน ข้อผิดพลาดในการเข้าถึงอาร์เรย์ และจุดบกพร่องอื่นๆ ที่ตรวจพบได้ การตรวจสอบเหล่านี้สามารถปิดใช้งานได้เพื่อประโยชน์ในประสิทธิภาพของรันไทม์ แต่มักจะสามารถคอมไพล์ได้อย่างมีประสิทธิภาพ นอกจากนี้ยังมีสิ่งอำนวยความสะดวกเพื่อช่วยในการ ตรวจ สอบโปรแกรม ด้วยเหตุผลเหล่านี้ Ada จึงถูกนำมาใช้กันอย่างแพร่หลายในระบบวิกฤต ซึ่งความผิดปกติ ใดๆ อาจนำไปสู่ผลลัพธ์ที่ร้ายแรง เช่น การเสียชีวิตจากอุบัติเหตุ การบาดเจ็บ หรือการสูญเสียทางการเงินอย่างรุนแรง ตัวอย่างของระบบที่ใช้ Ada ได้แก่avionics , การควบคุมการจราจรทางอากาศ , รถไฟ, การธนาคาร, การทหาร และเทคโนโลยีอวกาศ [17][18]

การจัดการหน่วยความจำแบบไดนามิกของ Ada อยู่ในระดับสูงและปลอดภัยสำหรับประเภท Ada ไม่มีพอย น์เตอร์ทั่วไปหรือไม่ได้พิมพ์ ; และไม่ประกาศประเภทพอยน์เตอร์ใดๆ โดยปริยาย แต่การจัดสรรหน่วยความจำแบบไดนามิกและการจัดสรรคืนต้องเกิดขึ้นผ่านประเภทการเข้าถึง ที่ประกาศไว้อย่าง ชัดเจน การเข้าถึงแต่ละประเภทมีพูลหน่วยเก็บข้อมูล ที่เกี่ยวข้อง ซึ่งจัดการรายละเอียดระดับต่ำของการจัดการหน่วยความจำ โปรแกรมเมอร์สามารถใช้พูลหน่วยเก็บข้อมูลเริ่มต้นหรือกำหนดใหม่ (สิ่งนี้เกี่ยวข้องโดยเฉพาะกับNon-Uniform Memory Access ) เป็นไปได้ที่จะประกาศประเภทการเข้าถึงที่แตกต่างกันหลายประเภทซึ่งทั้งหมดกำหนดประเภทเดียวกัน แต่ใช้พูลหน่วยเก็บข้อมูลต่างกัน นอกจากนี้ ภาษายังมีการตรวจสอบการช่วยสำหรับการเข้าถึงทั้งในเวลาคอมไพล์และรันไทม์ ซึ่งทำให้แน่ใจว่าค่าการเข้าถึงไม่สามารถอยู่ได้นานกว่าประเภทของอ็อบเจ็กต์ที่ชี้ไป (19)

แม้ว่าความหมายของภาษาจะอนุญาตให้มีการรวบรวมขยะ อัตโนมัติ ของอ็อบเจ็กต์ที่ไม่สามารถเข้าถึงได้ แต่การใช้งานส่วนใหญ่ไม่รองรับโดยปริยาย เพราะจะทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้ในระบบเรียลไทม์ Ada รองรับรูปแบบการจัดการหน่วยความจำตามภูมิภาคที่ จำกัด นอกจากนี้ การใช้พูลหน่วยเก็บข้อมูลอย่างสร้างสรรค์สามารถจัดให้มีการรวบรวมขยะอัตโนมัติในรูปแบบที่จำกัด เนื่องจากการทำลายพูลหน่วยเก็บข้อมูลยังทำลายอ็อบเจ็กต์ทั้งหมดในพูลด้วย

เครื่องหมายขีดคู่("--") ซึ่งคล้ายกับเครื่องหมายขีดกลางหมายถึงข้อความแสดงความคิดเห็น ความคิดเห็นจะหยุดที่ท้ายบรรทัด เพื่อป้องกันไม่ให้ความคิดเห็นที่ไม่ถูกเปิดเผยทำให้ซอร์สโค้ดทั้งส่วนของซอร์สโค้ดเป็นโมฆะโดยไม่ได้ตั้งใจ การปิดใช้งานโค้ดทั้งบล็อกในตอนนี้จำเป็นต้องมีการขึ้นต้นของแต่ละบรรทัด (หรือคอลัมน์) ด้วย "--" ในขณะที่แสดงโค้ดที่ถูกปิดใช้งานอย่างชัดเจนโดยมีคอลัมน์ "--" ซ้ำๆ ที่หน้า จะทำให้การทดลอง dis/re-enablement ของบล็อกขนาดใหญ่มีกระบวนการที่ดึงออกมามากขึ้น

อัฒภาค (";") เป็นตัวปิดคำสั่งและคำสั่ง null หรือไม่มีการดำเนินการnull;คือ ไม่อนุญาตให้ใช้ ซิงเกิ้ล;ที่ไม่มีคำสั่งให้ยุติ

ไม่เหมือนกับมาตรฐาน ISO ส่วนใหญ่ คำจำกัดความภาษา Ada (หรือที่เรียกว่าAda Reference ManualหรือARMหรือบางครั้งLanguage Reference ManualหรือLRM ) เป็นเนื้อหาฟรี ดังนั้นจึงเป็นข้อมูลอ้างอิงทั่วไปสำหรับโปรแกรมเมอร์ Ada ไม่ใช่แค่โปรแกรมเมอร์ที่ใช้คอมไพเลอร์ Ada เท่านั้น นอกเหนือจากคู่มืออ้างอิงแล้ว ยังมีเอกสารแสดงเหตุผลที่ครอบคลุมซึ่งอธิบายการออกแบบภาษาและการใช้โครงสร้างภาษาต่างๆ เอกสารนี้ยังใช้กันอย่างแพร่หลายโดยโปรแกรมเมอร์ เมื่อมีการแก้ไขภาษา จึงมีการเขียนเอกสารเหตุผลใหม่

เครื่องมือ ซอฟต์แวร์ฟรีที่โดดเด่นอย่างหนึ่งที่โปรแกรมเมอร์ Ada หลายคนใช้เพื่อช่วยในการเขียนซอร์สโค้ดของ Ada คือGNAT Programming Studioซึ่งเป็นส่วนหนึ่งของGNU Compiler Collection

ประวัติ

ในปี 1970 กระทรวงกลาโหมสหรัฐ (DoD) กังวลกับจำนวนภาษาโปรแกรมต่างๆ ที่ใช้สำหรับโครงการระบบคอมพิวเตอร์แบบฝังตัว ซึ่งส่วนใหญ่ล้าสมัยหรือขึ้นอยู่กับฮาร์ดแวร์ และไม่มีภาษาใดที่สนับสนุนการเขียนโปรแกรมโมดูลาร์ที่ปลอดภัย ในปีพ.ศ. 2518 คณะทำงาน , High Order Language Working Group (HOLWG) ได้ก่อตั้งขึ้นโดยมีเจตนาที่จะลดจำนวนนี้โดยการค้นหาหรือสร้างภาษาโปรแกรมโดยทั่วไปที่เหมาะสมกับข้อกำหนดของกระทรวงกลาโหมและกระทรวงกลาโหมของสหราชอาณาจักร หลังจากการทำซ้ำหลายครั้งเริ่มต้นด้วยข้อเสนอของ Straw man เดิมภาษาโปรแกรมในที่สุดชื่อ Ada จำนวนภาษาโปรแกรมระดับสูงทั้งหมดที่ใช้สำหรับโครงการดังกล่าวลดลงจาก 450 ในปี 2526 เป็น 37 ในปี 2539

คณะทำงาน HOLWG ได้สร้างข้อกำหนดด้านภาษาของ Steelmanซึ่งเป็นชุดเอกสารที่ระบุข้อกำหนดที่พวกเขารู้สึกว่าภาษาโปรแกรมควรเป็นไปตามข้อกำหนด ภาษาที่มีอยู่จำนวนมากได้รับการตรวจสอบอย่างเป็นทางการ แต่ทีมงานสรุปในปี 2520 ว่าไม่มีภาษาใดที่ตรงตามข้อกำหนด

ออกัสตา เอด้า คิงเคานท์เตสแห่งเลิฟเลซ

มีการออกคำขอข้อเสนอสำหรับภาษาโปรแกรมใหม่และจ้างผู้รับเหมาสี่รายเพื่อพัฒนาข้อเสนอภายใต้ชื่อ Red ( Intermetricsนำโดย Benjamin Brosgol), Green ( CII Honeywell BullนำโดยJean Ichbiah ), Blue ( SofTechนำโดย John Goodenough) [20]และ Yellow ( SRI Internationalนำโดย Jay Spitzen) ในเดือนเมษายน พ.ศ. 2521 หลังจากการพิจารณาของสาธารณชน ข้อเสนอสีแดงและสีเขียวได้ผ่านไปยังขั้นตอนถัดไป ในเดือนพฤษภาคม พ.ศ. 2522 ข้อเสนอ Green ซึ่งออกแบบโดย Jean Ichbiah ที่ CII Honeywell Bull ได้รับเลือกและตั้งชื่อว่า Ada ตามชื่อAugusta Ada เคานท์เตสแห่งเลิฟเลข้อเสนอนี้ได้รับอิทธิพลจากภาษาLISที่ Ichbiah และกลุ่มของเขาได้พัฒนาขึ้นในปี 1970 คู่มืออ้างอิงเบื้องต้นของ Ada ได้รับการตีพิมพ์ในประกาศ ACM SIGPLAN ในเดือนมิถุนายน พ.ศ. 2522 คู่มืออ้างอิงมาตรฐานทางทหารได้รับการอนุมัติเมื่อวันที่ 10 ธันวาคม พ.ศ. 2523 ( วันเกิดของ Ada Lovelace ) และให้หมายเลข MIL-STD-1815 เพื่อเป็นเกียรติแก่การเกิดของ Ada Lovelace ปี. 2524 ในรถ Hoareใช้ประโยชน์จากทัวริงรางวัลสุนทรพจน์วิพากษ์วิจารณ์เอด้าเพราะซับซ้อนเกินไป และด้วยเหตุนี้ไม่น่าเชื่อถือ[21]แต่ดูเหมือนจะละเลยในคำนำที่เขาเขียนสำหรับตำราเอด้า [22]

Ada ได้รับความสนใจอย่างมากจากชุมชนการเขียนโปรแกรมโดยรวมในช่วงแรกๆ ผู้สนับสนุนและคนอื่น ๆ คาดการณ์ว่าอาจกลายเป็นภาษาที่โดดเด่นสำหรับการเขียนโปรแกรมเพื่อวัตถุประสงค์ทั่วไปและไม่ใช่แค่งานที่เกี่ยวข้องกับการป้องกันเท่านั้น [23] Ichbiah เปิดเผยต่อสาธารณชนว่าภายในสิบปี จะเหลือภาษาโปรแกรมเพียงสองภาษาเท่านั้น: Ada และLisp [24] คอมไพเลอร์ของ Ada ในยุคแรก ๆ มีปัญหาในการใช้ภาษาที่มีขนาดใหญ่และซับซ้อน และประสิทธิภาพทั้งเวลาคอมไพล์และรันไทม์มักจะช้าและเครื่องมือดั้งเดิม ผู้จำหน่ายคอมไพเลอร์ใช้ความพยายามส่วนใหญ่ในการผ่านการทดสอบความสอดคล้องของภาษา รัฐบาลต้องการชุดตรวจสอบความถูกต้อง "ACVC" ซึ่งจำเป็นในคุณลักษณะใหม่อีกประการหนึ่งของความพยายามด้านภาษาของเอด้า[24] ไฟล์ศัพท์แสงพจนานุกรมของคำแสลงของแฮ็กเกอร์คอมพิวเตอร์ที่มีต้นกำเนิดในปี 1975–1983 บันทึกไว้ในรายการของ Adaว่า "เป็นสิ่งที่คาดหวังได้อย่างแน่นอนเมื่อได้รับการสนับสนุนจากคำสั่งนั้น ออกแบบโดยคณะกรรมการ...ยากที่จะ ใช้และโดยรวมแล้วเป็นความหายนะมูลค่าหลายพันล้านดอลลาร์...เอด้า เลิฟเลซ...คงจะลวกๆ อย่างแน่นอนเมื่อใช้ชื่อของเธอถูกใส่ลงไป สิ่งที่ดีที่พูดเกี่ยวกับเรื่องนี้ก็คือว่าอาจจะมี ภาษาเล็กๆ ดีๆ ที่กรีดร้องให้หลุดออกจากภายในฝูงช้างขนาดมหึมา"

การใช้งาน Ada ที่ตรวจสอบความถูกต้องครั้งแรกคือนักแปล NYU Ada/Ed [25]ที่ได้รับการรับรองเมื่อวันที่ 11 เมษายน พ.ศ. 2526 NYU Ada/Ed ถูกนำมาใช้ในการตั้งค่าภาษาSETL ระดับ สูง [26]บริษัทการค้าหลายแห่งเริ่มเสนอคอมไพเลอร์ Ada และเครื่องมือในการพัฒนาที่เกี่ยวข้อง รวมถึงAlsys , TeleSoft , DDC-I , เทคนิคคอมพิวเตอร์ขั้นสูง , Tartan Laboratories , Irvine Compiler , TLD SystemsและVerdix [27]ผู้ผลิตคอมพิวเตอร์ที่มีธุรกิจสำคัญในการป้องกันประเทศ การบินและอวกาศ หรืออุตสาหกรรมที่เกี่ยวข้อง ยังได้เสนอคอมไพเลอร์และเครื่องมือของ Ada บนแพลตฟอร์มของพวกเขาด้วย ซึ่งรวมถึงConcurrent Computer Corporation , Cray Research, Inc.และSiemens Nixdorf Informationssysteme AG [27]

ในปีพ.ศ. 2534 กระทรวงกลาโหมสหรัฐเริ่มกำหนดให้ใช้ Ada ( อาณัติ ของ Ada ) สำหรับซอฟต์แวร์ทั้งหมด[28]แม้ว่ามักจะได้รับข้อยกเว้นสำหรับกฎนี้ [23] กระทรวงกลาโหมอาณัติของ Ada ถูกถอดออกอย่างมีประสิทธิภาพในปี 1997 ขณะที่กระทรวงกลาโหมเริ่มใช้เทคโนโลยีเชิงพาณิชย์ ( COTS ) เชิงพาณิชย์ [23]มีข้อกำหนดที่คล้ายคลึงกันใน ประเทศ NATOอื่นๆ: Ada จำเป็นสำหรับระบบ NATO ที่เกี่ยวข้องกับการบังคับบัญชาและการควบคุมและหน้าที่อื่นๆ และ Ada เป็นภาษาที่ได้รับคำสั่งหรือที่ต้องการสำหรับการใช้งานที่เกี่ยวข้องกับการป้องกันประเทศ เช่น สวีเดน เยอรมนี และแคนาดา [29]

ในช่วงปลายทศวรรษ 1980 และต้นทศวรรษ 1990 คอมไพเลอร์ของ Ada ได้ปรับปรุงประสิทธิภาพการทำงาน แต่ก็ยังมีอุปสรรคในการใช้ประโยชน์จากความสามารถของ Ada อย่างเต็มที่ รวมถึงรูปแบบการมอบหมายงานที่แตกต่างจากที่โปรแกรมเมอร์แบบเรียลไทม์ส่วนใหญ่เคยใช้ [24]

เนื่องจากคุณสมบัติสนับสนุน ที่สำคัญด้านความปลอดภัยของ Ada ตอนนี้จึงไม่เพียงแต่ใช้สำหรับการใช้งานทางการทหารเท่านั้น แต่ยังใช้ในโครงการเชิงพาณิชย์ด้วยซึ่งซอฟต์แวร์บั๊กอาจมีผลร้ายแรง เช่น ระบบการบินและการควบคุมการจราจรทางอากาศจรวดเชิงพาณิชย์ เช่นAriane 4 และ 5 , ดาวเทียมและระบบอวกาศอื่น ๆ การขนส่งทางรถไฟและการธนาคาร [18] ตัวอย่างเช่นระบบการจัดการข้อมูลเครื่องบิน ซอฟต์แวร์ระบบ fly -by-wireในโบอิ้ง 777ถูกเขียนในภาษา Ada [30] [31] พัฒนาโดยHoneywell Air Transport Systemsด้วยความร่วมมือกับที่ปรึกษาจากDDC-Iทำให้โครงการนี้เป็นที่รู้จักมากที่สุดในบรรดาโครงการของ Ada ทั้งพลเรือนและกองทัพ [30] [31]ระบบจราจรทางอากาศอัตโนมัติของแคนาดาเขียนด้วย Ada 1 ล้านบรรทัด ( นับ SLOC ) นำเสนอ การประมวลผลแบบกระจายขั้นสูงฐานข้อมูล Ada แบบกระจาย และการออกแบบเชิงวัตถุ Ada ยังใช้ในระบบการจราจรทางอากาศอื่นๆ เช่น ระบบ Interim Future Area Control Tools Support (iFACTS) ของสหราชอาณาจักรได้รับการออกแบบและใช้งานโดยใช้SPARK Ada [32] นอกจากนี้ยังใช้ใน ระบบส่งสัญญาณ TVMในห้องโดยสาร ของ ฝรั่งเศส บนTGVระบบรถไฟความเร็วสูงและรถไฟใต้ดินชานเมืองในปารีส ลอนดอน ฮ่องกง และนิวยอร์กซิตี้ [18] [33]

การทำให้เป็นมาตรฐาน

ภาษากลายเป็นมาตรฐาน ANSIในปี 1983 ( ANSI/MIL-STD 1815A ) และหลังจากการแปลเป็นภาษาฝรั่งเศสและภาษาอังกฤษโดยไม่มีการเปลี่ยนแปลงใดๆ เพิ่มเติม ก็ได้กลายมาเป็นมาตรฐาน ISOในปี 1987 (ISO-8652:1987) ภาษารุ่นนี้เรียกกันทั่วไปว่า Ada 83 ตั้งแต่วันที่ ANSI นำไปใช้ แต่บางครั้งเรียกว่า Ada 87 ตั้งแต่วันที่ ISO ยอมรับ

Ada 95 ซึ่งเป็นมาตรฐานร่วม ISO/ANSI ( ISO-8652:1995 ) เผยแพร่ในเดือนกุมภาพันธ์ 1995 ทำให้ Ada 95 เป็นภาษาการเขียนโปรแกรมเชิงวัตถุมาตรฐาน ISO ตัวแรก เพื่อช่วยในการแก้ไขมาตรฐานและการยอมรับในอนาคตกองทัพอากาศสหรัฐฯ ได้ให้ทุนสนับสนุนใน การพัฒนาGNAT Compiler ปัจจุบัน GNAT Compiler เป็นส่วนหนึ่งของGNU Compiler Collection

งานได้ดำเนินการปรับปรุงและอัปเดตเนื้อหาทางเทคนิคของภาษา Ada อย่างต่อเนื่อง A Technical Corrigendum to Ada 95 ได้รับการตีพิมพ์ในเดือนตุลาคม 2001 และ Amendment ISO/IEC 8652:1995/Amd 1:2007ได้รับการตีพิมพ์เมื่อวันที่ 9 มีนาคม 2550 ในการประชุม Ada-Europe 2012 ที่กรุงสตอกโฮล์ม Ada Resource Association (ARA) และ Ada-Europe ได้ประกาศเสร็จสิ้นการออกแบบภาษา Ada เวอร์ชันล่าสุด และการส่งคู่มืออ้างอิงไปยัง International Organization for Standardization (ISO) เพื่อขออนุมัติ ISO/IEC 8652:2012 เผยแพร่เมื่อเดือนธันวาคม 2555 [13]

มาตรฐานที่เกี่ยวข้องอื่นๆ ได้แก่ISO 8651 -3:1988 ระบบประมวลผลข้อมูล—คอมพิวเตอร์กราฟิก—การผูกภาษาระบบเคอร์เนลกราฟิก (GKS)—ส่วนที่ 3: Ada

โครงสร้างภาษา

Ada เป็น ภาษาการเขียนโปรแกรมที่คล้ายกับ ALGOLซึ่งมีโครงสร้างการควบคุมที่มีคำสงวนไว้ เช่นif , then , else , while , forและอื่นๆ อย่างไรก็ตาม Ada ยังมีโครงสร้างข้อมูลและสิ่งอำนวยความสะดวกอื่น ๆ ที่ไม่รวมอยู่ในALGOL 60 ดั้งเดิม เช่นคำจำกัดความประเภทเรคคอร์ดอยน์เตอร์ การแจงนับ โครงสร้างดังกล่าวส่วนหนึ่งได้รับมรดกมาจากหรือได้รับแรงบันดาลใจจาก Pascal

"สวัสดีชาวโลก!" ในเอด้า

ตัวอย่างทั่วไปของไวยากรณ์ ของภาษา คือโปรแกรม Hello world : (hello.adb)

ด้วย Ada.Text_IO ; 
ใช้ Ada.Text_IO ; 
ขั้นตอน สวัสดีเริ่ม แล้วPut_Line ( "สวัสดีชาวโลก!" ); จบสวัสดี;

    
 

โปรแกรมนี้สามารถคอมไพล์ได้โดยใช้คอมไพเลอร์โอเพ่นซอร์สที่มีให้ใช้ฟรีGNATโดยดำเนินการ

gnatmake สวัสดี.adb

ประเภทข้อมูล

ระบบประเภทของ Ada ไม่ได้อิงตามชุดของประเภทดั้งเดิม ที่กำหนดไว้ล่วงหน้า แต่อนุญาตให้ผู้ใช้ประกาศประเภทของตนเองได้ ในทางกลับกัน การประกาศนี้ไม่ได้ขึ้นอยู่กับการเป็นตัวแทนภายในของประเภท แต่เป็นการอธิบายเป้าหมายที่ควรจะสำเร็จ ซึ่งช่วยให้คอมไพเลอร์สามารถกำหนดขนาดหน่วยความจำที่เหมาะสมสำหรับประเภท และตรวจสอบการละเมิดข้อกำหนดประเภท ณ เวลาคอมไพล์และรันไทม์ (เช่น การละเมิดช่วง บัฟเฟอร์โอเวอร์รัน ความสอดคล้องของประเภท ฯลฯ) Ada รองรับประเภทตัวเลขที่กำหนดโดยช่วง, ประเภทโมดูล, ประเภทการรวม (เร็กคอร์ดและอาร์เรย์) และประเภทการแจงนับ ประเภทการเข้าถึงกำหนดการอ้างอิงถึงอินสแตนซ์ของประเภทที่ระบุ ไม่อนุญาตให้ใช้ตัวชี้ที่ไม่ได้พิมพ์ ประเภทพิเศษที่จัดเตรียมโดยภาษาคือประเภทงานและประเภทที่ได้รับการป้องกัน

ตัวอย่างเช่น วันที่อาจแสดงเป็น:

ชนิด Day_type    คือ range     1  ..    31 ; 
ชนิด Month_type  คือ range     1  ..    12 ; 
ประเภท Year_type   คือ ช่วง 1800  ..  2100 ; 
ประเภท Hours  คือ mod  24 ; 
ชนิด วันธรรมดา คือ ( จันทร์,  อังคาร,  พุธ,  พฤหัสบดี,  ศุกร์,  เสาร์,  อาทิตย์);

ชนิด วัน ที่
   บันทึก
     วัน   :  Day_type ; 
     เดือน :  Month_type ; 
     ปี  :  Year_type ; 
   จบบันทึก;

ประเภทสามารถปรับแต่งได้โดยการประกาศประเภทย่อย :

ชนิดย่อย Working_Hours  คือ ช่วงชั่วโมง 0 .. 12 ; -- สูงสุด 12 ชั่วโมงในการทำงานต่อวันชนิดย่อยWorking_Day คือช่วงวัน ทำงาน จันทร์.. ศุกร์; -- วันทำงาน               
          

Work_Load :  อาร์เรย์คง ที่  ( Working_Day ) ของWorking_Hours - การประกาศประเภทโดยนัย:= ( วันศุกร์=> 6 , วันจันทร์=> 4 , อื่นๆ=> 10 ); -- ค้นหาตารางชั่วโมงการทำงานด้วยการเริ่มต้น    
                       

ประเภทสามารถมีตัวดัดแปลงได้ เช่นจำกัด นามธรรม ส่วนตัวฯลฯ ประเภทส่วนตัวสามารถเข้าถึงได้เท่านั้นและประเภทที่ จำกัด สามารถแก้ไขหรือคัดลอกได้ภายในขอบเขตของแพ็คเกจที่กำหนดเท่านั้น [34] Ada 95 เพิ่มคุณสมบัติเพิ่มเติมสำหรับส่วนขยายประเภทเชิงวัตถุ

โครงสร้างการควบคุม

Ada เป็น ภาษา การเขียนโปรแกรมที่มีโครงสร้างหมายความว่าโฟลว์ของการควบคุมมีโครงสร้างเป็นคำสั่งมาตรฐาน รองรับโครงสร้างมาตรฐานทั้งหมดและการออกก่อนกำหนดระดับลึก ดังนั้นจึง ไม่ค่อยจำเป็นต้องใช้คำสั่ง " go to " ที่ได้รับการสนับสนุน เช่นกัน

-- ในขณะที่ a ไม่เท่ากับ b ให้วนซ้ำ 
ในขณะที่ a  /=  b  วน
  รอบAda Text_IO _ Put_Line ( "กำลังรอ" ); ปลายวง; 
 

ถ้า a  >  b  แล้ว
  Ada _ Text_IO _ Put_Line  ( "ตรงตามเงื่อนไข" ); 
เอด้าอีก
  . Text_IO _ Put_Line ( "ไม่ตรงตามเงื่อนไข" ); สิ้นสุดif ; 
 

สำหรับ ฉัน ใน 1  ..  10  วง
  Ada _ Text_IO _ ใส่ ( "วนซ้ำ: " ); 
  เอด้า. Text_IO _ ใส่ ( ผม); 
  เอด้า. Text_IO _ พุท_ไลน์; 
ปลาย วง;

วน
  a  :=  a  +  1 ; 
  ออก เมื่อ a  =  10 ; 
ปลาย วง;

กรณี i  คือ
  เมื่อ 0  =  > Ada Text_IO _ ใส่( "ศูนย์" ); เมื่อ1 = > Ada Text_IO _ ใส่( "หนึ่ง" ); เมื่อ2 = > Ada Text_IO _ ใส่( "สอง" ); -- คำชี้แจงกรณีต้องครอบคลุมกรณีที่เป็นไปได้ทั้งหมด: เมื่อelse = > Ada Text_IO _ ใส่( "ไม่มีรายการข้างต้น" ); ปลายกรณี 
      
      
  
      
 ;

สำหรับ aWeekday  ใน Weekday ' ช่วง การ  วนซ้ำ               -- วนรอบการแจงนับ
   Put_Line (  รูปภาพ วันทำงาน( aWeekday ) ); -- การแสดงสตริงเอาต์พุตของการแจงนับถ้าaWeekday ในWorking_Day แล้ว-- ตรวจสอบประเภทย่อยของการแจงนับPut_Line ( " เพื่อทำงานสำหรับ " & Working_Hours ' Image ( Work_Load ( aWeekday )) ); -- เข้าถึงตารางการค้นหาสิ้นสุดถ้า; จบ          
                      
         
                  
    
 ห่วง;

แพ็คเกจ ขั้นตอน และฟังก์ชั่น

ส่วนหนึ่งของโปรแกรม Ada ได้แก่ แพ็คเกจ ขั้นตอนและฟังก์ชัน

ตัวอย่าง: ข้อมูลจำเพาะของแพ็คเกจ (example.ads)

package  ตัวอย่าง คือ
     ประเภท Number  คือ range  1  ..  11 ; 
     ขั้นตอน Print_and_Increment  ( j : in  out  Number ); 
จบ ตัวอย่าง;

เนื้อหาของแพ็คเกจ (example.adb)

ด้วย Ada.Text_IO ; 
ตัวบรรจุภัณฑ์ ตัวอย่างคือ  

  i  :  Number  :=  Number ' ก่อน;

  ขั้นตอน Print_and_Increment  ( j : in  out  Number )  is

    ฟังก์ชั่น ถัดไป ( k : ใน Number )  return  Number  คือ
    start 
      return  k  +  1 ; 
    จบ ถัดไป;

  เริ่ม
    เอด้า Text_IO _ Put_Line ( "ผลรวมคือ: " & หมายเลข' รูปภาพ( j ) ); j := ถัดไป( j ); สิ้นสุดPrint_and_Increment ;     
       
   


-- การ เริ่ม
  ต้นแพ็คเกจดำเนินการเมื่อมีการอธิบายแพ็คเกจอย่างละเอียดในขณะที่ i  <  Number ' Last  loop 
    Print_and_Increment  ( i ); 
  ปลาย วง; 
จบ ตัวอย่าง;

โปรแกรมนี้สามารถคอมไพล์ได้ เช่น โดยใช้คอมไพเลอร์โอเพ่นซอร์สGNAT ที่มีให้ใช้งานฟรี โดยดำเนินการ

gnatmake -z ตัวอย่าง.adb

แพ็คเกจ โพรซีเดอร์ และฟังก์ชันสามารถซ้อนได้ลึกเท่าใดก็ได้ และแต่ละอันสามารถเป็นบล็อกนอกสุดเชิงตรรกะได้เช่นกัน

แต่ละแพ็คเกจ โพรซีเดอร์ หรือฟังก์ชันสามารถมีการประกาศค่าคงที่ ชนิด ตัวแปร และโพรซีเดอร์ ฟังก์ชัน และแพ็คเกจอื่นๆ ของตัวเอง ซึ่งสามารถประกาศในลำดับใดก็ได้

พร้อมกัน

Ada รองรับภาษาสำหรับการทำงานพร้อมกันตามภารกิจ หน่วยการทำงานพร้อมกันขั้นพื้นฐานใน Ada คืองานซึ่งเป็นประเภทจำกัดในตัว งานถูกระบุในสองส่วน – การประกาศงานกำหนดอินเทอร์เฟซของงาน (คล้ายกับการประกาศประเภท) เนื้อหาของงานจะระบุการใช้งานของงาน ขึ้นอยู่กับการใช้งาน งานของ Ada จะถูกแมปกับเธรดของระบบปฏิบัติการหรือกระบวนการ หรือถูกจัดกำหนดการภายในโดยรันไทม์ของ Ada

งานสามารถมีรายการสำหรับการซิงโครไนซ์ (รูปแบบการส่งข้อความแบบซิงโครนัส ) รายการงานถูกประกาศในข้อมูลจำเพาะของงาน รายการงานแต่ละรายการสามารถมี คำสั่ง ยอมรับ ได้ตั้งแต่หนึ่ง คำสั่งขึ้นไปภายในเนื้อหาของงาน ถ้าขั้นตอนการควบคุมของงานไปถึงคำสั่ง accept งานจะถูกบล็อกจนกว่างานอื่นจะเรียกรายการที่ตรงกัน (ในทำนองเดียวกัน งานที่เรียกจะถูกบล็อกจนกว่างานที่เรียกจะไปถึงคำสั่งยอมรับที่สอดคล้องกัน) รายการงานสามารถมีพารามิเตอร์ที่คล้ายกับโพรซีเดอร์ ทำให้งานสามารถแลกเปลี่ยนข้อมูลแบบซิงโครนัสได้ ร่วมกับ คำสั่ง selectเป็นไปได้ที่จะกำหนดguardsในคำสั่ง accept (คล้ายกับ Dijkstra's guarded commands )

Ada ยังเสนออ็อบเจ็กต์ที่ได้รับการป้องกันสำหรับการยกเว้นร่วมกัน วัตถุที่ได้รับการป้องกันเป็นโครงสร้างที่คล้ายกับจอภาพแต่ใช้การ์ดแทนตัวแปรตามเงื่อนไขสำหรับการส่งสัญญาณ (คล้ายกับบริเวณวิกฤตที่มีเงื่อนไข) ออบเจ็กต์ที่ได้รับการป้องกันจะรวมการห่อหุ้มข้อมูลและการยกเว้นร่วมกันที่ปลอดภัยจากมอนิเตอร์ และยามเข้าจากพื้นที่วิกฤตที่มีเงื่อนไข ข้อได้เปรียบหลักเหนือจอภาพแบบคลาสสิกคือ ไม่จำเป็นต้องใช้ตัวแปรตามเงื่อนไขสำหรับการส่งสัญญาณ เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดการชะงักงันเนื่องจากความหมายการล็อกที่ไม่ถูกต้อง เช่นเดียวกับงาน วัตถุที่ได้รับการป้องกันเป็นแบบจำกัดในตัว และยังมีส่วนการประกาศและเนื้อหาอีกด้วย

ออบเจ็กต์ที่ได้รับการคุ้มครองประกอบด้วยข้อมูลส่วนตัวที่ห่อหุ้ม (ซึ่งสามารถเข้าถึงได้จากภายในอ็อบเจ็กต์ที่ได้รับการคุ้มครองเท่านั้น) และขั้นตอน ฟังก์ชัน และรายการซึ่งรับประกันว่าจะแยกจากกัน (ยกเว้นฟังก์ชันเท่านั้น ซึ่งต้องปราศจากผลข้างเคียง และสามารถทำงานควบคู่ไปกับฟังก์ชันอื่นๆ ได้) งานที่เรียกวัตถุที่ได้รับการป้องกันจะถูกบล็อกถ้างานอื่นกำลังดำเนินการภายในวัตถุที่ได้รับการป้องกันเดียวกัน และปล่อยออกมาเมื่องานอื่นออกจากวัตถุที่ได้รับการป้องกัน งานที่ถูกบล็อกจะถูกจัดคิวในวัตถุที่ได้รับการป้องกันโดยเรียงลำดับตามเวลาที่มาถึง

รายการวัตถุที่ได้รับการป้องกันนั้นคล้ายกับขั้นตอน แต่มียามเพิ่มเติม หากผู้คุ้มกันประเมินเป็นเท็จ ภารกิจการโทรจะถูกบล็อกและเพิ่มลงในคิวของรายการนั้น ขณะนี้สามารถยอมรับงานอื่นไปยังวัตถุที่ได้รับการป้องกันได้ เนื่องจากไม่มีงานใดที่กำลังดำเนินการภายในวัตถุที่ได้รับการป้องกัน ยามจะได้รับการประเมินใหม่ทุกครั้งที่งานออกจากวัตถุที่ได้รับการคุ้มครอง เนื่องจากเป็นครั้งเดียวที่การประเมินผู้พิทักษ์สามารถเปลี่ยนแปลงได้

การโทรไปยังรายการสามารถจัดคิวไปยังรายการอื่นที่มีลายเซ็นเดียวกันได้ งานที่ถูกจัดคิวใหม่จะถูกบล็อกและเพิ่มไปยังคิวของรายการเป้าหมาย นี่หมายความว่าวัตถุที่ได้รับการป้องกันถูกปล่อยและอนุญาตให้รับงานอื่นได้

คำ สั่ง selectใน Ada สามารถใช้เพื่อใช้งานการเรียกเข้าที่ไม่มีการปิดกั้นและยอมรับ การเลือกรายการแบบไม่กำหนด (รวมถึงยาม) การหมดเวลาและการยกเลิก

ตัวอย่างต่อไปนี้แสดงแนวคิดบางอย่างของการเขียนโปรแกรมพร้อมกันใน Ada

ด้วย Ada.Text_IO ;  ใช้ Ada.Text_IO ;

ขั้นตอน การจราจร คือ

   ประเภท Airplane_ID  คือ range  1 . 10 ;              -- เครื่องบิน 10 ลำ

    ประเภท งานเครื่องบิน ( ID : Airplane_ID );         -- งานที่แสดงถึงเครื่องบิน โดยมี ID เป็นพารามิเตอร์การเริ่มต้นใช้งาน
   ประเภท Airplane_Access  คือ การเข้าถึง เครื่องบิน;      -- ประเภทอ้างอิงถึงเครื่องบิน

    ประเภทที่ ได้รับการป้องกันรันเวย์ คือ                     -- รันเวย์ที่ใช้ร่วมกัน (ได้รับการป้องกันเพื่อให้เข้าถึงได้พร้อมกัน) 
      รายการ Assign_Aircraft  ( ID : Airplane_ID );   -- รายการทั้งหมดได้รับการรับรอง
      รายการ Cleared_Runway  ( ID : Airplane_ID ); 
      รายการ Wait_For_Clear ; 
   เคลียร์ส่วนตัว
      : บูลีน:= จริง; -- ป้องกันข้อมูลส่วนตัว -- โดยทั่วไปมากกว่าแค่แฟล็ก... end Runway ; พิมพ์Runway_Access คือการเข้าถึงทั้งหมด                      
    
        รันเวย์;

   
   -- งานควบคุมการจราจรทางอากาศรับคำขอสำหรับ งาน บินขึ้นและลงจอดประเภท Controller  ( My_Runway : Runway_Access )  คือ
      -- รายการงานสำหรับข้อความซิงโครนัสที่ส่งผ่าน
      รายการ Request_Takeoff  ( ID : ใน Airplane_ID ;  Takeoff : out  Runway_Access ); 
      รายการ Request_Approach ( ID : ใน Airplane_ID ;  Approach : out  Runway_Access ); 
   ตัวควบคุมปลาย ;

   -- การจัดสรรอินสแตนซ์
   Runway1     :  นามแฝง Runway ;               -- สร้างตัวอย่างรันเวย์
   Controller1 :  Controller  ( Runway1 ' Access );  -- และตัวควบคุมเพื่อจัดการมัน

   ------ การใช้งานของประเภทข้างต้น ------ 
   ร่างกายที่ได้รับการป้องกัน รันเวย์คือรายการAssign_Aircraft ( ID : Airplane_ID ) เมื่อClear คือ-- การเข้ายาม - การโทรจะถูกบล็อกจนกว่าเงื่อนไขจะเป็นจริงเริ่มต้นClear : = เท็จ; Put_Line ( Airplane_ID ' รูปภาพ( ID ) & " บนรันเวย์ " ); จบ;  
        
      
      
         
           
      

      รายการ Cleared_Runway  ( ID : Airplane_ID ) 
 เมื่อ ไม่ Clear  จะ
      เริ่ม
         Clear  :=  True ; 
         Put_Line  ( Airplane_ID ' Image  ( ID )  &  "เคลียร์รันเวย์" ); 
      จบ;

      รายการ Wait_For_Clear 
 เมื่อ Clear  เริ่มต้นเป็น
      โมฆะ; -- ไม่จำเป็นต้องทำอะไรที่นี่ - งานสามารถป้อนได้ก็ต่อเมื่อ "Clear" เป็น true end ; สิ้นสุดรันเวย์;
               
      
    

   task  body  Controller  คือ
   start 
      loop 
         My_Runway _ Wait_For_Clear ;    -- รอจนกว่ารันเวย์จะพร้อมใช้งาน (บล็อกการโทร) 
         เลือก                      -- รอคำขอสองประเภท (แล้วแต่ว่าจะเรียกใช้อะไรก่อน) 
            เมื่อ Request_Approach ' count  =  0  =>   -- คำสั่งยาม - ยอมรับเฉพาะในกรณีที่ไม่มีงานที่รอคิวใน Request_Approach 
             ยอมรับ Request_Takeoff  ( ID :  ใน Airplane_ID ;  Takeoff :  out  Runway_Access ) 
             ทำ                                 - เริ่มต้นส่วนที่ซิงโครไนซ์
               มาย_รันเวย์ Assign_Aircraft  ( ID );   -- รันเวย์สำรอง (อาจขัดขวางการโทรหากวัตถุที่ได้รับการป้องกันไม่ว่างหรือยามทางเข้าเป็นเท็จ) 
               Takeoff  :=  My_Runway ;             -- กำหนดค่าพารามิเตอร์ "ออก" เพื่อบอกเครื่องบินว่า
             สิ้นสุด ทางวิ่งใด  Request_Takeoff ;                -- สิ้นสุดส่วนที่ซิงโครไน
         ซ์หรือ
            ยอมรับ Request_Approach  ( ID :  ใน Airplane_ID ;  Approach :  out  Runway_Access )  ทำ
               My_Runway Assign_Aircraft ( ID ); เข้าใกล้ 
                :=  My_Runway ; 
            สิ้นสุด Request_Approach ; 
         หรือ                          -- ยุติหากไม่มีงานเหลือที่สามารถเรียก
            ยุติ; 
         สิ้นสุด การเลือก; 
      ปลาย วง; 
   จบ;

    ตัว งานเครื่องบิน เป็น
      Rwy  :  Runway_Access ; 
   เริ่ม
      ควบคุม1 . Request_Takeoff  ( ID ,  Rwy );  -- การโทรนี้จะบล็อกจนกว่างาน Controller จะยอมรับและเสร็จสิ้นการรับบล็อก
      Put_Line  ( ภาพAirplane_ID ' ( ID ) & " กำลังปิด..." ); ล่าช้า2.0 ; รวี. Cleared_Runway ( ID ); -- การโทรจะไม่บล็อกเนื่องจาก "ล้าง" ใน Rwy เป็นเท็จและไม่ควรมีงานอื่นใดอยู่ในวัตถุที่ได้รับการป้องกัน   
       
                      
      ล่าช้า 5.0 ;  -- บินไปนิดหน่อย... 
      เลือกลูป
         -- ลองขอรันเวย์Controller1 Request_Approach ( ID , Rwy ); -- นี่คือการเรียกบล็อค - จะทำงานบนคอนโทรลเลอร์ที่เข้าถึงบล็อกที่ยอมรับและกลับมาเมื่อออกจน เสร็จ -- หากมีการเรียกกลับ เรามีความชัดเจนสำหรับการลงจอด - ออกจากบล็อกที่เลือกและดำเนินการต่อ... หรือล่าช้า3.0 ; -- หมดเวลา - หากไม่มีคำตอบใน 3 วินาที ให้ทำอย่างอื่น (ทุกอย่างในบล็อกถัดไป) Put_Line ( Airplane_ID ' Image ( ID ) &   
               
             
         
               
                " ในรูปแบบถือ" );   -- เพียงพิมพ์ข้อความ
         end  select ; 
      ปลาย วง; 
      ล่าช้า 4.0 ;   -- ทำการลงจอด... 
      Put_Line  ( Airplane_ID ' Image  ( ID )  &  " แตะลงแล้ว!" ); 
      รวี. Cleared_Runway  ( ID );   -- แจ้งรันเวย์ว่าเสร็จแล้วครับ 
   จบ;

   ใหม่_ เครื่องบิน :  Airplane_Access ;

เริ่มต้น
   สำหรับ ฉัน ใน Airplane_ID ' Range  loop   - สร้างงานเครื่องบินสองสามงาน
      New_Airplane  :=  new  Airplane  ( I );  -- จะเริ่มทำงานโดยตรงหลังจากสร้าง
      ดีเลย์ 4.0 ; 
   ปลาย วง; 
สิ้นสุด การจราจร;

แพรกมาส

Pragma เป็นคำสั่งคอมไพเลอร์ที่ถ่ายทอดข้อมูลไปยังคอมไพเลอร์เพื่อให้สามารถจัดการเฉพาะเอาต์พุตที่คอมไพล์ได้ [35] Pragmas บางอย่างถูกสร้างขึ้นในภาษา[36]ในขณะที่บาง Pragmas นั้นมีการใช้งานเฉพาะ

ตัวอย่างการใช้งานทั่วไปของคอมไพเลอร์ Pragmas คือการปิดใช้งานคุณสมบัติบางอย่าง เช่น การตรวจสอบประเภทรันไทม์หรือการตรวจสอบขอบเขตของอาร์เรย์ห้อย หรือสั่งให้คอมไพเลอร์แทรกโค้ดอ็อบเจ็กต์แทนการเรียกใช้ฟังก์ชัน (ตามที่ C/C++ ทำกับฟังก์ชันอินไลน์ ).

ทั่วไป

Ada มียาชื่อสามัญตั้งแต่ได้รับการออกแบบครั้งแรกในปี 2520-2523 ห้องสมุดมาตรฐานใช้ชื่อสามัญเพื่อให้บริการมากมาย Ada 2005 เพิ่มไลบรารีคอนเทนเนอร์ทั่วไปที่ครอบคลุมให้กับไลบรารีมาตรฐาน ซึ่งได้รับแรงบันดาลใจจากไลบรารีเทมเพลตมาตรฐานของ C++

หน่วยทั่วไปคือแพ็คเกจหรือโปรแกรมย่อยที่ใช้พารามิเตอร์ที่เป็นทางการทั่วไป ตั้งแต่หนึ่งรายการขึ้น ไป

พารามิเตอร์ที่ เป็นทางการทั่วไปคือค่า ตัวแปร ค่าคงที่ ชนิด โปรแกรมย่อย หรือแม้แต่อินสแตนซ์ของหน่วยทั่วไปอื่นที่กำหนด สำหรับประเภทที่เป็นทางการทั่วไป ไวยากรณ์จะแยกแยะระหว่างประเภทที่ไม่ต่อเนื่อง จุดทศนิยม จุดคงที่ การเข้าถึง (ตัวชี้) เป็นต้น พารามิเตอร์ที่เป็นทางการบางตัวสามารถมีค่าดีฟอลต์ได้

ในการสร้างอินสแตนซ์ของหน่วยทั่วไป โปรแกรมเมอร์จะส่งพารามิเตอร์จริง สำหรับแต่ละรูปแบบ อินสแตนซ์ทั่วไปจะทำงานเหมือนกับหน่วยอื่นๆ เป็นไปได้ที่จะสร้างอินสแตนซ์ของหน่วยทั่วไปที่รันไทม์ตัวอย่างเช่น ภายในลูป

ดูเพิ่มเติม

  • APSE – ข้อกำหนดสำหรับสภาพแวดล้อมการเขียนโปรแกรมเพื่อรองรับการพัฒนาซอฟต์แวร์ใน Ada
  • โปรไฟล์ Ravenscar – ชุดย่อยของคุณสมบัติการมอบหมายงานของ Ada ที่ออกแบบมาสำหรับการประมวลผลแบบเรียลไทม์ที่มีความสำคัญต่อความปลอดภัย
  • SPARK (ภาษาโปรแกรมมิง) – ภาษาโปรแกรมที่ประกอบด้วยชุดย่อยของ Ada ที่มีการจำกัดอย่างสูง พร้อมคำอธิบายประกอบด้วยข้อมูลเมตาที่อธิบายลักษณะการทำงานของส่วนประกอบที่ต้องการและข้อกำหนดรันไทม์แต่ละรายการ

อ้างอิง

  1. ^ "Technical Corrigendum for Ada 2012 เผยแพร่โดย ISO " สมาคมทรัพยากรเอด้า 2016-01-29 . ดึงข้อมูลเมื่อ2016-02-23 .
  2. ^ "คู่มืออ้างอิงภาษา Ada 2012 รวม" . หน่วยงานประเมินความสอดคล้องของ Ada เก็บถาวรจากต้นฉบับเมื่อ 2016-03-03 . ดึงข้อมูลเมื่อ2016-02-23 .
  3. ^ ดาวน์โหลดฟรี: https://www.adacore.com/download )
  4. ^ "PTC ObjectAda" . ปตท. คอม. สืบค้นเมื่อ2014-01-27 .
  5. ^ "ตัวเปลี่ยน MapuSoft Ada-C/C++" . 16 เมษายน 2019.
  6. ^ "AdaMagic พร้อมใบรับรองระดับกลาง C" .
  7. ^ Ada Rationale, 1986, หน้า 23, 70, 110–114, 137, 165, 236
  8. ^ "ข้อมูลจำเพาะของโบสถ์ (รับทราบ)" (PDF) . Cray Inc. 2015-10-01 . สืบค้นเมื่อ2016-01-14 .
  9. ^ "ดราโก้" . เก็บถาวรจากต้นฉบับเมื่อ 2020-09-14 . สืบค้นเมื่อ2018-08-06 .
  10. ^ "กริฟฟิน" .
  11. ^ "สปาร์ฟอร์เต" .
  12. ↑ แกนส์เล่, แจ็ค (2013-05-29) . "Ada Resource Association – ข่าวสารและทรัพยากรสำหรับภาษาโปรแกรม Ada " Adaic.org _ สืบค้นเมื่อ 2013-06-14 .
  13. a b "ISO/IEC 8652:2012 Information technology – Programming languages ​​– Ada " . องค์การระหว่างประเทศเพื่อการมาตรฐาน. สืบค้นเมื่อ2012-12-23 .
  14. ^ "ภาษาโปรแกรมเอด้า" . มหาวิทยาลัยมิช. เก็บถาวรจากต้นฉบับเมื่อ 2016-05-22 . สืบค้นเมื่อ27 พฤษภาคม 2559 .
  15. ^ ฟุเอกิ เจ; ฟรานซิส เจ (2003). "Lovelace & Babbage และการสร้าง 'โน้ต' ในปีพ. ศ. 2386" พงศาวดาร IEEE แห่งประวัติศาสตร์คอมพิวเตอร์ 25 ( 4): 16–26 ดอย : 10.1109/MAHC.2003.1253887 . S2CID  40077111 .
  16. ^ "การทำงานพร้อมกัน - บทที่ 6 - Ada 95 คู่มือคุณภาพและรูปแบบ " adaic.org _ สืบค้นเมื่อ5 พฤศจิกายนพ.ศ. 2564 .
  17. ^ เทฟท์ เอส. ทักเกอร์; โอลเซ่น, ฟลอเรนซ์ (1999-06-30) "เอด้าช่วยปั่นโค้ดที่บั๊กน้อย" . ข่าวคอมพิวเตอร์รัฐบาล. หน้า 2–3 . สืบค้นเมื่อ2010-09-14 .
  18. อรรถเป็น c เฟลด์แมน ไมเคิล “ใครใช้เอด้า” . คณะทำงาน SIGada Education
  19. ^ ไม่มีการจัดการหน่วยความจำแบบไดนามิกที่ปลอดภัยใน ADAใน: การเขียน Linux Kernel Modules ใน Safe Rust - Geoffrey Thomas & Alex Gaynor , The Linux Foundation, 2019-10-02
  20. ^ "John Goodenough | โปรไฟล์พนักงาน SEI " Sei.cmu.edu . สืบค้นเมื่อ2014-01-27 .
  21. ^ รถยนต์, Hoare (1981). "เสื้อผ้าเก่าของจักรพรรดิ" (PDF) . การสื่อสาร ของACM สมาคมเครื่องจักรคอมพิวเตอร์ . 24 (2): 75–83. ดอย : 10.1145/358549.358561 . S2CID 97895 .  
  22. ^ วัตต์ ดา; วิชมานน์, บริติชโคลัมเบีย; ไฟนด์เลย์, ดับเบิลยู. (1987). เอด้า: ภาษาและระเบียบวิธี . ศิษย์ฮอลล์.
  23. อรรถa b c d Sward, Ricky E. (พฤศจิกายน 2010) "ความรุ่งโรจน์ การล่มสลาย และความคงอยู่ของเอด้า" SIGada '10: การดำเนินการของการประชุมนานาชาติประจำปี ACM SIGada เกี่ยวกับ SIGada หน้า 71–74. ดอย : 10.1145/1879063.1879081 .
  24. อรรถเป็น c โรเซน เจ. (สิงหาคม 2552). "เอด้า พาราด็อกซ์". จดหมายเอด้า . เอซีเอ็ม ซิกาดา 24 (2): 28–35. ดอย : 10.1145/1620593.1620597 . S2CID 608405 . 
  25. ^ บริษัทซอฟเทค (1983-04-11) "รายงานสรุปการตรวจสอบความถูกต้องของคอมไพเลอร์ Ada: NYU Ada/ED เวอร์ชัน 19.7 V-001 " วอลแทม, แมสซาชูเซตส์ เก็บถาวรจากต้นฉบับเมื่อ 2012-03-12 สืบค้นเมื่อ2010-12-16 .
  26. เดวาร์ โรเบิร์ต บีเค; ฟิชเชอร์, เจอรัลด์เอ. จูเนียร์; ชอนเบิร์ก, เอ็ดมอนด์; โฟลิช, โรเบิร์ต; ไบรอันท์, สตีเฟน; Goss, คลินตัน เอฟ.; เบิร์ก, ไมเคิล (พฤศจิกายน 1980). "นักแปลและล่าม NYU Ada" ประกาศ ACM SIGPLAN – การดำเนินการของการประชุมวิชาการ ACM-SIGPLAN เกี่ยวกับภาษาการเขียนโปรแกรม Ada 15 (11): 194–201. ดอย : 10.1145/948632.948659 . ISBN 0-89791-030-3. S2CID  10586359 .
  27. ^ a b "รายการคอมไพเลอร์ที่ตรวจสอบความถูกต้องของ Ada" สำนักหักบัญชีข้อมูลเอด้า 1 กรกฎาคม 1992 หน้า 1–36
  28. ↑ สำนักหักบัญชีข้อมูลเอด้า (1983-04-11 ) "อาณัติอาณัติของรัฐสภา" . เก็บถาวรจากต้นฉบับเมื่อ 2016-03-04 . สืบค้นเมื่อ2015-06-07 .
  29. ^ Babiak, Nicholas J. (1989). Ada ภาษาคอมพิวเตอร์ระบบอาวุธ DoD ใหม่ – Panacea or Calamity (PDF ) มหาวิทยาลัยอากาศ (กองทัพอากาศสหรัฐ) . น. 39–40.
  30. อรรถเป็น เรห์เมอร์, คาร์ล (2009). "ทีม HADS" ในสเตลแมน แอนดรูว์; กรีน, เจนนิเฟอร์ (สหพันธ์). ทีมที่สวยงาม: เรื่องราวที่สร้างแรงบันดาลใจและเตือนใจจากผู้นำทีมรุ่นเก๋า เซบาสโตโพล์ แคลิฟอร์เนีย: โอไรล์ลี น. 299–312.
  31. อรรถเป็น วูล์ฟ อเล็กซานเดอร์ (ตุลาคม 2547) "ยังมีชีวิตเหลืออยู่ในเอด้า" . คิวACM 2 (7): 28–31. ดอย : 10.1145/1035594.1035608 .
  32. อดาคอร์. "GNAT Pro ถูกเลือกสำหรับระบบ ATC ยุคหน้าของสหราชอาณาจักร " เก็บถาวรจากต้นฉบับเมื่อ 2010-12-24 . ดึงข้อมูลเมื่อ2011-03-01
  33. อดาคอร์. "ดูสิใครใช้เอด้า " เก็บถาวรจากต้นฉบับเมื่อ 2010-12-24 . ดึงข้อมูลเมื่อ2011-03-01
  34. ^ "การ์ดไวยากรณ์ Ada" (PDF) . เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 6 กรกฎาคม 2554 . สืบค้นเมื่อ28 กุมภาพันธ์ 2011 .
  35. ^ "เอด้า 83 LRM, วินาที 2.8: Pragmas" . เอกสารเก่า. adaic.com สืบค้นเมื่อ2014-01-27 .
  36. ^ "Ada 83 LRM, Appendix/Annex B: Predefined Language Pragmas" . เอกสารเก่า.adaic.com เก็บถาวรจากต้นฉบับเมื่อ 2012-02-06 สืบค้นเมื่อ2014-01-27 .

มาตรฐานสากล

เหตุผล

เอกสารเหล่านี้ได้รับการตีพิมพ์ในรูปแบบต่างๆ รวมทั้งการพิมพ์

หนังสือ

  • บูช, เกรดี้ (1987). วิศวกรรมซอฟต์แวร์ด้วย Ada . แคลิฟอร์เนีย: บริษัทสำนักพิมพ์ Benjamin/Cummings ISBN 0-8053-0604-8.
  • Skansholm, ม.ค. (1996). เอด้า 95 จากจุดเริ่มต้น . แอดดิสัน-เวสลีย์. ISBN 0-201-40376-5.
  • กิลพิน, เจฟฟ์ (1985). Ada: ไกด์ทัวร์และบทช่วย สอน ศิษย์ฮอลล์. ISBN 978-0-13-004045-9.
  • บาร์นส์, จอห์น (2006). การเขียนโปรแกรม ในAda 2005 แอดดิสัน-เวสลีย์. ISBN 0-321-34078-7.
  • บาร์นส์, จอห์น (1991). การเขียนโปรแกรมใน Ada plus คู่มืออ้างอิงภาษา แอดดิสัน-เวสลีย์. ISBN 0-201-56539-0.
  • บาร์นส์, จอห์น (1998). การเขียนโปรแกรม ในAda 95 แอดดิสัน-เวสลีย์. ISBN 0-201-34293-6.
  • บาร์นส์, จอห์น (1997). High Integrity Ada : แนวทาง SPARK แอดดิสัน-เวสลีย์. ISBN 0-201-17517-7.
  • บาร์นส์, จอห์น (2003). ซอฟต์แวร์ที่มีความสมบูรณ์สูง: แนวทาง SPARK เพื่อความปลอดภัยและความปลอดภัย แอดดิสัน-เวสลีย์. ISBN 0-321-13616-0.
  • ไบด์เลอร์, จอห์น (1997). โครงสร้างข้อมูลและอัลกอริทึม: แนวทางเชิงวัตถุโดยใช้ Ada 95 สปริงเกอร์-แวร์แล็ก. ISBN 0-387-94834-1.
  • กอนซาเลซ, ดีน ดับเบิลยู. (1991). คู่มือโปรแกรมเมอร์ของเอด้า บริษัทสำนักพิมพ์เบนจามิน-คัมมิงส์. ISBN 0-8053-2529-8.
  • Ben-Ari, M. (1998). Ada สำหรับวิศวกรซอฟต์แวร์ จอห์น ไวลีย์ แอนด์ ซันส์. ISBN 0-471-97912-0.
  • โคเฮน, นอร์แมน (1996). เอด้าเป็นภาษาที่สอง McGraw-Hill วิทยาศาสตร์/วิศวกรรม/คณิตศาสตร์. ISBN 0-07-011607-5.
  • เบิร์นส์, อลัน ; เวลลิงส์, แอนดี้ (2001). ระบบเรียลไทม์และภาษาการเขียนโปรแกรม Ada 95, Real-Time Java และ Real-Time POSIX แอดดิสัน-เวสลีย์. ISBN 0-201-72988-1.
  • เบิร์นส์, อลัน ; เวลลิงส์, แอนดี้ (1995). การทำงานพร้อม กันใน Ada สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์. ISBN 0-521-62911-X.
  • แอตกินสัน, โคลิน (1991). การใช้ซ้ำเชิงวัตถุ การทำงานพร้อมกัน และการกระจาย: วิธีการตาม Ada แอดดิสัน-เวสลีย์. ISBN 0-201-56527-7.
  • บูช, เกรดี้ ; ไบรอัน, ดั๊ก (1994). วิศวกรรมซอฟต์แวร์ด้วย Ada . แอดดิสัน-เวสลีย์. ISBN 0-8053-0608-0.
  • โจนส์ ทำในขณะที่ (1989). การใช้งานจริงของ Ada: ด้วยตัวอย่างการเขียนโปรแกรม เชิงปฏิบัติ จอห์น ไวลีย์ แอนด์ ซันส์. ISBN 0-471-60708-8.
  • สตับส์, แดเนียล; เวเบร, นีล ดับเบิลยู. (1993). โครงสร้างข้อมูลที่มีประเภท ข้อมูลนามธรรมและ Ada บรู๊คส์ โคล. ISBN 0-534-14448-9.
  • Ledru, Pascal (ธันวาคม 1998). การเขียนโปรแกรมแบบกระจายใน Ada พร้อมวัตถุที่ได้ รับการป้องกัน วิทยานิพนธ์.com ISBN 1-58112-034-6.
  • คัลวิน, ฟินตัน (1997). เอด้า แนวทางการพัฒนา . ศิษย์ฮอลล์. ISBN 0-13-264680-3.
  • อังกฤษ, จอห์น; Culwin, Fintan (มกราคม 1997). Ada 95 งานฝีมือของการเขียนโปรแกรมเชิงวัตถุ ศิษย์ฮอลล์. ISBN 0-13-230350-7.
  • มัสเซอร์, เดวิด อาร์.; สเตฟานอฟ, อเล็กซานเดอร์ (24 ตุลาคม 1989) ไลบรารีทั่วไปของ Ada: แพ็คเกจการประมวลผลรายการเชิงเส้น สปริงเกอร์-แวร์แล็ก. ISBN 0-387-97133-5.
  • เฟลด์แมน, ไมเคิล บี. (1997). การสร้างซอฟต์แวร์และโครงสร้างข้อมูลด้วย Ada 95 แอดดิสัน-เวสลีย์. ISBN 0-201-88795-9.
  • จอห์นสตัน, ไซม่อน (1997). Ada 95 สำหรับโปรแกรมเมอร์ C และ C ++ แอดดิสัน-เวสลีย์. ISBN 0-201-40363-3.
  • เฟลด์แมน, ไมเคิล บี.; คอฟฟ์แมน, เอลเลียต บี. (1992–1993). Ada: การแก้ปัญหาและการออกแบบโปรแกรม แอดดิสัน-เวสลีย์. ISBN 0-201-52279-9.795 หน้า
  • เฟลด์แมน, ไมเคิล บี. ; คอฟฟ์แมน, เอลเลียต บี. (1999). เอด้า 95 . แอดดิสัน-เวสลีย์. ISBN 0-201-36123-X.
  • เดล, เนล บี. ; วีมส์ ชิป; แมคคอร์มิก, จอห์น (สิงหาคม 2539). การเขียนโปรแกรมและการแก้ปัญหาด้วย Ada 95 สำนักพิมพ์โจนส์และบาร์ตเล็ต ISBN 0-7637-0293-5.
  • เดล, เนล บี. ; แมคคอร์มิก, จอห์น (2007). Ada Plus Data Structures: An Object-Oriented Approach รุ่นที่ 2 สำนักพิมพ์โจนส์และบาร์ตเล็ต ISBN 978-0-7637-3794-8.
  • เครลล์, บรูซ ซี. (1992). การพัฒนาด้วย Ada: วิธีวงจรชีวิต บันตัมเดลล์ ผับ กรุ๊ป. ISBN 0-553-09102-6.
  • บิชอป จูดี้ (10 พฤษภาคม 1990) Ada แบบกระจาย: การพัฒนาและประสบการณ์ สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์. ISBN 0-521-39251-9.
  • แซนเดน, โบ (1994). การสร้างระบบซอฟต์แวร์ ด้วยตัวอย่างใน Ada ศิษย์ฮอลล์. ISBN 0-13-030834-X.
  • ฮิลแลม, บรูซ (1994). ข้อมูลเบื้องต้นเกี่ยวกับประเภทข้อมูลนามธรรมโดยใช้ Ada ศิษย์ฮอลล์. ISBN 0-13-045949-6.
  • รัดด์, เดวิด (1994). ข้อมูล เบื้องต้นเกี่ยวกับการออกแบบและพัฒนาซอฟต์แวร์ด้วย Ada บรู๊คส์ โคล. ISBN 0-314-02829-3.
  • ไพล์, เอียน ซี. (1991). การพัฒนาระบบความปลอดภัย: คู่มือการใช้ Ada ศิษย์ฮอลล์. ISBN 0-13-204298-3.
  • เบเกอร์, หลุยส์ (1989). ปัญญาประดิษฐ์กับเอด้า แมคกรอว์-ฮิลล์. ISBN 0-07-003350-1.
  • เบิร์นส์, อลัน ; เวลลิงส์, แอนดี้ (1995). HRT-HOOD: วิธีการออกแบบที่มีโครงสร้างสำหรับระบบฮาร์ดเรียลไทม์ Ada ทางเหนือของฮอลแลนด์ ISBN 0-444-82164-3.
  • ซาวิทช์, วอลเตอร์; ปีเตอร์สัน, ชาร์ลส์ (1992). Ada: บทนำสู่ศิลปะและวิทยาศาสตร์ของการเขียนโปรแกรม บริษัทสำนักพิมพ์เบนจามิน-คัมมิงส์. ISBN 0-8053-7070-6.
  • ไวส์, มาร์ค อัลเลน (1993). โครงสร้างข้อมูลและการวิเคราะห์อัลกอริทึม ในAda บริษัทสำนักพิมพ์เบนจามิน-คัมมิงส์. ISBN 0-8053-9055-3.
  • เลดการ์ด, เฮนรี่ (1983) Ada: บทนำ (ฉบับที่สอง) สปริงเกอร์-แวร์แล็ก. ISBN 0-387-90814-5.
  • Bjørner, ไดน์ส; Oest, Ole N. , สหพันธ์. (1980). สู่คำอธิบายอย่างเป็นทางการของ Ada ลอนดอน: Springer-Verlag. ISBN 3-540-10283-3.

หอจดหมายเหตุ

  • สื่อการเขียนโปรแกรมภาษาเอ ด้าพ.ศ. 2524-2533 สถาบันชาร์ลส์ แบบเบจมหาวิทยาลัยมินนิโซตา รวมเอกสารเกี่ยวกับผลิตภัณฑ์ซอฟต์แวร์ที่ออกแบบมาสำหรับภาษา Ada สิ่งตีพิมพ์ของรัฐบาลสหรัฐฯ รวมถึงรายงานโครงการ Ada 9X, รายงานทางเทคนิค, เอกสารการทำงาน, จดหมายข่าว; และข้อมูลกลุ่มผู้ใช้

ลิงค์ภายนอก