终于我还是决定静下心来写一点有关Ada的思考,也算是作一个阶段性的总结吧,我不是一个很会写作的人,写的东西多是干吧吧的,没有什么味道,所以自然也就不想写,再加上自己的能力实在是不行,写出来的东西就更没有价值了,有时候看到网上写的很好的博客文章,自己都很感动,觉得这些作者真的是用心了,写文章还是要花心思和时间的。   好了,费话就不说了,下面开始我的内容。  当你看Ada的字眼时,你脑子里第一想到的是什么呢?也许有人到现在都还不知道Ada是什么东西吧,但是我想对于一个IT从事人员,或者是一个科研人员来,他一定是知道的,毕竟Ada是程序设计语言和软件工程史上的一个历史性的事件吧(也许这样说不对),因为我不知道如何形容。  对于Ada语言的历史,我不想再多说什么了,因为wiki里面说了比较详细了,同时有很多的博客都作了不知道多少次的转载,内容基本上都是关于Ada语言的来源的,重复的太多,似乎有点让人烦了,所以这里我就不多说了。  我想强调的:Ada不是简单的一门程序设计语言,它的价值最大的体现在超大型系统,长使用期系统,高实时高可靠系统,所这一切都是在它产生之前由美国军方为主体提出的需求文档中作出明确的。  下面我就分别从上面的几个Ada的关键特点出发,谈谈我的学习感受,在谈感受之前,我想说说我为什么在学习Ada语言,也许很多人不知道由Ada语言构建的系统目前仍在一些非常重要的角落里默默,这些系统有一些是普通公民要接触的,比较银行,航空,铁路,还有一些是普通公民看不到也接触不到,这些系统都是用极高的费用构建的,它们仍在维护,升级,当然也有新的系统在开发之中,所以你可以看到,即使现在市场上都找不到Ada的书了,但是Ada的国级标准仍然在发展中的原因,最新的Ada标准是2005年制定的,其实每一个国家也都有它自己在特定领域对Ada语言的定制和修改,但是语言的核心没有变,变的只是用于特定领域的附属。可能我学习Ada是出于工作和科研的需要,不过就算你需要,也可以看看,看看这个神秘的语言到底为什么那么神秘,就算是当作一种工作之下的休息吧。  Ada的设计不像是其它的任何一门语言,其它的语言多是其设计者在自己的工作中,根本自己的需要慢慢作出来的,可以很明显的看出来,比如C/C++,Erlang, Python等,几乎没有例外,这样的产生自然有它自己的好处,那就是这些语言对于解决它产生领域的问题有着很好的能力,因为它就是在实践中产生,接受实践的检验的,成功了所以生存了下来。那么Ada又不同在哪里呢?首先Ada不是由某一个人设计的,它是由美国军方出资支持设计的,可能也是这个世界上唯一由政府主持设计的程序设计语言了,其次,也是最重要的它的设计是由全世界的重要计算机科研机构共同参与的,并由需求文档做起,开始设计的。说到这里,你一定知道了,Ada的设计本身得益于软件工程思想。在学习Ada的过程中,我深深的感受到这一点,那就是Ada工程文档的组织,软件设计的过程都融入了软件工程的思想,这一点上,我觉得做的比C++要好。那么为什么会这样呢?这是Ada设计之初就是在需求文档中提出的要求----“Ada是为大系统长生命期的软件开发面设计的语言”。在90年代之前,一个软件系统的设计相当程度上决定于构建它的语言,而90年代之后,一个系统的设计相当程度上决定于它的软件设计体系,这个设计体系体现的就是软件工程的思想,而Ada就办演义了当时处于这个90年代的转折点上的重要角色。  Ada的整个设计体系都是体现了结构化的软件工程思想的。从它的以包为基石的工程文件组织,到在语言级对并行机制的支持,每一点都可以看的出来,一个语言设计的好坏,相当程度上应该看这个语言中元素的“正交性”做到了什么样的程度,在一点上我觉得Ada作的比其它相当多的语言要好,当然C作为一个系统语言,其主要强调的是提供一个最小的功能集。我更喜欢把Ada和C++进行比较。我这里总是说Ada如何的好,但是我没有白日提供一些有力的说明数据或者程序代码,这一方面是因为我没有时间,另一方面是因为我现在学习的还不是很深,没有很多现存的例子拿出来看一下。  用Ada做工程,你可能有一种很明显的感受,那就是当工程的整个体系设计完成后,编码的本身有一种很清楚的感受,为什么呢?我觉得这和Ada的管理机制有关系,Ada中的包机制做的几近完美,将对外的部分和对内的部分分开,到外都是这样,比于C++中提供的那种过于灵活而带来的不一致性要好的多,做工程本身就是要对系统和各个部件都有一个最大程度的一致性的控制,在这一点Ada做的也比C++要好, 在90年代的时候,CAE在软件开发中的应用还不是很多,但在当时CAE已经可以很有生产力的应用于使用Ada的系统开发中去,这一点绝对不是现在使用的UML那种层面的东西。  Ada在语言层面实现了并行机制,为什么要这样做呢?Ada的最初设计是用于军用的大型嵌入式系统,比如火控装备,在一个对实时性要求非常高的系统中,并行的实现成为必需,所以Ada将并行加入语言中去,有其无比重大的实际意义,我们可以想想我们使用C/C++是如何实现并行的,我们要使用系统底层的低级通信原语,这本身给程序员的开发带来的极大的复杂性,通时由于这种复杂性的增大和扩散也使得整个系统的稳定性被降低了。在语言级实现的并行和现在的其它多用解释性语言如Java不同(当然本身没有用Java做东西,也没有深入的学习Java),Ada的并行借助的任务的会合机制是稳定性极高的。  也许你不喜欢Ada的代码书写,觉得它显得冗余,不过我想说的这只是你的感觉,如果你使用Ada一段时间,你就会有新的感受了,它的代码看像冗余,这是Ada作出的选择,就是C++在设计之初没有加入自动垃圾回收机制一样,Ada是让你相比C++那种“20设计,20编码,60调试和测试”改成“40设计,40编码,20调试和测试”。  我也说说Ada的不足之处,当然这种不足是我觉得,不是对于所有人都是这样的,Ada产生的年代里,面向对象还没有成长,所以那个时候的软件开放方法学主要是结构化的,而后来的现在的软件开发方法学主要是面向对象和面向组件的,当然而底层高实时部分依然是面向过程结构化作为主流。所以Ada的面向对象实现的起来给我感觉是过于复杂了,当然也可能由于在面向对象方面,C++先入为主的原因导致我觉得Ada的面向对象不够完全吧。但是必须承认的事实是Ada程序中的一切都装在包里的,那当然也包括Ada中的对象,Ada中没有像C++中的那样的物理类,所以理解它的面向对象自然要复杂一些。事物总是有得必然有失吧,Ada借助于“包”机制实现了它的整个体系整合软件工程思想,一切在Ada中都是可以扩展的,这是以包的体系来保证的,但是在后面这两样给面向对象的实现的带来了不协调性。  今天就先写到这里吧,这只能算是一个开始吧,Ada的学习之路还长啊  最后祝愿我们的祖国国防事业走在世界的前列

转载于:https://blog.51cto.com/haskell/791607

爱上Ada语言与系统相关推荐

  1. 好斗or炒作?甲骨文“撕咬”过的那些对手 - 爱上英语题库系统|郭雄飞

    很多人都认为,一个企业特质一定是来自于他们的精神领袖的个性.例如,甲骨文CEO及创始人拉里埃里森.今天,我们重点说的是拉里埃里森和他的那些官司. 甲骨文打官司不为挣钱还为什么? 很多人都认为,一个企业 ...

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

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

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

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

  4. ADA语言Hello World

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

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

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

  6. 波音 777 飞机由 Ada 语言驱动

    (给程序员的那些事加星标) 原创整理:程序员的那些事(id:iProgrammer) 「Working Together」是波音公司最初考虑生产 777 喷气式飞机时选定的项目名称.当时,波音公司打算 ...

  7. Ada 语言在军工行业的应用

    Ada语言几乎就是军工领域的霸主,包括目前最先进的五代机F22猛禽战机都采用的是Ada进行系统开发, 看看其在军事领域的应用吧. 下面的信息来自:http://www.seas.gwu.edu/~mf ...

  8. c语言中手机系统,一种手机课堂C语言编程系统的制作方法

    技术特征: 1.一种手机课堂C语言编程系统,其特征在于:该系统由手机端C语言编译运行单元.嵌入式主机端传输单元.台式机端显示单元和投影仪端显示单元组成:所述手机端C语言编译运行单元.嵌入式主机端传输单 ...

  9. C语言嵌入式系统编程修炼之道——性能优化篇

    C语言嵌入式系统编程修炼之道--性能优化篇 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 1.使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌 ...

  10. C语言嵌入式系统编程修炼之(六)性能优化

    C语言嵌入式系统编程修炼之性能优化 使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法. 写一个"标准"宏MI ...

最新文章

  1. 2018年摩拜校招嵌入式工程师笔试卷
  2. 瑞士军刀——Pandoc
  3. python下载文件并改名_第46p,8行代码,用Python批量重命名文件
  4. python用psf函数_Python 嵌套函数(高级用法)
  5. TCP/IP网络中专有名词注解
  6. 用delphi 做服务器,basic4android 实现三层数据交互
  7. CDS view里inner join, left outer join和association的区别
  8. 树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】
  9. for语句中声明变量
  10. java foreach参数_java – Mybatis foreach迭代复杂对象参数中的整数列表
  11. 关于父窗口、子窗口的操作(如关闭、打开、调用方法、刷新等等)
  12. 项目实战 五 拟合直线 获得中线
  13. 嵌入式linux ucgui,成功移植ucGUI到Linux上
  14. 【OpenCV】“帧差法”实现移动物体的检测(车辆识别)
  15. 城域网光纤、拨号光纤与ADSL的区别
  16. 彻底关闭Windows10自动更新的详细解决方案
  17. Linux的自动装机服务器搭建(持续优化)
  18. 基于CDD修复模型的图像修复算法
  19. 计算机中怎么查找时间日志,电脑的系统日志怎么查看
  20. 高炉炼铁车间人工巡视被淘汰是工业发展的必然

热门文章

  1. 《剑指offer》面试题31——连续子数组的最大和
  2. S2A哨兵数据的波段合成、镶嵌、TOA(大气表观反射率)和裁剪的操作
  3. pywinauto简单示例
  4. 利用composer搭建PHP框架(四.数据库与缓存)
  5. android实现控件的手势缩放、移动以及双击还原
  6. mysql+update+@value_记一次MySQL更新语句update的踩坑
  7. oracle数据库直方图,数据库 – Oracle伪造直方图
  8. win10北通手柄没反应_赛博朋克2077正式发售,光靠键鼠可不行,试试北通阿修罗3...
  9. 拜托!不要用“ ! = null “ 做判空了
  10. 周五,放松心情,听我来分享问题背后的背后(二)