Diskussion:Tolkade programspråk

Från Unix.se, den fria unixresursen.

Varför är O'Caml med här, men inte C? Vem är "man"?

C borde givetvis lika mycket som Python eller Perl vara med (se exempelvis CINT (http://root.cern.ch/root/Cint.html)).

JIT

Den här beskrivningen gäller ju egentligen snarare just-in-time-kompilerade språk. "Tolkade" språk kompileras inte alls, utan "körs" av en tolk. Ett exempel är sh. (Om PHP över huvud taget är ett programspråk så är även det tolkat). --Kaj 18 november 2004 kl.01.19 (CET)

Den här sidan borde tas bort, och dess innehåll flyttas till andra platser. Språk i sig är nämligen vare sig tolkade eller kompilerade, utan det är implementationer därav som kan vara det. Bidragande till förvirringen är att det till många språk finns både kompilatorer och tolkar. --Bal 2 december 2004 kl.18.39 (CET)


Spela roll ifall det är, tekniskt sett, korrekt benämning eller inte? Det handlar väl snarare att upplysa om den allmäna uppfattningen om vad som menas med ett tolkat språk...

För att dessutom vara petig kan ju det ju upplysas om att dessa benämningar åsyftar sättet språket läses in och utför en operation (exekvering), "tolkade språk", just är tolkade, t.ex. "if (word == "print") printf(rvalue);", fast självklart på ett mer komplext sätt, man delar upp och läser in språket i noder etc. men det är ju resultatet. Skillnaden mot språk som t.ex. C som kompileras till maskinkod och exekveras direkt utav systemet, och inte en tolk som sitter emellan och läser in bit för bit och utför en operation. JIT tekniken fungerar, mer eller mindre, som tolkade språk med skillnaden att språket faktiskt kompileras (inte till maskinkod dock, kompileras = sätta samman) till ett format som går mycket fortare att läsa in utav en dator, t.ex. Javas bytecode eller .NETs IL som i sin tur tolkas, eller i en "korrekt" JIT, som faktiskt kompilerar färdigt, det som behövs kompileras, till maskinkod som sen exekveras.

Kan inte se vad det är så svårt att förstå, glasklart ju. Tolkade språk är en korrekt benämning, ifall vissa har problem med det kan de börja med att driva en kampanj om att det inte finns några bokstäver i datorns värld heller, det är ju trots allt bara ett numeriskt värde som representerar en symbol. Eller, finns det ens nummer? Det är väl bara några elektroner hit och dit... orka!

--Ptha 9 januari 2005 kl.21.53 (CET)


Något man däremot borde orka vore att bena upp ovanstående inlägg så att det blev läsligt. Här är mitt försök till uttydning och vidarebearbetning av ovanstående:


Ett tolkat språk innebär att språket läses in och blir tolkat av någon programtolk. Exempelvis skulle en rad liknande

 "if (word == "print") printf(rvalue);" 

kunna tolka en rad innehållande kommandot "print" i något språk innehållande detta. Nu sker det självklart inte på en så enkel nivå, utan en total omstrukturering av koden man skrivit sker gärna internt, så att den sedan kan tolkas snabbare.

Skilladen jämfört med spåk som t.ex. C, som kompileras till maskinkod för att kunna exekveras direkt av systemet, är att tolkade språk har en tolk som tolkar språket bit för bit medan det körs.

JIT-tekniken fungerar, mer eller mindre, som tolkade språk gör, fast med den skillnaden att språket faktiskt kompileras, dock inte hela vägen till maskinkod, men dock till något format som går mycket snabbare för datorer att läsa än det okompilerade programmet som kan läsas av gemene man.

Exempel på sådan kompilering är Javas bytecode eller .NETs IL. Dessa tolkas sedan vid körning vidare till exekverbar maskinkod.

Fram tills körning befinner sig koden (oftast) i ett tillstånd där det inte är beroende av vilken arkitektur det skall köras på, vilket gör att samma kompilerade program kan spridas till en mängd operativsystem och arkitekturer utan att man i stort behöver tänka på de inkompabiliteter som programtolken senare tar hand om åt en.

Samma kod gäller alltså på både *NIX, wintendo, MAC och andra som råkar ha den programtolk som sen behövs för att omtolka programmet till respektive akitekturs maskinkod.

Nackdelen med JIT-kompilering är att det går så oändligt långsamt jämfört med vanlig kompilerad kod. (Ett bra exempel på detta är javaspel på halvgamla mobiler... Hade dessa varit skrivna i C hade de flutit på fint...)

--Volatile 7 juni 2006 kl 23:30 (CET)

Personliga verktyg