el proyecto phalanger

13
Universidad de San Carlos de Guatemala Facultad de Ingeniería Organización de Lenguajes y Compiladores 2 2008 Phalanger, un compilador PHP-Silverlight Phalanger y su proceso para compilar código PHP a lenguaje de contenido interactivo Microsoft Silverlight Manuel Josué Carrillo Ordóñez 200412975

Upload: blacknightawake

Post on 07-Jun-2015

354 views

Category:

Documents


4 download

DESCRIPTION

Una investigacion realizada para el curso de Compiladores 2 -USAC-

TRANSCRIPT

Page 1: El proyecto Phalanger

Universidad de San Carlos de Guatemala

Facultad de Ingeniería

Organización de Lenguajes y Compiladores 2

2008

Phalanger, un compilador

PHP-Silverlight Phalanger y su proceso para compilar código PHP a lenguaje de

contenido interactivo Microsoft Silverlight

Manuel Josué Carrillo Ordóñez

200412975

Page 2: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

2

Índice

Contenido Página

Introducción 3

Objetivos Generales y Específicos 4

Planteamiento del Problema 5

PHP y el contenido dinámico 6

Microsoft Silverlight 8

El proyecto Phalanger 9

Proceso de Compilación Phalanger 10

Ejemplo propuesto 11

Conclusiones Generales 13

Recomendaciones 13

Bibliografía 13

Page 3: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

3

Introducción

La siguiente investigación esta dedicada al proceso de compilación que utiliza la

herramienta Phalanger para poder convertir código PHP a uno entendible por la

plataforma de trabajo .NET como Silverlight, con el objetivo final de crear contenido

tanto dinámico como interactivo para el visitante de un sitio web.

Antes de comenzar con el tema propio de la investigación, se tocarán algunos puntos

referentes al estado de la web actualmente con respecto al manejo de contenido

dinámico, con el fin de dar a entender el uso y utilidad que puede dársele a Phalanger, la

herramienta discutida a lo largo del presente trabajo.

Como primera parte de la investigación, se verán los aspectos generales de las

herramientas PHP y Silverlight y como ambas pueden enfocarse en un objetivo común,

en este caso, la generación de contenido dinámico en la web.

Luego, veremos como surge la herramienta Phalanger como una alternativa para unir

todas las bondades del lenguaje PHP a uno de los entornos más utilizados para

desarrollo web actualmente como .NET.

Una vez tengamos una visión general de la herramienta Phalanger, haremos énfasis en

como utiliza el proceso de compilación, tanto en análisis y síntesis para poder tomar

código PHP y convertirlo en un lenguaje entendible por .NET.

Por último, Con el código .NET generado a partir de PHP con Phalanger, veremos como

unirlo con la tecnología Silverlight para poder generar contenido dinámico e interactivo

en la web, con la ayuda de archivos con estructura XML.

Page 4: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

4

Objetivos

Generales

- Entender el uso que puede dársele a tanto a PHP como a Silverlight en el

desarrollo de aplicaciones web tanto dinámicas como interactivas.

- Tener una visión general del funcionamiento de PHP y Silverlight.

- Conocer el funcionamiento de Phalanger como un compilador que toma

código PHP y lo convierte a un lenguaje entendible por la plataforma de

desarrollo .NET.

Específicos

- Conocer algunas de las aplicaciones dinámicas existentes en la web que pueden

ser realizadas mediante el uso del lenguaje PHP.

- Tener una visión de cómo el contenido dinámico se utiliza actualmente en sitios

web.

- Comprender y analizar a fondo el proceso de compilación que se lleva a cabo

para poder generar código .NET, que luego será utilizado junto con archivos

XAML por Silverlight para poder crear contenido interactivo y dinámico para la

web.

Page 5: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

5

Planteamiento del problema:

Uno de los inconvenientes en las primeras versiones de la web es que mucho del

contenido de las páginas era estático, es decir, el contenido siempre era el mismo

independiente de la solicitud echa por el usuario. Ésto hacía que muchas veces el

contenido manejado por los diversos sitios no estuviera actualizado y consistente.

En la actualidad este comportamiento aun se puede ver en sitios en donde podría

utilizarse una herramienta para poder generar contenido dinámico y de esta manera ser

más productivo y eficiente en cuanto al manejo de la información.

Una de las herramientas para generar dicho contenido es PHP ya que gracias a su poder

y flexibilidad brinda todas las herramientas para poder generar contenido dinámico e

interactivo en una plataforma a la vez tan cambiante como la web.

En los últimos años, Microsoft ha querido dar un auge en el desarrollo web mediante

distinto tipo de tecnología, en particular con su plataforma .NET, haciendo uso de su

aplicación Silverlight para la generación de contenido dinámico e interactivo.

Tomando en cuenta lo anterior, el inconveniente era la no compatibilidad de PHP con

ambientes de trabajo Microsoft, he aquí cuando surge Phalanger, un compilador que

toma código PHP y genera instrucciones entendibles por .NET para la creación de

contenido dinámico e interactivo con Silverlight.

Page 6: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

6

Marco Teórico

PHP y el contenido dinámico

PHP es un lenguaje interpretado de alto nivel, que se encuentra “embebido” o

incrustado en páginas HTML, dicho contenido se ejecuta del lado del servidor.

Pongamos un ejemplo, supongamos que tenemos el siguiente código HTML:

Dentro de las etiquetas de inicio y fin de PHP se encuentra el código que deseamos

ejecutar del lado del servidor, a diferencia de Javascript que se ejecuta del lado del

cliente (por medio de Java Runtime Environment), todo el código PHP se ejecuta del

lado del servidor, incluso, es posible configurar el servidor para que procese todo

HTML cargado mediante PHP.

¿Por qué utilizarlo?

Aunque su uso pueda parecer complicado al inicio, al descubrir PHP a fondo podemos

ver que nos ayuda de diferentes formas: es multiplataforma, quiere decir que no importa

en el sistema operativo en el cual desarrollemos siempre lo podemos tomar en cuenta.

Al ser de código abierto, podemos tener acceso a múltiples foros e índices en donde

podemos encontrar información valiosa de cómo implementar una solución utilizando

PHP; soluciones que van desde soporte a base de datos, protocolos web, LDAP para

versionamiento de software, etc.

Sabiendo que PHP es un lenguaje, que puede ser incrustado dentro de páginas HTML y

todos los beneficios que trae (manejo de bases de datos, soporte para distintos

protocolos, etc.) , veamos la característica que más nos interesa por el momento, el

contenido dinámico.

Supongamos que el contenido (imágenes, etc.) de una página permanecen invariantes

ante la solicitud de cualquier usuario final, se dice que el contenido es estático, pero si

dicho contenido se genera en función de la petición de un usuario, estamos ante un

contenido dinámico.

Page 7: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

7

PHP

Un ejemplo sencillo de PHP y como utilizarlo en el manejo de contenido dinámico es en

algunos foros que encontramos en la web, acá tenemos un ejemplo:

En este foro, podemos ver que la página de inicio fue hecha con PHP:

Esto permite tener un control sobre el contenido que se genera en forma dinámica sobre

las diferentes categorías que se encuentran en el sitio:

PHP también ayuda a los administradores del sitio a mantener cierto orden en las

conversaciones y comentarios que los diferentes usuarios colocan en las distintas

categorías del sitio, dichas conversaciones y comentarios obviamente se generan en

forma dinámica.

El contenido PHP embebido en paginas HTML se ejecuta del lado del servidor que

aloja el sitio y presenta información actualizada en todo momento al usuario, lo cual es

valioso en un sitio de este tipo para tener siempre la versión “actual” de la pagina que el

visitante este navegando en ese momento.

Page 8: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

8

Microsoft SilverLight

Silverlight nace como la alternativa de Microsoft para crear

contenido tanto dinámico como interactivo en la web. Su uso se

ha extendido a plataformas tanto Windows como Mac y

ofreciendo la creación de animaciones, foros, etc. Integrando

para ello todo el software disponible o compatible con la

arquitectura de .NET, su uso se basa principalmente en uno de

los nuevos paradigmas de la red, el cual basa su atención en el

uso de archivos XML tanto para el desarrollo como la depuración de aplicaciones web.

Dentro de las características que hacen a esta herramienta tan útil y versátil se encuentra

la capacidad de crear contenidos completamente interactivos para el usuario, acá

podemos ver una muestra de ello:

Silverlight trabaja principalmente en el desarrollo de aplicaciones RIA (Rich Internet

Applications) que son básicamente todas aquellas aplicaciones web que cumplen la

funcionalidad de una aplicación de escritorio, por ejemplo reproducción de audio y

video, presentación de una galería de imágenes, etc.

La capacidad de fusionar Silverlight con un entorno de desarrollo como .NET lo hace

realmente flexible y versátil, ya que podemos incrustar en una aplicación Silverlight

código escrito en algún lenguaje .NET como Visual Basic o C# para poder crear

contenido dinámico, interactivo y atractivo para el usuario final.

Su integración por medio de un modulo con el entorno de

desarrollo .NET hace de Silverlight una opción a tomar en

cuenta si se desea crear contenido dinámico e interactivo en la

web.

Page 9: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

9

El Proyecto Phalanger

Phalanger es una nueva implementación para poder incorporar código PHP en

aplicaciones desarrolladas con .NET.

Phalanger brinda a los desarrolladores la posibilidad de utilizar toda la flexibilidad y

soporte que provea el lenguaje PHP y mezclarlo con los beneficios del framework

utilizado por las aplicaciones web desarrolladas bajo .NET (como Silverlight).

Phalanger también puede operar sobre sistemas GTK que trabajan sobre sistemas

Linux, en entornos de programación como MONO que se utiliza para desarrollo de

código en C#, acá podemos ver una pequeña ventana en donde se ha incrustado una

instrucción PHP dentro de la aplicación:

Para poder incrustar componentes dinámicos en páginas HTML, Phalanger puede usar

archivos XAML para poder construir dichos componentes que serán entendibles por

Silverlight, y código PHP para encapsular su comportamiento.

Desde la versión 5 de PHP, podemos hacer uso de clases para poder manejar lo que se

denomina “un objeto” PHP, como se menciono anteriormente, en esta clase es en donde

se manejara la lógica o comportamiento de los componentes dinámicos que vayan a ser

construidos. Acá tenemos un pequeño ejemplo de una clase de este tipo:

Class Manager extends Employee

{

public function __construct($level, Manager $reportsTo)

{

parent::__construct($reportsTo);

$this->level = $level;

}

public static function GetMaxLevel()

{

return self::$maxLevel;

}

private $level;

public static $maxLevel = 5;

}

Page 10: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

10

Phalanger

El primer objetivo de Phalanger es convertir los objetos declarados en esas clases en

código totalmente compatible con PHP, por ejemplo agregando búsqueda de miembros

o reglas de sobre escritura de métodos.

El segundo objetivo de Phalanger (el más importante para esta investigación), es hacer

que esta herramienta tome el código PHP, lo compile y obtenga como resultado código

que pueda ser consumible por aplicaciones de desarrollo como C#, o un modulo de

programación Silverlight.

Veamos un diagrama del proceso de compilación de Phalanger:

Para poder consumir el código producido por Phalanger, tenemos que hacer uso de los

tipos ClrObject que no son más que instancias “internas”; en otras palabras, cada

ClrObject es una instancia de cada objeto PHP compilado.

Veamos el siguiente diagrama para comprender la generación de los tipos ClrObject:

A continuación veremos un ejemplo, en donde tenemos una clase escrita en PHP y

Phalanger compila dicho código para obtener objetos consumibles por cualquier

aplicación que utilice el framework de .NET.

Codigo PHP

•Clase que contiene el codigo PHP para la aplicacion, puede ser el encargado de manejar eventos, envio y recepcion de datos, etc.

Phalanger

•Lleva a cabo el proceso de analisis y síntesis para poder generar el codigo entendible por la arquitectura .NET

Silverlight

•Hace uso del codigo .NET generado por Phalanger para poder consumir dicho codigo.

Clase PHP (Contiene los objetos originales)

Phalanger

ClrObjects (Objetos

compilados y

entendibles por .NET)

Page 11: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

11

Ejemplo

Tenemos la siguiente clase escrita en código PHP:

El código generado es el siguiente:

Phalanger

Analisis Léxico

Analisis Sintáctico

Analisis Semántico

Síntesis (Código .NET)

class A

{

const c = 3.14;

public $a = "test";

protected static $b = TRUE;

public function __construct(A $t = NULL)

{

if ($t != NULL) $this->a = $t->a;

}

private static function Foo()

{

return array(0 => "zero", 1 => "one");

}

}

[

Serializable, ImplementsType]

public class A : PhpObject

{

// Constructors

(C1) static A();

(C2) protected A(SerializationInfo, StreamingContext);

(C3) public A(ScriptContext context, DTypeDesc caller);

(C4) public A(ScriptContext context, bool newInstance);

// Methods

(M1) public virtual object __construct(ScriptContext,

[Optional, DTypeSpec(3, 0x2000004)] object t);

(M2) public static object __construct(object instance, PhpStack stack);

(M3) private static object Foo(ScriptContext context);

(M4) private static object Foo(object instance, PhpStack stack);

(M5) /* privscope */ static object <^Getter>(object instance);

(M6) /* privscope */ static object <^Getter>(object instance);

(M7) /* privscope */ static void <^Setter>(object instance, object

value);

(M8) /* privscope */ static void <^Setter>(object instance, object

value);

(M9) /* privscope */ object <Mediator>(ScriptContext, object);

(M10) public static void __InitializeStaticFields(ScriptContext context);

(M11) private static void __PopulateTypeDesc(PhpTypeDesc);

(M12) private void <InitializeInstanceFields>(ScriptContext);

// Fields

[PhpHasInitValue]

(F1) public PhpReference a;

[ThreadStatic, PhpHasInitValue]

(F2) protected static PhpReference b;

(F3) public static readonly object c;

[ThreadStatic]

(F4) private static ScriptContext <lastScriptContext>;

(F5) public static readonly PhpTypeDesc <typeDesc>;

}

Page 12: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

12

El código generado será utilizado por Silverlight para manejar la lógica del componente

que será creado, para poder crear el manejador de la GUI debemos usar un tipo especial

de XML denominado XAML.

Veamos que es un archivo XAML y su uso en aplicaciones Silverlight:

XAML es un lenguaje declarativo basado en XML, se encuentra presente en

prácticamente todas las aplicaciones Silverlight, es utilizado para describir los

elementos pertenecientes a la GUI de la aplicación.

El archivo XAML puede usarse tanto para definir formas, como animaciones o

contenido interactivo en Silverlight.

Este es un pequeño ejemplo de un archivo XAML:

Con el código .NET compilado con Phalanger y el archivo XAML, Silverlight puede

construir un componente dinámico e interactivo que puede ser incrustado en una

página phpx o aspx:

Contenido dinámico

Archivo XAML Código .NET

Page 13: El proyecto Phalanger

Universidad de San Carlos de Guatemala Facultad de Ingeniería - Organización de Lenguajes y Compiladores 2-

13

Conclusiones Generales

A lo largo de la investigación pudimos ver lo siguiente:

- Conocer a grandes rasgos el lenguaje PHP, algunas de aplicaciones que pueden

ser desarrolladas usándolo, en particular como es utilizado para la creación de

contenido dinámico en la web.

- Conocimos la alternativa de Microsoft para el desarrollo de contenido dinámico

e interactivo (Silverlight) y cómo se integra con su entorno de desarrollo .NET

para crear un estándar en la creación de contenido web.

- Vimos como Phalanger utiliza el proceso de compilación para poder generar

código entendible por la plataforma .NET a partir de un lenguaje fuente como

PHP.

Uno de los entornos más utilizados actualmente para el desarrollo de contenido

dinámico e interactivo es PHP gracias a su poder y flexibilidad en el desarrollo de

módulos web para mantener un control sobre la información que se maneje en un sitio

en particular.

Una de las “desventajas” es que al ser PHP un código independiente de Microsoft, no

puede asegurarse el cien por ciento su compatibilidad con algunos componentes.

Para solucionar lo anterior, surge el proyecto Phalanger, que trata de unificar todas o

muchas de las características de PHP para que éstas sean totalmente compatibles con el

entorno de desarrollo .NET. Phalanger no es más que un compilador que toma código

PHP y lo convierte a un lenguaje totalmente compatible con .NET.

Con el lenguaje PHP ya transformado en .NET por Phalanger, se puede integrar

fácilmente a cualquier aplicación de desarrollo Microsoft para poder fusionarlo con

Microsoft Silverlight.

Recomendaciones

Es recomendable realizar un análisis del tipo de información manejada por el sitio, ver

si es necesario incorporar contenido dinámico o simplemente implicaría tanto costo

como tiempo innecesario en su desarrollo y mantenimiento.

Estudiar a fondo las distintas posibilidades tanto en funcionalidad como costo de las

diversas herramientas existentes en el mercado para poder generar contenido en la web,

de ésta forma nos aseguramos que los recursos invertidos sean los apropiados.

Bibliografía

http://tomasp.net/blog/phalanger-future-notes.aspx

http://www.php-compiler.net/doku.php?id=php-in-silverlight

http://www.microsoft.com/silverlight/default.aspx

http://es.wikipedia.org/wiki/.php

http://www.php.net/