Ada是一种结构化的、静态类型的、命令式的、面向对象的高级编程语言,其灵感来自Pascal和其他语言。它具有对契约式设计(DbC)的内置语言支持、极强的类型、显式并发性、任务、同步消息传递、受保护对象和非确定性。Ada通过使用编译器查找错误而不是运行时错误,从而提高了代码的安全性和可维护性。Ada是由国际标准化组织(ISO)和国际电工委员会(IEC)共同制定的国际技术标准。截至2023年5月,该标准(非正式称为Ada 2022)是ISO/IEC 8652:2023。[11]
Ada最初是由霍尼韦尔的法国计算机科学家Jean Ichbiah领导的一个团队根据1977年至1983年与美国国防部(DoD)的合同设计的,以取代当时国防部使用的450多种编程语言。[12]Ada是以Ada Lovelace(1815-1852)的名字命名的,Ada Lovelace被认为是第一位计算机程序员。[13]
Ada最初是为嵌入式和实时系统设计的。Ada 95修订版由Intermetrics公司的S. Tucker Taft在1992年至1995年间设计,改进了对系统、数值、财务和面向对象编程(OOP)的支持。
Ada的特性包括:强类型、模块化编程机制(包)、运行时检查、并行处理(任务、同步消息传递、受保护对象和不确定性选择语句)、异常处理和泛型。Ada 95增加了对面向对象编程的支持,包括动态分派。
Ada的语法最大限度地减少了执行基本操作的方式选择,并且更喜欢使用英文关键字(如“or else”和“and then”)而不是符号(如“||”和“&&”)。Ada使用基本的算术运算符“+”、“-”、“*”和“/”,但避免使用其他符号。代码块由诸如“declare”、“begin”和“end”这样的词分隔,其中“end”(在大多数情况下)后跟它所关闭的块的标识符(例如,if…)。结束if,循环…结束循环)。在条件块的情况下,这避免了可能与其他语言(如C或Java)中错误嵌套的if表达式配对的悬空else。
Ada是为开发非常大的软件系统而设计的。Ada包可以单独编译。Ada包规范(包接口)也可以单独编译,而不需要检查实现的一致性。这使得在设计阶段、在实现开始之前及早发现问题成为可能。
支持大量的编译时检查,以帮助避免在某些其他语言中直到运行时才能检测到的错误,或者需要将显式检查添加到源代码中。例如,语法要求显式命名块的关闭,以防止由于不匹配的结束令牌而导致的错误。坚持强类型允许在编译时或运行时检测许多常见的软件错误(错误的参数、范围冲突、无效引用、不匹配的类型等)。由于并发性是语言规范的一部分,编译器在某些情况下可以检测到潜在的死锁。[14]编译器通常还会检查拼写错误的标识符、包的可见性、冗余声明等,并提供有关如何修复错误的警告和有用建议。
Ada还支持运行时检查,以防止访问未分配的内存、缓冲区溢出错误、范围违反、偏离1错误、数组访问错误和其他可检测的错误。为了提高运行时效率,可以禁用这些检查,但通常可以有效地编译。它还包括帮助程序验证的设施。由于这些原因,Ada被广泛应用于关键系统,在这些系统中,任何异常都可能导致非常严重的后果,例如意外死亡、伤害或严重的经济损失。使用Ada的系统示例包括航空电子设备,空中交通管制,铁路,银行,军事和空间技术。[15][16]
Ada的动态内存管理是高级的和类型安全的。Ada没有泛型或非类型化指针;它也没有隐式声明任何指针类型。相反,所有动态内存分配和释放都必须通过显式声明的访问类型进行。每种访问类型都有一个关联的存储池,该存储池处理内存管理的低级细节;程序员既可以使用默认的存储池,也可以定义新的存储池(这与非统一内存访问特别相关)。甚至可以声明几个不同的访问类型,它们都指定相同的类型,但使用不同的存储池。此外,该语言在编译时和运行时都提供了可访问性检查,以确保访问值不会超过它所指向的对象的类型。[17]
阿达,塔克塔夫特在1992年至1995年间设计,改进了对系统,数值,财务和面向对象编程(OOP)的支持。
Ada的特性包括:强类型,模块化编程机制(包),运行时检查,并行处理(任务,同步消息传递,受保护对象和不确定性选择语句),异常处理和泛型。【中文】:阿达95
Ada的语法最大限度地减少了执行基本操作的方式选择,并且更喜欢使用英文关键字(如“否则”和“然后”)而不是符号(如“| |”和“& &”)。“+”,“-”,“*”,“/”,“/”。代码块由诸如“声明”,“开始”和“结束”这样的词分隔,其中“结束”(在大多数情况下)后跟它所关闭的块的标识符(例如,如果…)。)。在条件块的情况下,这避免了可能与其他语言(如C或Java)中错误嵌套的如果表达式配对的悬空。
阿达中文:阿达Ada包规范(包接口)也可以单独编译,而不需要检查实现的一致性。这使得在设计阶段、在实现开始之前及早发现问题成为可能。
支持大量的编译时检查,以帮助避免在某些其他语言中直到运行时才能检测到的错误,或者需要将显式检查添加到源代码中。例如,语法要求显式命名块的关闭,以防止由于不匹配的结束令牌而导致的错误。坚持强类型允许在编译时或运行时检测许多常见的软件错误(错误的参数、范围冲突、无效引用、不匹配的类型等)。由于并发性是语言规范的一部分,编译器在某些情况下可以检测到潜在的死锁。[14]编译器通常还会检查拼写错误的标识符、包的可见性、冗余声明等,并提供有关如何修复错误的警告和有用建议。
Ada还支持运行时检查,以防止访问未分配的内存,缓冲区溢出错误,范围违反,偏离1错误,数组访问错误和其他可检测的错误。为了提高运行时效率,可以禁用这些检查,但通常可以有效地编译。它还包括帮助程序验证的设施。由于这些原因,艾达被广泛应用于关键系统,在这些系统中,任何异常都可能导致非常严重的后果,例如意外死亡,伤害或严重的经济损失。使用Ada的系统示例包括航空电子设备,空中交通管制,铁路,银行,军事和空间技术。[15] [16]
【中文译文】阿达相反,所有动态内存分配和释放都必须通过显式声明的访问类型进行。每种访问类型都有一个关联的存储池,该存储池处理内存管理的低级细节;程序员既可以使用默认的存储池,也可以定义新的存储池(这与非统一内存访问特别相关)。甚至可以声明几个不同的访问类型,它们都指定相同的类型,但使用不同的存储池。此外,该语言在编译时和运行时都提供了可访问性检查,以确保访问值不会超过它所指向的对象的类型。[17]
在20世纪70年代,美国国防部(DoD)开始关注用于其嵌入式计算机系统项目的不同编程语言的数量,其中许多已经过时或依赖于硬件,并且没有一个支持安全的模块化编程。1975年,一个名为高级语言工作组(HOLWG)的工作组成立,旨在通过寻找或创建一种普遍适合该部门和英国国防部要求的编程语言来减少这一数字。从最初的稻草人提案[18]开始,经过多次迭代,最终的编程语言被命名为Ada。这些项目使用的高级编程语言总数从1983年的450多种下降到1996年的37种。
HOLWG制定了Steelman语言需求,这是一系列文档,说明了他们认为编程语言应该满足的需求。许多现有的语言都经过了正式的审查,但该团队在1977年得出结论,没有一种现有的语言符合规范。
奥古斯塔·阿达·金,洛夫莱斯伯爵夫人。
发布了新编程语言的提案请求,并聘请了四个承包商来开发他们的提案,分别是Red(由Benjamin Brosgol领导的Intermetrics)、Green(由Jean Ichbiah领导的Honeywell)、Blue(由John Goodenough领导的SofTech)[19]和Yellow(由Jay Spitzen领导的SRI International)。1978年4月,经过公众的审查,红绿两党的提案进入了下一阶段。1979年5月,由霍尼韦尔的Jean Ichbiah设计的绿色方案被选中,并以Lovelace伯爵夫人Augusta Ada的名字命名Ada。这一提议受到伊比雅和他的团队在20世纪70年代开发的LIS语言的影响。初步的Ada参考手册于1979年6月在ACM SIGPLAN公告中发布。军事标准参考手册于1980年12月10日(Ada Lovelace的生日)获得批准,并给予编号MIL-STD-1815以纪念Ada Lovelace的出生年份。1981年,C. A. R. Hoare利用他在图灵奖上的演讲,批评Ada过于复杂,因此不可靠,[20]但随后他似乎在为Ada教科书撰写的前言中撤回了这一观点[21]。
在早期,Ada吸引了整个编程社区的关注。它的支持者和其他人预测,它可能会成为通用编程的主导语言,而不仅仅是国防相关的工作。[22]Ichbiah公开表示,在十年内,只会保留两种编程语言:Ada和Lisp。[23]早期的Ada编译器很难实现这种庞大而复杂的语言,而且编译时和运行时的性能都很缓慢,工具也很原始。[22]编译器供应商花费了大部分精力来通过大量的语言一致性测试,政府要求Ada编译器验证能力(ACVC)验证套件,这是Ada语言的另一个新特性所需要的。[23]《行话档案》(The Jargon File)收录了1975年至1983年间的电脑黑客俚语,它在关于Ada的一篇文章中写道:“鉴于得到了法令的认可,这正是人们可能预料到的;由委员会设计…很难使用,总的来说是一个灾难性的,数十亿美元的无用之物……Ada Lovelace……几乎肯定会因为她的名字最近被使用而脸色发白;关于它的最善意的说法是,可能有一种好的小语言在它巨大的、象大象般的体积里尖叫着要出来。“[24]
在20世纪70年代,美国国防部(DoD)开始关注用于其嵌入式计算机系统项目的不同编程语言的数量,其中许多已经过时或依赖于硬件,并且没有一个支持安全的模块化编程。1975年,一个名为高级语言工作组(HOLWG)的工作组成立,旨在通过寻找或创建一种普遍适合该部门和英国国防部要求的编程语言来减少这一数字。从最初的稻草人提案[18]开始,经过多次迭代,最终的编程语言被命名为艾达。这些项目使用的高级编程语言总数从1983年的450多种下降到1996年的37种。
中国钢铁公司许多现有的语言都经过了正式的审查,但该团队在1977年得出结论,没有一种现有的语言符合规范。