1 / 12

Phalanger System: PHP on .NET Framework - Features, Performance, and Future

Explore the Phalanger system, which allows running PHP on .NET Framework. Learn about its main features, performance benchmarks, interesting issues, and future developments.

boyerc
Download Presentation

Phalanger System: PHP on .NET Framework - Features, Performance, and Future

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Outline • Introduction to the Phalanger System • main features and goals • Why PHP on .NET Framework? • Performance benchmarks • Interesting Issues • inclusions, local variables optimization, multi-version types/functions • accessing .NET objects, adding fields on .NET objects at run-time • using PHP native libraries • Future Work: Phalanger 2.0 • PHP/CLR – extending PHP to the first-class .NET language • Support for Mono Platform

  2. Phalanger • Extends the family of .NET languages with PHP versions 4, 5, and 6 • introduces language extensions for using .NET types (PHP/CLR) • Makes it possible to run existing PHP applications on ASP.NET web server • Significant performance improvement • Higher reliability of the web server • Better configurability • More errors revealed by the compilation • Source-free application deployment • Brings virtually all PHP libraries to .NET Framework • migration from PHP interpreter is simple in practice without additional costs • Enriches both worlds • PHP applications with the functionality of the .NET platform • .NET applications with a possibility to use a popular dynamic language • Integrates PHP with Visual Studio .NET

  3. PHP Sample include "a.php"; class C extends D implements I, J { public function m($a, $b = 1, $c = array(3,2,1)) { $f = "sort"; $f($c); $x = "b"; if ($$x) { function f() { echo "version 1"; } } else { function f() { echo "version 2"; } } f(); eval('$a++;'); } private $d; function__get($field_name) { return$d->$field_name; } function __set($field_name, $value) { $d->$field_name = $value; } }

  4. Micro-benchmarks • each operation performed 10M times in a loop; machine: Pentium M Dothan 1.8GHz/2MB cache • the lesser the better

  5. MSDE 2000 SP3 MySQL 4.1.11 PHP + Zend Optimizer Phalanger 1.0 PHP phpBB Benchmark Results (Apache 2.0.54) requests per second the greater the better

  6. Major Issues • missing specification • “correctness” criteria: existing applications should work well without modifications • inclusions • standard PHP mode • inclusions similar to C language; the included file needn’t to be known at compile-time • pure mode (since Phalanger 2.0) • C# like project – unconditional declarations visible in all files comprising the project • multi-version and compile-time unknown types/functions • classes and functions can be declared conditionally in multiple versions • classes and functions can be generated at run-time • class can extend/implement compile-time unknown class/interface • local variables optimization • creating a hash table for each call is expensive and unnecessary • compile-time known variables can be stored in CLR locals in majority cases

  7. Using PHP Native Extensions • a necessity for a seamless migration from PHP interpreter • PHP • Many functions and classes implemented in PHP extensions • php_imap.dll, php_pdf.dll, php_sockets.dll, php_gtk.dll, … • PHP interpreter exposes so called Zend API to extensions (php4ts.dll) • Phalanger • Makes the functionality in PHP extensions available for any .NET app. • managed wrappers • encapsulates and shields out native implementation • Extension Manager • emulates the PHP interpreter environment (Zend API) • within the application process using the extension or • in a separate process, isolating untrustworthy extensions Native Code php_imap.dll Managed Code Mixed Code Application (PHP, C#, …) Extension Wrapper Extension Manager C++/CLIphp4ts.dll php_pdf.dll … Zend API optional process boundary bridged by .NET Remoting via Shared Memory Channel

  8. php_sockets.dll php_sockets.mng.dll .method public hidebysig static int32 socket_write( class [PhpNetCore]PHP.Core.PhpResource socket, string buf, int32 length) cil managed { .custom instance void PhpNetCore]PHP.Core.ImplementsFunctionAttribute ... // ... call object [PhpNetCore]PHP.Core.Externals::InvokeFunction(...) // ... ret } .method public hidebysig static int32 socket_write( class [PhpNetCore]PHP.Core.PhpResource socket, string buf) cil managed { .custom instance void PhpNetCore]PHP.Core.ImplementsFunctionAttribute ... // ... call object [PhpNetCore]PHP.Core.Externals::InvokeFunction(...) // ... ret } ... PHP_FUNCTION(socket_write) { zend_parse_parameters(...); ZEND_FETCH_RESOURCE(...); // ... RETURN_LONG(...); } ... php_sockets.xml ... <functionreturnType="int" name="socket_write" > <paramtype="resource" name="socket" /> <paramtype="string" name="buf" /> <paramoptional="true" type="int" name="length" /> </function> ... Managed Wrappers • Assemblies generated automatically from native extensions and optional type information in XML format

  9. Summary & Future Work • Phalanger 1.0 • goal achieved: to make existing application working under .NET • much better performance in practice • final version available for download • Phalanger 2.0, PHP/CLR • Make PHP a first-class language for .NET • extensions to the language enabling PHP programs to work directly with .NET types, methods, delegates, events, generics, … • extending .NET classes, overload resolution, run-time fields addition, … • multi-threading • support for Language Integrated Query (LINQ) • minimize necessary language modifications • keep the dynamic nature of the language • e.g. run-time specified generic type arguments, etc. • ASP.NET Controls in PHP etc.

  10. Related Work • Dynamic languages on .NET • IronPython • Python is a bit more dynamic • e.g. replacing methods at run-time • less optimizations possible • PyStone benchmark • overall improvement by factor 1.84 • micro-benchmark results range from 10x faster to 10x slower • Ruby, Perl, JScript, … • PHP compilers • Resin Quercus • PHP to Java translation, compilation to JVM byte-code • Roadsend Compiler • PHP to C translation, compilation to native code

  11. Q & A

More Related