目录
2.1 Strong, Static Typing 强语言、强静态类型语言
2.1.1 ADA is Strong, Static Typing
2.1.2 C is Weak, Static Typing
2.3.3 Cost of Runtime Checking
2.5 Semantics and Safety 语义和安全性
3. ADA: SOME INTERESTING HIGHLIGHTS
1. ADA的历史
mid 1970s:
US DoD has too many languages for myriad embedded devices; want: safe, modular, cross platform, high level
美国国防部有太多的语言用于众多的嵌入式设备;希望:安全、模块化、跨平台、高水平
1977:
solicit proposals for new language
征求对新语言的建议
1979:
Honeywell’s proposal chosen; christened Ada
Honeywell的提案被选中;被命名为 "Ada"。
10 Dec 1980:
MIL-STD-1815 approved
1983:
ANSI/MIL-STD-1815A (“Ada 83”)
1995:
ISO-8652:1995 (“Ada 95”) USAF funds GNAT Compiler, now in GCC
2012:
ISO/IEC 8652:2012 (“Ada 2012”)
2. ADA的特点
2.1 Strong, Static Typing 强语言、强静态类型语言
静态类型语言 VS 动态类型语言
在静态类型语言中,变量的类型必须先声明,即在创建的那一刻就已经确定好变量的类型,而后的使用中,你只能将这一指定类型的数据赋值给变量。如果强行将其他不相干类型的数据赋值给它,就会引发错误。例如C。类型检查是在编译器编译时执行的!
在动态类型语言中,没有像静态类型语言那样的限制,而是你将什么类型的数据赋值给变量,这个变量就是什么类型。如Python,JavaScript。类型检查是在编译器运行时检查的!
强类型 VS 弱类型
强弱之分,体现在对类型的检查严格程度上,弱类型语言对于变量类型的检查比较宽松,容忍隐式类型转换这种事情的发生。何为隐式类型转换,一般有两种形式:
- 相关类型之间隐式转换
- 不相关类型之隐式间转换
举例子来说,一个int类型的数据与一个float类型的数据相加,最终的结果是一个float类型的数据,这个过程就发生了隐式类型转换,int类型数据首先被转成float类型,然后与另一个float进行操作,这便是相相关类型之间隐式转换。
一个int类型数据与一个字符串类型数据相加,竟然没有发生错误,得到的结果是一个字符串,int类型数据隐式转换为字符串,可他们原本是两个不相干的数据类型,这种就是第二种隐式转换。
在弱类型语言中,变量可以隐式强制转换为不相关类型,而在强类型语言中则不可以。
2.1.1 ADA is Strong, Static Typing
2.1.2 C is Weak, Static Typing
2.2 Module System
Automatic dependency resolution 自动解决依赖关系
Information Hiding, Encapsulation 信息隐藏、封装
2.3 Portable
对于一个signed integer type,如果执行的操作因为它超出了该类型的基本范围,而不能提供正确的结果,就会引发异常Constraint_Error。