Ada is the "brave new world" that never was. The Department of Defense wanted to standardize all programming that was done on its behalf. To that end they went through an elaborate process to define a new programming language that would take the place of everything else that was being used at the time. Once Ada was defined, DOD required that all DOD programs be written in Ada. In practice, this was impossible because a fully compliant compiler didn't exist until five years after the definition was published. Exceptions to the ADA-only rule were granted for virtually all DOD projects even after the first Ada compilers became available and eventually the rule was recinded.

It's not a bad language. Really. It's no C++, but it's not bad.

The following code compiles and runs under the GNAT Adacore compiler, which is available free of charge.

--//////////////////////////////////////////////////////////

--// Name: Peter M. Maurer

--// Program: Sieve of Eratosthenes

--// Due: Never

--// Language: Ada

--//////////////////////////////////////////////////////////

with Ada.Text_IO, Ada.Integer_Text_IO;

use Ada.Text_IO, Ada.Integer_Text_IO;

procedure SieveE is

Candidates : array(0..999) of Integer;

i : Integer;

j : Integer;

begin

-- define the sieve data structure

for i in 0..999 loop

-- everything is potentially prime until proven otherwise

Candidates(i) := 1;

end loop;

-- Neither 1 nor 0 is prime, so flag them off

Candidates(0) := 0;

Candidates(1) := 0;

-- start the sieve with the integer 0

i := 0;

while i < 1000 loop

-- advance to the next un-crossed out number.

-- this number must be a prime

while (i<1000) and then (Candidates(i) = 0) loop

i := i+1;

end loop;

-- insure against running off the end of the data structure

if i<1000 then

-- cross out all multiples of the prime, starting with 2*p.

j := 2;

while (j*i) < 1000 loop

Candidates(j*i) := 0;

j := j + 1;

end loop;

-- advance to the next candidate

i := i+1;

end if;

end loop;

-- all uncrossed-out numbers are prime (and only those numbers)

-- print all primes

for i in 0..999 loop

if Candidates(i) /= 0 then

Put(i,5);

Put(" is prime");

New_Line;

end if;

end loop;

end SieveE;