Začátky úspěšných firem mohou být různé. V roce 1997 rozhodně dva izraelští studenti Zeev Suraski a Andi Gutmans nepatřili mezi známé osobnosti. Právě v tomto roce vyvíjeli webovou aplikaci ve skriptovacím jazyce PHP/FI. Našli v něm však několik chyb a nedostatků, a proto se rozhodli interpret přepsat. Dá se říci, že s novým jádrem PHP3 dobylo svět – je dnes nejpoužívanější jazyk pro tvorbu webových aplikací. Když se připravovala další verze PHP4, Zeev a Andi znovu engine vylepšili a dali mu název Zend. V té době rovněž založili stejnojmennou firmu. V San Diegu jsem si koncem července během konference O'Reilly Open Source Convention s oběma vývojáři promluvil o novinkách chystaných do další verze skriptovacího jádra a produktech, které jejich firma nabízí.
1. Jste známí především jako autoři skriptovacího jádra v PHP3 a Zendu – jádra použitého v PHP4. V poslední době se objevují zprávy o přípravě nové verze Zend Engine 2.0. Jaké vlastnosti se v nové verzi objeví?
Andi: Zend Engine vznikl jako kompletní přepsání jádra použitého v PHP3. Zend Engine 2.0 nebude nijak radikální změna, protože skriptovací jádro je dnes opravdu velmi dobré. Hlavní změnou bude vylepšení objektového modelu, který je v PHP4 poměrně slabý. Je to dáno tím, že při přípravě PHP4 jsme si byli vědomi obrovského množství kódu v PHP3 a chtěli jsme v maximální možné míře zachovat zpětnou kompatibilitu. Nyní celá komunita i vývojáři začínají cítit potřebu mnohem silnější podpory objektů. V nové verzi se proto hlavně zaměříme na objektový model. Nevím, jak moc do hloubky můžu jít v mé odpovědi?
2. Myslím, že hodně hluboko. Napsal jsem o PHP knihu a zatím rozumím.
Objektové typy jsou zatím chápány téměř stejně jako přirozené typy – velmi podobně jako celá čísla nebo pole. Pokud je předáte funkci jako parametr předaný hodnotou, na pozadí se automaticky vytvoří kopie objektu, která se předá. To však není obvykle to, co byste chtěli. V současné době také nelze použít destruktory, protože není zcela jasné, kdy používání objektu skončilo. Pak jsou tady problémy se syntaxí. Nelze např. přímo přistupovat k metodě objektu, který vrátila funkce.
3. V současné době se tedy objekty při předávání vždy kopírují. Chcete to změnit tak, aby se předávala jen reference na objekt?
Andi: Přesně tak, je to velice podobné Javě. Místo referencí však používáme tzv. identifikátory objektů (object handle). Myslíme si, že je to mnohem lepší než dosavadní přístup. Při předávání parametrů se budou předávat jen identifikátory objektů. Práce s nimi bude stejná jako teď, ale ze všech funkcí budete pořád přistupovat k jedné a též kopii objektu. To nám umožní implementovat destruktory, protože budeme vědět, kdy zaniknou všechny reference na objekt. Když budete chtít vytvořit kopii objektu, musíte to vyjádřit explicitně.
Umožní to zjednodušit syntaxi. Nebude nutné jako dnes výsledek funkce uložit do proměnné a teprve na této proměnné volat metodu vráceného objektu. Další věcí je přetěžování objektů.
Zeev: Chceme vylepšit možnosti přetěžování objektů tak, aby se zlepšila podpora dalších objektových modelů jako Java, COM apod. Tyto technologie jsme představili již v PHP4, ale jejich implementace byla velmi náročná, a nedávala plně k dispozici možnosti Javy a COM. Java nebo COM podporují mnohem bohatší syntaxi než současná verze PHP. Nová syntaxe umožní rovnou využít objektové hodnoty vrácené funkcí. Chceme vylepšit i rozhraní pro psaní takových modulů – aby to bylo mnohem jednodušší, ale zároveň mocnější než dnes.
Další vylepšení se rovněž týkají objektů, ještě není ale úplně rozhodnuto, zda je budeme implementovat. Vícenásobná dědičnost, privátní členské proměnné, statické členské proměnné. Některé novinky se už netýkají objektů. Nová verze Zend Engine bude podporovat zpracování výjimek. Dnes je docela obtížné psát fault-tolerant aplikace. Je to možné, ale je to jako psát v C – pořád musíte kontrolovat návratové hodnoty funkcí a psát mnoho kódu, který je ošetřuje. Dalším vylepšením, které je důležité pro mnoho lidí, je lepší podpora mezinárodního prostředí. Podpora japonských a čínských kódování.
4. Plánujete plnou podporu Unicode?
To je ještě otevřená otázka. Chceme poskytnout dobrou podporu pro uživatele PHP, kteří používají neevropské jazyky. Pokud jste Evropan, jste na tom docela dobře. Nevíme ještě, zda budeme přímo podporovat Unicode, jak přesně. Ale je to věc, kterou chceme určitě udělat.
Ideální situace je, že celé PHP bude podporovat mnoho různých kódování bez ohledu na to, zda bude jádro PHP pracovat přímo v Unicode nebo ho jen nějakým způsobem podporovat, nebo bude podporovat různá kódování. Ještě jsme se nerozhodli o způsobu implementace.
5. Jsou snahy o vylepšení podpory objektových možností a zpracování výjimek reakcí na projekty jako je PHP-GTK?[1] U krátkých webových skriptů nejsou výjimky tak potřebné, a když vám občas skript neuvolní kus paměti, také se nic vážného neděje. U aplikace, která běží celý den, jsou tyto věci důležité.
Zeev: Požadavky na nové vlastnosti pocházejí ze tří různých míst. Jednak já a Andi tam tyto věci chceme mít už dlouho, to je takový osobní důvod. Další dva projekty, které narážejí na limity současné implementace objektové podpory jsou PHP-GTK a PEAR.[2]
Další věcí, kterou budeme nejspíš podporovat jsou jmenné prostory. Projekt PEAR jejich podporu opravdu potřebuje. PEAR je čistě objektově orientovaný a některé věci se dnes musí obcházet, aby vše fungovalo tak, jak má. Problém je opět v tom, že objekty se předávají jako hodnota, a ne jen jako reference.
Andrei Zmievski, který je autorem PHP-GTK, nám také dal mnoho připomínek. To jsi tři zdroje zpětné vazby, které nás nejvíce inspirovaly.
6. Ve kterých produktech se Zend Engine dnes používá? Je napsán tak, že jej lze snadno začlenit do dalších aplikací. Vím, že jednu dobu se například hovořilo o použití Zendu jako jazyka pro uložené procedury v MySQL.
Andi: Právě jsme mluvili s vývojářem MySQL Davidem Axmarkem. Začali nyní zkoumat, jakým způsobem do MySQL nejlépe přidat podporu uložených procedur. Nejspíš vytvoří prototyp právě s použitím PHP a Zendu, protože s Perlem a Pythonem mají problémy v multithreadovém prostředí. Další důvod je ten, že mnoho uživatelů MySQL dobře zná PHP. Chtějí mít rozhraní, které bude podporovat několik jazyků, ale prvním implementovaným bude pravděpodobně PHP Zend. Jak už jsem řekl, Zend je dobře portovatelný a dobře se chová v multithreadových systémech. Rádi vývojářům MySQL s integrací Zendu pomůžeme, protože rádi uvidíme, jak Zend pracuje jinde než v PHP.
7. Víte o nějakých jiných projektech, které používají Zend Engine jako skriptovací jazyk?
Zeev: Byli jsme tu na přednášce o PostgreSQL, který v současné době podporuje několik jazyků pro psaní uložených procedur. Někdo se ptal, zda je podporováno i PHP. Přednášející odpověděl, že ne, ale že by to bylo možné. Možná to někdo napíše. PostgreSQL je také databáze, podobně jako MySQL. Úplně odlišný projekt je PHP-GTK. Sice to má v názvu PHP, ale s původním zaměřením PHP to nemá nic společného. O ničem jiném nevíme.
8. Plánujete Zend rozšířit o rozhraní ActiveScripting, tak aby šlo jazyk PHP použít i v ASP, WSH nebo dalších produktech, které podporují ActiveScripting.
Zeev: Zatím jsme v tomto směru nic neudělali. Příští týden ale jdeme na návštěvu do Microsoftu. Chtějí vylepšit podporu PHP na platformě Windows. Nevím, jestli se bude jednat jen o ISAPI modul, nebo i o něco dalšího.
S ISAPI modulem na Windows je to podobné jako s kuřetem a vejcem. Dokud nebude hodně lidí používat ISAPI modul na zatížených serverech, nebudeme mít dostatek informací potřebných k jeho doladění a vychytání chyb. Dokud však ISAPI nebude naprosto stabilní, nikdo ho nebude na produkčních serverech používat. Trvá to dlouho, ale myslím, že to konverguje a že schůzka v Microsoftu hodně pomůže. Do několika měsíců by měl být ISAPI modul dostatečně stabilní pro ostré nasazení.
9. Můžete stručně našim čtenářům představit další produkty společnosti Zend.
Zeev: Máme tři velké skupiny produktů. První je skupina produktů pro vývojáře. Obsahuje Zend IDE – vývojové prostředí s editorem, který zvýrazňuje syntaxi. Do měsíce a půl by měla být uvolněna nová verze, která bude obsahovat i automatické doplňování PHP a HTML kódu, FTP klienta. Asi nejdůležitější vlastností Zend IDE je debugger, který umožňuje vzdálené ladění na windowsových a linuxových serverech. Druhým produktem v této skupině je Zend Encoder. Umožňuje PHP vývojářům aplikace distribuovat v zakódované binární podobě bez nutnosti dávat z ruky zdrojové kódy. Funguje na nejpoužívanějších platformách – Linux, Solaris, FreeBSD a Windows.
Druhá skupina obsahuje zatím jen jeden produkt – Zend Cache. Tento produkt zlepšuje výkon webů naprogramovaných v PHP. Záleží na aplikaci a na tom, jak moc je závislá na komunikaci s databází, ale typicky se výkon aplikace zvýší asi pětkrát.
10. Jak Zend Cache funguje? Ukládá si nějakou předkompilovanou verzi skriptů v paměti?
Zeev: Dělá několik věcí. Jednak optimalizuje kód, uchovává ve vyrovnávací paměti zkompilovanou podobu skriptů, aby se nemusely znovu a znovu načítat. Prováděné optimalizace jsou velmi agresivní, protože se provádí jen jednou, ne při každém volání skriptu. Je to zcela transparentní, podobně jako proxy servery, stačí ji nainstalovat, není potřeba nic měnit ve skriptech. Plánujeme další produkty, ale zatím jsme je neoznámili.
Do této skupiny patří i zdarma dostupný Zend Optimizer, který optimalizuje PHP kód, není ale tak dobrý jako Zend Cache, obvykle aplikaci přidá tak 20 až 30 procent výkonu.
Andi: Největší rozdíl mezi Optimizerem a Cache je v tom, že Optimizer se spouští při každém požadavku na nějaký skript, můžeme proto dělat jen velmi jednoduché a rychlé optimalizace. V Cache si můžeme dovolit mnohem silnější optimalizaci, protože je na ní mnohem více času.
Zeev: Poslední skupina nejsou softwarové produkty, ale podpora a konzultační služby pro firmy, které chtějí vytvořit řešení založené na PHP nebo mají s PHP nějaký problém, který nemohou sami vyřešit.
11. Když jste vytvořili Zend Engine pro PHP4, založili jste firmu Zend. Pochopil jsem to tak, že Engine dáte zdarma PHP komunitě, a vaše firma vydělá na produktech s přidanou hodnotou jako Zend IDE, Zend Encoder a Zend Cache. Nejste teď trochu zklamaní z konkurenčních produktů jako je vývojové prostředí Komodo od ActiveState, které rovněž obsahuje debugger, nebo několika alternativních vyrovnávacích pamětí pro PHP skripty?
Zeev: Je to těžká otázka i odpověď. Obecně lze říci, že vstup dalších firem na toto pole je dobré znamení, protože to znamená, že se jedná o velký a perspektivní trh. Je to také dobré pro uživatele. My máme velkou výhodu v tom, že dokonale známe jádro PHP, a oba věříme, že naše produkty jsou nejlepší. Zvláště pokud mluvíme například o Zend Cache a jejích alternativách. Když se na produkty podrobně podíváte, je to jako porovnávat jablka s pšenicí.
12. Prodává se Zend Cache, tak jste očekávali?
Zeev: Ano.
13. Ptám se, protože např. pro nás v Česku je to opravdu drahý produkt. Pro trh v USA nebo západní Evropě to možná takový problém není.
Zeev: Různé trhy mají různé potřeby a různé ceny, které si mohou dovolit. Nyní se začínáme zaměřovat i na evropský a asijský trh, ne jen na americký.
Každopádně je dobré, že lidé, kteří nemají peníze na kešovací technologie, mohou použít zdarma základní produkt PHP. Zend Cache nemá cenu typu 19.95, něco co si můžete pořídit pro vaši osobní stránku, je to enterprise produkt.
Myslím, že máme dobré produkty, že se tudíž nemusíme bát konkurence, která je obecně dobrá věc. Kdybych měli špatné produkty, byla by pro nás samozřejmě konkurence mnohem horší, ale s našimi znalostmi můžeme pořád zůstat na špici.
Andi: Hlavní důvod, jak už Zeev řekl, je že jsme rádi, že existuje konkurence. Když jsme zakládali firmu Zend, udělali jsme to proto, aby z dlouhodobého hlediska mohlo PHP konkurovat dalším produktům. To, že se začínají postupně objevovat další firmy, které investují do PHP, nám dává větší pocit jistoty.
14. A teď klasická otázka. Co je podle vás lepší na PHP než na ASP?
Andi: Nikdo z nás nezná ASP moc dobře. Hlavní věcí je operační systém, na kterém PHP běží. I když se Windows pořád zlepšují, většina firem ještě Windows nepoužívá pro běh kritických aplikací. Většinou chtějí unixový systém, některým stačí Linux, některé sáhnout po více hi-end systémech jako je Solaris nebo HP-UX. Většina serverů běží na unixových systémech, a to automaticky vyřazuje ASP ze hry na velké části trhu. Na tom zbytku má PHP také dobré postavení, protože se v něm aplikace vyvíjejí velmi rychle, výkon je dobrý, integrace s Apachem je výborná.
Vývojáři, kteří přešli z ASP na PHP, nám říkají, že v PHP se píše mnohem lépe než v ASP, tvrdí, že i rychlost je lepší. To se ale těžko porovnává, protože většinou změnili i operační systém. Vývojový cyklus je rychlejší, je snazší najít rozšiřující funkce pro PHP, pro ASP si je většinou musíte koupit a jsou docela drahé. Pro PHP máte například zdarma grafickou knihovnu GD, která se velmi snadno používá. Existují i nadstavby pro GD napsané přímo v PHP, které se používají ještě snáze. To jsou asi dvě nejdůležitější výhody PHP.
Zeev: Zda je snazší PHP nebo VBScript, je především otázkou osobního vkusu. Lidé, kteří mají nějakou zkušenost s C, Java, C++, shledají PHP mnohem snazší. Lidem, kteří nic neznají, je asi jedno zda se učí PHP nebo VBScript jako první jazyk.
15. Snad poslední otázka. Když jsem naposledy zkoušel Zend IDE, nebyla uživatelská odezva příliš rychlá. Zlepší se to v nové verzi?
Zeev: Nová verze je mnohem rychlejší. Pravděpodobně také pro Windows vytvoříme nativní binární aplikaci, která bude opravdu rychlejší než ta minulá, která se spouštěla v Javě.
Andi: Rychlost byla jednou z věcí, na které jsme hodně pracovali. Desítky procent práce na nové verzi byly věnovány právě zrychlení odezvy celé aplikace.
16. Děkuji za rozhovor.
Po rozhovoru mi ještě Andi a Zeev ukázali vývojovou verzi nového Zend IDE. Vypadalo mnohem lépe než předchozí verze a odezva editoru při zvýrazňování syntaxe a doplňování kódu byla okamžitá (už jsem se však radši neptal, jak výkonný je notebook, na kterém mi IDE předváděli). Licenční politika pro Zend IDE je přitom taková, že neplatíte peníze za konkrétní verzi, ale že si na rok předplatíte právě aktuální verzi a všechny další nové verze. Předplatitelé původní verze IDE proto získají novou verzi zdarma.
[1] Verze PHP, která umožňuje vytváření grafických aplikací běžících přímo na klientovi. Jako grafická knihovna se využívá GTK, což je knihovna původně vyvinutá pro unixový desktop Gnome, dnes je portována na mnoho platforem, včetně Windows.
[2] Repozitory PHP tříd implementujících různé užitečné vlastnosti – např. abstraktní databázová vrstva, odesílání MIME e-mailů apod. Cílem projektu je vytvořit databázi kódu, kde půjde snadno přidávat nové moduly a ze sítě instalovat potřebné moduly. Obdoba perlového CPAN archivu pro PHP.
Odkazy: