Traits - возможность реализации
От: Denom Украина  
Дата: 10.12.08 13:56
Оценка:
Для реализации Traits требуется поддержка статических методов в интерфейсах.
Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах?

Насколько сложно их добавить?
И нужно-ли?
Мажет быть есть альтернативные способы добиться аналогичного результата?
Напимер может быть достаточно static class'а?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re: Traits - возможность реализации
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.12.08 14:35
Оценка:
Здравствуйте, Denom, Вы писали:

D>Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах?

D>Насколько сложно их добавить?

По крайней мере, CLR их поддерживает.
А предполагается ли, что они должны наследоваться? Если да, то это придется эмулировать вручную и разрешать конфликты из-за множественного наследования.
Re: Traits - возможность реализации
От: mkizub Литва http://symade.tigris.org
Дата: 10.12.08 14:35
Оценка:
Здравствуйте, Denom, Вы писали:

D>Для реализации Traits требуется поддержка статических методов в интерфейсах.


Можно генерировать статический inner класс, и мувить эти методы туда.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[2]: Traits - возможность реализации
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.12.08 14:38
Оценка:
Здравствуйте, mkizub, Вы писали:

M>Можно генерировать статический inner класс, и мувить эти методы туда.


Зачем?
Re[2]: Traits - возможность реализации
От: Denom Украина  
Дата: 10.12.08 14:56
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Denom, Вы писали:


D>>Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах?

D>>Насколько сложно их добавить?

N>По крайней мере, CLR их поддерживает.

N>А предполагается ли, что они должны наследоваться? Если да, то это придется эмулировать вручную и разрешать конфликты из-за множественного наследования.
сейчай мне кажется что классы созданные с использованием traits являются финальными тобишь sealed.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re: Traits - возможность реализации
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.12.08 14:56
Оценка:
Здравствуйте, Denom, Вы писали:

D>Для реализации Traits требуется поддержка статических методов в интерфейсах.

D>Насколько я понимаю в текущей версии языка не реализованы статические методы в интерфейсах?

Нет. И не уверен, что это нужно делать. Хотя конечно все что позволяет сделать CLR (и System.Reflection.Emit), сделать можно.

D>Насколько сложно их добавить?


Как и любой расширение языка — это требует изменения парсера, типизатора и генератора мсила. В принципе ничего особо заоблочног в это нет, но как и любая работа это требует времени.

D>И нужно-ли?

D>Мажет быть есть альтернативные способы добиться аналогичного результата?
D>Напимер может быть достаточно static class'а?

Мне кажется, что достаточно. Более того может и без них можно обойтись. Ведь код можно просто добавлять к классу реализующему трэйт.

Собственно в компиляторе можно наблюдать макрос использующий технику похожую на трэйтсы — это макрос ManagerAccess (см. macros/compiler.n и использование макроса в других файлах). Он добавляет определенный код к классам.

В принципе трэйтсы можно реализовать как полноценную фичу языка, а можно попробовать залудить ее в виде макроса.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Traits - возможность реализации
От: mkizub Литва http://symade.tigris.org
Дата: 10.12.08 15:08
Оценка:
Здравствуйте, nikov, Вы писали:

M>>Можно генерировать статический inner класс, и мувить эти методы туда.


N>Зачем?


Чтоб обойти проблему со статическими методами в интерфейсах.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[4]: Traits - возможность реализации
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.12.08 15:11
Оценка:
Здравствуйте, mkizub, Вы писали:

M>Чтоб обойти проблему со статическими методами в интерфейсах.


Какую именно проблему?
Re[2]: Traits - возможность реализации
От: Denom Украина  
Дата: 10.12.08 15:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В принципе трэйтсы можно реализовать как полноценную фичу языка, а можно попробовать залудить ее в виде макроса.


Мне кажется на макросах будет достаточно. Они ведь для того и придуманы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[5]: Traits - возможность реализации
От: mkizub Литва http://symade.tigris.org
Дата: 10.12.08 15:16
Оценка:
Здравствуйте, nikov, Вы писали:

M>>Чтоб обойти проблему со статическими методами в интерфейсах.


N>Какую именно проблему?


Описанную в первом посте.
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
Re[3]: Traits - возможность реализации
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.08 03:59
Оценка:
Здравствуйте, Denom, Вы писали:

D>Мне кажется на макросах будет достаточно. Они ведь для того и придуманы.


Макрос не позволит задать синтаксис верхнего уровня. Скажем ты не сможешь описать трэйтс так:
traits MyTraits
{
  ...
}

Прийдется делать как-то так:
[Traits]
class MyTraits
{
  ...
}

или так
class MyTraits
  traits
{
  ...
}


В прочем подкрутить компилятор так чтобы он понимал первый вариант синтаксиса и переписывал его во второй задача на пять минут.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Traits - возможность реализации
От: Denom Украина  
Дата: 11.12.08 12:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В прочем подкрутить компилятор так чтобы он понимал первый вариант синтаксиса и переписывал его во второй задача на пять минут.


А разве в примере с аспектами не через синтаксис для макросов сделано?
Я правда так и не нашел пример использования.

  [Nemerle.MacroUsage(Nemerle.MacroPhase.BeforeInheritance,
                       Nemerle.MacroTargets.Class)]
  macro aspect( type_builder: TypeBuilder) syntax("asp") {

или тут все равно надо писать:

asp class MyAspect
{
}

?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[5]: Traits - возможность реализации
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.12.08 14:03
Оценка:
Здравствуйте, Denom, Вы писали:

D>А разве в примере с аспектами не через синтаксис для макросов сделано?

D>...или тут все равно надо писать:

D>
D>asp class MyAspect
D>{
D>} 
D>

D>?

Как я понимаю, еще хуже. Макросы для типов распознаются только за определением самого типа. Так что писать придется так:
class MyAspect asp { ... }

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