Kapitel 2. Vælg et sprog

Der findes rigtig mange programmeringssprog til Linux. Af dem er der mere end tredive forskellige du kan få en "fri" oversætter eller fortolker til. De enkelte sprog er lavet med bestemte mål for øje, og er dermed velegnede til bestemte typer opgaver. En Linux-programmør benytter sig typisk af flere sprog, alt efter hvilke opgaver der skal løses. Formålet med denne del af bogen er at introducere et stort antal sprog med tilstrækkelig information til at gøre det muligt at vurdere hvilke sprog der skal bruges i forskellige sammenhænge. Sprogene bliver nævnt i alfabetisk orden.

2.1. Ada

Ada er et sprog der er udviklet til store projekter hvor det er vigtigt at der ikke er fejl i systemerne, men det kan også med fordel bruges til mindre projekter. Den nye GNU Visual Debugger er et eksempel på et "mindre" Ada-projekt. Blandt de større kan man for eksempel nævne Boeing 777-serien eller det nye franske hangarskib "Charles de Gaulle".

En af Adas styrker er systemprogrammering hvor man ofte har brug for at implementere abstraktioner af systemspecifikke ting som bitmønstre og portadresser på en effektiv måde.

I det omfang man ikke direkte gør sig umage med at skrive et Ada-program til en bestemt arkitektur (processor, andet isenkram og eventuelt styresystem), kan man regne med at det fungerer ens på alle systemer. Dele af Ada er selvfølgelig nødt til at være systemspecifikke – det gælder for eksempel hvor store heltal man kan regne med – men enhver Ada-oversætter skal komme med dokumentation af hvordan de systemspecifikke dele er lavet i den.

Ada har indbygget adgang til biblioteker skrevet i andre sprog. Standarden beskriver grænsesnittet til Cobol, C og Fortran, men GNU Ada kommer også med grænsesnit til Java og C++. Du har således let adgang til at genbruge gammel kode skrevet i andre sprog.

GNU Ada oversætteren (også kendt som GNAT) blev udviklet parallelt med den seneste ISO-standard for Ada (ISO/IEC 8652:1995) og var allerede da standarden udkom i februar 1995, overordentlig brugbar. I dag er det en oversætter i en kvalitet der gør at mange store firmaer vælger GNU Ada når de har brug for en Ada-oversætter. GNU Ada fås blandt andet til Linux, DOS, Digital Unix, AIX, OS/2 og Windows. Udviklerne bag GNU Ada gør meget ud af at oversætteren følger ISO-standarden for Ada. — Det at følge standarderne er i det hele taget noget man går meget op i i Ada-miljøet. Siden GCC 3.1 har GNAT været integreret i den officielle GCC-distribution.

Ada har, i modsætning til de fleste andre programmeringssprog, indbygget mulighed for at skrive programmer hvor forskellige dele af programmet kører parallelt med hinanden. Man kan for eksempel benytte parallelprogrammering hvis man vil lade sit program fordele sig på alle computerens processorer, eller hvis forskellige dele af programmet skal køre på forskellige maskiner.

Du kan finde en installationsvejledning til GNU Ada i Afsnit A.1 og henvisninger til bøger og websteder om Ada i Afsnit C.1.2.

Eksempel 2-1. »99 bottles of beer on the wall«

Som et eksempel på hvordan man bruger forskellige kontrolstrukturer i Ada, kan vi se på dette lille program der udskriver teksten til sangen »99 bottles of beer on the wall«:


with Ada.Text_IO, Ada.Integer_Text_IO;

procedure Bottles is
   procedure Put_Bottles (Count : in Natural) is
      use Ada.Text_IO, Ada.Integer_Text_IO;
   begin
      case Count is
         when 0 =>
            Put ("No bottles");
         when 1 =>
            Put ("1 bottle");
         when others =>
            Put (Count, Width => 0); Put (" bottles");
      end case;
   end Put_Bottles;

   use Ada.Text_IO;
begin
   for Count in reverse 1 .. 99 loop
      Put_Bottles (Count); Put_Line (" of beer on the wall,");
      Put_Bottles (Count); Put_Line (" of beer.");
      Put_Line ("Take one down and pass it around.");
      Put_Bottles (Count - 1); Put_Line (" of beer on the wall.");
      New_Line;
   end loop;
end Bottles;



  • Den første linje i kildeteksten (with ...) importerer de pakker vi skal bruge i programmet.

  • Selve programmet er en procedure, Bottles, der er delt op i deklarationer (fra procedure Bottles is til begin) og ordrer (fra begin til end Bottles).

  • I dette tilfælde er der to deklarationer; en procedure til at skrive antallet af flasker pænt med korrekte entals- og flertalsformer, og en use-deklaration der gør de nævnte pakkers indhold direkte synligt i resten af proceduren (så man ikke behøver at foranstille pakkernes navn).

Hvis du gemmer programmets kildetekst i filen bottles.adb og i øvrigt har installeret GCC's Ada-oversætter, så kan du oversætte det med kommandoen:


[tyge@hven ~]$ gnatmake bottles.ada -cargs -gnati1 -gnatf -gnato -fstack-check
og dernæst udføre det med kommandoen:

[tyge@hven ~]$ ./bottles
99 bottles
[...]
No bottles of beer on the wall.


Eksempel 2-2. Kommandolinjetilvalg til GCC

I eksemplet Eksempel 2-1 bruger vi kommandoen gnatmake med en lang række tilvalg der er nødvendige for at få GCC's Ada-oversætter til at opføre sig korrekt (som der står i Ada-standarden). Dem er der ikke nogen grund til selv at skulle skrive hver gang man skal oversætte et program. Hvis man indsætter koden:


function gm () {
   gnatmake ${*} -cargs -gnati1 -gnatf -gnato -fstack-check
}
i ${HOME}/.zshrc, vil man i Zsh kunne nøjes med at skrive:

[tyge@hven ~]$ gm bottles.ada
når man skal oversætte programmet fra eksemplet Eksempel 2-1.

Det kan være nyttigt med lidt mere detaljerede fejlmeddelelser end »der er en fejl på linje 17«. Derfor bør man udvide definitionen ovenfor med tilvalget -gnatv:


function gm () {
   gnatmake ${*} -cargs -gnatv -gnati1 -gnatf -gnato -fstack-check
}