A Facebook bejelentette a HipHop for PHP-t

Címkék

A napokban arról lehetett hallani internet szerte, hogy a Facebook valami nagyra készül a PHP-val kapcsolatban. A bejelentést keddre vártuk és ma be is jelentetek valamit. A HipHop for PHP-t.

"A HipHop-pal, függően az oldaltól, átlagosan körülbelül 50%-kal csökkentettük webszervereinken a CPU felhasználást. Kevesebb CPU [felhasználás] kevesebb szervert, azaz kevesebb overhead-et jelent. Ez a projekt erőteljesen kihat a Facebook-ra. Úgy érezzük, hogy az internet széles körben profitálhat a HipHop előnyeiből, ezért ma este kiadjuk nyílt forrásúként [...] A HipHop for PHP technikai értelemben nem egy fordító. Sokkal inkább egy forráskód átalakító. A HipHop átalakítja a PHP forráskódodat erőteljesen optimalizált C++ kóddá, majd a g++-t felhasználva lefordítja azt."

Frissítés: A HipHop megoldás tartalmaz egy új webszervert is, amelyet a Facebook már fél éve használ.

"Összességében a HipHop lehetővé teszi számunkra, hogy megtartsuk a PHP legjobb tulajdonságait, miközben kihasználjuk a C++-ból származó teljesítmény előnyöket. Összesen több mint 300 000 sornyi kódot írtunk és több mint 5 000 egységtesztet végeztünk. Ezek mind kiadásra kerülnek ma este a GitHub-on a nyílt forrású PHP licenc alatt."

A teljes bejelentés itt olvasható.

Hozzászólások

"... az igazi programozó akármilyen nyelvben is bír FORTRAN programokat írni."

hmm érdekes. Habár nem értem miért ragaszkodnak feltétlen a PHP-hez, miért nem egyszerűen csak C++ ban, vagy egyéb közel hasonló teljesítményű nyelveken programoznak.

C++-os webfejlesztő? Ajajj.

Az ilyesmi problémákon amúgy én is gondolkodtam amikor a DCL-nek akartam egy fordítót hegeszteni, de nem sikerült feloldanom a ' ' problémáját.

Amúgy meg milyen már, azt írja, nem fordító, hanem forráskód átalakító. A fordító: egyik nyelvről a másikra. Szerintem ez ugyanazt csinálja.
----
Hülye pelikán

a scriptnyelvek ezen jellegzetesseget (a valtozo kiertekeltetest parancsra) ha forditot akarsz irni, legegyszerubben egy eval('commandline') jellegu runtime forditohivassal lehet orvosolni. Ez persze sok CPU-t eszik, meg memoriat is kicsit. Pont emiatt van az, hogy az ilyen script -> 3g nyelv transzlatorok eredmenye csak olyan 50% gyorsulas, nem pedig mondjuk 500% gyorsulas, ha a programozo script nyelv helyett egybol valami 3g nyelven programozna.
A DCL ebbol a szempontbol erosen hatranybol indul, mert egyreszt a valtozo kiertekeltetes megkerulhetetlen egy rakas programtechnikai lepesnel, masreszt a kiertekeltetes rekurziv. Ha lenne is fordito, az is csak minden sorban az eval() -t hivna.

Ha mar itt tartunk, egy (megsem) vegtelen ciklus, ami jol peldazza a script -> 3g nyelv translator nehezseget


$ a="!"
$ label:
$ 'a' exit
$ a="mas:"
$ goto label

Nem hiszem, akkor már egyszerűbb lenne eleve szigorúan típusos nyelvet használni. Elvileg ez a dolog arra lenne jó, hogy (amellett, hogy a mostaninál gyorsabb) megőrizze a PHP tulajdonságait, amik éppen azért scriptnyelv tulajdonságok, mert van egy csomó dolog, amiben egy rendes fordítós nyelv hatékonyabb.

BasPasC nyelvből csinál assembly-t! Ja, nem... :)

kár hogy itt nincs Like, most jól megnyomnám.

Lehet, hogy csak en vagyok telhetetlen, de nem keves egy kicsit az 50%. Jelentosen tobbet vartam, a tegnapi cikk alapjan.

Valamikor év eleje felé írhattunk át PHP + plpgsql -ről C++ -ra egy PHP scriptet. A korábbi ~2 órán át futó vizsgálgatások helyett futott max 2-3 percig. Ez nem 50%-s gyorsulás, hanem 50x-s.

Ahhoz képest sovány, mert valóban létezik ez a nagyságrendi különbség a két nyelv között.

----------------
Lvl86 Troll

A többiek hozzászólásával is egyetértek. Meg megkérdezném, hogy a több millió soros PHP kódot mennyi idő és mekkora költséggel lehetne átírni nulláról C/C++-ra a Facebook esetében? Egy sebesség optimalizációra kezdeményezett projektben nem mindig minden csak és kizárólag a sebességről szól. ;)

Jó, valóban más a helyzet.

Nálunk az egész script a kukába lett dobva és negy egy facebook méretű rendszer volt, hanem egy nagyobb adatmennyiséget feldolgozó PHP script.

Facebookék is írták valahol, hogyha most kezdenék el fejleszteni a rendszert, nem PHP-ban írnák, hanem valami hatékonyabb nyelven, csak már túl sok kódjuk van megírva, hogy az egészet kivágják a kukába és újrakezdjék C++-ban. Mi se az egész n*100K-s nagyságrendű projektet vágtuk ki a kukába, C++-s kód lett talán 5000 sor.

----------------
Lvl86 Troll

van egy tippem, hogy nem a php itt a szűk keresztmetszet, hanem a tárolás, adatbázis, kommunikációs költségek.
A php a géppark 5-10%-án lehet jelen. 10.000 szervergépnél ez 500-1000 ezer szerver. Ha 50%-ot gyorsítanak, akkor 250-500 szerverrel kell kevesebb nekik, vagyis inkább úgy mondanám, hogy ott néhány évre megoldott a szerverpark bővítés nélkül.

Ugyan beleszarok a faszbukba, de vmi normali nevet nem lehetett volna adni neki? :D

Ez érdekes.
Amúgy a C++ program hogy fog futni? Belefordít egy light webszervert is?
Vagy cgi lesz lesz belőle?

miert, a php hogyan ment?
a webszerver hivta a php ertelmezot, adta neki az inputot, vart az outoutra, kikopte a a kliensnek

varhatoan nem cgi interfeszen keresztul, hanem valami ctxsw nelkuli shlib hivassal, mod_php mondjuk. Ezt barmilyen (najo, majdnem barmilyen) nyalven meg lehet oldani.

sok-sok php, amibol az oldal all -> transzlator -> fordito -> egy darab mod_specific, ami a weboldalt generalja minden aloldalaval egyutt. Vagy nem ;) de hasonloan lehet.

Developers! Developers! Developers!
bocsi rossz helyre ment ;-)

udv Zoli

Nem értem ezt a "technikailag nem fordító hanem forráskód átalakító" dolgot.

Az én értelmezésemben forráskód átalakító mondjuk egy preprocesszor, vagy egy kód formázó/csinosító cucc, ami lényegében nem ismeri az adott nyelv szintaktikáját sem teljesen, szemantikájával meg szinte egyáltalán nem foglalkozik, vagy egy refactoring tool, aminek kimeneti nyelve ugyanaz mint a bemeneti.

De valami ami:
- teljes parsert tartalmaz (nyilván a HipHop-hoz kellett ilyen)
- egy adott programnyelvű a bemenetre és egy másik programnyelvű a kimenetet ad

az egy FORDÍTÓ nem? Ti értitek?

Szóval akkor most mi is a különbség a HipHop meg bármely másik hagyományos, magasabb szintű nyelvre (pl C-re) fordító fordítóprogram között?

> Az én értelmezésemben forráskód átalakító mondjuk egy preprocesszor, vagy egy kód formázó/csinosító cucc

http://www.program-transformation.org/Transform/TransformationTaxonomy

> Szóval akkor most mi is a különbség a HipHop meg bármely másik hagyományos, magasabb szintű nyelvre (pl C-re) fordító fordítóprogram között?

A feladaton, és a megoldás módján (implementációján) kívül semmi. :-)

http://markyhennon.blogter.hu/39856/edes-ekes_apanyelvunk_kabareszoveg#…

Nem fordító! Magyar nyelvben a translator-t meg a compiler-t is csak fordítónak lehet fordítani, pedig lényeges különbség van a kettő között. A translator csinálja azt, amiről fennt olvastunk, vagyis egyik nyelvről a másikra fordít. A compiler pedig egy adott nyelvű kódot gépi kódra fordít, amit viszont nem lehet nyelvnek nevezni. A preprocesszor megtartja a nyelvet (többnyire).

Értem. A wikipedia tényleg úgy határozza meg ahogy írod. Mondjuk a "techinakailag" kitétel miatt volt nekem talán furcsa, mert technikailag a compiler és a translator végülis tök ugyanolyan, csak a célnyelv más.

De ezt angolul is keverik 99%-ban mert én eddig még mindig "compiler" megnevezéssel találkoztam...

pl:

"CHICKEN is a compiler for the Scheme programming language. CHICKEN produces portable, efficient C"
http://www.call-with-current-continuation.org/

vagy ez: http://smarteiffel.loria.fr/

"A fordítóprogram (angolul compiler) olyan számítógépes program, amely valamely programozási nyelven írt programot képes másik nyelv szabályaira lefordítani, például gépi kódra, köztes kódra, vagy egy másik programozási nyelv kódjára."

http://hu.wikipedia.org/wiki/Fordító

Szerintem ez korrekt. A fordítás az élőnyelvnél is azt jelenti, hogy egyik nyelvről a másikra, és mivel a compilernek nem találtak ki új nevet magyarban, és mindemellett tökéletesen beleillik az egyik nyelv, másik nyelv koncepcióba (ahol a másik nyelv a gépi kód vagy assembler, egész véletlenül), ezért.
----
Hülye pelikán

Igen. Mondjuk én az angol wikire céloztam, mert végül is az angol terminológia értelmezési kérdéseire lett visszavezetve a probléma. Ott meg tényleg:
http://en.wikipedia.org/wiki/Compiler
"The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language or machine code)....... A program that translates between high-level languages is usually called a language translator, source to source translator, or language converter."

Mondjuk még a wikipedia is ezt írja:

"While the typical multi-pass compiler outputs machine code from its final pass, there are several other types:

A "source-to-source compiler" is a type of compiler that takes a high level language as its input and outputs a high level language."

KisKresz

Most mindenki azon vekeng, hogy compiler-e vagy sem. De lényeg a lényeg, próbálta már valaki?
100% osan le tudja forditani az osszes php-ban irt programot? Milyen kodot general? Teljesitmenye?

A bejelentésben nem azt írta tegnap a fickó, hogy még tegnap este (Pacific time 7:30pm) elérhető lesz a forráskód vagy a github repo vagy legalább még több techikai részlet? Már reggel 6 óra körül van náluk és sehol semmi. :(

egy picit jobban atgondlova ez kb. olyan, mint amikor anno a dbase helyett clippert kezdtek hasznalni, merhogy az millen gyors meg ize. csak sajna ettol meg az osszeganyolt dbase kodok maradtak osszeganyolt dbase kodok.
enyhen csoborbol vodorbe :D)

Ja... Ha a cég adata változik (pl.összeolvadás miatt a neve), akkor is pecselni kell, mert bele van fordítva az összes ügyfél adata, akinek eladta a "fejlesztő" társulat... Most épp a bérprogival szívnak, holott <10 főről lenne szó... Ha kimegy valaki helyrerakni, az többe kerül, mint kihajítani az egészet, és venni egy normális bérprogit... Tényleg, Linuxra (vagy Linux-os szerver+Windows kliensek) főkönyv+pénztár+bér kombót tud valaki ajánlani?

Csak tippjeim vannak a miértre, amikor elkezdtem feszegetni, akkor "lett" olyan, aki nemcsak a desktop-okat, hanem a full hálózatot, internet-szolgáltató váltást, levelezés ennek megfelelő átmatatását, estébé meg tudja csinálni, úgyhogy inkább nem fecsegek, de úgy tűnik, rátapintottam a dolgok lényegére. A cégek mögött ott van egy (talán kiemelten) közhasznú alapítvány, ami többek között a szoftvereket biztosítja, mely szoftvereket egy fejlesztő társulattól szerzi be a kezdetek kezdete óta. Szerinted...?

halfOff: Nem tudom hogy a fejlesztések hatása-e de az új felülettel együtt sokkal használhatóbb sebességű a Facebook mint eddig valamikor is volt.