为什么要写关于这么古老的语言(1980年左右)的文章呢?因为我想既然mainframe用的cobol这么恶劣的语言都写了那么多了,为何不写一点我比较喜欢的语言呢?虽然除了高安全级控制和仿真领域之外ADA是不怎么用的。

首先说两句我个人对ADA语言的态度:

从编写大型程序的OO语言而言(我基本主要用的也就是这类语言),ADA在我评价中的排名是和C#和C++一个级别上的。ADA很大程度上是Java的前驱,而且在演进过程中相互影响。但不知什么原因,我个人向来不太喜欢Java。其他Smalltalk,Eiffel,Ruby,Python之类没接触过(没时间,关于Python德德是行家),而这些面向对象语言和C++和ADA之类相比还是有很大区别的。

ADA是受Pascal直接影响产生的(其他还有ALGOL之类)。Pascal被称为教学语言,以严谨著称。而在我看来Pascal有很多方面是不错,但有些地方“严谨”得有点傻掉了,隐约记得它里面有一套类型相容性规则,简直有点胡闹了(所幸应该被Delphi给剔除掉了)。再说了,通常编程语言总是想要严谨的,比如我就不认为有任何理由认为C不严谨;某种意义上讲,凡是能让计算机正确解释的东西都能说严谨的(当然像BASIC这样的语言设计随意了些,C++铺展得太开让人感觉过于狂躁,而动态类型语言可能是可以说成不太严谨)。所以Pascal只应当说是教学和学习思维上的严谨,语法上比较清晰,类型检查和控制比较严格(由此也引致冗长性,因为比如C/C++一个符号能做的事它要用一个完整语句来做)。但因为ADA完全秉承并极大发扬了这点,我在ADA看到了从上到下的高度一致性和严谨性加上其潜在的强大性,这点却是Pascal望尘莫及的。Pascal的另一些面向对象扩展有如Objective Pascal和Delphi,Delphi是不错,相比ADA具有易用性(因为是Java和C#这条路子的),但是深入研究却反衬出ADA的严谨和强大。当然这强大不是我说了算的,我也说不清楚。反正只要知道这个语言有这么几个令人敬畏的特性:

- 美国军方设计用来替代各种过往语言,用于统一开发高安全稳定性程序用的语言,多数用于军事(武器装备和系统)和航天的控制和设计、关键单位(火车、航空、电站等)的系统管理和控制等。有人这样描述,ADA是一种一旦编译通过后能很放心使用的语言,可能不尽恰当,但说明一些问题。

- 设计用来开发极大规模的系统。这说明强大性(至少有可维护性和可扩展性吧)。

- 广泛用于嵌入式系统开发,而它的一个衍生品VHDL是硬件开发语言。所以往往这个语言的性能是不太令人担心的(当然我还是不很理解如何程度依赖于编译器和运行环境)。

- 具有内在的并发支持(这个也很玄,我不知道一个语言的这些内在特性如何程度上依赖于系统并实现,可能还是有很大的负荷)。

- 还在不断发展,83,95版,最近的是2005年标准。

最后用一个Hello World作为本篇结尾,引自wikipedia。

with Ada.Text_IO; -- 表示使用这个package的内容
use Ada.Text_IO;  -- 表示展开这个package的命名空间
procedure Hello is  -- 定义过程,注意这个is就显得很严谨
beginPut_Line("Hello, world!");   -- 打印
end Hello;        -- end后必须跟名称

和一些资源:

1. Windows下的开源开发环境:ADA Gide http://adagide.martincarlisle.com/  其实这个不太好。

2. 最权威的开发环境是ADACORE的GNAT:http://libre.adacore.com/libre/ 这个的免费版就已经很不错,至少可以用用(下载链接:http://libre.adacore.com/libre/download/),虽然已经遇到一些问题和bug。(Linux环境往往会附带ADA编译器)

3. ADA 95标准和参考: http://www.adahome.com/rm95/

4. ADA 2005标准和参考:http://www.adaic.org/ada-resources/standards/ada05/

5. ADA的wiki books:http://en.wikibooks.org/wiki/Ada_Programming

6. 谁在用ADA:http://www.seas.gwu.edu/~mfeldman/ada-project-summary.html

7. ADA也有不少问题,一些ADA的比较研究:http://archive.adaic.com/intro/c.html

8. Most recommendable book for learning ADA 2005: Rationale for ADA 2005, PDF download

ADA语言Hello World相关推荐

  1. 【历史上的今天】12 月 10 日:世界上第一位程序员诞生;Ada 语言发布;第一人称射击游戏的开拓者

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 12 月 10 日,在 120 年前的今天,瑞典国王和挪威诺贝尔基金会首次颁发了诺贝尔奖.根据诺贝尔 ...

  2. 【历史上的今天】3 月 25 日:Ada 语言之父诞生;第一个维基站点问世;TechTV 被收购

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 3 月 25 日,在 1998 年的今天,为迎接 2000 年这一世界性节日的到来,人民日报发起,人 ...

  3. Ada语言实现-水和水蒸气热力性质IAPWS-IF1997

    Ada语言实现-水和水蒸气热力性质IAPWS-IF1997 对外接口文件:IF97-Interfaces.ads -- File: IF97.adswith Ada.Numerics.Generic_ ...

  4. Ada 语言学习(3)复合类型数据——Array

    文章目录 Array 数据类型声明 数组索引 数组范围 数组复制 数组初始化 直接赋值 通过拷贝赋值 不同索引范围但长度相等 非指定类型边界收缩 多维数组 数组遍历 数组切片 访问和动态检查 直接访问 ...

  5. Ada语言学习(1)Basic Knowledge

    文章目录 说在前头 命名 注释 数字 变量 变量类型 signed integers Enumerations Floating Points 类型重用(继承) 类型转换 运算符 属性(Attribu ...

  6. Ada语言中命令行使用

    Ada语言中命令行使用 要制作命令行程序,使用系统包ada.command_line .以下例程实现一个命令行程序. 命令如下:remove -iInputFileName -nCutOffNumbe ...

  7. Ada语言-标识符和注释

    标识符 1,ada标识符是不区分大小写的,如下所示它们指向的都是同一个标识符: 2, 全以字母开头,如下: 3,以字母或数字结尾,如下: 4,可以'包含'不连续的下划线,如下: 注释 注意:在Ada中 ...

  8. Ada语言的这二十年

    CROSSTALK(美国国防软件工程杂志, www.crosstalkonline.org)2017年1/2月号的专题是"Software's Greatest Hits and Misse ...

  9. 【Ada语言学习笔记】参考手册中文翻译及注记——语言概述

    我们在Concurrent & Distributed Systems课的实验中需要用到Ada语言. 通俗而笼统地讲,Ada语言是一种描述特别详尽的语言(highly specific),因此 ...

最新文章

  1. 汉语转拼音工具、新华字典API——两个支持Python的中文资源
  2. java 连接mysql 8.0,java连接mysql 8.0的问题
  3. #pragma pack
  4. ABP官方文档翻译 0.0 ABP官方文档翻译目录
  5. Excel找出两列相同部分
  6. import javax.servlet.ServletRequest 关于IDEA javax.servlet.http.HttpServletRequest 不存在 解决方案
  7. 斯坦福完全可解释深度神经网络:你需要用决策树搞点事
  8. @JsonFormat与@DateTimeFormat注解的使用
  9. 初次接触 Lottie
  10. 2015年上海现场赛重现 (A几何, K暴力搜索)
  11. mathematica模式匹配
  12. ajax获取json里的list,ajax获取json数据然后将其装载到jqgrid实现
  13. 信号的捕捉与sigaction函数
  14. Android 最常用的设计模式八 安卓源码分析—工厂方法模式factory
  15. flume+kafka集群解决某著名联锁大型超市超过25年POS线下收单系统变实时系统的典型案例
  16. Markdown文档数学公式的使用
  17. 内积、外积、元素积、克罗内克积的区分及用法【python】
  18. Dreamweaver CS6实战手册
  19. Android内置系统apk问题
  20. 守住一份平淡,宁静坦然,不浮不躁

热门文章

  1. 定位(如何运用定位)
  2. 定位决定地位---职业程序员未必就是代码民工
  3. ESP32 ESP8266的参数及对比
  4. TCP链接,为什么要三次握手?
  5. Java:求出1~999999之间的所有“水仙花数”并输出
  6. 使用Deal.II过程
  7. css如何让height:100%起作用?
  8. stm8代码生成器 一键配置省了多少麻烦事
  9. java修改ppt格式_Java 加密、解密PPT文档
  10. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题