> "(ну а что касается отдельной конструкции `del M[key]` для удаления словарной пары, то это за гранью добра и зла)"
С уважением,
Здравствуйте, Александр!On Mon, Nov 11, 2024 at 10:15 AM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote:Ряд промышленных языков (Perl, Python, Go) поддерживают ассоциативные массивы на уровне синтаксиса, в ряде языков (_javascript_, PHP, Lua) встроенные массивы уже ассоциативные (целочисленные ключи — частный случай применения), стандартные библиотеки многих ЯВУ предоставляют типы ассоциативных массивов. Так что задача не такая уж и частная.
Но то, что усложнение семантики существенное — согласен.
Я не знаю Perl, поэтому скажу про Python и Go: это настолько развесистые языки по сравнению с рефалом, что поддержка ассоциативных массивов на уровне синтаксиса, будучи, на мой взгляд, дурацкой идеей, их не сильно портит. В Go надо было изначально делать обобщённые типы, и тогда отдельный синтаксис для хеш-таблиц им бы не понадобился. В Python надо было бы не городить "list comprehension", "dictionary comprehension" и "set comprehension", а ограничиться одной конструкцией "generator comprehension" (ну а что касается отдельной конструкции `del M[key]` для удаления словарной пары, то это за гранью добра и зла).On Mon, Nov 11, 2024 at 10:15 AM Александр Коновалов a.v.konovalov87_AT_mail.ru <[email protected]> wrote:Можно в скобочные термы добавлять пометку $D (или $I от слова «index», или $M от «map» и т.д.), говорящую о том, что это индексированный терм, при сопоставлении с образцом индекс надо учитывать, при построении результата — создавать. Ну и в руководстве описать формальные правила, которым содержимое терма должно удовлетворять. Нарушение этих правил — не ошибка, просто индекс работать не будет (т.е. роль у $D примерно такая, как у ключевых слов register и inline в C++ — компилятор их учитывать не обязан). Компилятор в подобных случаях может выдавать предупреждения.
А вот это классная идея (если я её правильно понял)! Т.е. для эффективного поиска алгоритм сопоставления с образцом использует индекс, прикреплённый к выражению, если этот индекс существует. Но порождение индекса делается не автоматически, а по желанию пользователя, который может пометить выражение, для которого нужно построить индекс, с помощью ключевого слова. Это минимально расширяет синтаксис, вообще не меняет семантику, и не ухудшает производительность тех программ, которым не нужен поиск в ассоциативных списках. Единственный недостаток такого консервативного подхода состоит в том, что мы не можем надеяться на внезапное ускорение старых программ, но это не такая уж и беда, учитывая их количество :-)
