Skip to content

add docs for adt#24

Open
prettysorrow wants to merge 4 commits intoKakadu:masterfrom
prettysorrow:adt_docs
Open

add docs for adt#24
prettysorrow wants to merge 4 commits intoKakadu:masterfrom
prettysorrow:adt_docs

Conversation

@prettysorrow
Copy link

No description provided.

Signed-off-by: psiblvdegod <artyombaly@list.ru>
Signed-off-by: psiblvdegod <artyombaly@list.ru>
Signed-off-by: psiblvdegod <artyombaly@list.ru>
doc/adt.md Outdated
Модуль `Frontend.Parsing` далее называется парсером, модуль `Frontend.Inferencer` — тайпчекером.<br/>
Далее приводится объяснение принятых решений и выполняемых преобразований.<br/>

### Паттерн-матчинг
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сопоставление с образцом

Тег конструктора — уникальный в рамках типа идентификатор, который присваивается конструктору на этапе тайпчекинга.<br/>
Тег вычисляется в тайпчекере обычным счётчиком, поддерживаемым при обработке объявления типа.<br/>
Для конструктора `TConstruct(ident, expr_option, ty)` тегом будет `ident.id`<br/>
За взятие тега конструктора отвечает примитив `get_tag`, за взятие аргументов конструктора — примитив `get_arg`.<br/>
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вроде бы "тэг"

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На Вики "тег" обычно пишут

### Что ещё нужно добавить
- Проверка полноты (exhaustiveness) и выявление избыточности (redundancy) паттерн-матчинга
- CPS convertion для `match-with` и конструкторов
- Построение деревьев выбора (decision trees) или автоматов с возвратами (backtraking automata) по `match-with`
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аргументы со скобочками и без

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не понял

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A of int * string vs A of (int * string)

Signed-off-by: psiblvdegod <artyombaly@list.ru>
- значения аргументов не инициализирует — они записываются уже после вызова `rukaml_alloc_constructor`
- `rukaml_constructor_tag` — принимает указатель на конструктор и возвращает тег конструктора
- `rukaml_constructor_arity` — принимает указатель на конструктор и возвращает арность конструктора
- `rukaml_constructor_arg` — принимает указатель на конструктор и индекс аргумента и возвращает значение аргумента
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут начались кринжовые названия.

  • Конструкторы не аллоцируются. лучше rukaml_alloc_block
  • Тег есть и у массивов тоже, и вообще у любого блока. Лучше rukaml_gettag
  • rukaml_constructor_arity, лучше использовать size. Реализация скорее всего идентична взятию размера массива.
  • rukaml_constructor_arg лучше использовать field. Реализация идентична доступу к элементу массива.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments