¿Cuál es la mejor manera de hacer GUI en Clojure ?
¿Hay algún ejemplo de algún contenedor Swing o SWT funcional ? ¿O alguna integración con la descripción declarativa de la GUI de JavaFX que podría ajustarse fácilmente a las expresiones s usando alguna macrología?
¿Algún tutorial?
java
user-interface
lisp
clojure
Marko
fuente
fuente
Stuart Sierra publicó recientemente una serie de publicaciones de blog sobre desarrollo de GUI con clojure (y swing). Comience aquí: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
fuente
Si quieres hacer programación de GUI, te diría que convertidor de temperatura o la colonia de hormigas .
Muchas cosas en Swing se hacen subclasificando, particularmente si está creando componentes personalizados. Para eso hay dos funciones / macros esenciales: proxy y gen-class .
Ahora entiendo a dónde vas con la forma más Lispy. No creo que haya algo así todavía. Recomiendo encarecidamente que no intente construir un marco de creación de GUI grandioso a CLIM , pero para hacer algo más Lispy: comience a escribir su aplicación Swing y resuma sus patrones comunes con macros. Al hacerlo, puede terminar con un idioma para escribir su tipo de GUI, o tal vez algunas cosas muy genéricas que pueden compartirse y crecer.
Una cosa que pierde al escribir las GUI en Clojure es el uso de herramientas como Matisse. Eso puede ser un buen punto para escribir algunas partes en Java (la GUI) y algunas partes en Clojure (la lógica). Lo que en realidad tiene sentido ya que en la lógica podrás construir un lenguaje para tu tipo de lógica usando macros y creo que hay más que ganar que con la GUI. Obviamente, depende de su aplicación.
fuente
Nadie lo sugirió aún, así que lo haré: Navegador como plataforma de interfaz de usuario. Puede escribir su aplicación en Clojure, incluido un servidor HTTP y luego desarrollar la interfaz de usuario utilizando cualquier cosa, desde HTML hasta hipo , ClojureScript y cualquiera de los miles de millones de bibliotecas JS que necesita. Si desea un comportamiento coherente del navegador y una "apariencia de aplicación de escritorio", puede agrupar Chrome con su aplicación .
Así parece ser cómo se distribuye la mesa de luz .
fuente
De esta página :
Y, por supuesto, sería digno de mirar la interoperabilidad sección del sitio web del clojure.
fuente
Hay un contenedor para MigLayout en clojure contrib. También puedes echar un vistazo a esta esencia . Básicamente estoy poniendo el código que estoy escribiendo mientras estoy aprendiendo swing / miglayout.
El ejemplo de dsm se reescribió de manera simple utilizando contrib.swing-utils
fuente
Se ha hablado en la lista de correo sobre algunas implementaciones de Cells (al estilo de Kenny Tilton's Cells ). Es una forma bastante ordenada de hacer programación GUI.
fuente
Prefiero ir a clojurefx, es un poco prematuro, pero funciona y le ahorra tiempo.
Comencé mi GUI con balancín y luego probé otro componente en clojurefx.
He terminado ambos, y estoy convencido de que voy a refactorizar el balancín a clojurefx.
Después de todo, JavaFX es el camino a seguir.
Se siente más ligero que el balancín. O al menos, escribiéndolo ...
Los enlaces funcionan, los oyentes trabajan, la mayoría del trabajo de componentes, de lo contrario, solo use una de las macros para crear un constructor para ese caso particular y el trabajo realizado. O, si le resulta difícil, escriba algunos métodos en Java y solicite ayuda para mejorar clojurefx.
El tipo que escribió clojurefx está ocupado en este momento, pero puede bifurcar el proyecto y hacer algunas correcciones.
fuente
Aquí hay otro ejemplo muy básico de envoltura de columpio:
fuente
Me hice la misma pregunta de escribir una GUI en Clojure con Swing y se me ocurrió la señal de la biblioteca
Le permite utilizar su modelo de dominio como una única estructura de datos Clojure envuelta dentro de un átomo.
Vea los ejemplos aquí .
fuente
He estado desarrollando un applet de Java en el que todo está escrito en Clojure excepto el código del applet, que está escrito en Java. El applet invoca las devoluciones de llamada del código Clojure de init, paint, etc. desde los ganchos de java para aquellos métodos definidos por el modelo de applet. Entonces, el código termina siendo 99.999 por ciento de Clojure y no tiene que pensar en la pequeña pieza de Java en su mayor parte.
Hay algunos inconvenientes en este enfoque, que espero analizar con más detalle en el Grupo Clojure Google. Creo que los desarrolladores de Clojure deberían incluir una forma nativa de crear aplicaciones. Actualmente puede hacer cualquier cosa de GUI que desee desde REPL, pero si desea una aplicación GUI entregable, es necesario escribir algo de Java para llamar al código Clojure. Además, parece que la arquitectura de un Applet de Java lo obliga a salir de las mejores prácticas más idiomáticas de Clojure, lo que requiere que use un estado mutable, etc.
Pero también, todavía no estoy muy lejos de Clojure y podría ser posible y todavía no he descubierto cómo hacerlo correctamente.
fuente
Mi entorno de IU Clojure preferido utiliza IO.js (Nodo para ES6) + Electrón (Contenedor) + Quiescente (envoltorio ReactJS) .
fuente
Así que no vi Fn-Fx en esta lista, de Timothy Baldridge (halgiri). Esta es una biblioteca Clojure que proporciona una abstracción funcional sobre JavaFX.
Se puede encontrar en Github en https://github.com/halgari/fn-fx .
Para usar, asegúrese de estar usando una versión reciente de Java (1.8 90+) y agregue una dependencia al repositorio de github agregando lo siguiente a su project.clj:
Lo he intentado y funciona fuera de la caja.
fuente
Clojure y SWT es el mejor enfoque para hacer GUI (s). Esencialmente, SWT es un enfoque de estilo plug and play para desarrollar software.
fuente
No creo que haya uno oficial, pero personalmente aprovecharía el hecho de que estoy usando uno de los lenguajes más poderosos del mundo e imagino cómo sería el código gui perfecto:
Su idea sería diferente, pero es de esperar que lo anterior le dé alguna idea.
fuente
Sé que estás sugiriendo soluciones de escritorio clásicas, pero la web se adapta bastante bien con clojure. He escrito una aplicación de audio completa donde todo está conectado para que si agrega música a la carpeta de audio se refleje en la interfaz de usuario web. Solo digo que la aplicación de escritorio no es la única forma :)
fuente