Символы и пространства имен

Sergey ShishkinSergey Shishkin
2 min read

Ради справедливости, в контексте поста “Символы и контексты“ забыл сослаться на стаью из раздела вопросы и ответы (для функций) “Символы и пространства имен“, хотя уже раньше ссылался на неё в других двух контекстах, в связи с символами и пространствами имен, соответственно.

В статье, автор, буквально, пишет: “С переходными символами у нас уже есть определенный вид пространств имен, подразумеваемых лексическим (исходным файлом) контекстом. Поэтому я решил пойти дальше и реализовать «именованные» пространства имен символов... если мы рассматриваем переходные символы как находящиеся в их собственных анонимных пространствах имен … Базовые концепции очень просты. На самом деле нужны только две новые функции: «symbols» и «local», а также новое глобальное «pico», содержащее начальное (по умолчанию) пространство имен символов. Дополнительные вспомогательные функции включают «nsp» и «import». Если символы никогда не вызываются, все будет работать как прежде. Вы можете продолжать весело программировать PicoLisp, как и раньше.”

   : (symbols 'myNames 'pico)
   -> (pico)
   myNames:  # prompt has changed to current namespace

Доступ к символам в другом пространстве имен. Чтобы получить доступ к символу в другом пространстве имен, мы можем использовать символ тильды, разделяющий пространство имен от символа. Тильда была выбрана, потому что она, возможно, не конфликтует с остальной частью синтаксиса PicoLisp. … может быть несколько глобальных таблиц символов, список которых активен в данный момент. Таким образом, символ может быть либо не интернированным, либо интернированным в одной или нескольких таблицах символов.

Импорт символов. Импортировать символ из другого пространства имен можно с помощью import — простого интерфейса для intern.

   myNames: (symbols '(pico))  # back to the default namespace
   -> (myNames pico)

   (import myNames~Foo myNames~Bar)
   -> (Foo "Bar")

   : Foo
   -> 0

   : Bar
   -> NIL

   : (== 'Foo 'myNames~Foo)
   -> T

Для использования пространств имен в библиотеках и приложениях лучшей оказалась следующая стратегия: В библиотеке инициализируйте новое пространство имен как первое в порядке поиска около начала исходного файла, а затем позаботьтесь о локализации каждого символа, который должен быть локальным в этом пакете, до того, как он появится в первый раз.

https://picolisp.com/wiki/?symbolnamespaces

P.S. Для того, чтобы продемонстрировать связь концепций контекста и пространства имен, сформулировал промт для АИ-бота - “Сравнение концепции контекстов в Rye и концепции пространства имен в PicoLisp” и там же “Сравнение структуры слова в Rye и структуры символа в PicoLisp” … Если интересно, то вот ссылка на ответ … “концепции контекста в Rye и пространств имён в PicoLisp … различны, но обе представляют собой механизм управления именами и областью видимости. Давайте сравним их семантически и архитектурноhttps://chatgpt.com/c/684c1b25-ea1c-8012-88fc-5abdfa13f934

0
Subscribe to my newsletter

Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergey Shishkin
Sergey Shishkin

Всегда чему-то учусь!