Till startsidan för Jonas Webresurs

Programspråk

1. Om den här sidan

Den här sidan berättar lite om de olika programspråk som finns. Jag kallar dem just "programspråk", men man kan också säga "programmeringsspråk" eller "programskrivningsspråk". Du får lära dig lite om deras historia och funktion.

Sidan kompletterar framförallt "Datorns historia". Läs mer >

På sidan "Introduktion till scripts" hittar du också en hel del information, framförallt om scriptspråken. Läs mer >

2. Programspråkens historia: Maskinära språk

De allra första datorerna programmerades genom att man förenade olika kontakter med sladdar och senare med stansade hålkort, som innehöll själva programmen. Men det fanns gott om personer som funderade över hur datorer skulle kunna programmeras med hjälp av särskilda språk, t.ex Leonid Kantorovitj på 30-talet, John von Neumann på 40-talet och Kenneth Iverson på 60-talet, för att nämna några.

De första programspråken som skapades bestod bara av ettor och nollor, så kallad maskinkod. Men eftersom det var väldigt tidsödande att skriva sådan kod för hand, gick man över till assemblerspråk, där den binära koden ersatts med hexadecimaltal, ibland kallade "symboler". Dessa tal representerade strängar av binära tal och översattes vid kompilering till maskinkod.

Båda språken brukar ibland kallas maskinära språk, men ibland skiljer man på dem och säger att assemblerspråken är symbolspråk. Man kan också kalla dem båda lågnivåspråk.

Vad är ett högnivåspråk?

Maskinspråk består av sådan kod som datorn förstår utan kompilering. Assembler måste kompileras till maskinspråk, d.v.s översättas till maskinspråk. Högnivåspråken, som använder en syntax som påminner en blandning av vanlig engelska och matematiska tecken, måste kompileras.

Högnivåspråken är ibland probleminriktade, vilket betyder att de då är avsedda för en speciell sorts problem. Sådana kan vara att beräkna vissa tal, jämföra olika listor, sortera poster i olika register, osv. Problemorienterade språk kan då delas in i funktionsorienterade och objektorienterade. Till de förra hör t.ex Basic, Cobol, Fortran, Pascal och C. Till de senare hör C++, Perl och Java.

Probleminriktade språk är oftast inte heller bundna till en viss sorts dator utan går att köra i olika miljöer och operativsystem. Därför skiljer man sådana programspråk från de datororienterade, som är anpassade efter en viss slags processor och vad den kan. Datororienterade språk är dock oftast också maskinära språk.

Terminologin kan verka förvirrande och det beror ju på att man kan dela in programspråken på många olika sätt. Jag har t.ex även hört benämningar som "procedurspråk" och "deklarativa språk", som gör andra distinktioner mellan programspråken.

De första högnivåspråken

De första mer avancerade språken, de s.k "högnivåspråken", dök upp på 50-talet. Ett av de mest kända hette Fortran. Det presenterades 1956 och utvecklades av IBM.

Fortran står för "FORmula TRANslation" och uttalas "frtrann". Det användes framförallt för matematiska, tekniska och naturvetenskapliga ändamål, alltså sådana där man gör många beräkningar. Datorerna användes ju på den tiden nästan uteslutande till att göra olika slags uträkningar.

Redan samma år som Fortran introducerades började man ge kurser i programmering och språket blev snabbt spritt. Språket har kommit i några omarbetningar, bl.a Fortran-77, som även kallas "Ascii-Fortran" och Fortran-90. Idag används Fortran mest för att underhålla gamla system och utnyttjas inte till nya projekt. Dess storhetstid var på 70- och 80-talet.

I och med att datorerna började användas inom fler och fler områden, ökade också kraven på en effektiv kommunikation mellan människa och dator. Detta behov uppstod redan under slutet av 50-talet. Perioden fram till 70-talets början är fylld med konstiga programspråk, varav de flesta numera är helt bortglömda.

Ett av dem hette Algol, vilket stod för "Algorithmic Language" och språket användes mycket riktigt för att skriva program inom området matematiska problem. Dess storhetstid var åren 1957-60, men det användes ännu på 80-talet.

Algol och Fortran är vad man kallar "algebraiska programspråk", vilket betyder att de uttryck som skapas i språket är gjorda för att efterlikna algebraiska operationer. De här programspråken blir därför lite speciella eftersom deras användningsområden inte är så lätta att sätta sig in i för den som inte behärskar matematik så bra.

Det fanns också språk som gjordes för andra ändamål, t.ex FlowMatic, som släpptes 1957, utvecklades av Sperry och användes till bl.a UNIVAC-datorn. Cobol eller "COmmon Business Oriented Language", kom 1960-61 och ersatte FlowMatic. Cobol var ganska lätt att programmera i eftersom dess uttryck påminde om engelska.

Cobol användes för att skapa olika slags administrativa och ekonomiska program på stordatorer. Det fanns också Cobol-kompilatorer för persondatorer. Cobol hade 51 tecken i sin syntax och ansågs på sin tid vara mycket avancerat. Det användes framförallt på 70- och 80-talet.

Under 60-talet kom också APL eller "Array Programming Language", liksom Basic som är en kortform för "Beginner's All-Purpose Symbolic Instruction Code". APL var mycket specialiserat på matematiska beräkningar och väldigt bra på just detta, medan Basic hade en mycket vidare tillämpning och var mycket enklare i sin uppbyggnad.

Basic är kanske det enklaste och mest spridda av alla programspråk. Det utvecklades vid Dartmouth College under 1964 och skapades för att vara lätt att lära, tillämpa och översätta. Framförallt tänkte man sig att studenterna vid universitetet skulle ha lättare att lära sig Fortran och Algol, om de först började med Basic.

Basic har kommit i mängder med varianter och olika slags förbättringar. En modern variant av Basic är Visual Basic, som används för att skapa grafiska program i Windows. Visual Basic utvecklades av Alan Cooper under mitten av 80-talet och användes först som ett alternativ till Windows. Microsoft köpte rättigheterna till programspråket 1988 och byggde ihop sin version av Basic, kallat QuickBasic, med Coopers variant. Visual Basic släpptes som kommersiell produkt under 1992.

Visual Basic och liknande programspråk har utvecklats av en viktig anledning. Traditionella programspråk är nämligen väldigt dåliga på bl.a fönsterhanteringen, som finns i de grafiska operativsystemen. Det beror självklart på att dessa programspråk utvecklades under en tid då det inte fanns några grafiska gränssnitt. Därför blev behovet av nya programspråk mycket tydligt under 90-talet, inte minst sedan Windows introducerats.

Ni som har åldern inne minns kanske Comal? Detta språk var en dansk variant av Basic. Comal står för "COMon Algorithmic Language". Det användes i svenska skolor och kunde bara köras på den speciella skoldatorn som kallades Compis. Politikerna hade nämligen fått för sig att skapa en egen standard för datorer i svenska skolor och plöjde ner många miljoner och en hel del prestige i projektet, under början av 80-talet. Några år senare stod man med värdelösa, icke-kompatibla datorer, som man köpt in för hundratals miljoner...

3. Mot mer avancerade språk

På 60-talet introducerades de första operativsystemen, som kan sägas vara datorernas övergripande program, som bl.a gör det möjligt att köra andra program.

Operativsystemet Unix presenterades så tidigt som 1969. Den första versionen gjordes av Bell Laboratories och utvecklades sedan på många olika håll och finns idag i flera olika dialekter. Det speciella med Unix var att man kunde köra flera program samtidigt på datorn, vilket var något häpnadsväckande på den tiden.

Unix och andra operativsystem krävde mycket mer av programspråken än andra tillämpningar. Därför uppstod en koncentrerad forskning och utveckling kring programspråk, som kunde klara av de allt mer krävande uppgifterna. Man ville framförallt få förhållandevis lite kod att åstadkomma snabba program.

70-talet och början av 80-talet kännetecknas av att det skapas mer och mer avancerade språk. Man utvecklar programspråken från att vara maskinära till att bli högnivåspråk, vars uttryck påminner om vanliga skriftspråk. Pascal och C är bra exempel på denna utveckling.

Pascal skapades av schweizaren Niklaus Wirth. Det introducerades 1971 och ersatte Algol, samt ett annat språk som hette Delphi. Namnet är ingen förkortning, utan kommer från den franske matematikern Blaise Pascal, som levde 1623-1662.

Med Pascal utvecklades företeelsen "strukturerad programmering", som innebär att den som använder språket måste skriva programkoden på ett systematiskt och genomtänkt sätt. Detta var ett tidens tecken: i takt med att programkoden blev allt längre, krävdes också att den gick att tolka. Inte bara av den som skrivit koden, utan även av andra som behövde förstå hur programmet var skrivet.

Wirth vidareutvecklade sin idé och skapade några år senare Modula-2, som är en förbättrad variant av Pascal. I Modula-2 kan man programmera separata moduler (delar), som man kan kompilera var för sig och sedan sätta samman. På 80-talet använde många Modula-2 när de programmerade olika slags spel.

Ett Modula-3 utvecklades under slutet av 80-talet, av bl.a Digital och Olivetti. Modula-3 var naturligtvis ett försök att komma runt problem och begränsningar i Modula-2, som ju kom till av samma anledning.

I början av 70-talet introducerades programspråket C. Exakt när är svårt att få uppgifter om. Några källor säger 1970, andra 1971 och åter andra 1974. Upphovsmannen sägs vara Dennis Ritchie, som gjorde om ett programspråk som hette "B", som i sin tur var en variant av "BCPL", som var en förbättrad version av "CPL", ett Algol-liknande språk.

Det finns också olika åsikter om vad "C" står för. "Complicated" menar vissa, eftersom språket verkligen inte är lätt. Möjligen blev det "C" då det utvecklades ur "B", men då uppstår ju frågan vad "B" står för.

Med C blev programmen kortare och koden mer effektiv än tidigare. C kunde också användas på fler datorer än tidigare och blev därför mycket snabbt spritt. Man kunde också skapa mycket avancerade program, t.ex hela operativsystem. Unix och även senare operativsystem, som Windows, är helt eller delvis skrivna i C. Idag skriver man sällan direkt i C utan använder i stället C++, som kompileras till C. C-koden kompileras sedan ytterligare en gång till maskinkod.

C hade sin storhetstid under slutet av 70-talet och början av 80-talet. Det kom flera varianter, t.ex Exception-C, Concurrent-C och Objective-C.

Objective-C är en objektorienterad version av C, som skrevs av amerikanen Brad J. Cox. Han använde sig av C och lät sig även inspireras av ett programspråk som hette "SmallTalk-80". Objective-C släpptes 1984. Det blev sedermera mest känt för att vara standardspråket i datorsystemet NeXT, som bl.a utvecklades av Steve Jobs. NeXT-projektet köptes 1996 av Apple och ligger till grund för deras operativsystem med versionsnummer X (tio). (Anledningen till att man använder en bokstav är att man inte kan varumärkesskydda namn med siffror.)

Den ursprungliga versionen skapades hos Bell Laboratories. C finns idag i två grundversioner, nämligen ANSI-C och ISO-C.

4. Tredje generationens språk

I början av 80-talet forskade dansken Bjarne Stoustrup på Bell Laboratories på en förbättrad variant av C, som han kallade C++. De båda plustecknen använde han för att alla skulle förstå att det var en förbättrad variant av C, ett uttryck för den knastertorra humor programmerare har.

Med C++ hade en ny generation språk dykt upp, de s.k objektorienterade. C++ var det första objektorienterade programspråket, åtminstone som fick kommersiellt intresse. Det blev 80-talets och början av 90-talets stora språk och har kommit i flera olika varianter. En sådan är Visual-C++ (eller VC++), som utvecklats av Microsoft för att skriva program och applikationer i Windows.

Andra språk som utvecklades under den här tiden var, t.ex ADA. Det var en utveckling av Pascal, som skapades för amerikanska militären under slutet av 70-talet. Programmets namn kommer av Augusta Ada Byron, som en gång var en duktig matematiker och samtida med Charles Babbage.

ADA togs fram vid New Yorks Universitet och skulle bli amerikanska försvarets standard för programspråk. Man ville ha ett modernt högnivåspråk, som kunde klara realtidshantering och andra speciella krav man hade. ADA användes fortfarande i början på 90-talet och en ISO-standard togs fram 1995, ISO-ADA-95. Det kallas ibland för ett "julgransspråk", eftersom det innehåller lite från många olika programspråk.

De texter jag läst nämner inga stora nyheter inom programspråken under slutet av 80-talet. Lisp och andra "LISt Processing" eller listbehandlingsprogram, finns visserligen omnämnda. Lisp var ett kraftfullt programspråk som användes främst inom forskningen kring artificiell intelligens.

Jag skrev själv en gång ett enkelt, Othello-liknande program i Lisp. I programspråket satte jag samman listor med olika alternativ på drag, som jag sedan knöt samman med olika slags logiska operatorer. Finessen var att få programmet att lära sig av sina misstag, så att ett felaktigt drag bara gjordes en gång. Denna typ av inlärning skulle sedan ingå i ett större projekt, men jag minns tyvärr inte vad man kom fram till.

Under 90-talet har det kommit nya objektorienterade programspråk, t.ex Perl och Java. Perl skapades av Larry Wall, som under hela 80-talet skrev program i bl.a C och AWK. AWK är förresten döpt efter sina upphovsmän, Alfred V. Aho, Peter J. Weinberger och Brian W. Kernighan, och är känt för att vara lätt att anpassa för många olika uppgifter.

Larry Wall upptäckte att de språk som fanns var dåliga på att hantera stora mängder text. Dessutom var de onödigt krångliga. Därför uppfann han ett eget språk.

Perl står enligt Larry Wall för antingen "Practical Extraction and Report Language" eller för "Pathologically Eclectic Rubbish Lister". Programspråket är gjord för snabb texthantering och används framförallt för att skriva kommunikationsprogram, s.k Cgi-scripts, för Internet. Det är väldigt mycket enklare uppbyggt än C++ och Java. Perl är dessutom bra på att härma andra programspråk och en funktion går att åstadkomma på många olika sätt.

Java började utvecklas på datorföretaget SUN under 1991, av James Gosling. Han var med redan på 70-talet och har utvecklat delar av programspråken C och C++. Gosling och hans medarbetare kallade först språket för OAK. De ville i första hand utveckla det för att slippa allt krångel som redan fanns med andra programspråk, som att dessa måste skrivas och kompileras för en viss processor. OAK skulle i stället bli helt plattformsoberoende och kunna köras var som helst.

Eftersom OAK inte blev någon succé, ändrade man under 1995 namnet till Java och anpassade det dessutom för Internet.

På 90-talet har vi även sett hur scriptspråken blivit vanligare, t.ex Netscapes Javascript, Microsofts JScript, Asp och VB-Script, samt PHP i Linux-världen. Men det finns mängder med andra! Scriptspråken skiljer sig från vanliga programmeringsspråk genom att de inte är lika kraftfulla och att syntaxen inte är lika strikt. Scriptspråken har varit framgångsrika på Internet och du kan läsa mer om dem på sidan som heter "Introduktion till scripts". Läs mer >

5. Fjärde och femte generationens språk

Det är först när vi kom in på 90-talet, som programspråkens utveckling började ta fart igen. Internet och databaser krävde helt nya sätt att tänka. Därför utvecklades ytterligare en ny generation språk, som kallas 4GL eller "Fourth Generation Languages", alltså en fjärde generationens programspråk. De utgår ifrån en stor mängd data, t.ex i en databas, och skapar sedan ett program som kan hantera denna informationsmängd. Programmet skapas alltså i omvänd ordning mot tidigare.

Ett annat karakteristiskt drag för de här språken är att de påminner väldigt mycket om vardaglig engelska. Från WhatIs.com har jag hämtat följande exempel:

EXTRACT ALL CUSTOMERS WHERE "PREVIOUS PURCHASES" TOTAL MORE THAN $1000

Under 90-talet har vi också sett en allt större inriktning mot program som via ett grafiskt gränssnitt skapar programkoden bara med hjälp av musklick. Något åt det hållet sker ju i program som Dreamweaver och GoLive, som skapar HTML-kod och javascripts bara genom att man klickar på olika knappar. Man behöver alltså inte skriva någon kod själv.

Den senaste versionen av Director, från Macromedia, klarar t.ex av att skriva programkoden i språket Lingo, utan att man behöver kunna ett ord Lingo. Liknande program som klarar att skriva Java har börjat dyka upp. Förmodligen är detta framtiden, att man inte behöver kunna ett programspråk för att kunna programmera. Denna typ av programmering leder troligtvis till att nya typer av programspråk utvecklas, s.k femte generationens språk.

Sammanfattning

Sammanfattningsvis kan man alltså dela in programspråken i olika generationer. Man talar om generationer eftersom programspråken utvecklats, ifrån att man skrev ettor och nollor, till att man skrev assemblerkod, till att man började kunna använda vanliga ASCII-tecken, fram till våra dagars nästan självskapande programspråk.

Det utvecklingsträd som följer är ett försök från min sida att i en bild sammanfatta det jag sagt. Exakt vad man skall kalla den femte generationens språk är ännu ovisst. Möjligen metaspråk, eftersom det är frågan om program, skrivna i ett språk, som tillverkar programkod i ett annat.

Så här ser utvecklingsträdet ut:

Generation Typ av språk  
5 Program som skapar programkod via ett grafiskt gränssnitt Metaspråk
4 Applikationsgeneratorer Högnivåspråk
3 Problemorienterade språk
2 Assemblerspråk Lågnivåspråk
1 Maskinspråk

6. Länkar

  På mina sidor med Surftips till programmering och webbutveckling hittar du länkar som kan vara intressanta. Gå dit >


Den här sidan är en del av Jonas Webresurs - www.jonasweb.nu - copyright © 1998-2007