Здравствуйте, Александр!

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++ — компилятор их
> учитывать не обязан). Компилятор в подобных случаях может выдавать
> предупреждения.
>
А вот это классная идея (если я её правильно понял)! Т.е. для эффективного
поиска алгоритм сопоставления с образцом использует индекс, прикреплённый к
выражению, если этот индекс существует. Но порождение индекса делается не
автоматически, а по желанию пользователя, который может пометить выражение,
для которого нужно построить индекс, с помощью ключевого слова. Это
минимально расширяет синтаксис, вообще не меняет семантику, и не ухудшает
производительность тех программ, которым не нужен поиск в ассоциативных
списках. Единственный недостаток такого консервативного подхода состоит в
том, что мы не можем надеяться на внезапное ускорение старых программ, но
это не такая уж и беда, учитывая их количество :-)
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
    • ... Стеллецкий Василий sw710_AT_yandex . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
    • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
      • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
            • ... Стеллецкий Василий sw710_AT_yandex . ru
              • ... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
                • ... Стеллецкий Василий sw710_AT_yandex . ru
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить