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