История изменений
Исправление alysnix, (текущая версия) :
щас сказу про трейты. странно, что те, кто их хорошо знал, не могут обьяснить на пальцах что это.
в с++ трейты (их декларативную сторону) можно выразить на макрах.
#define LockableTrait(TYPE)\
bool can_lock();\
TYPE lock(); ///пусть оно возвращает некий тип. для наглядности
void unlock();
а потом писать так
class SomeClass {
LockableTrait(int)
...
}
то есть с одной стороны это просто список деклараций, которые обязан реализовать класс.
но у трейтов в раст, за счет утиной типизации, есть еще и совместимость по данному трейту. Но в с++ на макрах такого не будет, потому что у него утиной нет. В расте еще трейты втыкаются в другие места, я там не копал.
Я пока тут о трейтах для применения к классам.
Может как-то это выразить через концепты, но тогда фактичски встанет вопрос об утиной типизации в с++
карочи трейты, классы типов и все такое - это нужно обобщить до «список_требований», который обязан выполнить некий программный объект.
Вот еще хидер модуля в с++(и си) выполяняет функции некоего «списка требований». Он декларирует обькты, которые некто гарантирует, что реализует.
а на понятие «список требований» (Requirements) ложатся и хидеры си, и трейты раста, и концепты с++, и даже предусловия и постусловия(это будут динамические Requirements.
Исправление alysnix, :
щас сказу про трейты. странно, что те, кто их хорошо знал, не могут обьяснить на пальцах что это.
в с++ трейты (их декларативную сторону) можно выразить на макрах.
#define ReadableTrait(TYPE)\
bool can_read();\
TYPE read(...);
а потом писать так
class SomeClass {
Readable(int)
...
}
то есть с одной стороны это просто список деклараций, которые обязан реализовать класс.
но у трейтов в раст, за счет утиной типизации, есть еще и совместимость по данному трейту. Но в с++ на макрах такого не будет, потому что у него утиной нет. В расте еще трейты втыкаются в другие места, я там не копал.
Я пока тут о трейтах для применения к классам.
Может как-то это выразить через концепты, но тогда фактичски встанет вопрос об утиной типизации в с++
карочи трейты, классы типов и все такое - это нужно обобщить до «список_требований», который обязан выполнить некий программный объект.
Вот еще хидер модуля в с++(и си) выполяняет функции некоего «списка требований». Он декларирует обькты, которые некто гарантирует, что реализует.
а на понятие «список требований» (Requirements) ложатся и хидеры си, и трейты раста, и концепты с++, и даже предусловия и постусловия(это будут динамические Requirements.
Исправление alysnix, :
щас сказу про трейты. странно, что те, кто их хорошо знал, не могут обьяснить на пальцах что это.
в с++ трейты (их декларативную сторону) можно выразить на макрах.
#define ReadableTrait(TYPE)\
bool can_read();\
TYPE read(...);
а потом писать так
class SomeClass {
Readable(int)
...
}
то есть с одной стороны это просто список деклараций, которые обязан реализовать класс.
но у трейтов в раст, за счет утиной типизации, есть еще и совместимость по данному трейту. Но в с++ на макрах такого не будет, потому что у него утиной нет.
Может как-то это выразить через концепты, но тогда фактичски встанет вопрос об утиной типизации в с++
карочи трейты, классы типов и все такое - это нужно обобщить до «список_требований», который обязан выполнить некий программный объект.
Вот еще хидер модуля в с++(и си) выполяняет функции некоего «списка требований». Он декларирует обькты, которые некто гарантирует, что реализует.
а на понятие «список требований» (Requirements) ложатся и хидеры си, и трейты раста, и концепты с++, и даже предусловия и постусловия(это будут динамические Requirements.
Исходная версия alysnix, :
щас сказу про трейты. странно, что те, кто их хорошо знал, не могут обьяснить на пальцах что это.
в с++ трейты (их декларативную сторону) можно выразить на макрах.
#define ReadableTrait(TYPE)\
bool can_read();\
TYPE read(...);
а потом писать так
class SomeClass {
Readable(int)
...
}
то есть с одной стороны это просто список деклараций, которые обязан реализовать класс.
но у трейтов а раст, за счет утиной типизации, есть еще и совместимость по данному трейту. Но в с++ на макрах такого не будет, потому что у него утиной нет.
Может как-то это выразить через концепты, но тогда фактичски встанет вопрос об утиной типизации в с++
карочи трейты, классы типов и все такое - это нужно обобщить до «список_требований», который обязан выполнить некий программный объект.
Вот еще хидер модуля в с++(и си) выполяняет функции некоего «списка требований». Он декларирует обькты, которые некто гарантирует, что реализует.
а на понятие «список требований» (Requirements) ложатся и хидеры си, и трейты раста, и концепты с++, и даже предусловия и постусловия(это будут динамические Requirements.