SlideShare una empresa de Scribd logo
1 de 26
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
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
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
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
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
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
Introducci´n
               o
           Demo
     Arquitectura
             Uso




         Demo




Alejandro Serrano   Mejorar el Plug-in de Haskell para Eclipse
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Más contenido relacionado

Similar a EclipseFP

Eclipse José Manuel unidad 1 semestre 2
Eclipse José Manuel unidad 1 semestre 2Eclipse José Manuel unidad 1 semestre 2
Eclipse José Manuel unidad 1 semestre 2K Manuel TN
 
Eclipse jose manuel
Eclipse jose  manuelEclipse jose  manuel
Eclipse jose manuelK Manuel TN
 
22 07-13 eclipse grupo 6
22 07-13 eclipse grupo 622 07-13 eclipse grupo 6
22 07-13 eclipse grupo 6Maga Lasic
 
Programacion Web con Haskell
Programacion Web con HaskellProgramacion Web con Haskell
Programacion Web con Haskellfebuiles
 
Webminar: Java como una plataforma Poliglota
Webminar: Java como una plataforma PoliglotaWebminar: Java como una plataforma Poliglota
Webminar: Java como una plataforma PoliglotaDomingo Suarez Torres
 
Eclipse java en_espanol
Eclipse java en_espanolEclipse java en_espanol
Eclipse java en_espanolANTHONY OCHOA
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipseariannalizeeth
 
Mi primera-hora-con-eclipse Tutorial
Mi primera-hora-con-eclipse TutorialMi primera-hora-con-eclipse Tutorial
Mi primera-hora-con-eclipse TutorialMarthaa Hdz
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipseJose Nava
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipseAranza Angeles
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipseDulcevelazquez6
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipseJosué Naquid
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipseJenny Martinez
 

Similar a EclipseFP (20)

Eclipse
EclipseEclipse
Eclipse
 
Eclipse José Manuel unidad 1 semestre 2
Eclipse José Manuel unidad 1 semestre 2Eclipse José Manuel unidad 1 semestre 2
Eclipse José Manuel unidad 1 semestre 2
 
Eclipse jose manuel
Eclipse jose  manuelEclipse jose  manuel
Eclipse jose manuel
 
22 07-13 eclipse grupo 6
22 07-13 eclipse grupo 622 07-13 eclipse grupo 6
22 07-13 eclipse grupo 6
 
Programacion Web con Haskell
Programacion Web con HaskellProgramacion Web con Haskell
Programacion Web con Haskell
 
Webminar: Java como una plataforma Poliglota
Webminar: Java como una plataforma PoliglotaWebminar: Java como una plataforma Poliglota
Webminar: Java como una plataforma Poliglota
 
Java con eclipse
Java con eclipseJava con eclipse
Java con eclipse
 
Eclipse java en_espanol
Eclipse java en_espanolEclipse java en_espanol
Eclipse java en_espanol
 
Tutorial eclipse
Tutorial eclipseTutorial eclipse
Tutorial eclipse
 
Tutorial 3
Tutorial 3Tutorial 3
Tutorial 3
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 
Mi primera-hora-con-eclipse Tutorial
Mi primera-hora-con-eclipse TutorialMi primera-hora-con-eclipse Tutorial
Mi primera-hora-con-eclipse Tutorial
 
Tutorial 3
Tutorial 3Tutorial 3
Tutorial 3
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 
Tutorial de eclipse
Tutorial de eclipseTutorial de eclipse
Tutorial de eclipse
 
Mi primera-hora-con-eclipse
Mi primera-hora-con-eclipseMi primera-hora-con-eclipse
Mi primera-hora-con-eclipse
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 

Último (11)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
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