Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
EclipseFP
1. Introducci´n
o
Demo
Arquitectura
Uso
Mejorar el Plug-in de Haskell para Eclipse
Alejandro Serrano
TPF 2011, A Coru˜a
n
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
2. Introducci´n
o
Demo
Arquitectura
Uso
Contenido
1 Introducci´n
o
2 Demo
3 Arquitectura
Visi´n general
o
Scion y Scion Browser
Otros builders
Futuro
4 Uso
Para programar
Para extender
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
3. Introducci´n
o
Demo
Arquitectura
Uso
¿Qu´ es EclipseFP?
e
EclipseFP es un conjunto de plug-ins para el entorno de
desarrollo Eclipse centrados en el lenguaje de programaci´n
o
Haskell y su ecosistema.
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
4. Introducci´n
o
Demo
Arquitectura
Uso
¿Qu´ es Eclipse?
e
Eclipse es un entorno de desarrollo integrado creado por IBM (y
posteriormente liberado) que soporta su extensi´n a trav´s de
o e
plug-ins.
Actualmente existen plug-ins para decenas de lenguajes.
Los de Java y C/C++ se encuentran entre los mejores de su
categor´
ıa.
La plataforma de Eclipse puede usarse independientemente
para otras aplicaciones.
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
5. Introducci´n
o
Demo
Arquitectura
Uso
¿Por qu´ Eclipse?
e
Multiplataforma
Integraci´n en un mismo entorno de diversos lenguajes
o
Permite no reinventar la rueda
Soporte para control de versiones: EGit, Subclipse
Sistemas de control de tareas: Mylyn
Hace sencillas las tareas t´
ıpicas de un entorno de desarrollo
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
6. Introducci´n
o
Demo
Arquitectura
Uso
Historia del proyecto
2005: Leif Frenzel comienza el proyecto EclipseFP
Con unas miras m´s altas que las actuales
a
2008: Thomas Schilling empieza a trabajar en la librer´ Scion
ıa
Wrapper sobre la API de GHC orientada a IDEs
2009: Thomas ten Cate integra Scion en EclipseFP durante el
Google Summer of Code
2010: JP Moresmau se convierte en mantenedor
A˜ade cosas como la integraci´n del depurador
n o
2011: Trabajo en EclipseFP durante mi Summer of Code
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
7. Introducci´n
o
Demo
Arquitectura
Uso
Demo
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
8. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Visi´n general
o
Puede verse como un ejemplo de integraci´n entre Haskell y Java
o
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
9. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Scion
Encargada de compilar y parsear el c´digo fuente Haskell
o
No exclusiva de EclipseFP, tambi´n usada en Emacs
e
Trabaja directamente con la API de GHC
Esa API es bastante variable, por lo que requiere ajustes con
cada nueva versi´n de GHC
o
Hay montones de #ifdef en el c´digo
o
Esta API tiene algunos problemas serios
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
10. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Scion
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
11. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Scion
Muchas veces su trabajo se solapa con el de Cabal
Preprocesamiento de archivos
Definici´n y ejecuci´n de tests
o o
Otra opci´n ser´ llamar a Cabal y parsear la salida
o ıa
Es la forma de trabajar de Leksah
Dificulta encontrar errores en c´digo no guardado
o
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
12. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Scion Browser
Provee la informaci´n para el navegador de paquetes
o
Guarda una base de datos con la informaci´n de los m´dulos
o o
¿C´mo se obtiene esa informaci´n?
o o
Usa el mismo formato de importaci´n que Hoogle
o
El servidor de Hackage genera estos archivos
autom´ticamente para cada paquete que se sube
a
Si no, se pueden generar con cabal haddock --hoogle
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
13. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Scion Browser
En cada inicio de EclipseFP
1 Se carga la base de datos del Browser
2 Se genera una lista de los paquetes instalados en el sistema
3 Por cada paquete que no estuviese en la base de datos
Se intenta obtener la documentaci´n de Hackage
o
Si no funciona, se pide de la documentaci´n de GHC
o
Si no funciona, se pide el c´digo fuente del paquete y se
o
ejecuta cabal haddock --hoogle sobre ´l e
Se parsea el archivo de documentaci´no
4 Se comprueba que la base de datos de Hoogle est´ al d´
a ıa
Si no, se corre hoogle data
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
14. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Scion Browser: la base de datos
Para guardar la base de datos, se usa cereal
Versi´n estricta de binary
o
Al principio hubo problemas por el excesivo gasto de memoria
Usamos haskell-src-exts para guardar la informaci´n
o
Muchas veces la informaci´n estaba repetida
o
Soluci´n: serializaci´n hecha a mano
o o
No guardamos los campos innecesarios
Al deserializar, se mantiene una cach´ (¡impura!) para no
e
repetir elementos
Se fuerza la evaluaci´n completa con deepseq
o
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
15. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Comunicaci´n: JSON por consola
o
La comunicaci´n Haskell-Java se hace con JSON
o
JavaScript Object Notation
Ejemplo JSON
{ "commmand": "query-hoogle", "query": "fmap"}
Est´ndar de facto en aplicaciones web
a
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
16. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Comunicaci´n: JSON por consola
o
Usamos la librer´ Aeson
ıa
R´pida (estad´
a ısticas en Hackage)
Usa un estilo con Applicative
Conversi´n de/hacia JSON mediante las clases FromJSON y
o
ToJSON
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
17. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Aeson: Volcado
Suponiendo que tenemos activada la extensi´n
o
OverloadedStrings
instance ToJSON PackageIdentifier where
toJSON (PackageIdentifier (PackageName n) v) =
object [ "name" .= n, "version" .= v ]
A cadena
aCadena :: PackageIdentifier -> ByteString
aCadena pid = encode $ toJSON pid
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
18. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Aeson: Parseo
instance FromJSON PackageIdentifier where
parseJSON (Object v) =
PackageIdentifier <$> (PackageName <$> v .: "name")
<*> v .: "version"
parseJSON _ = mzero
De cadena
deCadena :: ByteString -> Either String PackageIdentifier
deCadena s =
case AttoParsec.parse json s of
AttoParsec.Fail _ _ e -> Left "Cadena JSON no valida"
AttoParsec.Done _ value ->
case Data.Aeson.Types.parse parseJSON value of
Error e -> Left "Estructura JSON no valida"
Success pid -> Right pid
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
19. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Build integrado
El plug-in de Eclipse trae consigo una copia del c´digo de Scion y
o
Scion Browser
Este c´digo se compila autom´ticamente cuando se inicia
o a
EclipseFP por primera vez
No se instala en los directorios del usuario, sino que se guarda
en un directorio privado de Eclipse
Muestra una forma de integrar Haskell sin que el usuario lo note
M´s all´ de lo que tarda en cargar la primera vez
a a
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
20. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Builders por consola
Simplemente se inicia el proceso correspondiente y se va
procesando la salida
La mayor parte de las herramientas usan un formato de salida
archivo:linea:columna:mensaje
Procesamiento posterior para saber el tipo de error
C´digo muy similar en todos los casos
o
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
21. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
Problemas con la API de GHC
GHC tiene opciones est´ticas
a
Por ejemplo, si se genera informaci´n para profiling o no
o
Estas opciones s´lo pueden habilitarse antes de la primera
o
comunicaci´n con la API
o
Hace que se tenga que reiniciar Scion si cambian ciertas
configuraciones
Impide compartir Scion entre diversos proyectos
Dificulta generar versiones divergentes de un mismo proyecto
para que se use con ciertas herramientas
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
22. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
El nuevo Scion
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
23. Introducci´n
o Visi´n general
o
Demo Scion y Scion Browser
Arquitectura Otros builders
Uso Futuro
El nuevo Scion
Integraci´n de m´s herramientas en la librer´
o a ıa
Browser y depuraci´n con GHCi se convierten en
o
funcionalidad del propio Scion
Acceso unificado a la funcionalidad
Nuevas librer´ para comunicaci´n y paralelismo
ıas o
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
24. Introducci´n
o
Demo Para programar
Arquitectura Para extender
Uso
C´mo obtenerlo
o
Sitio web del proyecto
http://eclipsefp.github.com
Gu´ de instalaci´n
ıa o
Preguntas y errores frecuentes
Gu´ del usuario empaquetada con el plug-in
ıa
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
25. Introducci´n
o
Demo Para programar
Arquitectura Para extender
Uso
Ventajas de Eclipse
Creaci´n sencilla de asistentes gr´ficos
o a
Como el editor de Cabal o las opciones de UUAGC
Integraci´n de herramientas de consola como builders
o
Permite crear editores que contengan Haskell como
sublenguaje
Usado en los editores de Alex y Happy
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse
26. Introducci´n
o
Demo Para programar
Arquitectura Para extender
Uso
El futuro (ideal)
Los tests de Cabal se estabilizan
Mucho m´s refactoring
a
Integraci´n de m´s herramientas del mundo Haskell
o a
Plataforma para nuevos proyectos
Uso acad´mico y profesional
e
Alejandro Serrano Mejorar el Plug-in de Haskell para Eclipse