codecamp

Ada版本的Hello World

Hello World

为了了解 Ada 程序的大致结构,举一个例子是难免的。大部份书籍一般都是用‖hello world‖程序来开始,我们下面就见识一个在终端屏幕上输出 ―Hello World!‖的简例。

000 -- filename:hello.adb;
001 with Ada.Text_IO;
002 procedure Hello is
003 begin
004 Ada.Text_IO.Put ("Hello World!");
005 Ada.Text_IO.New_Line;
006 end Hello;
先介绍一下在本教材中代码的一些问题:每行代码前的 000,001 等数字表示该代码是第几行,只为了讲解方便,在实际源代码中是不存在的;with,procedure 等保留字(reserved word)都用粗体表示,以示区别;有些字是用斜体表示,表示该字是用其它有效字符替换。

现在让我们分析上述的简单程序:

[000]标示该程序文件名为 hello.adb,在程序中并不需要;– 是注释符,表示从其所在位置至行尾都是注释,对程序没有什么影响,与 C 的 /* */类似。
[001] Ada.Text_IO 是预定义的一个程序包(package);with package_name和 C 的 include 功能差不多。
[002]-[006]是程序的主体部份。与 C 下的 main 函数类似,Ada 也需要一个主过程(main procedure),在这个例子中是过程 Hello。过程的用法和上例一样,都是
procedure procedure_name is
statements1;
begin
statements2;
end procedure_name;
statement1 可以是变量、常量、函数、过程等的声明;statements2 是过程 procedure_name 要执行的语句,对象的声明不能在这部份;end 后的 procedure_name 不是必需的,但为了程序的可读性,应加上。
[003],[004] 分别输出‖Hello World!‖ 和新行符。Put 和 New_Line 都是 Ada.Text_IO 里的过程。
但上7例调用过程 Put 和 New_Line 的方法比较罗嗦,因此我们也可以使用 use 语句:

000 — filename:hello.adb; 001 with Ada.Text_IO; use Ada.Text_IO;
002 procedure Hello is 003 begin 004 Put (―Hello World!‖);
005 New_Line; 006 end Hello;
这样 Ada 编译器就能在程序包 Ada.Text_IO 中自动搜寻 Put,New_Line,而无需用户指定它们所在的准确位置。
我们在将上例略微改动以下,以使读者了解一下声明部份:

000 -- filename:hello.adb
001 with Ada.Text_IO; use Ada.Text_IO;
002 procedure Hello is
003 Str:String := "Hello World!";
004 begin
005 Put(Str);
006 New_Line;
007 end Hello;
在 is 和 begin 之间,声明了一个字符串变量 Str,它的初始值为‖Hello World‖。String 是预定义的字符串类型。上述的声明方式和 Pascal 差不多。 现在我们对 Ada 程序长的什么样已有了基本的认识,下面需要了解几个术语。一个 Ada 程序是由一个或多个程序单元组成(program unit)。一个程序单元可以为:
1. 子程序(subprogram),定义一些可执行运算。过程(procedure)和函数(function)都是子程序。
2. 程序包(package),定义一些实体(entity)。程序包是 Ada 中的主要分组机制,类似于 C 的函数库,Modula 的‖module‖。
3. 任务单元(task unit),与线程类似,定义一些计算,然后并发执行。
4. 保护单元(protected unit),在并发计算中协调数据共享,这在 Ada 83 中不存在。
5. 类属单元(generic unit),帮助构建可重用组建,和 C++ 的模板类似。
后3类属于高级话题,在后面的章节中我们会依次介绍。程序单元又可为两部份:
1. 声明部份(declaration)。定义对其它程序的接口,有些可用资源可以被用户使用,与 C 下的‘.h‘文件相似。
2. 主体部份(body)。是声明部份的具体实现,等价与 C 的‘.c‘文件。
其中程序包(package)和子程序(subprogram)是用的最广泛的2个程序单元。大部份 Ada 程序基于一堆程序包,在以一个主过程(main proceudre) 来开始 Ada 程序 。

什么是“Hello, world"?

“Hello, world"程序是指在计算机屏幕上输出“Hello,world”这行字符串的计算机程序,“hello, world”的中文意思是“世界,你好”。这个例程在Brian Kernighan 和Dennis M. Ritchie合著的《The C Programme Language》使用而广泛流行。因为它的简洁,实用,并包含了一个该版本的C程序首次出现在1974年Brian Kernighan所撰写的《Programming in C: A Tutorial》

1 printf("hello, world\n");

实际上将“Hello”和“World”一起使用的程序最早出现于1972年,出现在贝尔实验室成员Brian Kernighan撰写的内部技术文件《Introduction to the Language B》之中:

1 main(){
2 extern a,b,c;
3 putchar(a);putchar(b);putchar(c);putchar('!*n');
4 }
5 a'hell';
6 b'o,w';
7 c'orld';

最初的"hello, world"打印内容有个标准,即全小写,有逗号,逗号后空一格,且无感叹号。不过沿用至今,完全遵循传统标准形式的反而很少出现。


Ada是什么?
Ada词法元素
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }