История изменений
Исправление www_linux_org_ru, (текущая версия) :
В текущем состоянии transfrom должен быть функцией-шаблоном - для шаблонов работает attribute inference (т.к. гарантировано наличие тела функции)
пример рабочего кода, пожалуста
В общем же случае проблема автоматического вывода атрибутов очень осложнена тем, что в компилируемом С-совместимом языке наличие тел функций - скорее роскошь, чем норма. Поэтому такие вещи как pure должны всегда быть строго выражены в типе и влиять на mangling.
При этом твой конкретный пример очень напоминает ситуацию с const,
совершенно верно
В качестве заплатки был введён атрибут inout (http://dlang.org/function.html#inout-functions).
он выглядит довольно прилично, только не ясно, с какого хрена он применятся только к функциям — например, если я хочу накатать класс с конструктором this(inout(int)[] foo), который иницилизирует поле inout(int)[] bar этим foo, ну и несколько методов, которые тоже... в общем, inout это такой полиморфизм, а не фича исключительно функций
Что до последнего примера - нет, не сможет и я не вижу веских причин пытаться компилятор этому научить.
то, что ты не видишь «веских причин», уже становится традицией
Исправление www_linux_org_ru, :
В текущем состоянии transfrom должен быть функцией-шаблоном - для шаблонов работает attribute inference (т.к. гарантировано наличие тела функции)
пример рабочего кода, пожалуста
В общем же случае проблема автоматического вывода атрибутов очень осложнена тем, что в компилируемом С-совместимом языке наличие тел функций - скорее роскошь, чем норма. Поэтому такие вещи как pure должны всегда быть строго выражены в типе и влиять на mangling.
При этом твой конкретный пример очень напоминает ситуацию с const,
совершенно верно
В качестве заплатки был введён атрибут inout (http://dlang.org/function.html#inout-functions).
он выглядит довольно прилично, только не ясно, с какого хрена он применятся только к функциям — например, если я хочу накатать класс с конструктором MyClass(inout(int)[] foo), который инициализирует поле inout(int)[] bar этим foo, ну и несколько методов, которые тоже... в общем, inout это такой полиморфизм, а не фича исключительно функций
Что до последнего примера - нет, не сможет и я не вижу веских причин пытаться компилятор этому научить.
то, что ты не видишь «веских причин», уже становится традицией
Исходная версия www_linux_org_ru, :
В текущем состоянии transfrom должен быть функцией-шаблоном - для шаблонов работает attribute inference (т.к. гарантировано наличие тела функции)
пример рабочего кода, пожалуста
В общем же случае проблема автоматического вывода атрибутов очень осложнена тем, что в компилируемом С-совместимом языке наличие тел функций - скорее роскошь, чем норма. Поэтому такие вещи как pure должны всегда быть строго выражены в типе и влиять на mangling.
При этом твой конкретный пример очень напоминает ситуацию с const,
совершенно верно
В качестве заплатки был введён атрибут inout (http://dlang.org/function.html#inout-functions).
он выглядит довольно прилично, только не ясно, с какого хрена он применятся только к функциям — например, если я хочу накатать класс с конструктором MyClass(inout(int)[] foo), который иницилизирует поле inout(int)[] bar этим foo, ну и несколько методов, которые тоже... в общем, inout это такой полиморфизм, а не фича исключительно функций
Что до последнего примера - нет, не сможет и я не вижу веских причин пытаться компилятор этому научить.
то, что ты не видишь «веских причин», уже становится традицией