Facebook udostępnia kompilator JIT dla PHP

14.12.2011 3:10, Autor: Grzegorz Niemirowski (gniemirowski), Kategoria: News
NewsImage

Facebook udostępnił swoją maszynę wirtualną o nazwie HipHop, która działa jak kompilator JIT dla języka PHP.

W działaniu serwisu mającego 800 milionów użytkowników niezwykle ważna jest szybkość działania. Dlatego też Facebook opracował własną maszynę wirtualną wykonującą kod PHP. Działa ona o 60% szybciej od dotychczas używane interpretera tego języka (także autorstwa Facebooka) i zajmuje przy tym o 90% mniej pamięci. Kod PHP tłumaczony jest na AST (abstract syntax tree) a następnie na HipHop bytecode (HHBC), który jest wykonywany przez maszynę wirtualną (HHVM). Maszyna ta wykonuje kompilację w czasie wykonania (JIT) na kod maszynowy x64.

Do najważniejszych zadań, jakie stoją przed twórcami HipHop, jest zwiększenie wydajności. Obecnie kod otrzymywany z kompilatora HPHPC, poprzez tłumaczenie PHP na mocno zoptymalizowany C++, jest nadal dużo szybszy. Tak samo konieczne jest zmniejszenie zużycia pamięci. Choć udało się już prześcignąć pod tym względem interpreter HPHPI, to nadal nowa maszyna wirtualna wymaga dziesięciokrotnie więcej pamięci od binarek pochodzących z kompilatora HPHPC.

r   e   k   l   a   m   a

Komentarze (31)  

Avatar
ria.dev (niezalogowany) | 14.12.2011 4:25#1

nie to zebym sie czepial ale hiphop to jest od ponad roku dostepny -.-

AvatarUżytkownik jest nieaktywny
Mifczu | 14.12.2011 7:34#2

Fajnie, że taki gigant jak Facebook stoi na php bo te może zyskać coraz to ciekawe narzędzia :)

AvatarUżytkownik jest nieaktywny
pain3hp | 14.12.2011 8:42#3

jak tak dalej pójdzie to Starcrafta III napiszą w PHP

AvatarUżytkownik jest nieaktywny
tomick (redakcja) | 14.12.2011 8:49#4

@ria.dev: Nie czepiasz się ;) HipHop owszem, jest od mniej więcej 8 miesięcy dostępny, ale teraz Facebook wypuścił kompilator JIT. Jest jeszcze jeden projekt Facebooka z HipHop w nazwie.

Generalnie nazewnictwo tych trzech projektów jest mylące :)

AvatarUżytkownik jest nieaktywny
TheBlackMan | 14.12.2011 9:43#5

Już teraz PHP to świetny język, a jeszcze niedługo będzie miało szybkość Javy.

Czego chcieć więcej ?

Avatar
mszr (niezalogowany) | 14.12.2011 10:16#6

Żeby nie miało szybkości Javy.

Avatar
bobik314 (niezalogowany) | 14.12.2011 11:15#7

PHP nie jest świetnym językiem. Szybko można się nauczyć, szybko i łatwo robi się części widokowe, jest popularny, hosting dostępny wszędzie, ale to nie oznacza że jako język jest świetny.

Python i ruby są przyszłością.

Flame mile widziany.

Avatar
PythonHacker (niezalogowany) | 14.12.2011 11:35#8

PHP to dobra, ale ówczesna epoka. Teraz Światem - a już na pewno jego fundamentalną strukturą - rządzi Python.

AvatarUżytkownik jest nieaktywny
TheBlackMan | 14.12.2011 11:56#9

@bobik314

[[[Python i ruby są przyszłością. ]]]

Python nie jest zły, chociaż mógłby mieć jakąś normalną składnię (np. jak C++, Java i PHP) i mógłby też nie brać pod uwagę białych znaków, bo jest to dość wkurzające.

Ruby ma tak potworną składnię że odrzuca mnie ona natychmiastowo. Nigdy się raczej tego czegoś nie tknę. Rozumiem że to pewnie jest kwestia gustu, ale mojemu gustowi kompletnie nie odpowiada.

Dlaczego wybrałem PHP:
- (najważniejsze) Składnia C++/Javy. Bez tego ani rusz. Uwielbiam tą składnię i nie zamienię na żadną inną.
- Łatwe w konfiguracji
- Obecne we wszystkich hostingach
- Relatywnie szybkie (z akceleratorami)
- Dużo możliwości optymalizacji kodu
- Ma najwięcej bibliotek i rozszerzeń ze wszystkich języków skryptowych
- (jednocześnie zaleta i wada, ale dla mnie zaleta) Brak wymuszonej strukturyzacji języka, brak wbudowanych frameworków, wszystko można robić po swojemu
- PHP to język skryptowy instancyjny, dzięki czemu łatwy w debuggowaniu, w przeciwieństwie do języków uruchamiających demona oczekującego na połączenia od użytkownika.

Python jest ZNACZNIE starszy od PHP, pierwsze wersje pochodzą z 1991 roku, jest open source tak jak PHP, a mimo to nie zawojował rynku tak bardzo jak PHP. Wytłumaczenie jest jedno - PHP jest zwyczajnie lepszym językiem do większości zastosowań.

Aczkolwiek nie mam nic przeciwko Pythonowi - jak dla mnie im więcej jest języków tym lepiej.

[FLAME ON]

AvatarUżytkownik jest nieaktywny
TheBlackMan | 14.12.2011 12:02#10

@mszr

[[[Żeby nie miało szybkości Javy.]]]

Java jest wbrew pozorom bardzo szybka, tak przynajmniej 10 razy szybsza od PHP (mówię tutaj o kodzie natywnym PHP, a nie binarnych funkcjach wbudowanych i pochodzących z zewnętrznych bibliotek).

Zrób sobie prosty test: pętla FOR w javie iterująca 500k obiektów i to samo w PHP. PHP będzie dramatycznie wolniejsze.

Java w niektórych przypadkach jest tak szybka jak natywny kod, a generalnie rząd wielkości szybsza niż języki skryptowo-interpretowalne.

AvatarUżytkownik jest nieaktywny
SebaZ | 14.12.2011 13:00#11

Java jest bardzo szybka. Start maszyny wirtualnej i załadowanie aplikacji do pamięci trwa zwykle długo i rzutuje na czas wykonania zadania.

Avatar
ria.dev (niezalogowany) | 14.12.2011 17:16#12

@TheBlackMan
PHP byl robiony z mysla o web, python nie. PHP stal sie w pewnym momecie popularny jako zamiennik dla perl do strony internetowych, python dopiero od nie dawna tak naprawde zaczyna wchodzic w sektor web. Popularnosc PHP nie wynika z tego ze jest dobrym jezykiem, po prostu trafil w czas kiedy ludzie szukali czegos co zastapi perl a jednoczesnie bedzie mialo bardziej sensowna skladnie.
I tak btw nie wiem co masz do skadni pythona, uczy jedynie porzadku, w przeciwienstwie do php.Zreszta do dzis nie doczekalem sie sensownego OOP w php (choc zapowiada sie sporo zmian w php6)

Avatar
Coment (niezalogowany) | 14.12.2011 18:27#13

Java jest wolna... :| takiej prędkości to ja nie chce xD

AvatarUżytkownik jest nieaktywny
TheBlackMan | 14.12.2011 20:08#14

@ria.dev

[[[I tak btw nie wiem co masz do skadni pythona, uczy jedynie porzadku,]]]

To zależy od punktu widzenia. Ja sam trzymam odpowiedni porządek, lubię podłubać i sam stworzyć sobie optymalną strukturę kodu, więc nie lubię jak się na mnie to wymusza.
Wymuszanie porządku jest dla miernych programistów, co sami nie umieją tego porządku utrzymać...

[[[Zreszta do dzis nie doczekalem sie sensownego OOP w php (choc zapowiada sie sporo zmian w php6)]]]

Bzdura. Powtarzasz stare, dawno nieaktualne mity.
PHP 5.3.8 (bo takiego aktualnie używam, wersja stabilna), ma BARDZO porządny OOP.

A PHP 5.4 (jeszcze niestabilne) ma już w ogóle takie ficzery (use), który rozwiązuje problem wielokrotnego dziedziczenia lepiej niż robi to Java czy C++ (nie wiem jak z Pythonem).

AvatarUżytkownik jest nieaktywny
RaveStar | 15.12.2011 11:25#15

Najważniejszej informacji nie ma w tym newsie: na jakiej licencji?

AvatarUżytkownik jest nieaktywny
TheBlackMan | 15.12.2011 11:45#16

@RaveStar

[[[Najważniejszej informacji nie ma w tym newsie: na jakiej licencji?]]]

Zmixowana licencja BSD wzięta PHP oraz Zend license.
- Open Source: tak
- Free Software: trochę tak, trochę nie.

AvatarUżytkownik jest nieaktywny
kawka78 | 15.12.2011 12:21#17

@RaveStar
"na jakiej licencji? "
Nie no, jak HipHop, to chyba tylko na licencji ZAIKSu... ;P

AvatarUżytkownik jest nieaktywny
RaveStar | 15.12.2011 13:18#18

@TheBlackMan
Czyli kod mogę sobie zmieniać i podziwiać, ew. użyć na potrzeby amatorskie, ale z biznesu nici? Tj. haracz do FB za użycie we własnym biznesie?

AvatarUżytkownik jest nieaktywny
TheBlackMan | 15.12.2011 16:49#19

@RaveStar

[[[@TheBlackMan
Czyli kod mogę sobie zmieniać i podziwiać, ew. użyć na potrzeby amatorskie, ale z biznesu nici? Tj. haracz do FB za użycie we własnym biznesie?]]]

BSD to licencja uważana za bardziej przyjazną dla biznesu od przykładowo GPL...

Avatar
ads_ (niezalogowany) | 15.12.2011 18:38#20

Chciałbym zobaczyć porównanie z php+ionCube+eAccelerator.

Avatar
xeenu (niezalogowany) | 15.12.2011 23:20#21

@TheBlackMan
>- (najważniejsze) Składnia C++/Javy. Bez tego ani rusz. Uwielbiam tą składnię i nie zamienię na żadną inną.

Składnia Perla wywodzi się ze składni C.

>Obecne we wszystkich hostingach

Perl jest obecny w wielu hostingach.

> Relatywnie szybkie (z akceleratorami)

Perl w wielu operacjach jest szybszy niż PHP i zajmuje dużo mniej pamięci RAM.

>- Ma najwięcej bibliotek i rozszerzeń ze wszystkich języków skryptowych

Najbogatszą kolekcję rozszerzeń ma Perl, patrz CPAN.

- (jednocześnie zaleta i wada, ale dla mnie zaleta) Brak wymuszonej strukturyzacji języka, brak wbudowanych frameworków, wszystko można robić po swojemu

Perl słynie z TMTOWTDI (There's more than one way to do it)

>- PHP to język skryptowy instancyjny, dzięki czemu łatwy w debuggowaniu, w przeciwieństwie do języków uruchamiających demona oczekującego na połączenia od użytkownika.

To jest tak głupie, że nawet nie będę tego komentował.

AvatarUżytkownik jest nieaktywny
TheBlackMan | 16.12.2011 11:25#22

@xeenu

[[[ (...) bla bla komentarze o perlu (...) ]]]

Tak, PHP i perl są dość podobne, tyle że PHP to taki nowy, lepszy perl - łatwiejsze w użyciu, konfiguracji, etc etc.
A przy zastosowaniu wszelkich możliwych akceleratorów nie zdziwiłbym się gdyby nawet było szybsze od perla. Zobaczymy co ta nowa maszyna wirtualna pokaże (użycie RAMu też ma dzięki niej spaść).
.
.
[[[To jest tak głupie, że nawet nie będę tego komentował.]]]

Nie rozumiem czemu, może nie zrozumiałeś ?

Nie rozumiesz różnicy w debuggowaniu programów które się odpali raz i cały czas działają (trzeba je debuggować podczas działania - przykładowo C++, aplikacje serwerowe Java, demony napisane w Pythonie), a językami instancyjnymi, które jednorazowo uruchamiają mały fragment kodu i wykonują go od początku do końca {a debuggowanie polega na odpaleniu var_dump($zmienna) i zobaczeniu co wyrzuca} ?

Kreujesz się na takiego mądrego, a nie potrafisz zrozumieć prostego słowa pisanego ?

AvatarUżytkownik jest nieaktywny
DonM$ | 16.12.2011 17:28#23

@TheBlackMan

OOP w php to jest kpina, nakładka, to że składnia umożliwia OOP nie oznacza iż php jest obiektowe, bo nie jest.

AvatarUżytkownik jest nieaktywny
TheBlackMan | 17.12.2011 0:41#24

@DonM$

[[[OOP w php to jest kpina, nakładka, to że składnia umożliwia OOP nie oznacza iż php jest obiektowe, bo nie jest.]]]

Najwyraźniej nie masz pojęcia co oznacza pojęcie obiektowości.
PHP jest w pełni obiektowym językiem, co do tego nie ma żadnych wątpliwości.

pl.wikipedia.org/wiki/PHP
en.wikipedia.org/wiki/PHP

Twój kaprys nie zmieni rzeczywistości.

Avatar
Pasibrzucho (niezalogowany) | 17.12.2011 8:52#25

@TheBlackMan
Od kiedy PHP jest w pełni obiektowy? czy np. typ Integer dziedziczy po Object tak jak jest w C# i Java? Zdaje się, że nie, więc gówno prawda.

AvatarUżytkownik jest nieaktywny
DonM$ | 17.12.2011 20:10#26

Widocznie to ty nie masz takiego pojęcia, rzeczywistość jest taka, że php nie jest językiem obiektowym, co najwyżej umożliwia konstrukcje obiektowe, a to nie jest to samo.

Php w swoich podstawach nie zostało napisane z myślą o oop i wersja 5 tego też nie zmieniła, to jest raczej doklejana obsługa.
Ile tak naprawdę wbudowanych konstrukcji to prawdziwe obiekty ? W prawdziwym języku OOP praktycznie wszystko jest obiektem.

A w php stringi, tablice, liczby nic nie jest obiektem albo nie można wielu tak traktować, tablice dosłownie używane wszędzie, wciąż nie są obiektem, aplikacje nie żyjące w pamięci serwera, a kod wykonywany od nowa przy każdym zapytaniu, to ma być OOP ?

Nie wspomnę też o tym, że programiści php sami nie wiedzą co chcą, z jednej strony doklejają jakiś oop, a z drugiej trzymają proceduralne g*wno i wychodzi z tego coraz większy mix i coraz więcej baboli, a jak chce się być prawdziwą technologią OOP TO TAK NIE MOŻNA.

Z tymi linkami do wiki to mnie rozwaliłeś, masz też ci zarzucę http://softwarebashing.org/blog/2009/09/php-the-ultimate-suck/
http://tommorris.org/wiki/PHP%20Sucks

AvatarUżytkownik jest nieaktywny
TheBlackMan | 18.12.2011 21:31#27

@Pasibrzucho (niezalogowany) | 17.12.2011 8:52#25

[[[Od kiedy PHP jest w pełni obiektowy? czy np. typ Integer dziedziczy po Object tak jak jest w C# i Java? Zdaje się, że nie, więc gówno prawda.]]]

OK, złego słowa użyłem.

Przez "w pełni obiektowy" rozumiem że "umożliwia wszystkie operacje na obiektach, które umożliwiają języki takie jak Java czy C#".

A BTW, pełna obiektowość taka jak w C# czy Java nie podoba mi się wcale.

Dlaczego do cholery Int czy String miałyby mieć wymuszone dziedziczenie po czymkolwiek ? Ten "feature" uważam za ścierwo i nie lubię języków, które wymuszają na mnie stosowanie struktury, która powoduje zwiększone zużycie zasobów.

Właśnie taka obiektowość jak jest w PHP lub C++ powinna być standardem - opcjonalna, a nie wymuszona.

AvatarUżytkownik jest nieaktywny
TheBlackMan | 18.12.2011 21:35#28

@DonM$

[[[Nie wspomnę też o tym, że programiści php sami nie wiedzą co chcą, z jednej strony doklejają jakiś oop, a z drugiej trzymają proceduralne g*wno i wychodzi z tego coraz większy mix i coraz więcej baboli, a jak chce się być prawdziwą technologią OOP TO TAK NIE MOŻNA.]]]

Właśnie że tak MOŻNA i TRZEBA. PHP na początku nie był w ogóle językiem obiektowym i miał zupełnie inną, bardziej prymitywną strukturę, więc to LOGICZNE iż tego typu funkcjonalności trzeba wprowadzać STOPNIOWO, a nie NAGLE.

Dzięki temu twórcy aplikacji i frameworków istniejących bardzo długo mogą STOPNIOWO przenieść swoje aplikacje na nowe wersje PHP, co niesamowicie OBNIŻA KOSZTY.

Być może właśnie dzięki zachowywaniu wstecznej kompatybilności PHP jest tak popularne. Z pewnością gdyby nagle w wersji 5.3 zrobili go w pełni obiektowo i zDEPRECATEDowali wszystkie nie-obiektowe/przestarzałe rzeczy, to wszyscy przerzuciliby się na Pythona.

AvatarUżytkownik jest nieaktywny
TheBlackMan | 18.12.2011 21:38#29

@DonM$

[[[a kod wykonywany od nowa przy każdym zapytaniu, to ma być OOP ? ]]]

1. Kod wykonywany od nowa w każdym zapytaniu nie ma nic do OOP. To dwie, zupełnie oddzielne dziedziny.

2. Można bezproblemowo napisać demona w PHP, który czeka na żądania jak normalna aplikacja. Pytanie tylko czy jest to bardziej wydajne od podejścia instancyjnego.

3. Języki o podejściu skryptowo-instancyjnym są łatwiejsze w debuggowaniu od demona, który działa cały czas. Pisałem już wyżej.

Wszystko ma swoje wady i zalety.

AvatarUżytkownik jest nieaktywny
DonM$ | 22.12.2011 12:04#30

@TheBlackMan

Bardziej niż MOŻNA I TRZEBA, to oni MUSZĄ bo wybrali kompatybilność, co według mnie jest błędem, trzeba było się odciąć i zrobić kompletnie nową wersję PHP ,całkowicie od podstaw, całkowicie pod OOP, to byłby lepszy wybór bo teraz są po prostu różne kwiatki.
I nie musisz mi pisać czym był na początku "php", bo nadal tym jest.
Mogli zostawić linię 5.X tradycyjnie lub ten mix jak obecnie, a od php 6 rewrite i tylko oop, budowane od postaw, wszystkim by to wyszło na dobre, istniejący kod mógłby działać na gałęzi 5.x, a na 6 trzeba by przepisać.

Co do

1. Ma, gdy cała technologia jest pisania z myślą o OOP jak .net, ma też wspólnego z php to, że właśnie zastosowanie doklejanego oop nie wpływa na nic po za czytelnością i strukturą kodu, a netbeans z którego i ja korzystam jest daleko w tyle za visual studio jeśli chodzi o intellisense, wykrywanie zależności, refactoring, to spowalnia pracę.

2. Jeżeli masz obiekt który inicjalizacje dość dużo danych i wykonuje dużo poleceń to nie ma sensu go tworzyć od nowa, oczywiśćie w php masz apc i inne, ale to nie jest złoty środek, gdyby aplikacja "żyła" w pamięci byłaby o wiele wydajniejsza.

3. Jak debugger działa to ktoś to się zna sobie z tym poradzi także słaby argument, debugger w asp.net można nawet złączyć na serwerze live zdalnie.

Avatar
zyg (niezalogowany) | 23.12.2011 15:37#31

Wiele lat pisałem w PHP, teraz prawie zupełnie przerzuciłem się na Pythona. Powodów jest parę:

1. Python jest językiem uniwersalnym. Kiedy musiałem zbudować system, w którym część webowa była tylko małym fragmentem dużego systemu, okazało się, że możliwości PHP się skończyły.

2. Python jest bardzo wydajny i ma przemyślaną konstrukcję. Owszem, trzeba się przyzyczaić do bezklamerkowej składni, ale potem pisze się niesamowicie szybko. Spróbujcie, jak obrabia się w pythonie daty albo stringi i zakochacie się w tym języku :) Szczególnie, gdy przypomnicie sobie niekonsekwencje twórców PHP.

3. Python nie narzuca niczego. Możesz pisać głupie skrypty, a możesz zbudować wielkie biblioteki i całe API. Możesz pisać obiektowo, proceduralnie. W porównaniu do Javy nie narzuca na siłę obiektowości do wszystkiego, a co ważniejsze, w Pythonie bardzo łatwo się miksuje "ładnie" napisane biblioteki z prostymi skryptami. W Javie do odpalania skryptów zwykle używa się dodatkowego języka typu Groovy czy (!) Jython.

4. Argument z tanim hostingiem mocno przeważa w stronę PHP. Ale do poważnych rzeczy konto w home za 100 zł rocznie może nie wystarczyć (mówiąc delikatnie). (Opiekuję się aplikacją webową, która leży na klastrze 8 potężnych serwerów, obsługuje spory ruch z internetu i jeszcze wewnętrznie mnóstwo danych do przetworzenia). Ale jeśli chcecie wynająć hosting, np. 1and1.pl daje za 400 zł rocznie VPS, na którym można sobie postawić, co się chce.

5. Środowisko Pythonowców to zwykle niezłej klasy programiści. Z przykrością muszę powiedzieć, że wśród PHP-owców sporo jest "McGyverów" - potrafią zainstalować jakiegoś Wordpressa, pogrzebać w skrypcie, coś polepić, ale przy odrobinę trudniejszych zadaniach odpadają (paru znajomych z rynku potwierdziło mi te obserwacje). W tym sensie trzymanie się PHP - nie chcę nikogo urazić - ale trochę uwstecznia. Poczytajcie książki do PHP dostępne w Polsce - 75% tych książek wprowadza złe nawyki, nie uczą projektowania systemów, logiki, warstw, architektury.

Dodaj komentarz

Zasady publikowania komentarzy
Autor
Treść
 
Polecamy
Test: PocketBook Pro 612

Biblioteka w kieszeni
Testujemy: Manta Smart TV Box

Internet w telewizorze
Spotkajmy się na HotZlocie!

13-15 07 2012, Zamek na Skale
Top programy
  •  
Top programy ostatnie 7 dni
  •  
Top programy ostatnie 30 dni
  •  
Skanery antywirusowe
skaner av