PDF de programación - Interoperabilidad Haskell-.NET

Imágen de pdf Interoperabilidad Haskell-.NET

Interoperabilidad Haskell-.NETgráfica de visualizaciones

Publicado el 25 de Abril del 2019
424 visualizaciones desde el 25 de Abril del 2019
245,1 KB
14 paginas
Creado hace 18a (18/07/2005)
DEPARTAMENTO DE SISTEMAS INFORMÁTICOS Y

COMPUTACIÓN

UNIVERSIDAD POLITÉCNICA DE VALENCIA

P.O. Box: 22012 E-46071 Valencia (SPAIN)

Informe Técnico / Technical Report

Ref. No: DSIC II/06/05
Title: Integración de componentes Haskell en .NET
Author (s): Beatriz Alarcón y Salvador Lucas
Date: 18 de Julio de 2005
Key Words:
Programación Funcional

COM, Interoperabilidad, .NET,

Pages: 12

VºBº

Leader of Reasearch Group

Author (s):

Interoperabilidad Haskell-.NET

ii

Interoperabilidad Haskell-.NET

Integración de componentes Haskell en .NET

Beatriz Alarcón y Salvador Lucas
Departamento de Sistemas Informáticos y Computación
Universidad Politécnica de Valencia
{balarcon, slucas}@dsic.upv.es

Resumen

.NET es un proyecto emergente de Microsoft para promover un nuevo entorno
de desarrollo de software con énfasis en transparencia de redes, con independencia de la
plataforma hardware o software (lenguaje de programación, gestor de bases de datos,
etc.) y que permita un rápido desarrollo de aplicaciones. El objetivo de este trabajo es
investigar la integración de componentes software desarrollados en un lenguaje
funcional como Haskell junto con componentes desarrollados en C# u otro lenguaje
.NET. Los lenguajes funcionales son muy indicados para desarrollar herramientas de
análisis y transformación de programas mientras que los entornos de desarrollo para
.NET dan soporte a características avanzadas como asistentes para interfaces gráficas, el
proceso de documentos XML y HTML, servicios Web, etc. Para conseguir nuestro
objetivo hacemos uso de las facilidades de ofrecidas en .NET para importar
componentes COM, por un lado, y la tecnología recientemente desarrollada para
generar componentes COM a partir de módulos Haskell.

Palabras clave: COM, Interoperabilidad, .NET, Programación Funcional.

1. Introducción

Durante los más de cincuenta años de historia de la informática ésta ha
experimentado un desarrollo indudable. Sin embargo, algunos de los problemas más
importantes, como el desarrollo de software fiable sobre bases ingenieriles sólidas,
siguen constituyendo un reto que, como ha apuntado recientemente un cientifico tan
prominente como T. Hoare, requerirá el esfuerzo combinado de muchos grupos de
investigación y equipos de producción de software [Hoa03]. El desarrollo de
herramientas de análisis, verificación y depuración automática de sistemas software
constituirá una parte importante de este esfuerzo, en el cual la posibilidad de utilizar los
lenguajes y técnicas de programación más apropiados para cada propósito será
fundamental. Puesto que, tanto desde el punto de vista conceptual como desde el punto
de vista práctico, esta metodología de trabajo distribuida es inevitable, se hace necesario
avanzar de forma simultánea en las técnicas de interoperabilidad de aplicaciones y
herramientas de desarrollo.

Los esfuerzos internacionales por desarrollar un marco global para la utilización
de recursos informáticos tienen en Java1 y en .NET2 sus más conocidos exponentes. La
plataforma .NET permite integrar tecnologías ya existentes, productos modificados para
su uso dentro de la plataforma, y elementos nuevos, lo que permite conectar

1 http://java.sun.com
2 http://www.microsoft.com/net

1

Interoperabilidad Haskell-.NET

información, personas, sistemas y dispositivos a través de software. También el
proyecto XML auspiciado por el WWW consortium3 está relacionado con este esfuerzo
a través del uso en .NET de XML para documentar programas, el soporte de servicios
Web basados en XML, etc. Como atestiguan los numerosos congresos y talleres
dedicados recientemente a explorar este tipo de problemas, hay una necesidad urgente
por parte de la comunidad científica que investiga en el desarrollo y aplicación de
métodos formales en la Ingeniería del Software de encontrar una manera simple y
sistemática de combinar herramientas de análisis y desarrollo de software. Es
interesante estudiar hasta qué punto las plataformas mencionadas podrían proporcionar
un marco válido o interesante para el desarrollo y uso distribuido pero coordinado de
herramientas de análisis, optimización, compilación, etc.

El trabajo descrito en este informe forma parte de las tareas programadas dentro
del proyecto SELF4 cuyo principal objetivo es contribuir a ese reto común. Las
comunidades científicas que desarrollan lenguajes y tecnología software declarativa
están realizando un esfuerzo serio para integrarse en este tipo de iniciativas. Como parte
de dicho esfuerzo, se han desarrollado herramientas de análisis de programas como MU-
T E R M [Luc04] y MTT (Maude Termination Tool) [DLMMU04] que utilizan
herramientas externas auxiliares como CiME5 o el propio compilador del lenguaje
Maude6 empleando distintos mecanismos de interoperabilidad, desde simples llamadas
directas al sistema operativo hasta servicios Web. La comunidad internacional ha
recibido con interés este tipo de iniciativas, pero queda mucho por hacer en los distintos
frentes involucrados: definición de formatos de intercambio de información, inclusión
de puntos de entrada adecuados en las herramientas desarrolladas, etc.

Nadie duda de la gran potencia de los lenguajes funcionales, ni de la facilidad
con la que se pueden expresar funciones que en los lenguajes imperativos serían más
complejas. Las facilidades para el ajuste de patrones y las características de orden
superior hacen a los lenguajes funcionales como Haskell7 muy indicados para el análisis
y transformación de programas. Sin embargo, el talón de Aquiles de Haskell puede que
sea la inexistencia de una herramienta visual para la realización de interfaces gráficas de
manera rápida, como poseen, por el contrario, muchos otros lenguajes de programación.
Así, un programador Haskell puede perder demasiado tiempo en darle forma a su
aplicación mientras que con un entorno de desarrollo integrado (IDE) como Visual
Studio .NET, esto resulta sencillo. El soporte para la definición de servicios Web que
ofrece la plataforma .NET es otra ventaja de la que se podrían beneficiar las
aplicaciones Haskell.

En el mundo de los lenguajes funcionales, existen adaptaciones más o menos

completas a .NET de los lenguajes:

ML
Mondrian

http://www.cl.cam.ac.uk/Research/TSG/SMLNET
http://www.mondrian-script.org


3 http://www.w3.org
4 http://self.lcc.uma.es
5 http://cime.lri.fr
6 http://maude.cs.uiuc.edu
7 http://haskell.org

2

Interoperabilidad Haskell-.NET

Por lo que respecta a Haskell, las iniciativas existentes son todavía poco
maduras8, pero revelan el interés de la comunidad por converger a la plataforma .NET.
En 1999 un grupo de investigadores exploraron la posibilidad de encapsular los
programas Haskell como objetos COM (Microsoft’s Component Object Model). ¿Por
qué no podiamos dar un paso más y aprovechar la interoperabilidad de COM con .NET
para lograr nuestro objetivo? Microsoft ha dejado abierta la posibilidad de usar los
componentes COM ya existentes en .NET; así, un programador de Windows no deberá
reescribir todas sus aplicaciones ante la llegada de .NET. En nuestro caso, podemos
beneficiarnos de esto para empaquetar nuestros programas Haskell como componentes
software e integrarlos en aplicaciones escritas en otros lenguajes, por ejemplo en C#, el
lenguaje por excelencia de .NET.

Nuestro punto de apoyo es HaskellDirect9 (HDirect [Fin99,FLMP99]) un marco
de trabajo de interfaz para funciones externas (FFI, Foreign Function Interface) para
Haskell basada en el estándar IDL (Interface Definition Language) permite especificar
una interfaz de programación de manera independiente del lenguaje. A partir de él,
profundizaremos en el objetivo que nos ocupa: la interoperabilidad de Haskell con .NET
a través de COM.

Son muchas las posibilidades que ofrece HDirect:
• Creación de enlaces Haskell con librerías externas.
• Creación de enlaces externos con librerías Haskell.10
• Creación de interfaces cliente Haskell para objetos COM.
• Creación de componentes COM en Haskell.

Para el fin que nos ocupa, el punto que más nos importa es el de construir un
objecto COM en Haskell capaz de interoperar con aplicaciones Windows y con ello
conseguir nuestro principal objetivo: interoperar con .NET. Para más información sobre
HDirect puede consultar el extenso manual de éste [Fin99] o [Hdi] donde se explican
los detalles de su implementación que no consideramos prioritarios para este
documento.

En la sección 2 introducimos nuestro caso de estudio y mostramos cómo
construir un componente COM a partir de un módulo Haskell. En la sección 3
abordamos la problemática de su integración en .NET. La sección 4 presenta nuestras
conclusiones y líneas de investigación futuras.

2. Interoperabilidad mediante COM en Haskell

La tecnología de Microsoft COM es usada por los desarrolladores para crear
componentes reutilizables, enlazar componentes para construir aplicaciones, tener las
ventajas de los servicios Windows y permitir a los componentes software comunicarse.


8 ver http://www.haskell.org/hugs y http://galois.com/~sof/hugs98.net .
9 http://www.haskell.org/hdirect/

3

Interoperabilidad Haskell-.NET

Para abordar el problema pensamos en un ejemplo muy sencillo que nos
abstrayera de detalles de implementación. Creamos una simple aplicación Windows en
Visual Studio.Net 2003 con un botón y una caja de texto. Nuestro deseo era que al
pulsar el botón apareciera en mayúsculas la cadena en la caja de
  • Links de descarga
http://lwp-l.com/pdf15789

Comentarios de: Interoperabilidad Haskell-.NET (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad