Presentation is loading. Please wait.

Presentation is loading. Please wait.

Outline Introduction to the Phalanger System

Similar presentations


Presentation on theme: "Outline Introduction to the Phalanger System"— Presentation transcript:

1

2 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

3 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

4 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; }

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

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

7 Major Issues missing specification inclusions
“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

8 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++/CLI php4ts.dll php_pdf.dll Zend API optional process boundary bridged by .NET Remoting via Shared Memory Channel

9 Managed Wrappers Assemblies generated automatically from native extensions and optional type information in XML format ... <function returnType="int" name="socket_write" > <param type="resource" name="socket" /> <param type="string" name="buf" /> <param optional="true" type="int" name="length" /> </function> php_sockets.xml PHP_FUNCTION(socket_write) { zend_parse_parameters(...); ZEND_FETCH_RESOURCE(...); // ... RETURN_LONG(...); } php_sockets.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 string buf) cil managed php_sockets.mng.dll

10 Summary & Future Work Phalanger 1.0 Phalanger 2.0, PHP/CLR
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.

11 Related Work Dynamic languages on .NET PHP compilers 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

12 Q & A


Download ppt "Outline Introduction to the Phalanger System"

Similar presentations


Ads by Google