[WIP] feat: traits, initial implementation #46
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Traits
Traits are an approach to polymorphism. Functions are defined in the trait and then a type can implement the trait.
In traits, functions may or may not have a function body. If the body is absent, then it will be required in the type's implementation of the trait. If the body is present in the trait, the whole implementation of the function can be skipped.
Inside the trait's scope there is a declared type called
Self
. It acts as a type parameter for the type used in the implementation of the trait.Implementation strategy
First implementation
The immediate of objective of this first implementation is to correctly implement some functions like
fun is(self: ref): boolean
and also to annotate types with "tag traits" for reference types. That will be used by the compiler to detect and inject reference counting in references.Future
Reference
trait to perform automatic reference counting.ref is SomeTrait