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;