Предложения нуба по типизации
От: Аноним  
Дата: 08.01.11 16:12
Оценка: -1
(сразу говорю, статьи читал, немерли пока не могу поставитьall/exclude int,string)

почему при компиляции макроса автоматически не генерировать все его варианты в зависимости от типов и автоматически формировать после компиляции макроса для каждой выделенной типизации

1. Свертка правил типизации
2. Макрос.

macro synt "fun("$a1 ","$a2 ")"
{
if(Type($a1)==int.type)
< return $a1+$a2
>
else
if(Type($a1)==string.type)
< return $a1++$a2
>
else
<
return $a1
>

}

после компиляции генерирует
(это внутренее представление)
func( typeinclude(string) , typeinclude(string) ):typeinclude(string)
{
return.....
}


func( typeinclude(int) , typeinclude(int) ):typeinclude(int)
{
return.....
}


func( typeinclude(all/exclude int,string) , typeinclude(all/exclude int,string) ):typeinclude(all/exclude int,string)
{
return.....
}


Примущества — частичное ограничение типов изначально, соответственно ускорение компиляции.
Re: Предложения нуба по типизации
От: BogdanMart Украина  
Дата: 08.01.11 16:19
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>(сразу говорю, статьи читал, немерли пока не могу поставитьall/exclude int,string)


А>почему при компиляции макроса автоматически не генерировать все его варианты в зависимости от типов и автоматически формировать после компиляции макроса для каждой выделенной типизации


На этапе развертки макроса типизация еще не произошла! Типы становятся известными чуть позже, а макрос оперирует с не типизированым деревом.
Если макрос требуется информация о типах, он просит коспилятор провести типизацию конкретного выражения.
Re[2]: Предложения нуба по типизации
От: Аноним  
Дата: 08.01.11 16:23
Оценка:
Здравствуйте, BogdanMart, Вы писали:

BM>Здравствуйте, Аноним, Вы писали:


А>>(сразу говорю, статьи читал, немерли пока не могу поставитьall/exclude int,string)


А>>почему при компиляции макроса автоматически не генерировать все его варианты в зависимости от типов и автоматически формировать после компиляции макроса для каждой выделенной типизации


BM>На этапе развертки макроса типизация еще не произошла! Типы становятся известными чуть позже, а макрос оперирует с не типизированым деревом.

BM>Если макрос требуется информация о типах, он просит коспилятор провести типизацию конкретного выражения.

это я понял, я предлгаю перевернуть...

то есть в момент компиляции макрова автоматически генерируются все его варианты с ограничениями, далее в момент компиляции уже кода типизатор выбирает из присуствующих вариантов макроса подходящий.
То есть вместо отложенной типизации, типизация до выполнения.
Re[3]: Предложения нуба по типизации
От: hardcase Пират http://nemerle.org
Дата: 08.01.11 16:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>то есть в момент компиляции макрова автоматически генерируются все его варианты с ограничениями, далее в момент компиляции уже кода типизатор выбирает из присуствующих вариантов макроса подходящий.

А>То есть вместо отложенной типизации, типизация до выполнения.

И в чем профит? Еще нужно учесть тот факт что не всем макрам нужен типизированный код. Им как правило нужен просто код, который они трансформируют.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Предложения нуба по типизации
От: BogdanMart Украина  
Дата: 08.01.11 16:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>то есть в момент компиляции макрова автоматически генерируются все его варианты с ограничениями, далее в момент компиляции уже кода типизатор выбирает из присуствующих вариантов макроса подходящий.

А>То есть вместо отложенной типизации, типизация до выполнения.

Ну вообще + макроса в том, что он -- это код выполняемый в компиляторе и он может манипулировать данными на этапе компиляции (у меня есть макрос который читает с базы данных и на основе ее генерирует классы)

А то что ты предлагаешь, это генерировать наперед AST. Хотя может и интересная идея но это усложнит систему. Поддержка двух парадигм это сложно.

PS. А еще можно грабить корованы (С) Номад
Re[4]: Предложения нуба по типизации
От: BogdanMart Украина  
Дата: 08.01.11 16:29
Оценка:
Здравствуйте, hardcase, Вы писали:

H>И в чем профит? Еще нужно учесть тот факт что не всем макрам нужен типизированный код. Им как правило нужен просто код, который они трансформируют.


Анон предлагает сериализировать АSТ и потом его разворачивать в зависимости от типов/или без учета типов
Re[5]: Предложения нуба по типизации
От: hardcase Пират http://nemerle.org
Дата: 08.01.11 16:31
Оценка:
Здравствуйте, BogdanMart, Вы писали:

BM>Анон предлагает сериализировать АSТ и потом его разворачивать в зависимости от типов/или без учета типов


То что он предлагает по сути частный случай суперкомпиляции применительно к макросам.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Предложения нуба по типизации
От: Аноним  
Дата: 08.01.11 17:20
Оценка:
Стадии

1. Развертка в AST макроса
2. Генерация возможных типизаций полученного AST
3. Сопоставление полученных возможных типизаций AST с выбором правильных макросов
4. Проведение типов по дереву AST
Re[2]: Предложения нуба по типизации
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.01.11 18:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Стадии


А>1. Развертка в AST макроса

А>2. Генерация возможных типизаций полученного AST

Прежде чем что-то предлагать сначала нужно разобраться в вопросе.
У тебя явно этот этап пропущен.

Попробую объяснить на пальцах.

Макрос — это функция принимающая AST в качестве параметров и формирующая из них и собственных заготовок новый AST.
Так вот весь получаемый в качестве параметров AST становится доступен только на этапе выполнения макроса (который наступает когда компилируется код использующий макрос). Стало быть генерировать "возможных типизаций полученного AST" невозможно, так как большая часть исходных данных не доступны во время компиляции макроса.

А>3. Сопоставление полученных возможных типизаций AST с выбором правильных макросов


Это, для тех кто понимает что такое макрос, звучит как набор не связанных слов.

А>4. Проведение типов по дереву AST


Тебе уже сказали, что в AST нет типов. Макросы раскрываются до типизации.
Есть возможность типизировать выражения вручную, но это уже другой вопрос.

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