LINUX.ORG.RU

История изменений

Исправление 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.