Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Emner
  • Opret bruger
  • Log ind
Se kommentarer (34)
Emner PHP, Open source

Dansk PHP-skaber til Version2: Facebooks PHP-værktøj er ingen revolution

Skaberen af PHP, danske Rasmus Lerdorf, ser ikke Facebooks nye PHP-til-C++-kodegenerator som noget, der for alvor skaber røre i PHP-andedammen.

Af Mikkel Meister Onsdag, 3. februar 2010 - 11:03

Den danske skaber af scripting-sproget PHP, Rasmus Lerdorf, hilser Facebooks nye PHP-til-C++-værktøj, Hiphop for PHP, velkommen og kalder det en positiv udvikling.

Men det vil ikke ryste de værktøjer, der allerede nu findes til at optimere PHP-kode, i sin grundvold, vurderer Rasmus Lerdorf i en e-mail til Version2.

Hiphop for PHP er netop blevet offentliggjort af Facebook, der har udviklet værktøjet for at kunne omdanne PHP-kode til C++ og dermed få hurtigere kode ud i den anden ende.

Det har i gennemsnit givet 50 procent mindre CPU-forbrug på Facebooks webservere, afhængigt af siden, ifølge Facebooks egne oplysninger.

Facebook har månedligt over 400 milliarder PHP-baserede sidevisninger.

Vil ikke skubbe til Zend's position Men Rasmus Lerdorf vurderer ikke, at Hiphop for PHP vil få de store konsekvenser for eksisterende værktøjer, der også er sat i verden for at optimere PHP-kode.

Ét af dem stammer fra firmaet Zend, som også står bag store dele af udviklingen af PHP.

Virksomhedens kommercielle produkt Zend Immediate Code kan oversætte PHP til en form for bytecode, hvilket ifølge virksomhedens egne oplysninger kan forbedre ydelsen med 40 til 100 procent.

I en e-mail til Version2 skriver Rasmus Lerdorf, at Hiphop for PHP efter hans vurdering ikke vil ændre den rolle, Zend spiller i PHP-miljøet.

»Jeg tvivler på det. Det (Hiphop for PHP, red.) er ikke et nyt runtime, men en PHP-til-C++-kodegenerator med nogle restriktioner,« skriver Rasmus Lerdorf.

Er der behov for et nyt runtime? Vi har tidligere talt om, at Yahoo's hjemmesider kører på generisk PHP, så hvorfor kunne Facebook ikke bruge de samme tricks som Yahoo?

»Facebook har besluttet, at de ikke har lyst til at skrive skræddersyede udvidelser i C/C++. Yahoo, derimod, har mere end 500 skræddersyede udvidelser, som de bruger til at interface'e med de forskellige, komplicerede backend-systemer, der klarer størstedelen af arbejdet,« skriver Rasmus Lerdorf.

Hiphop for PHP er nu frigivet som et open source-værktøj. Hiphop fungerer ved at oversætte PHP-kode til optimeret C++-kode, som igen kan oversættes med en C++-compiler og dermed give hurtigere kode.

Samtidig skræller Hiphop for PHP en række sjældent brugte features ud af PHP ? eksempelvis funktionen eval() ? fra for igen at forbedre ydelsen af koden.

Send Tweet
Udskriv

IT-job & karriere

  • Se alle it-job
  • Importer din kompetenceprofil fra LinkedIn
Udvikler med projektlederkompetencer søges til fast stilling
Udgivet 23. jan 12.37
Er du ekstrabladet.dk's nye udvikler med fokus på kommentarsystem og brugere?
Udgivet 2. feb 9.21
Dygtige PHP-udviklere søges til spændende fast stilling hos Fynske Medier
Udgivet 5. okt 2011 14.33
Are you our next Associate Practice Leader?
Udgivet 8. feb 10.47

Kommentarer (34)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Rasmus Kaae 3. feb. 2010 - 11.30
 
er php overhovedet flaskehalsen?

Så vidt jeg ved så er det sjældent at det rent faktisk er script-koden der får en side til at køre langsomt. Ofte er det store queries mod databasen der dræner systemerne.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Rasmus Nielsen 3. feb. 2010 - 11.55
 
Re: er php overhovedet flaskehalsen?

I artiklen "Så er det officielt..." angiver Facebook at de gennemsnitligt sparer 50% CPU-tid.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Niels Henriksen 3. feb. 2010 - 11.56
 
php kan være flaskehalsen

Blot et skift fra ASP til ASP.NET betyder en kraftig forøgelse i hastigheden. Så det er den vej vi skal.

Jeg venter bare på PHP.NET på samme måde som ASP.NET :)

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Peter Makholms billede
Peter Makholm 3. feb. 2010 - 12.04
 
Re: er php overhovedet flaskehalsen?

For et normalt lille hygge-websted er PHP som sådan nok ikke en relevant flaskehals. Men når man skal skalere i et omfang som Facebook er der mange tommelfingerregler der ændrer sig gevaldigt.

Jeg har arbejdet med systemer hvor alene det at stat()'e alle PHP-filerne inden man begyndte at læse dem ind gav en mærkbar performance-forringelse. At oversætte en hel applikation til en enkelt binærblob kunne have afhjulpet det problem.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 3. feb. 2010 - 12.20
 
Re: er php overhovedet flaskehalsen?

Hvis ens database er en dårligt opsat MySQL på en server med magnetskivedisk så skal der ganske rigtigt ikke mange databasekald til for at det bliver en ret altoverskyggende flaskehals, men det er et scenarie som er MEGET langt fra optimal databaseydelse.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jesper Louis Andersen 3. feb. 2010 - 12.55
 
Re: er php overhovedet flaskehalsen?

PHP bliver hurtigt flaskehalsen hvis din site bliver en success og du kan gøre backend-access tilpas billigt. Grunden til at Facebook godt vil have det her er at de kan undgå at skulle skalere deres serverpark yderligere og i deres størrelse kan det økonomisk godt betale sig at have et par udviklere til at lave deres egen specialdesignede udgave af PHP.

Et site som Facebook har allerede droppet SQL for lang tid siden (det egner sig temmeligt ringe til deres formål) og derved begynder det at betyde noget. PHP er svært at arbejde med grundet dets knopskydningseffekt: Ting er blevet til efterhånden som der har været behov for dem. Det koster hvis man godt vil lave maskinoversættelse af det.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Pedersen 3. feb. 2010 - 13.07
 
Re: er php overhovedet flaskehalsen?
Et site som Facebook har allerede droppet SQL for lang tid siden (det egner sig temmeligt ringe til deres formål)

Kilde?

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Slet Mig nu 3. feb. 2010 - 13.57
 
Re: er php overhovedet flaskehalsen?

Check Facebook arkitektur http://www.infoq.com/presentations/Facebook-Software-Stack - synes ikke at han nævner at de har droppet SQL, snarer optimering af MySQL og brug af memcache.

Lars

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
David Konrad 3. feb. 2010 - 15.55
 
Re: Facebook har allerede droppet SQL

Ifølge http://cns.ucsd.edu/lecturearchive09.shtml#Roth driver facebook "tusindvis" af mySQL-servere, derudover f.eks logsystemet "scribe", masser er erlang, python - og nu har de altså fået deres c++ oversætter færdig. De 100 mia billeder, eller hvor mange det nu er, leveres via cache / CDN mv.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Kasper Birch Olsen 3. feb. 2010 - 20.35
 
Re: er php overhovedet flaskehalsen?

Well facebook har 100-vis af servere der kører php og en masser der kører databaser bagved. Hvis de kan fordoble performance i php med deres Hiphop tool så kan de slukke for en masse af deres webservere og spare en masse penge/strøm/co2.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 3. feb. 2010 - 20.54
 
Re: php kan være flaskehalsen
Blot et skift fra ASP til ASP.NET betyder en kraftig forøgelse i hastigheden. Så det er den vej vi skal.

Det er fakta at kompileret kode er hurtigere end fortolket kode. Årsagen er den simple at kompileret kode kan afvikles direkte af processoren i modsætning til et fortolket sprog.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Ole Østergaard 3. feb. 2010 - 21.21
 
Re: php kan være flaskehalsen
Blot et skift fra ASP til ASP.NET betyder en kraftig forøgelse i hastigheden. Så det er den vej vi skal.
Det er fakta at kompileret kode er hurtigere end fortolket kode

Og hvad vil du så kalde .NET-kode - kompileret eller fortolket kode? Det er jo egentlig begge dele: Kildekoden oversættes til bytekode, og det fortolkes så runtime. Så i sidste ende køres det fortolket.

I tiden før HotSpot ville de fleste nok give dig ret i din udtalelse, men at sige kategorisk at kompileret kode er hurtigere end fortolket kode, giver ingen mening.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
David Konrad 3. feb. 2010 - 21.35
 
Re: php kan være flaskehalsen
Det er fakta at kompileret kode er hurtigere end fortolket kode. Årsagen er den simple at kompileret kode kan afvikles direkte af processoren i modsætning til et fortolket sprog.

Tja, så længe naturligvis interpreteren ikke er designet til platformen. Assembler er jo også i princippet fortolket kode, f.eks. "compileret kode" er reelt set "forberedt kode". I stedet for alle disse krumspring med PHP=>C++, som jo i sidste ende er til =>byte, men under alle omstændigheder giver et overhead alligevel, bare mindre, kunne man måske sætte alle kræfter ind på et slags RISC-PHP, f.eks, der kan fortolkes af processoren direkte. Hvis ikke jeg husker fuldkommen forkert, men det gør jeg muligvis, blev der faktisk forsøgt sådan noget i de glade BASIC-dage i starten af 80'erne. Tror det hed "bee", eller sådan noget. Så hvorfor ikke i dag? Facebook kører med statsgaranti alligevel tilpassede apacher, så man kan jo lige så godt tage skridtet fuldt ud.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 3. feb. 2010 - 22.43
 
Re: php kan være flaskehalsen
kunne man måske sætte alle kræfter ind på et slags RISC-PHP, f.eks, der kan fortolkes af processoren direkte.

Med forbehold for at jeg ikke er helt klar over hvad du mener så lyder det du snakker om ret meget som det ganske almindelige compiler koncept. En almindelig compiler oversætter koden til maskinkode som processoren kan køre direkte. PHP er et dynamisk sprog, hvilket groft sagt betyder at det indeholder nogle features som ikke har nogen simpel ækvivalent i maskinkode. Derfor må compileren bruge en masse ekstra kode, hvilket trækker ned i hastigheden.

Men i mange tilfælde bliver dynamisk kode slet ikke compileret da det er lettere bare at skrive en fortolker, som typisk vil være endnu langsommere.

Det er fakta at kompileret kode er hurtigere end fortolket kode.

Ja, med forbehold for at der er stor forskel på kvaliteten af både compilere og fortolkere, samt at det vist ikke er helt veldefineret hvad der er hvad.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
David Konrad 3. feb. 2010 - 23.38
 
Re: php kan være flaskehalsen
Med forbehold for at jeg ikke er helt klar over hvad du mener så lyder det du snakker om ret meget som det ganske almindelige compiler koncept. En almindelig compiler oversætter koden til maskinkode som processoren kan køre direkte. PHP er et dynamisk sprog, hvilket groft sagt betyder at det indeholder nogle features som ikke har nogen simpel ækvivalent i maskinkode.

Jeg forstår din skepsis. Men assembler kan da også være dynamisk (det er ikke maskinkode, men alligevel) Og jeg er altså med på hvad forskellen på interpretere osv er, og hvorfor der skal oversættes - har trods alt nørklet med assembler og peek og poke osv.

Jeg tænker bare, helt naivt og primitivt "ud af boksen", at når vi nu i dag HAR flerkerne arkitekturer, så kunne man måske lave et reduceret PHP sprog der kunne fortolkes direkte, det kan man vel godt, og så lade de andre processer om det dynamiske, databasetilgang, talberegninger f.eks? Egentlig det samme som nu, men i stedet for at tænke "oversæt til maskinkode", eller C++, så sige at kernen skal kunne forstå "RISC-PHP". Lidt ligesom man begynder at lade mere og mere køre på grafikkortet, som vi vil se fremover. Altså, den enkelte CPU har lad os sige 8 kerner, lad den ene fortolke et reduceret ikke-dynamisk PHP, og resten om resten. Måske tåbeligt, men at "oversætte" PHP til C++ som igen oversættes til byte virker ikke fremtidsorienteret.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 4. feb. 2010 - 00.46
 
Re: php kan være flaskehalsen

Et reduceret ikke-dynamisk PHP vil stort set blive til det samme som Java eller C++.

I øvrigt er der ikke nødvendigvis noget kørselstidstab ved at oversætte gennem flere led, C og C++ er gode mellemsprog som lægger sig forholdsvist tæt op ad hardwaren, hvis et stykke kode skal kompliceres væsentligt for at blive til C, så er det sandsynligvis fordi det er nødvendigt for at koden overhovedet kan blive til maskinsprog.

Processorkerner født til at afvikle et specifikt sprog forekommer som en ret dødfødt ide, sprog og processorer passer allerede sammen. De steder hvor sprog og processorer ikke passer så godt sammen er det fordi sproget bruger en struktur som det ikke er hensigtsmæssigt at implementere i hardware.

Er du i øvrigt helt på det rene med forskellen på bytekode og maskinkode? http://en.wikipedia.org/wiki/Bytecode

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
David Konrad 4. feb. 2010 - 02.10
 
Re: php kan være flaskehalsen
Processorkerner født til at afvikle et specifikt sprog forekommer som en ret dødfødt ide, sprog og processorer passer allerede sammen.

Virkelig, ud i al fremtid - og vi behøves aldrig mere tænke nyt? Naturligvis er min tankerække jo ikke særlig velfunderet, det er bare en ide, en strøtanke, men det er vel (forhåbentlig) ikke evig gyldigt, det du skriver ovenover. Nuvel, du har muligvis ret.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Rasmus Kaae 4. feb. 2010 - 08.39
 
Jamen ...

Hvis målet er at lave backend-koden super-duper hurtig. Hvorfor så overhovedet skrive det i et fortolket sprog som PHP? I mit hoved ville det være bedre at skrive det i f.eks. C++ eller tilsvarende.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 08.44
 
Re: php kan være flaskehalsen
Og hvad vil du så kalde .NET-kode - kompileret eller fortolket kode? Det er jo egentlig begge dele: Kildekoden oversættes til bytekode, og det fortolkes så runtime. Så i sidste ende køres det fortolket.

Nej, bytekoden i IL bliver JIT kompileret af CLR'en inden den afvikles direkte på processorren på samme måde som C, C++, Delphi, VB og andre kompilerede sprog.

http://www.programmersheaven.com/2/FAQ-DOTNET-MSIL-Explained

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 09.00
 
Re: Jamen ...
Hvis målet er at lave backend-koden super-duper hurtig. Hvorfor så overhovedet skrive det i et fortolket sprog som PHP? I mit hoved ville det være bedre at skrive det i f.eks. C++ eller tilsvarende.

Du skal jo have en webserver der kan finde ud af at afvikle din backen-kode. Samtidig skal det være et potentielt performance problem. Det er nok trods alt ikke så tit af afviklingsmiljøet er den store flaskehals.

Hvis der ikke kræves web adgang bliver backend'en jo oftest også afviklet i et andet miljø end en webserver og kodet i et kompileret sprog, f.eks. C++. Hele problemet er sådan set kommunikation og snitflader. Her vinder HTTP og browseren stort over alternativerne.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 09.01
 
Re: php kan være flaskehalsen
Ja, med forbehold for at der er stor forskel på kvaliteten af både compilere og fortolkere, samt at det vist ikke er helt veldefineret hvad der er hvad.

Jo, Det er helt veldefineret. Kompileret kode er kode der kan afvikles direkte af hardwaren (evt. en virtuel hardware). Fortolket kode er alt det andet.

Det er klart at kode der afvikles af en virtuel maskine, jo i sagens natur vil være langsommere end kode der afvikles af fysisk hardware.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Thomas Vestergaard 4. feb. 2010 - 11.14
 
Re: php kan være flaskehalsen
Det er klart at kode der afvikles af en virtuel maskine, jo i sagens natur vil være langsommere end kode der afvikles af fysisk hardware.

Med risiko for at starte en flame-war, men netop det der eksempel holder ikke.
Kode afviklet på Javas Virtuelle maskine sker f.eks. meget hurtigere end afviklingen af almindelig bytekode direkte på jernet.

Problemet med virtuelle maskiner optræder udelukkende i forbindelse med allokering af system-ressourcer. Hvilket gør, at de bestemt langtfra altid er det rigtige valg.

(De kan til gengæld føles langsommere, fordi det - ligesom med en fysisk maskine - tager lidt tid at starte dem op.)

Jeg vil også godt protestere mode de skarpe skelnen mellem fortolket og kompileret kode. F.eks. bliver Java kompilet til et format, der fortolkes af JVM'en. Distinktionen ligger i programmernes rolle - ikke i inputtet.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Per Sikker Hansen 4. feb. 2010 - 11.15
 
Re: Jamen ...

Hvorfor skulle man trækkes med at skrive C++ i hånden, når man kan skrive det hurtigt i PHP og derefter oversætte det til C++? Performance-mæssigt vil det være det samme resultat, men ved at skrive det i PHP først sparer du en masse udviklingstid oveni.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 12.14
 
Kompileret vs. fortolket
Jeg vil også godt protestere mode de skarpe skelnen mellem fortolket og kompileret *kode*. F.eks. bliver Java kompilet til et format, der fortolkes af JVM'en. Distinktionen ligger i programmernes rolle - ikke i inputtet.

Fair nok. Beskrivelsen var upræcis. Helt præcis er forskellen afviklingen af koden.

Kompileret kode kan afvikles direkte af en (måske virtuel) hardware.

Fortolket kode behandles bid for bid af en fortolker. Et klassisk eksempel er en tekstfil der læses, parses og eksekveres linie for linie.

Virtuelle maskiner har principielt 2 måder at afvikle en midlertidig byte kode (f.eks. MSIL eller java bytecode): kompilering til native binær kode (maskinkode), typisk via JIT kompilering eller at fortolke koden som en klassisk fortolker.

At Java afvikles hurtigere fortolket end JIT kompileret, fortæller vist mere om kvaliteten af JIT kompileren og integrationen af denne i Javas kørselsmiljø.

Rent teknisk vil det altid være det optimale at få afviklet kode direkte af hardwaren, i stedet for at have noget kode der skal afvikle koden.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Peter Makholms billede
Peter Makholm 4. feb. 2010 - 13.21
 
Re: Kompileret vs. fortolket
Fortolket kode behandles bid for bid af en fortolker. Et klassisk eksempel er en tekstfil der læses, parses og eksekveres linie for linie.

Uha, det er vist ikke mange sprog der er implementeret sådan. Det skulle da lige være shell script. Jeg tror vist ikke engang at man gjorde sådan i klassisk tid...

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 13.48
 
Re: Kompileret vs. fortolket

@Peter Makholm

Måske du kan gøre rede for hvordan en fortolker virke anno 2010?

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 14.13
 
Re: Kompileret vs. fortolket

PHP er tilsyneladende fra version 4 gået over til også at bruge IL kode. Byte koden blive afviklet af en virtuel maskine, Zend Engine.

Så, rent teknisk bliver PHP faktisk først kompileret og derefter fortolket.

Præcis hvordan en virtuel maskine afvikler kode, skal jeg så ikke gøre mit klog på, men igen principielt er der kun 2 muligheder: kompileret (JIT) eller fortolket (evt. en blanding).

List teknisk forklaring på PHP IL:
http://blog.libssh2.org/index.php?/archives/92-Understanding-Opcodes.html

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 4. feb. 2010 - 14.26
 
Re: Kompileret vs. fortolket
Måske du kan gøre rede for hvordan en fortolker virke anno 2010?

Jeg tror der skal tæt på én redegørelse til for hver fortolker/virtuelle maskine/compiler der findes. Det er jo et stykke Frankenstein uden lige når først vi begynder at se på V8 og lignende.

kompileret (JIT) eller fortolket (evt. en blanding).

Og det er ved den eventuelle blanding at forskellen på en kompiler og en fortolker bliver udtværet, måske bliver eval og lignende fortolket mens resten er kompileret, måske afvikles koden fortolket, men stumper som gentages ofte bliver kompileret, der er mange muligheder.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 14.30
 
Re: Kompileret vs. fortolket
Jeg tror der skal tæt på én redegørelse til for hver fortolker/virtuelle maskine/compiler der findes. Det er jo et stykke Frankenstein uden lige når først vi begynder at se på V8 og lignende.

Der er skrevet adskillige bøger om CLR :-)

Det findes ligeledes en del, formegentligt mere, litteratur om JVM.

Og det er ved den eventuelle blanding at forskellen på en kompiler og en fortolker bliver udtværet, måske bliver eval og lignende fortolket mens resten er kompileret, måske afvikles koden fortolket, men stumper som gentages ofte bliver kompileret, der er mange muligheder.

Ja, men det laver ikke om på at rent teknisk er der 2 vidt forskellige ting.

Som oftest er det ret tydeligt hvordan et sprog bliver afviklet.

Ift. virtuelle maskiner, er det som regel også ret nemt at finde ud af hvordan den specifikke implementering afvikler koden. Bare man gider bruge tiden på at læse om det.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Carsten Sonne 4. feb. 2010 - 14.47
 
Kompileret kode bliver fortolket

Lige for at slutte diskutionen af kan jeg anbefale at læse Structured Computer Organization skrevet and den gode Andrew S. Tanenbaum. Nogle kender ham måske fra studiet.

Han beskriver forholdet mellem kompilering og fortolkning således:

Det ene sprogs kompilerede output bliver fortolket af det næste underliggende niveau. Sådan kan man opbygge lag for lag en egentlig eksekvering.

På samme vis kan man betragte en processor som en fortolker af maskinkode. Processoren har selv microcode der faktisk afvikler maskinkoden.

Nederste niveau er manipulation af bits på gate niveau. Det er her det faktiske arbejde sker.

Sådan kan man betragte forholdet mellem fortolkning og kompilering. Kompileret kode er noget der direkte kan afvikles (fortolkes) af næste maskinlag.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Baldur Norddahl 4. feb. 2010 - 15.34
 
Re: Jamen ...
Hvorfor skulle man trækkes med at skrive C++ i hånden, når man kan skrive det hurtigt i PHP og derefter oversætte det til C++? Performance-mæssigt vil det være det samme resultat, men ved at skrive det i PHP først sparer du en masse udviklingstid oveni.

Nej, det bliver næppe det samme resultat.

PHP er et sprog med dynamiske typer. Det vil sige at en variabel $i kan være et heltal, en streng eller noget helt tredie.

Tager du en stump kode, f.eks. "$j = $i + $i;" så er den generede C++ kode nødt til først at undersøge hvilken type $i har. Er $i et heltal, så er $j også et heltal som indeholder 2$i. Er $i derimod en streng, så er $j simpelthen 0. Koden kan derfor ikke oversættes til C++ som "j = i + i;" ().

I stedet skal det oversættes til noget i dur med:

j = i->t == INTTYPE ? new IntType(((IntType) i)->v + ((IntType) i)->v) : i->t == FLOATTYPE ? new FloatType(((FloatType) i)->v + ((FloatType) i)->v) : IntType(0);

(med forbehold for at det er et årti siden jeg sidst har lavet noget seriøst i C/C++, men ideen burde være klar nok).

(*) medmindre man bruger operator overloading til at simulere effekten, men den generede maskinkode vil være ordner mere effektiv hvis "i" er en "int"-type i stedet for en klasse.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 4. feb. 2010 - 17.24
 
Re: Jamen ...

De dynamiske typer kan man ofte komme ud over med en kompiler som ved hjælp af statisk analyse kan fastslå at nogle variable kun vil kunne antage bestemte typer af værdier. Eval funktionen er dog ret svær at passe ind i den sammenhæng.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Baldur Norddahl 4. feb. 2010 - 17.56
 
Re: Jamen ...

Hvordan vil du lave typeinferens på kode som det her:

[code=php]
function foo($bar,$i) {
print $bar[$i]+10;
}
$bar[0] = "foo";
$bar[1] = 5;
foo($bar,0);
foo($bar,1);
[/code]

PHP er et minefelt af funktioner som acceptere eller returnere ukendte typer. Som illustreret giver selv et simpelt array problemer.

Dermed ikke sagt at man ikke kan lave en del optimering. Du kommer bare ikke uden om en masse tilfælde hvor du er nødt til at behandle variabler som ukendte typer.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jacob Christian Munch-Andersen 4. feb. 2010 - 18.20
 
Re: Jamen ...

Jeg skriver at nogle, ikke alle, variable kan reduceres til statiske. I pæn kode vil det gælde for næsten alle variable. Selvfølgelig bliver man nødt til at bevare funktionalitet til at behandle dynamiske variable som ikke kan reduceres. Men det vil normalt ikke være noget stort problem for ydelsen.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

Teknologirådet reddet: Fortsætter i ændret konstruktion

Udgivet 10. feb 11.32Opdateret 10. feb 11.32

Version2 tester: Her kan du fare vild i Windows 8

Udgivet 10. feb 10.44Opdateret 10. feb 11.04

Rygte: Google snart klar med Dropbox-konkurrent

Udgivet 10. feb 10.19Opdateret 10. feb 10.19

Ny blog stiller skarpt på juraen i it-kontrakter

Udgivet 10. feb 10.00Opdateret 10. feb 10.15

Windows 8 Consumer Preview klar til download 29. februar

Udgivet 10. feb 9.49Opdateret 10. feb 10.24
Flere it-nyheder »
Få it-nyheder og blogs hver dag med Version2's nyhedsbrev.

Seneste debat

  1. 4 gode sikkerhedsråd: Sådan gør du firma-pc'en vinterferieklar

    7 comments.
    Last update 2 minutter 9 sekunder
    Skrevet af Thomas Bundgaard
  2. Er it-skandalerne kontrakternes skyld?

    4 comments.
    Last update 3 minutter 50 sekunder
    Skrevet af Nicolai Dragsted
  3. Derfor bliver dårlige it-projekter ikke stoppet i tide

    4 comments.
    Last update 5 minutter 20 sekunder
    Skrevet af Daniel Madsen
  4. XBMC på fit-PC3

    20 comments.
    Last update 16 minutter 16 sekunder
    Skrevet af Peter Toft
  5. Microsoft skrotter Startknappen i Windows 8

    14 comments.
    Last update 18 minutter 18 sekunder
    Skrevet af Alex Larsen
  6. Konklusion af Polsag-review fra 2009: Elendig kode hånd i hånd med elendig kontrakt

    14 comments.
    Last update 18 minutter 27 sekunder
    Skrevet af Casper Skydt
  7. Opdateret liste over danske iværksættere

    3 comments.
    Last update 19 minutter 57 sekunder
    Skrevet af Johannes Ulfkjær Jensen
  8. Enhedslisten: Nødvendigt med ny it-strategi, hvis skandaler skal undgås

    11 comments.
    Last update 38 minutter 37 sekunder
    Skrevet af Martin Ipsen Pedersen
Mere debat »

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Android
  • Bruttolønsordning
  • Business Intelligence
  • Cloud computing
  • Digitaliseringsstyrelsen
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X Lion
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu 11.10
  • Virtualisering
  • Windows 8
  • Windows Phone 7
  • iOS 5
  • iPhone 4S

Tjenester

  • Android-app
  • iPhone-app
  • RSS-feeds
Følg @version2dk
Få it-nyheder og blogs hver dag med Version2's nyhedsbrev.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Skelbækgade 4 1717 København V
  • Tlf. work 33265300