Published on

Ada を体験してみる

Authors

NOTE

本記事では, パッケージ (.ads) については触れません.

Ada

Ada

Ada とは, 静的型付けのマルチパラダイムプログラミング言語であり, 強い型チェックが特徴である. Ada という名前は, 世界初のプログラマとして知られているラブレース伯爵夫人オーガスタ・エイダ・キング (Augusta Ada King, Countess of Lovelace) に由来する.

Ada の歴史

1979年に米国国防省が信頼性, 保守性に優れた, 主として組み込みシステム向けの言語を作りたいという意図のもと国際競争入札を行い, 4社に発注した. この入札で優勝したフランス人チームの言語 (GREEN1) が Ada として整備されていく. なお, 優勝チームの言語名称が GREEN であることから Ada のイメージカラーは緑である.

Ada は航空宇宙や防衛等の分野で使われており, F-22戦闘機や97式魚雷は Ada でプログラミングされていることが明らかになっている. しかし, 時代の流れに伴い Ada の陳腐化が進んでおり, F-35戦闘機以降は C++ へ移行している.

Hello, world!

取り敢えず, Hello, world! する. まず, 以下のように記述する.

hello_world.adb
with Ada.Text_IO;
use Ada.Text_IO;

procedure Hello_World is
begin
   Put_Line("Hello, world!");
end Hello_World;

コンパイルには, GNAT を使用する.

GNAT のインストール

GNAT のインストールは以下のように行う (ただし Ubuntu 系).

sudo apt-get install gnat

インストール確認.

$ gnat --version
GNAT 10.5.0
Copyright (C) 1996-2020, Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

OK!

$ gnat make hello_world.adb
x86_64-linux-gnu-gcc-10 -c hello_world.adb
x86_64-linux-gnu-gnatbind-10 -x hello_world.ali
x86_64-linux-gnu-gnatlink-10 hello_world.ali

コンパイルが成功すると実行ファイルが生成される.

$ ./hello
Hello, world!

Hello, world! できた!

簡単な素数判定プログラム

Ada で標準入出力, if 文, for 文を試すために, 簡単な素数判定プログラムを作成する.

is_prime.adb
with Ada.Text_IO;        
use Ada.Text_IO;
with Ada.Integer_Text_IO; 
use Ada.Integer_Text_IO;

procedure Is_Prime is
   Number : Integer;
   Is_Prime : Boolean := True;
begin
   Put("Enter a number to check if it's prime: ");
   Get(Number);

   if Number <= 1 then
      Is_Prime := False;
   else
      for I in 2 .. Number / 2 loop
         if Number mod I = 0 then
            Is_Prime := False;
            exit;
         end if;
      end loop;
   end if;

   if Is_Prime then
      Put_Line(Integer'Image(Number) & " is a prime number.");
   else
      Put_Line(Integer'Image(Number) & " is not a prime number.");
   end if;
   
   New_Line;
end Is_Prime;

コンパイルする.

$ gnat make is_prime.adb
x86_64-linux-gnu-gcc-10 -c is_prime.adb
x86_64-linux-gnu-gnatbind-10 -x is_prime.ali
x86_64-linux-gnu-gnatlink-10 is_prime.ali

実行してみる.

$ ./is_prime
Enter a number to check if it's prime: 3
 3 is a prime number.

$ ./is_prime
Enter a number to check if it's prime: 13726225
 13726225 is not a prime number.
 

しっかりと素数判定できている.

まとめ

今回は, Ada に少しだけ触れてみたが, 変数宣言部と処理記述部が分かれているため可読性は高いように感じた. Ada の特徴を感じられるほど触れていないため, ここまでとする.

Footnotes

  1. 米国国防省が発注した4社の各設計仕様書の表紙が赤, 青, 黄, 緑だったことから, そのままそれぞれの言語名称として RED, BLUE, YELLOW, GREEN と呼ばれた.