2009-07-24 5 views
19

Прямо сейчас, все, что мне удается, укладывается в один исходный файл и на удивление маленький. Как вы решаете, сколько и что нужно разделить на отдельные файлы?Как я могу разделить Lisp-код на несколько исходных файлов?

С помощью Java можно легко решить, что происходит в одном файле (решение уже сделано для вас), но в Lisp Я нахожу, что я пишу много небольших функций, которые строятся друг на друге, и становится трудно решить, что, если все должно быть разделено. Поскольку я занимаюсь более крупными проектами в Lisp, было бы неплохо не изобретать колесо, но я не могу найти много конкретной информации в Интернете об этом.

Можете ли вы поделиться некоторыми стратегиями для работы с более крупными проектами в Lisp или указать мне на некоторые ресурсы, которые касаются этого?

ответ

13

Когда вы начинаете писать программу Lisp, может быть полезно начать с одного файла. Как только код становится слишком большим (что бы это ни было), вы можете разделить его. Когда вы приближаетесь к чему-то, что требует организации, тогда вы должны вложить в него какую-то работу.

Несколько советов:

  • Есть несколько инструментов для управления зависимостями исходных файлов и обеспечивают действия, как компиляции, загрузки, компиляцию и нагрузку и другие. ASDF является одним, но есть и другие.

  • Для описания зависимостей необходим файл. Назовите его так, чтобы его можно было распознать.

  • Возможно, вам понадобится файл для определения одного или нескольких пакетов.

  • Возможно, вам понадобится установить конкретные функции реализации в свои собственные файлы.

  • движения больше количества данных конфигурации в свои собственные файлы

  • общих коммунальных должно быть в другом файл

  • макросы должен быть определен перед использованием. Другие файлы зависят от этого файла и должны быть перекомпилированы автоматически, если определение макроса будет изменено.

  • групповые функции вместе в файл, если он логически связан. В программе рисования: все функции рисования, все команды пользовательского интерфейса, сохранение данных в файлах, печать, ...

  • не заботятся о размере файла. Исходные файлы Lisp могут быть большими. Иногда 100k.

  • перемещение в файлах поддерживается средой разработки. M-.на символ находит свой источник.

  • убедитесь, что вы можете перезагрузить файл, без необходимости перезапускать весь Lisp.

  • Common Lisp предоставляет функции LOAD и COMPILE-FILE в качестве функций. Вы можете использовать эти функции в своих файлах.

+0

Спасибо - это полезный список – Galghamon

4

Если вы используете Common Lisp, ASDF - это популярный способ указать системы. Он обрабатывает зависимости порядка загрузки между исходными файлами (и намного больше).

+0

Я немного шокирован. Я знаю, что видел и просматривал эту страницу в вашей ссылке раньше, но понятия не имел, о чем она говорила в то время. Теперь это имеет смысл в контексте - спасибо! – Galghamon

+1

Это может помочь изучить, как небольшие библиотеки CL создают свои .asd-файлы. Вот простой маленький, который я написал: http://common-lisp.net/project/cl-applescript/ –

+0

Спасибо, видя пример небольшого пакета, подобного этому, был действительно полезен! – Galghamon

Смежные вопросы