Von Neumann programmeringsspråk

Ett von Neumann-språk i datoranvändning är något av de programmeringsspråk som är abstrakta isomorfa kopior på hög nivå av von Neumann-arkitekturer . Från och med 2009 passar de flesta aktuella programmeringsspråken in i denna beskrivning [ citat behövs ] , troligen som en konsekvens av den omfattande dominansen av von Neumann datorarkitektur under de senaste 50 åren.

Skillnaderna mellan Fortran , C och även Java , även om de är betydande, begränsas i slutändan av att alla tre är baserade på programmeringsstilen hos von Neumann-datorn. [ citat behövs ] Om till exempel alla Java-objekt exekverades parallellt med asynkron meddelandeöverföring och attributbaserad deklarativ adressering, skulle Java inte vara med i gruppen.

Isomorfismen mellan von Neumanns programmeringsspråk och arkitekturer är på följande sätt:

  • programvariabler ↔ datorlagringsceller
  • kontrollsatser ↔ datortest-och-hoppinstruktioner
  • uppdragssatser ↔ hämta, lagra instruktioner
  • uttryck ↔ minnesreferens och aritmetiska instruktioner.

Kritik

John Backus hävdade att uppdragsförklaringar på von Neumann-språk delar upp programmering i två världar. Den första världen består av uttryck , ett ordnat matematiskt utrymme med potentiellt användbara algebraiska egenskaper: de flesta beräkningar sker här. Den andra världen består av påståenden , ett oordnat matematiskt utrymme med få användbara matematiska egenskaper ( strukturerad programmering kan ses som en begränsad heuristik som dock gäller i detta utrymme).

Backus hävdade att det 1978 fanns inom datavetenskapen en ond cirkel där den långvariga betoningen på von Neumann-språken har fortsatt företrädet för von Neumann-datorarkitekturen, och beroendet av den har gjort icke-von Neumann-språk oekonomiska och därmed begränsat deras vidareutveckling: bristen på allmänt tillgängliga och effektiva icke-von Neumann-språk har berövat datordesigners den motivation och den intellektuella grund som behövs för att utveckla nya datorarkitekturer.

Närvaro i moderna system

Många moderna processorer innehåller nu flera bearbetningskärnor, och flertrådad programmering är vanligtvis det mest effektiva sättet att använda mer beräkningskraft i ett enda program. Vissa moderna processorer är mycket optimerade med tekniker inklusive exekvering i oordning, men med komplex logik för att upptäcka när detta kan göras utan att bryta mot von Neumann-semantiken för den logiska programmeringsmodellen. Separata instruktions- och datacachar används i stor utsträckning, vilket gör hårdvaran till en Modifierad Harvard-arkitektur , men återigen med logik för att upptäcka fall där optimeringen misslyckas, för att kunna exekvera självmodifierande kod .

Vissa specialiserade processorer (inklusive GPU: er ) är mycket breda multipelinstruktioner, multipeldataenheter (MIMD). Generella processorer har vanligtvis flera kärnor, men var och en är tillräckligt snabb för att många program är tillräckligt snabba utan att parallellisera enskilda uppgifter. (Trådar används vanligtvis för att hantera asynkrona ingångar eller utgångar, särskilt i ett grafiskt användargränssnitt .) Generella processorer är tekniskt sett MIMD-enheter, men vanligtvis kallas bara hårdvara som är designad från grunden för MIMD-programmering som MIMD.

Många allmänt använda programmeringsspråk som C , C++ och Java har slutat vara strikt von Neumann genom att lägga till stöd för parallell bearbetning, i form av trådar . Men de flesta av de kategoriskt icke -von Neumann-språken är också funktionella språk och har inte nått utbredd användning.

  1. ^ Kan programmering befrias från von Neumann-stilen? , John Backus, Communications of the ACM, volym 21, nummer 8, augusti 1978
  2. ^ länken är inte längre aktiv.
  3. ^ IBM Arkiv: John Backus