LINUX.ORG.RU

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

Исправление 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.