tutorial online example clojure

online - clojurescript



¿Eficiente flujo de trabajo Clojure? (2)

No es una descripción completa del flujo de trabajo, solo algunas ideas:

  1. Es posible eliminar un Var de un espacio de nombres con la función ns-unmap . Para mayor comodidad, se puede construir una macro undef sobre ella, por ejemplo, así:

    (defmacro undef [& syms] `(do ~@(map (fn [s] `(ns-unmap *ns* ''~s)) syms)))

    ns-unalias también puede ser de interés.

  2. No hay razón para revisar los archivos que contienen los espacios de nombres solo para hacer Cc Ck en cada uno de ellos; solo puede require los espacios de nombres que necesita en el REPL.

    Además, si escribe unos pocos caracteres en el SLIME REPL y luego usa Mp / Mn para examinar el historial, solo se mostrarán las entradas que coincidan con el bit inicial de texto que ingresó manualmente. Esto es compatible con Paredit (los soportes de cierre finales no serán un problema). Por lo tanto, si creas un gran requerimiento al inicio - (require ''[foo :as f] ''[bar :as b] ''[clojure.contrib.sql :as sql] ...) - luego después de reiniciar Swank, todo lo que necesitas hacer es escribir algo como (require ''[f y presiona Mp para llevar ese formulario al indicador REPL nuevamente.

    Es cierto que esto podría automatizarse de varias maneras (por ejemplo, haciendo que Swank REPL busque un archivo de configuración, o tal vez una simple macro que se expanda a un formulario de solicitud apropiado que pueda usarse después de traer solo un espacio de nombres de utilidad del proyecto: especialmente la última idea sería fácil de implementar), pero me parece lo suficientemente bajo en el factor de molestia que hasta ahora no me he molestado con ninguna mejora.

  3. Puede usar Cc Cz para hacer que se abra una ventana con SLIME REPL mientras está en un búfer habilitado para SLIME. Además, deberías intentar usar ido si aún no lo has hecho. Tiendo a trabajar con un búfer de código abierto en una ventana en el lado izquierdo de la pantalla y un búfer REPL a la derecha; con windmove-left y windmove-right unido a algunas teclas convenientes, tiendo a ser bastante feliz. Si necesito mirar buffers adicionales a menudo, uso marcos de Emacs adicionales.

  4. Por cierto, no utilizo el lein swank normalmente, prefiero mi función personalizada clojure-project (una versión modificada del original de Phil Hagelberg). En ocasiones, siento el deseo de mejorarlo ... tal vez me ocuparé de la automatización / import por proyecto la próxima vez que ocurra. ;-)

Estoy desarrollando un proyecto para mascotas con Clojure, pero me pregunto si puedo acelerar un poco mi flujo de trabajo.

Mi flujo de trabajo actual (con Compojure) es:

  1. Empieza Swank con lein swank Swank.
  2. Ve a Emacs, conéctate con Mx slime-connect .
  3. Cargue todos los archivos fuente existentes uno por uno. Esto también inicia un servidor Jetty y una aplicación.
  4. Escribe algún código en REPL.
  5. Cuando esté satisfecho con los experimentos, escriba una versión completa de un constructo que tenía en mente. Eval ( Cc Cc ) lo.
  6. Cambie REPL al espacio de nombres donde reside esta construcción y pruébelo.
  7. Cambia al navegador y vuelve a cargar la pestaña del navegador con la página afectada.
  8. Modifique el código, evalúelo, verifique en el navegador.
  9. Repita cualquiera de los anteriores.

Hay una serie de molestias con él:

  1. Tengo que cambiar entre Emacs y el navegador (o los navegadores si estoy probando cosas como la creación de plantillas con varios navegadores) todo el tiempo. ¿Hay un idioma común para automatizar esto? Solía ​​tener un bit de JavaScript que recarga la página continuamente, pero es de utilidad limitada, obviamente, cuando tengo que interactuar con la página durante más de unos pocos segundos.
  2. Mi instancia de JVM se vuelve "sucia" cuando experimento y escribo funciones de prueba. Básicamente, los espacios de nombres se contaminan, especialmente si estoy refactorizando y moviendo las funciones entre los espacios de nombres. Esto puede provocar colisiones de símbolos y debo reiniciar Swank. ¿Puedo undef un símbolo?
  3. Cargo todos los archivos de origen uno por uno ( Cc Ck ) al reiniciar Swank. Sospecho que estoy haciendo todo mal.
  4. Cambiar entre el REPL y el editor de archivos puede ser un poco irritante, especialmente cuando tengo muchas pestañas de Emacs abiertas, junto con los navegadores.

Estoy buscando formas de mejorar los puntos anteriores y todo el flujo de trabajo en general, por lo que agradecería que compartiera los suyos.

PD

También he usado Vimclojure antes, por lo que los flujos de trabajo basados ​​en Vimclojure también son bienvenidos.


No estoy seguro de Lein, pero en Maven podría especificar el nombre del script repl (replScript config param), que le permite especificar qué comandos se ejecutarán al inicio de REPL y Swank ... Y si tiene un espacio de nombres diferente para En su proyecto, puede usar funciones de clojure.contrib.find-namespaces para encontrar sus espacios de nombres y cargarlos todos ...