Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yes, but `Copy` is a trait, not a type. Traits can be used as types but they're ... different.


I'm longing for formal definitions of type and trait, to see the exact difference.


Types are types. Let's take a type system with generics but no single inheritance.

Traits are properties that types can have, like Java interfaces though more powerful.

Many traits can be used as types to form a vtable dispatch. For example, Box<Send> uses the trait `Send` here as a type. Objects of type `Send` are "unsized" and must be held behind a pointer (which becomes a fat pointer).


> Traits are properties that types can have, like Java interfaces though more powerful.

The GP asked about formal definitions. So I think they want something more precise than that.


I know, I was just clarifying my original statement :)


I've been wondering about the same thing recently too. Meanwhile, there is an article that explains how Haskell typeclasses[1] are implemented, or how they conceptually work:

https://www.fpcomplete.com/user/jfischoff/instances-and-dict...

[1] I guess close enough analog to Rust traits.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: