Ada版本的Hello World

2018-10-25 09:29 更新

Hello World

為了了解 Ada 程序的大致結(jié)構(gòu),舉一個(gè)例子是難免的。大部份書籍一般都是用‖hello world‖程序來(lái)開始,我們下面就見識(shí)一個(gè)在終端屏幕上輸出 ―Hello World!‖的簡(jiǎn)例。

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;
先介紹一下在本教材中代碼的一些問(wèn)題:每行代碼前的 000,001 等數(shù)字表示該代碼是第幾行,只為了講解方便,在實(shí)際源代碼中是不存在的;with,procedure 等保留字(reserved word)都用粗體表示,以示區(qū)別;有些字是用斜體表示,表示該字是用其它有效字符替換。

現(xiàn)在讓我們分析上述的簡(jiǎn)單程序:

[000]標(biāo)示該程序文件名為 hello.adb,在程序中并不需要;– 是注釋符,表示從其所在位置至行尾都是注釋,對(duì)程序沒有什么影響,與 C 的 /* */類似。
[001] Ada.Text_IO 是預(yù)定義的一個(gè)程序包(package);with package_name和 C 的 include 功能差不多。
[002]-[006]是程序的主體部份。與 C 下的 main 函數(shù)類似,Ada 也需要一個(gè)主過(guò)程(main procedure),在這個(gè)例子中是過(guò)程 Hello。過(guò)程的用法和上例一樣,都是
procedure procedure_name is
statements1;
begin
statements2;
end procedure_name;
statement1 可以是變量、常量、函數(shù)、過(guò)程等的聲明;statements2 是過(guò)程 procedure_name 要執(zhí)行的語(yǔ)句,對(duì)象的聲明不能在這部份;end 后的 procedure_name 不是必需的,但為了程序的可讀性,應(yīng)加上。
[003],[004] 分別輸出‖Hello World!‖ 和新行符。Put 和 New_Line 都是 Ada.Text_IO 里的過(guò)程。
但上7例調(diào)用過(guò)程 Put 和 New_Line 的方法比較羅嗦,因此我們也可以使用 use 語(yǔ)句:

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 中自動(dòng)搜尋 Put,New_Line,而無(wú)需用戶指定它們所在的準(zhǔn)確位置。
我們?cè)趯⑸侠晕⒏膭?dòng)以下,以使讀者了解一下聲明部份:

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 之間,聲明了一個(gè)字符串變量 Str,它的初始值為‖Hello World‖。String 是預(yù)定義的字符串類型。上述的聲明方式和 Pascal 差不多。 現(xiàn)在我們對(duì) Ada 程序長(zhǎng)的什么樣已有了基本的認(rèn)識(shí),下面需要了解幾個(gè)術(shù)語(yǔ)。一個(gè) Ada 程序是由一個(gè)或多個(gè)程序單元組成(program unit)。一個(gè)程序單元可以為:
1. 子程序(subprogram),定義一些可執(zhí)行運(yùn)算。過(guò)程(procedure)和函數(shù)(function)都是子程序。
2. 程序包(package),定義一些實(shí)體(entity)。程序包是 Ada 中的主要分組機(jī)制,類似于 C 的函數(shù)庫(kù),Modula 的‖module‖。
3. 任務(wù)單元(task unit),與線程類似,定義一些計(jì)算,然后并發(fā)執(zhí)行。
4. 保護(hù)單元(protected unit),在并發(fā)計(jì)算中協(xié)調(diào)數(shù)據(jù)共享,這在 Ada 83 中不存在。
5. 類屬單元(generic unit),幫助構(gòu)建可重用組建,和 C++ 的模板類似。
后3類屬于高級(jí)話題,在后面的章節(jié)中我們會(huì)依次介紹。程序單元又可為兩部份:
1. 聲明部份(declaration)。定義對(duì)其它程序的接口,有些可用資源可以被用戶使用,與 C 下的‘.h‘文件相似。
2. 主體部份(body)。是聲明部份的具體實(shí)現(xiàn),等價(jià)與 C 的‘.c‘文件。
其中程序包(package)和子程序(subprogram)是用的最廣泛的2個(gè)程序單元。大部份 Ada 程序基于一堆程序包,在以一個(gè)主過(guò)程(main proceudre) 來(lái)開始 Ada 程序 。

什么是“Hello, world"?

“Hello, world"程序是指在計(jì)算機(jī)屏幕上輸出“Hello,world”這行字符串的計(jì)算機(jī)程序,“hello, world”的中文意思是“世界,你好”。這個(gè)例程在Brian Kernighan 和Dennis M. Ritchie合著的《The C Programme Language》使用而廣泛流行。因?yàn)樗暮?jiǎn)潔,實(shí)用,并包含了一個(gè)該版本的C程序首次出現(xiàn)在1974年Brian Kernighan所撰寫的《Programming in C: A Tutorial》

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

實(shí)際上將“Hello”和“World”一起使用的程序最早出現(xiàn)于1972年,出現(xiàn)在貝爾實(shí)驗(yàn)室成員Brian Kernighan撰寫的內(nèi)部技術(shù)文件《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"打印內(nèi)容有個(gè)標(biāo)準(zhǔn),即全小寫,有逗號(hào),逗號(hào)后空一格,且無(wú)感嘆號(hào)。不過(guò)沿用至今,完全遵循傳統(tǒng)標(biāo)準(zhǔn)形式的反而很少出現(xiàn)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)