2009-07-24 8 views
19

En este momento, todo lo que hago se las arregla para caber en un único archivo fuente, y sorprendentemente pequeño. ¿Cómo se decide cuánto y qué dividir en archivos separados?¿Cómo hago para dividir el código Lisp en varios archivos fuente?

Con Java, es fácil decidir qué se incluye en un archivo (la decisión ya está tomada), pero en Lisp encuentro que escribo muchas funciones pequeñas que se complementan entre sí y resulta difícil decidir qué, si cualquier cosa debería dividirse. Al abordar proyectos más grandes en Lisp, sería bueno no tener que reinventar la rueda, pero no puedo encontrar mucha información concreta en la web sobre esto.

¿Puede compartir algunas estrategias para tratar proyectos más grandes en Lisp, o señalarme algunos recursos que tratan con esto?

Respuesta

13

Cuando comience a escribir un programa Lisp, podría ser útil comenzar con un solo archivo. Una vez que el código se vuelve demasiado grande (sea lo que sea) puedes dividirlo. Cuando te acercas a algo que necesita organización, entonces debes invertir algo de trabajo en ello.

Unos consejos:

  • Hay algunas herramientas para gestionar dependencias de los archivos de origen y proporcionar acciones como compilación, carga, compilación y carga y otros. ASDF es uno, pero también hay otros.

  • Necesita un archivo para describir las dependencias . Nómbrelo para que pueda ser reconocido.

  • Es posible que necesite un archivo para definir uno o más paquetes .

  • Es posible que necesite poner funcionalidades específicas de implementación en sus propios archivos.

  • movimiento más grande cantidades de datos de configuración a sus propios archivos

  • Utilidades General deben estar en otro archivo

  • macros deben definirse antes de utilizar. Otros archivos dependen de este archivo y deben recompilarse automáticamente si se cambia la definición de la macro.

  • agrupan la funcionalidad en un archivo si está conectado lógicamente. En un programa de dibujo: todas las funciones de dibujo, todos los comandos de interfaz de usuario, guardar datos en archivos, imprimir, ...

  • no me importa demasiado el tamaño del archivo. Los archivos fuente de Lisp pueden ser grandes. A veces 100k.

  • el entorno de desarrollo admite el movimiento en los archivos. METRO-.en un símbolo encuentra su fuente.

  • asegúrese de que puede volver a cargar un archivo, sin la necesidad de reiniciar todo el Lisp.

  • Common Lisp proporciona LOAD y COMPILE-FILE como funciones. Puede usar estas funciones en sus propios archivos.

+0

Gracias - esta es una lista útil – Galghamon

4

Si está utilizando Common Lisp, ASDF es una forma popular de especificar sistemas. Maneja las dependencias de orden de carga entre sus archivos de origen (y mucho más).

+0

Estoy algo sorprendido - Sé que he visto y hojeado esa página en su enlace antes, pero no tenía idea de qué estaba hablando en ese momento. Tiene mucho más sentido ahora en contexto - ¡gracias! – Galghamon

+1

Puede ser útil estudiar cómo las pequeñas bibliotecas CL configuran sus archivos .asd. Aquí hay un pequeño y simple que escribí: http://common-lisp.net/project/cl-applescript/ –

+0

¡Gracias, ver un ejemplo de un paquete pequeño como este fue realmente útil! – Galghamon

Cuestiones relacionadas