Я пытаюсь найти лучшие практики для разработки реальных приложений. У меня возникают проблемы с пониманием того, как правильно настроить сторонние библиотеки для развертывания в виде отдельного пакета. Похоже, что ASDF-INSTALL и ASDF предназначены для установки библиотек как дома, так и на сайте, изменяя состояние платформы разработки. Это нормально, если я разрабатывал приложение на стороне сервера и хотел администрировать эти зависимости для всей установки CL на коробке.
Но что, если я захочу создать отдельное приложение, развернутое с помощью сценариев установки и работающее отдельно в своем собственном экземпляре CL? Я хотел бы избежать изменения экземпляра CL или конфигурации целевой системы для любых других приложений (т.е. перезаписывать другие копии библиотек, от которых зависят другие приложения). В Java все, что мне нужно сделать, это создать каталог включения, содержащий эти библиотеки, и установить мой CLASSPATH. Как получить тот же уровень изоляции в CL, если я не устанавливаю собственную среду выполнения CL, а вместо этого использую то, что находится в системе?
Мне приходит в голову, что это общая проблема со всеми динамически компилируемыми / интерпретируемыми языками, так как время выполнения будет длиться дольше, чем любое конкретное приложение, которое запускает среда выполнения (например, Ruby или Python), и приложения будут совместно использовать то же состояние загрузки библиотеки. У меня нет опыта работы с такими языками, поэтому, вероятно, лучшая практика - смотреть мне в глаза.
IDK, если это будет зависеть от реализации, но я использую Clozure CL.
EDIT:
Ramarren:
Я проверю Грязные шарики. Спасибо.
Установка библиотек противоположна тому, что я хочу, так как установка подразумевает изменение состояния хост-системы. Я думаю, что ключ должен быть в вашем последнем абзаце. Как создать сценарий запуска, чтобы установить central-registry в изолированный каталог? Можно ли использовать ASDF-INSTALL для загрузки содержимого в указанный каталог? И как вы можете загрузить все это, если базовый образ вашей реализации CL не включает ASDF (по умолчанию в Clozure есть ASDF, но как бы CLISP это делал)?
Я тоже думаю о команде разработчиков. После того, как я создаю новую заглушку проекта CL и выполняю эту первоначальную фиксацию в CVS или SVN, как другие разработчики проверяют ее в своей локальной среде и работают с ней? Даже если предположить, что у всех есть ASDF в их профиле / запуске сайта, другие разработчики могут иметь другой набор библиотек в своем central-registry . Нам не нужно синхронизироваться только для совместной работы над проектом. Должен быть чистый способ запуска конкретного экземпляра среды выполнения CL из Emacs / SLIME и загрузки именно того, что указано в проекте, ни больше, ни меньше.
Если есть какие-либо лучшие практические ресурсы онлайн, на CL или любом другом языке, я буду рад предоставить собственное решение и открыть его.
Луис:
SAVE-APPLICATION подходит для развертывания, но не для заглушки проекта с несколькими разработчиками, которую я обрисовал.
РЕДАКТИРОВАТЬ 2:
vatine:
Зависимость от версии - именно поэтому это проблема. Если бы я разрабатывал веб-приложение на Perl или Ruby, я мог бы зависеть от наличия веб-администратора для управления этими зависимостями. При разработке приложений для розничной торговли или для предприятий малого и среднего бизнеса, в которых Lisp является чужеродной технологией (и я не могу убедить их «развить» свою ИТ-организацию для администрирования), такой подход неприемлем.
Вчера вечером я смог получить то, что хочу, создав файл .lisp уровня проекта, который загружает собственный экземпляр ASDF для конкретного проекта, установил локальный проект central-registry и загрузка зависимых библиотек вручную (без ASDF-INSTALL, который был болезненным каскадом зависимостей только для CLSQL и Weblocks). Это все еще не идеально с точки зрения инструментов разработки, так как мне пришлось удалить все настройки из моего дома и сайта как для SLIME, так и для самого Clozure. Кроме того, общие зависимости также не разрешаются (CLSQL и Weblocks используют MD5).
В Java есть изоляция загрузчика классов, которая решает проблему зависимости от версии. Тогда есть отдельный вопрос о том, как получить желаемых библиотек в проект (а-ля Maven). Первый является основной проблемой языка; последнее связано с инструментами. Я собираюсь взломать SLIME-расширение, которое делает то, что ASDF-INSTALL делает с каталогом включения проекта (в стиле Maven), и модифицирует исходный код lib для перехвата вызовов defpackage, чтобы каким-то образом добавить строку gensym для обеспечения изоляции. Я знаю, что в этом подходе много дыр, и я недостаточно знаю спецификацию пакета, чтобы понять, как глубоко я могу это похоронить.
Я ничего не знаю о Python, но знаю, что существуют приложения розничного уровня; Я использую MusicBrainz Picard все время. Я посмотрю, как это делает Python.