Spring til indhold

Programmeringssprog

Fra Wikipedia, den frie encyklopædi

Programmeringssprog er kunstige sprog som er designet til at udføre beregninger på en computer. Programmeringssprog anvendes til programmering, som er at skabe computerprogrammer, og til at udtrykke algoritmer præcist.

Nogen programmeringssprog har en form for formel definition eller specifikation for hvad der er muligt at udtrykke i sproget, og hvordan det gøres. En sådan definition eller specifikation kan opdeles i syntaks (form/grammatik) og semantik (betydning). Andre programmeringssprog er løst defineret ud fra manualer, gængs brug eller en bestemt oversætter/fortolker, kaldet en referenceimplementering.

De tidligste programmeringssprog går forud for den moderne computer. De blev brugt til at instruere adfærden for bl.a. væve og selvspillende pianoer. Tusindvis af programmeringssprog er sidenhen blevet skabt, primært til moderne computere, og mange nye skabes hvert år.

Programmeringsparadigmer

Uddybende Uddybende artikel: Programmeringsparadigme

De fleste programmeringssprog falder inden for et eller flere programmeringsparadigmer. Blandt disse er de mest populære i dag procedurel programmering, objektorienteret programmering og funktionel programmering, selvom mange nye paradigmer er kommet til for at adressere nye problemstillinger. Der er ingen entydig måde at inddele programmeringsparadigmer. En anden mere generel måde at inddele programmeringssprog er i paradigmerne imperativ og deklarativ programmering.

Foruden programmeringssprog findes der også andre computernære sprog. Eksempelvis er opmærkningssproget HTML populært på internettet, men det er ikke et programmeringssprog fordi det ikke udtrykker programmer eller beregninger.

Afvikling af kildekode

Uddybende Uddybende artikel: Compiler

Den tekst som man udtrykker med et programmeringssprog kaldes kildekode. Kildekoden omskrives oftest til maskinkode ved hjælp af et program som fortolker og oversætter kildekoden, kaldet en compiler eller blot en oversætter. Maskinkoden er udtrykt ved et programmeringssprog hvis instruktioner kan udføres direkte på ens computer. Her er altså tale om meget simple instruktioner som i mange henseender er uegnet til programmører, men netop egnet til computere.

I andre tilfælde afvikles kildekoden direkte af programmet som fortolker den, uden nogen omsætning til maskinkode. Disse programmer kaldes fortolkere (eng. interpreter), og programmeringssprog som benytter disse i stedet for oversættere bliver ofte omtalt som scriptingsprog. Scriptingsprog er dog også programmeringssprog.

Syntaks

Den overordnede form som et programmeringssprog tager form efter er givet ved sprogets syntaks. Et programmeringssprogs syntaks kan sammenlignes med naturlige sprogs syntaks: Der er grammatiske regler for hvilke sproglige konstruktioner der kan benyttes i kombination med hinanden. En fordel ved programmeringssprog er at de kan defineres med en ofte simpel og komplet regelmæssig syntaks, modsat naturlige sprog. De fleste programmeringssprog udtrykkes på tekstform, men nogle anvender grafisk repræsentation såsom pilediagrammer.

Syntaksen for programmeringssprog er en endelig mængde regler som man oftest udtrykker ved hjælp af regulære udtryk og Backus-Naur-formudtryk (BNF). Et eksempel på et regulært udtryk er [A-Z]+, som betyder ét eller flere store bogstaver, og et eksempel på et simpelt sprog udtrykt ved BNF:

udtryk ::= atom | tal | sammensat
atom := ['A'-'Z']+
tal := ['0'-'9']+
sammensat := '(' udtryk ('+' | '-' | '*' | '/') udtryk ')'

Dette sprog tillader udtryk på en form hvor tal uden fortegn og ubekendte med store bogstaver kan sammensættes vha. de fire regneregler hvor parenteser er obligatoriske ved sammensætning. Bemærk dog at denne oplagte fortolkning af grammatikken tilhører sprogets semantik, altså at betydningen af symbolerne 0-9 er positive heltal uden fortegn og så videre.

Der er mange andre måder at udtrykke et programmeringssprogs grammatik, heriblandt kontekstfri grammatikker.

Semantik

Ikke alle syntaktisk korrekte programmer er semantisk korrekte. I naturlige sprog svarer det til at lave grammatisk korrekte vrøvlesætninger. I modsætning til naturlige sprog, hvor vrøvlesætninger godt kan betyde noget underforstået for enkeltpersoner, forventes programmeringssprog at have en entydig fortolkning. Eksemplet ovenfor giver anledning til at skrive (5 / 0), hvilket ikke lader sig gøre givet en typisk matematisk semantik for sproget. Et eksempel fra rigtige programmeringssprog på et syntaktisk korrekt, men semantisk ukorrekt udtryk er hvis man har en variabel som indeholder et tal, men man forsøger at anvende variablen som funktion.

Nogle programmeringssprog har en veldefineret syntaks idet et helt sprog kan opskrives med BNF eller lignende. Andre nøjes med at definere sprogets syntaks som hvad end oversætteren/fortolkeren vil acceptere.

Typesystem

Uddybende Uddybende artikel: datatype

Et typesystem definerer hvordan et programmeringssprog klassificerer værdier og udtryk sådan at de hver især har typer som adskiller sig fra hinanden. Et typesystem definerer også hvordan typerne indbyrdes opfører sig. Formålet med et typesystem er at kunne verificere og tvinge at programmer til en vis grad opfører sig korrekt.

Nogle programmeringssprog tillader at man midlertidigt bryder ud af typesystemet (for eksempel ved at caste en variabels type til en anden, hvilket er muligt i C, C++ og Java). Det kan være en fordel hvis det man prøver at udtrykke faktisk er et gyldigt program, selvom typesystemet ikke kan godkende det, men det er en ulempe idet typesystemet ikke længere tjener et formål i den del af programmet. I C kan det blandt andet resultere i segmenteringsfejl, og i Java kan undtagelsen NullPointerException kastes.

Andre programmeringssprog benytter typeinferens sådan at programmøren ikke behøver at annotere typen for alle udtryk. Typeinferens forekommer ofte i funktionsorienterede programmeringssprog og medfører at kildekode fylder mindre.

Studiet omkring typer og typesystemer kaldes typeteori.

Typede og utypede sprog

Et programmeringssprog kaldes gængst typet hvis det i nogen grad benytter typer.

Blandt utypede sprog findes assemblersprog hvor en hvilken som helst operation kan udføres på en hvilken som helst mængde data. Blandt utypede programmeringssprog af højere niveau findes BCPL og nogle varianter af Forth.

Man kan inddele typede sprog på flere måder, blandt andet i stærkt/svagt eller statisk/dynamisk afhængigt af hvor strikst typesystemet er og hvor i processen af programmets oversættelse og afvikling at typetjek sker. Nogle programmeringssprog understøtter såkaldte afhængige typer (eng. dependent types) hvor hver type angiver hver enkelt værdi den kan tage (modsat typer som int og float i gængse programmeringssprog, der kan tage værdier i et omfattende interval).

I praksis er få programmeringssprog typede set fra et typeteoretisk perspektiv (hvis typesystemet ikke verificerer hele programmets korrekthed) -- de fleste moderne programmeringssprog tillader en grad af typestyrke, og mange tillader at omgå typesystemet, fx vha. typecasting, hvor en værdi af én type påstås at være en værdi af en anden type.

Liste af programmeringssprog

Af programmeringssprog kan bl.a. nævnes:

  • Ada – Et sprog i Algol-Pascal familien, opkaldt efter Ada Lovelace, udviklet som standardsprog for USA's militær.
  • Algol – Det første "moderne" sprog med en gennemtænkt grammatik.
  • Algol 68 – Det første sprog med en halv-formel definition
  • APL – Et meget kompakt sprog, særligt velegnet til matriceregning.
  • Assemblersprog – Fællesbetegnelse for symbolske udgaver af maskinkode.
  • ASP – Sprog til webservere, udviklet af Microsoft.
  • BASIC – Simpelt sprog tiltænkt begyndere.
  • B – Fortolket typeløst sprog baseret på BCPL, forløber for C.
  • BATCH – Originalt et scripting-sprog, men har senere udviklet sig til at være et simpelt men kraftfuldt programmeringssprog.
  • BCPL – Typeløst sprog, forsimplet udgave af CPL.
  • BETA – Sprog baseret på "patterns", en slags generaliseret abstraktion.
  • Blubi – Programmeringssprog på dansk, til undervisningsbrug.
  • C – Systemsprog for Unix, forgængeren til C++.
  • C++ – C med understøttelse for objektorienteret og generisk programmering.
  • C# – Microsofts svar på Java, syntaksen ligner C++.
  • Objective-C – C med udvidelser inspireret af Smalltalk.
  • Caml – Variant af ML.
  • COBOL – Tidligt sprog til administrative systemer. Forkortelse for: COmmon Business Oriented Language.
  • COMAL – BASIC variant med understøttelse af struktureret programmering. Forkortelse for: COMmon Algoritmic Language.
  • Delphi – Ikke et sprog, men en omgivelse for Object Pascal.
  • Eiffel – Objektorienteret programmeringssprog.
  • Erlang – Funktionelt sprog, primært brugt af den svenske Ericsson koncern.
  • Fortran – Tidligt sprog beregnet på videnskabelige beregninger. Forkortelse for: FORmula TRANSlation.
  • FP – Funktionelt programmeringssprog uden variabler, udviklet af John Backus
  • Haskell – Funktionelt sprog med doven evaluering inspireret af Miranda, men den primære implementation er fri software.
  • INTERCAL – Parodisk, esoterisk sprog, med målet at have en kryptisk og overflødig syntaks.
  • Java – Objektorienteret sprog med statisk typecheck designet til at skulle generere kode til en virtuel maskine.
  • JavaScript – Programmeringssprog til at editere websites/ HTML side i en internet-browser
  • Job Control Language – JCL – bruges til at kontrollere jobs på en IBM-mainframe.
  • Lisp – Det første funktionelle sprog. Forkortelse for LISt Processing.
  • Oberon – Modula-2 med objekter.
  • OCaml – Objektorienteret sprog baseret på Caml.
  • Occam – Sprog til parallelprogrammering baseret på det formelle sprog CSP.
  • Pascal – Imperativt sprog til struktureret programmering, inspireret af Algol.
  • Perl – Et praktisk sprog til at hente data og generere rapporter.
  • PHP – Et svar på ASP med en primær fri software implementation. Forkortelse for PHP: Hypertext Preprocessor (oprindeligt Personal Home Page Tools).
  • PL/IIBM's bud på et nyt standardsprog til afløsning for FORTRAN. Forkortelse for Programming Language I.
  • Postscript – Sprog til sidebeskrivelse (grafik og bogstaver), udviklet af John Warnock fra Adobe.
  • Prolog – Sprog til logisk programmering.
  • Python – Objektorienteret fortolket sprog til scripts.
  • REXX – Struktureret højniveausprog udviklet af IBM.
  • Ruby – Objektorienteret sprog. Kan også bruges i scripts.
  • Scheme – Variant af Lisp med statisk scope (programmering).
  • Simula 67 – Det første sprog med understøttelse af objektorienteret programmering.
  • Smalltalk-80 – En standardiseret udgave af Smalltalk, et objektorienteret sprog med dynamisk typning.
  • SML – En standardiseret udgave af ML.
  • Structured Query Language – SQL – et sprog til databaseopslag. Bruges i bl.a. MySQL og PostgreSQL.
  • Turbo Pascal – En oprindeligt danskudviklet variant af Pascal.
  • Visual Basic – En Microsoft-variant af BASIC.
  • Visual Prolog – En stærkt typet objektorienteret udvidelse af Prolog (danskudviklet).

Se også

Skabelon:Link FA