(сразу говорю, статьи читал, немерли пока не могу поставитьall/exclude int,string)
почему при компиляции макроса автоматически не генерировать все его варианты в зависимости от типов и автоматически формировать после компиляции макроса для каждой выделенной типизации
Здравствуйте, Аноним, Вы писали:
А>(сразу говорю, статьи читал, немерли пока не могу поставитьall/exclude int,string)
А>почему при компиляции макроса автоматически не генерировать все его варианты в зависимости от типов и автоматически формировать после компиляции макроса для каждой выделенной типизации
На этапе развертки макроса типизация еще не произошла! Типы становятся известными чуть позже, а макрос оперирует с не типизированым деревом.
Если макрос требуется информация о типах, он просит коспилятор провести типизацию конкретного выражения.
Re[2]: Предложения нуба по типизации
От:
Аноним
Дата:
08.01.11 16:23
Оценка:
Здравствуйте, BogdanMart, Вы писали:
BM>Здравствуйте, Аноним, Вы писали:
А>>(сразу говорю, статьи читал, немерли пока не могу поставитьall/exclude int,string)
А>>почему при компиляции макроса автоматически не генерировать все его варианты в зависимости от типов и автоматически формировать после компиляции макроса для каждой выделенной типизации
BM>На этапе развертки макроса типизация еще не произошла! Типы становятся известными чуть позже, а макрос оперирует с не типизированым деревом. BM>Если макрос требуется информация о типах, он просит коспилятор провести типизацию конкретного выражения.
это я понял, я предлгаю перевернуть...
то есть в момент компиляции макрова автоматически генерируются все его варианты с ограничениями, далее в момент компиляции уже кода типизатор выбирает из присуствующих вариантов макроса подходящий.
То есть вместо отложенной типизации, типизация до выполнения.
Здравствуйте, Аноним, Вы писали:
А>то есть в момент компиляции макрова автоматически генерируются все его варианты с ограничениями, далее в момент компиляции уже кода типизатор выбирает из присуствующих вариантов макроса подходящий. А>То есть вместо отложенной типизации, типизация до выполнения.
И в чем профит? Еще нужно учесть тот факт что не всем макрам нужен типизированный код. Им как правило нужен просто код, который они трансформируют.
Здравствуйте, Аноним, Вы писали:
А>то есть в момент компиляции макрова автоматически генерируются все его варианты с ограничениями, далее в момент компиляции уже кода типизатор выбирает из присуствующих вариантов макроса подходящий. А>То есть вместо отложенной типизации, типизация до выполнения.
Ну вообще + макроса в том, что он -- это код выполняемый в компиляторе и он может манипулировать данными на этапе компиляции (у меня есть макрос который читает с базы данных и на основе ее генерирует классы)
А то что ты предлагаешь, это генерировать наперед AST. Хотя может и интересная идея но это усложнит систему. Поддержка двух парадигм это сложно.
Здравствуйте, hardcase, Вы писали:
H>И в чем профит? Еще нужно учесть тот факт что не всем макрам нужен типизированный код. Им как правило нужен просто код, который они трансформируют.
Анон предлагает сериализировать АSТ и потом его разворачивать в зависимости от типов/или без учета типов
Здравствуйте, BogdanMart, Вы писали:
BM>Анон предлагает сериализировать АSТ и потом его разворачивать в зависимости от типов/или без учета типов
То что он предлагает по сути частный случай суперкомпиляции применительно к макросам.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Предложения нуба по типизации
От:
Аноним
Дата:
08.01.11 17:20
Оценка:
Стадии
1. Развертка в AST макроса
2. Генерация возможных типизаций полученного AST
3. Сопоставление полученных возможных типизаций AST с выбором правильных макросов
4. Проведение типов по дереву AST
Здравствуйте, Аноним, Вы писали:
А>Стадии
А>1. Развертка в AST макроса А>2. Генерация возможных типизаций полученного AST
Прежде чем что-то предлагать сначала нужно разобраться в вопросе.
У тебя явно этот этап пропущен.
Попробую объяснить на пальцах.
Макрос — это функция принимающая AST в качестве параметров и формирующая из них и собственных заготовок новый AST.
Так вот весь получаемый в качестве параметров AST становится доступен только на этапе выполнения макроса (который наступает когда компилируется код использующий макрос). Стало быть генерировать "возможных типизаций полученного AST" невозможно, так как большая часть исходных данных не доступны во время компиляции макроса.
А>3. Сопоставление полученных возможных типизаций AST с выбором правильных макросов
Это, для тех кто понимает что такое макрос, звучит как набор не связанных слов.
А>4. Проведение типов по дереву AST
Тебе уже сказали, что в AST нет типов. Макросы раскрываются до типизации.
Есть возможность типизировать выражения вручную, но это уже другой вопрос.
В общем, ты не верно представляешь механизмы работы макросов. По сему лучше начать с их изучения и практического использования. Думаю, что после этого вопрос отпадут сами собой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.