, en su artículo The Nature of Lisp, Slava Akhmechet presenta a las personas a ceceo utilizando Ant/NAnt como ejemplo. ¿Hay una implementación de Ant/NAnt en lisp? ¿Dónde puede usar el código de lisp real, en lugar de xml, para definir las cosas? He tenido que lidiar con la creación de adiciones a NAnt, y he deseado una manera de eludir el sistema xml en la forma en que Slava muestra que se podría hacer.Ant (o NAnt) en Lisp
Respuesta
Ant es un programa que interpreta comandos escritos en algún lenguaje XML. Usted puede, como acaba de mencionar en su respuesta, usar algún analizador XML (como el XMLisp mencionado) y convertir la descripción XML en algún tipo de datos Lisp y luego escribir código adicional en Lisp. Necesita volver a implementar también algunas de las interpretaciones de Ant.
Gran parte de las cosas primitivas en Ant no son necesarias en Lisp. Algunas operaciones de archivos están incorporadas en Lisp (eliminar-archivo, cambiar nombre-archivo, archivo-sonda, ...). Algunos faltan y deben implementarse; alternativamente puede usar una de las bibliotecas existentes. También tenga en cuenta que puede CARGAR archivos Lisp en Lisp y ejecutar código, también está el REPL, por lo que ya viene con una interfaz interactiva (a diferencia de Java).
Los sistemas de compilación de nivel superior en Common Lisp generalmente implementan una abstracción llamada 'SYSTEM'. Hay varios de esos. ASDF es una opción popular, pero hay otras. Un sistema tiene subsistemas y archivos. Un sistema también tiene algunas opciones. Sus componentes también tienen opciones. Un sistema tiene una descripción estructural de los componentes, una descripción de las dependencias o una descripción de tipo de 'acciones' y sus dependencias. Normalmente, estas cosas se implementan de forma orientada a objetos y puede implementar 'acciones' como funciones Lisp (genéricas). Lisp también trae funciones como COMPILE-FILE, que usará el compilador Lisp para compilar un archivo. Si su código tiene, por ejemplo, archivos C, necesitará llamar a un compilador de C, generalmente a través de alguna función específica de implementación que permite llamar a programas externos (aquí el compilador de C).
As, mencionado por dmitry-vk, ASDF es una opción popular. LispWorks proporciona Common Defsystem. Allegro CL tiene su propio DEFSYSTEM. Su DEFSYSTEM manual describe también cómo extenderlo.
Toda la solución Lisp está utilizando algún tipo de Sintaxis Lisp (sin sintaxis XML), generalmente implementado por una macro para describir el sistema. Una vez que se lee en Lisp, se convierte en una representación de datos, a menudo con instancias CLOS para el sistema, módulos, etc. Las acciones son también funciones Lisp. Algunas funciones de orden superior recorren el gráfico/árbol de componentes y ejecutan las acciones necesarias. Algunas otras herramientas recorren el gráfico/árbol de componentes y devuelven una representación para las acciones, que es entonces un plan propuesto - el usuario puede entonces dejar que Lisp ejecute todo el plan o partes del plan.
en una máquina Lisp una simple descripción del sistema se parece a esto:
(sct:defsystem scigraph
(:default-pathname "sys:scigraph;"
:required-systems "DWIM")
(:serial "package" "copy" "dump" "duplicate" "random"
"menu-tools" "basic-classes" "draw" "mouse"
"color" "basic-graph" "graph-mixins" "axis"
"moving-object" "symbol" "graph-data" "legend"
"graph-classes" "present" "annotations" "annotated-graph"
"contour" "equation" "popup-accept" "popup-accept-methods"
"duplicate-methods" "frame" "export" "demo-frame"))
define Por encima de una SCIGRAPH sistema y todos los archivos debe ser compilado y la carga con el fin de serie.
Ahora puedo ver lo que la máquina Lisp haría para actualizar el código compilado:
Command: Compile System (a system [default Scigraph]) Scigraph (keywords) :Simulate (compiling [default Yes]) Yes The plan for constructing Scigraph version Newest for the Compile operation is: Compile RJNXP:>software>scigraph>scigraph>popup-accept-methods.lisp.newest Load RJNXP:>software>scigraph>scigraph>popup-accept-methods.ibin.newest
sería compilar un archivo y cargarlo - tengo el software cargado y cambiado solamente este archivo hasta el momento.
Para ASDF, consulte la documentación mencionada en la página CLIKI. Funciona de forma un poco diferente.
Quizás pueda definir cosas en lisp y convertirlas a XML en el punto en que las pasa a NAnt.
Algo como XMLisp hace que sea más fácil ir y venir entre las dos representaciones.
Editar: En realidad, xml-emitter tendría más sentido.
Lo que apareció en el artículo fue que xml era un metalenuaje, lo que realmente le impidió usar el lenguaje de implementación. Si Ant/NAnt se implementó usando lisp, podrías usar todo el poder de lisp en cada nodo ... ¡lo cual suena TAN atractivo! – Daniel
Eso es cierto, y supongo que Scons es un ejemplo de esto, ya que puedes ejecutar arbitary python en ese sistema de compilación. Por otro lado, creo que los sistemas de compilación maduros como make y jam, que han desarrollado lenguajes concisos y expresivos para el código de construcción, hacen que la idea de lisp Ant sea menos útil. – justinhj
El ASDF de Common Lisp (otra herramienta de definición de sistema) es análogo a Make/Ant (pero no es un análogo completo; está destinado a crear programas lisp, no a sistemas genéricos como make o ant). Es extensible con código Lisp (sistemas de subclases, componentes, operaciones de adición a los sistemas). Por ejemplo, hay una extensión asdf-ecs que permite incluir (y compilar) archivos fuente C en el sistema.
El próximo libro de Stuart Halloway Programming Clojure pasa por la construcción de Lancet en todo el libro como una aplicación de ejemplo. Lancet es un sistema de construcción Clojure que (opcionalmente) se integra directamente con Ant. El código fuente y los ejemplos son available.
Si todo lo que quiere hacer es generar archivos Ant XML utilizando el código Lisp, podría usar algo como clj-html para Clojure o CL-WHO para Common Lisp. Generar XML desde Lisp s-exps es divertido y fácil.
- 1. Proyectos de Building Flex en ant/nant
- 2. ¿Cómo uso los patrones de nomenclatura Nant/Ant?
- 3. ¿Creación NAnt o TFS que es mejor?
- 4. NAnt o MSBuild, ¿cuál debo usar en un entorno svn?
- 5. NAnt Alternativas
- 6. A multiprocesamiento A * Buscar en Java o Lisp o C#
- 7. Nant en Windows Vista 64
- 8. Crear directorio usando Nant
- 9. Mejores prácticas de NAnt
- 10. Common Lisp a Lisp-n?
- 11. ¿No está NAnt en la piscina muerta?
- 12. Evaluar la igualdad de propiedad en Nant
- 13. ¿Para qué sirven las listas circulares (en Lisp o Scheme)?
- 14. ¿Cómo incremento o disminuyo un número en Common Lisp?
- 15. CONS LISP en python
- 16. Asociación en Common Lisp
- 17. Secuencias en Common Lisp?
- 18. Punteros en Lisp?
- 19. Lisp "algo" en Python?
- 20. problemas variable en Lisp
- 21. Cómo usar mercurial desde nant
- 22. referencias variables en Lisp
- 23. Análisis en Emacs Lisp
- 24. ¿Cómo verificar en el script NAnt si la propiedad está configurada o no?
- 25. Redes neuronales en Lisp - Consejo
- 26. Infinito negativo en Lisp
- 27. Programación tácita en Lisp
- 28. PINTURA en Emacs Lisp?
- 29. Lisp en plataformas integradas
- 30. Webdevelopment en Common Lisp
¡Gracias por pasar el tiempo para responder! Creo que mi mayor problema con Ant es que, dado que usa XML, no puedo usar el poder del lenguaje subyacente directamente para realizar algunas operaciones. Solo están disponibles las operaciones (funciones) que han sido "portadas" al lado xml. La belleza que veo en un sistema implementado con Lisp es que todo lisp estaría disponible, sin necesidad de crear contenedores XML para funciones nativas. – Daniel