HipHop for PHP
HipHop for PHP (v překladu HipHop pro PHP) je aplikace transformující zdrojové kódy psané v jazyce PHP do vysoce optimalizovaného kódu v C++. Byla vyvinuta vývojáři Facebooku a vydána v roce 2010 jako open source software.
První vydání | 2. února 2010 |
---|---|
Aktuální verze | 3.15.0 (28. září 2016) |
Vyvíjeno v | C++ a C |
Typ softwaru | běhové prostředí, překladač, aplikační software a svobodný software |
Licence | licence PHP |
Web | github |
Některá data mohou pocházet z datové položky. |
Ačkoliv HipHop for PHP splnil očekávání, tak byl na počátku roku 2013 ukončen a byl nahrazen just-in-time spouštěným enginem HipHop Virtual Machine (HHVM), ten také vyvíjí Facebook.[1]
Pozadí
Mezi hlavní nevýhody jazyka PHP oproti jiným patří jeho nízká rychlost a vysoká paměťová náročnost. Při nasazení aplikací psaných v tomto programovacím jazyce ve velkém měřítku tyto problémy přestávají být zanedbatelnými. Cílem projektu je zrychlit vykonávání PHP kódu, snížit paměťové nároky, a ušetřit tak nemalé finanční prostředky za hardware, který by byl jinak potřebný pro obsloužení stejného počtu požadavků.[2]
Základní funkcionalita
HipHop for PHP zadaný zdrojový php soubor optimalizuje a transformuje do zdrojových souborů CPP jazyka C++. Ty poté zkompiluje do spustitelné binární podoby. Výsledný spustitelný soubor poté vykonává funkcionalitu původního PHP skriptu, či jej lze pomocí přepínačů nastartovat jako webový server, který na určeném portu odpovídá na HTTP požadavky. PHP skriptů lze do jednoho souboru zkompilovat i více, a tak je možné mít jeden spustitelný binární soubor, který v sobě obsahuje funkčnost celé rozsáhlé aplikace.
Proces transformace kódu
Proces transformace kódu sestává ze tří základních kroků:
- Statická analýza PHP kódu, kdy jsou shromažďovány informace o deklaracích proměnných, funkcí a tříd, a jejich vzájemných závislostech,
- přiřazení proměnným jejich typ – mezi skalárními typy jazyka C++ je vybrán ten nejspecifičtější použitelný,
- vygenerování C++ kódu, který je většinou v přímé korespondenci příkazy a výrazy PHP z původních souborů.
Výsledný kód je poté zkompilován pomocí překladače g++.
Pozadí implementace
Statická kompilace zdrojových kódu přináší určité výhody a lze proto ušetřit na výkonu na několika místech:
Kód nemusí být načítán ze souboru, a poté postupně interpretován vždy znovu od začátku.
Přestože PHP poskytuje květnaté možnosti dynamického interpretovaného jazyka, většina kódu je relativně přímočará. Častěji se v něm vyskytují obyčejné podmínky či cykly než dynamicky vytvářené názvy proměnných či tříd, či vkládání souborů do souborů na základě dynamicky generovaných parametrů (což C++ nezná). Právě v takových operacích je kompilovaný kód rychlejší.
Kdekoliv je to možné, je použito statické svazování (static binding) proměnných i funkcí.
PHP je skriptovací jazyk s dynamickým, slabým typováním proměnných. Oproti tomu je C++ jazyk kompilovaný s typováním statickým. Pro jednotlivé proměnné je tak co nejspecifičtěji vybírán odpovídající datový typ, aby se ušetřila paměť.
Výhody
- Zrychlení spouštěného kódu.
Nevýhody
- Nutnost obětovat některé vlastnosti jazyka (byť málo často používané) jako např. funkci eval(),
- lze použít pouze podporovaná rozšíření PHP (funkce využívající knihovny třetích stran),
- při sebemenší změně zdrojových kódu je třeba spustitelný soubor překompilovat.
Vývoj a uvedení
Projekt byl vyvíjen dva roky a byl oficiálně představen 2. února 2010 na vývojářském blogu Facebooku (Facebook Developers: Developer Blog). Týž den se konala i konference pro tým vývojářů přenášená živě přes internet. Zdrojové kódy HipHop for PHP jsou napsány na více než 300000 řádcích a obsahují přes 5000 unit testů. Projekt je licencován pod PHP Licence.
Pohnutky Facebooku k vývoji a nasazení
Jedním z vytyčených cílů, které vedly ke vzniku HipHopu byla možnost psaní komplexní logiky aplikace přímo v PHP. Společnosti s velkými projekty na PHP postavenými obecně přepisují jejich základní funkcionalitu z čistého PHP do PHP rozšíření psaných v C nebo C++, aby obešly základní problémy interpretovaných jazyků jako je PHP, a sice vyšší nároky na CPU a dostupnou paměť. To však vede ke snižování počtu lidí, kteří jsou schopni pracovat se vším kódem aplikace. Díky tomuto si Facebook však svou schopnost rychlého vývoje zachovává.
Úspory na Facebook.com
Na serverech Facebooku je měřitelná 50% úspora využití CPU při obsluze stejného počtu požadavků v porovnání s obyčejným PHP a Apache. 30% úspora nastává při obsluze dvojnásobného počtu požadavků.
Odkazy
Externí odkazy
Reference
- Announcement on GitHub removing HPHPc support [online]. Facebook, 2013-02-19 [cit. 2013-05-24]. Dostupné online. (anglicky)
- Guilherme Ottoni. The HipHop Compiler for PHP [online]. OOPSLA 2012, 2013-03-12 [cit. 2013-05-23]. Dostupné online. (anglicky)