Trabajo Profesional

Facultad de Ingeniería - UBA


ObjetivoS
Ambiente de Desarrollo para Clojure en Clojure.


ObjetivoS
Extensibilidad


ObjetivoS
USABILIDAD


Clojure



CLojure

+ SLIME + Clojure-mode
+ Counter-clockwise

+ La Clojure
Ambientes de DEsarrollo

Ambientes de desarrollo



Metodologia
Iteraciones

Reuniones periodicas
Entregables por iteracion
pruebas

PROTOTIPO

Objetivos
-
Investigar disponibilidad de librerías.
-
Explorar herramientas de abstracción.
-
Adaptación al estilo funcional de programación.
-
Identificar principales desafíos.

PROTOTIPO

(defn make-main
"Creates the main window and all
its controls."
[name]
(ui/init)
(let [main (ui/frame name)
tabs (ui/tabbed-pane)
ui-main {:main main :tabs tabs}
icons (map (comp ui/image io/resource) icons-paths)]
(-> main
(ui/set :icon-images icons)
(ui/set :j-menu-bar (build-menu ui-main))
(ui/set :size 800 600)
(ui/maximize)
(ui/show)
(ui/add tabs))
ui-main))Interfaz gráfica - SWING

PROTOTIPO

Coloreado sintáctico


PROTOTIPO

Editor de Texto - DESEMPEÑO



Abstracción UI


(attr text-field :text "Hola")
Abstracción UI

Selectores
controles anidados
Manipulación complicada
SELECTORES SImPLIFICAN modificacón
(update window :label attr :text "Last name")

Antes
DESPUéS

Abstracción UI

Selectores - IMPLEMENTACIón

[:#center [:text-editor (partial has-doc? doc)]]
Abstracción UI

Sintáxisis declarativa
(def window [:window {:visible true
:size [200 60]
:layout :flow}
[:label {:text "Name"}]
[:text-field {:text "Enter your name here"}]]
(let [window (ui/window {:visible true
:size [200 60]
:layout :flow})
label (ui/label {:text "Name"})
text (ui/text-field {:text "Enter your name here"})]
(->> window
(ui/add label)
(ui/add text)))
Arquitectura
mvc



Arquitectura

Núcleo + PLugins


Arquitectura

Núcleo - Modelo
Documento
historial
Lenguaje
Configuración
ui
Aplicación

Arquitectura

Núcleo - VISTA

ventana
menú ppal
secciones

Arquitectura

Núcleo - CONTROL
EVENTOS
MANEJADORES


Arquitectura

PLugins
GLobales
LOCALES
-
Ventana Principal + Editor
-
Ir a línea
-
Deshacer / Rehacer
-
Notificador
-
Explorador de Archivos
-
Buscar y Reemplazar
-
Perfil de Código
-
Clojure
-
Markdown
-
Coloreado Sintáctico
-
Autocompletar
-
Resaltado de Delimitadores
-
Delimitadores Arcoiris
-
Paredit
-
Macro expansión
-
Vista Previa (Markdown)

Editor de TExto



Editor de TExto
coloreado sintáctico



Editor de TExto
DESHACER / REHACER



Editor de TExto
MARKDOWN



nREPL

Conexión con una instancia de Clojure a través de la red
network
READ EVAL PRINT LOOP

nREPL

Servidor


nREPL

CLIENTE


AUTO-completar


Contexto Local
Contexto Global
+
+



trabajo futuro

Funcionalidad
Interfaz gráfica
Dependencia entre plugins
Búsqueda del árbol sintáctico

Conclusiones

Inmutabilidad

Conclusiones

POO / PF

Conclusiones

Manipulación código fuente

Conclusiones

Alcance


¡MUCHAS Gracias!
Clojure Lab
By Juan Facorro
Clojure Lab
IDE built for Clojure in Clojure.
- 592