LINUX.ORG.RU

История изменений

Исправление 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 это такой полиморфизм, а не фича исключительно функций

Что до последнего примера - нет, не сможет и я не вижу веских причин пытаться компилятор этому научить.

то, что ты не видишь «веских причин», уже становится традицией