HaskellScript y sus Aplicaciones

Download Report

Transcript HaskellScript y sus Aplicaciones

HaskellScript y sus Aplicaciones
Autores
Santiago Ochoa Ceresuela
Miguel García Puyol
Diseño basado en Componentes

Evolución natural de la orientación a objetos.
Idea similar a la empleada en los componentes Hardware
Plataformas de componentes: CORBA, COM, J2EE, .NET

Objetivos:


–
–
–
–
Desarrollo mediante composición, no implementación
Reutilización de componentes hechos por terceros
Mercado común de componentes (Commercial Off-The-Shelf)
Integrados en un determinado modelo/plataforma.

–
No tienen sentido de forma aislada.
Implementan una serie de interfaces que


Indican la funcionalidad que proporcionan y también la que precisan.
Permiten la reemplazabilidad.
Nociones de ActiveX/COM


Un objeto ActiveX es aquel que cumple la definición del Modelo
de Objetos Componentes (COM) de Microsoft.
Características objeto COM:
–
–
–
–
Puede estar escrito en cualquier lenguaje (código binario)
Encapsulado en un archivo ejecutable o biblioteca de vínculo
dinámico (DLL)
Proporciona una interfaz para que los otros objetos se
comuniquen con él.
Dos tipos de datos:


–
Datos de Presentación
Datos Internos
Tiene funciones para manipular esos datos
Introducción HaskellScript

Es el nombre de un conjunto de bibliotecas y
software que permiten la integración de Haskell
dentro del marco de trabajo COM/ActiveX

HaskellScript es compatible con Microsoft Internet
Explorer 4, Word, Excel.

Presenta algunas incompatibilidades con las últimas
versiones
HaskellScript = Haskell + COM


Se trata de poder construir sistemas híbridos
aprovechando la naturaleza funcional de
Haskell
Dos posibilidades:


Utilizar componentes COM (y sus elementos) dentro de
Haskell
Llamar a funciones Haskell desde otro componente
(otros lenguajes de programación que soporten COM) a
través de su interfaz
Introducción a HaskellScript

Está formado por:
–
–
HaskellAgent: es una biblioteca escrita en Haskell
empleada para crear animaciones usando la tecnología de
Microsoft Agent. Ej: el ayudante de Microsoft Office.
HaskellObject: es una biblioteca para definir componentes
automatizados (Automation components) en Haskell. Estos
componentes se comportan exactamente igual que los
componentes COM y pueden ser directamente utilizados
desde Java o Visual Basic.
Introducción a HaskellScript

HaskellDirect: Es un compilador completo de IDL (Interface
Definition Language) para Haskell. Los programadores pueden
usarlo para generar automáticamente interfaces Haskell para
los componentes COM.

HaskellDB: Biblioteca Haskell que permite realizar peticiones
sobre bases de datos relacionales.
Importando/Exportanto Haskell



HaskellObject
HaskellDirect
Interfaces Script Server  Conjunto mínimo
de interfaces que permiten usar Haskell
como lenguaje de Script en aplicaciones
como IExplorer, Windows 95/NT
Interfaces Script Server




Todo Script Server es un componente COM
En general, un interfaz Script Server es un interfaz
independiente del lenguaje que permite a cualquier lenguaje
de programación ser programado o invocado desde otra
aplicación
En HaskellScript, hay un conjunto de interfaces implementados
sobre Hugs para interactuar con el motor de ActiveX.
Representan la mínima funcionalidad necesaria para
programar en otro lenguaje desde una aplicación externa (Ej:
Utilizar funciones Haskell en lenguajes como Visual Basic o
Java)
IDL: Interface Definition Language

interface IScriptServer : IDispatch {
HRESULT LoadScript ([in] VARIANT* source,[out,retval] IScript** script)
HRESULT AddHostItem ([in] BSTR itemName, [in] IDispatch* item );
HRESULT AddSearchDir ([in] BSTR dir );
HRESULT ProgID ([out,retval] BSTR* progID ); };

interface IScript : IDispatch {
HRESULT Start (void );
HRESULT AddHostItem([in] BSTR itemName, [in] IDispatch* item );
HRESULT GetScriptItem([in] BSTR name,[out,retval] IScriptItem** item)
HRESULT Expr ([in] BSTR expr, [out,retval] IScriptItem** item ); };

interface IScriptItem : IDispatch {
HRESULT Eval ([in] int cArgs, [in,size_is(cArgs)] VARIANT* args,
[out,retval]
VARIANT* result );};
HaskellObject: ObjectScript

Consiste en crear un componente Haskell, que a su
vez será automatizado. Para ello se necesitan 2
módulos:
–
–

Un proxy, que una Haskell con el exterior (podría utilizarse
HaskellDirect para generarlo a partir de la definición IDL)
El módulo con la implementación del componente
Ya que Visual Basic y Java usan la automatización
como su interfaz COM básico, es fácil integrar
Haskell con estos lenguajes.
HaskellDirect




HaskellDirect, como hemos dicho, es un compilador
de IDL para Haskell, que proporciona una ayuda al
programador Haskell que quiere interactuar y reusar
código externo.
Crear un interfaz para Haskell implica la conversión
de los tipos básicos y el manejo de memoria entre el
mundo Haskell y el exterior
HaskellDirect se encarga de llevar a cabo esta
traducción
Sin embargo, actualmente, su uso es bastante
limitado
Biblioteca HTMLScript

Esta biblioteca contiene un conjunto de
funciones que permiten “trasladar” el control
de elementos HTML a Haskell. Una vez allí,
se podrán modificar de igual forma que se
podría hacer con Javascript.

Veamos algunos ejemplos sencillos
Referencias

http://www.haskell.org/haskellscript

Client-side Web Scripting with HaskellScript
Erik Meijer, Daan Leijen and James Hook.
http://www.cs.uu.nl/people/daan/papers/padl.ps
Scripting COM components in Haskell
Simon L. Peyton-Jones, Erik Meijer and Daan Leijen
http://www.cs.uu.nl/people/daan/papers/com.ps
Diseño Arquitectónico
Carlos Canal
http://www.lcc.uma.es/~canal/isd/ISD_2.pdf

