История изменений
Исправление naryl, (текущая версия) :
Во-вторых, в лиспе мне видится совершенно инопланетным, что содержимое пакета описывается под выражением (in-package), а не внутри
Есть такое понятие как «текущий пакет», и есть оно неспроста. in-package мог бы ещё получать &body и читать в указанном пакете только его (правда, это реализуется только костылями), но я сомневаюсь в необходимости. Единственный эффект - весь файл получит ещё один уровень отступа. Сомневаюсь, что это сильно улучшит понятность кода.
Естественно на такую запись органично ложился бы и синтаксис вложенных пакетов.
:development - это кейворд. Его значение не зависит от текущего пакета.
(using (lor:development:bar lor:foo)
(bar (foo)))
lor:development:bar
Это вообще что? sbcl говорит слишком много двоеточий.
Вы смогли наступить на те самые грабли, которые я описал за шесть минут до вашего коммента. :)
Пакеты. Как должно быть? (комментарий)
Для вложенных пакетов можно было бы использовать обычные символы (не кейворды)
(in-package :lor
(in-package development
(defun bar (x) x)))
Но тогда к этой функции глобально не обратиться никак, только из пакета где она объявлена, потому что у самого пакета глобального имени нет. Может это и хорошо. :) Можно было бы объявлять один глобальный интерфейсный пакет, а внутри него пакеты для модулей. А интерфейсные символы из этих модулей переэкспортировать из :lor.
Исходная версия naryl, :
Во-вторых, в лиспе мне видится совершенно инопланетным, что содержимое пакета описывается под выражением (in-package), а не внутри
Есть такое понятие как «текущий пакет», и есть оно неспроста. in-package мог бы ещё получать &body и читать в указанном пакете только его (правда, это реализуется только костылями), но я сомневаюсь в необходимости. Единственный эффект - весь файл получит ещё один уровень отступа. Сомневаюсь, что это сильно улучшит понятность кода.
Естественно на такую запись органично ложился бы и синтаксис вложенных пакетов.
:development - это кейворд. Его значение не зависит от текущего пакета.
(using (lor:development:bar lor:foo)
(bar (foo)))
lor:development:bar
Это вообще что? sbcl говорит слишком много двоеточий.
Вы смогли наступить на те самые грабли, которые я описал за шесть минут до вашего коммента. :)
Пакеты. Как должно быть? (комментарий)
Для вложенных пакетов можно было бы использовать обычные символы (не кейворды)
(in-package :lor
(in-package development
(defun bar (x) x)))
Но тогда к этой функции глобально не обратиться никак, только из пакета где она объявлена, потому что у самого пакета глобального имени нет. Может это и хорошо. :) Можно было бы объявлять один глобальный интерфейсный пакет, а внутри него пакеты для модулей. А интерфейсные символы из этих модулей переэкспортировать из :lor.