maxrt101 / ff

Scripting language
MIT License
4 stars 0 forks source link

Traits (and trait bounds) #25

Open maxrt101 opened 2 years ago

maxrt101 commented 2 years ago

Example:

trait Sized {
  fn size(self): int;
}

class File implements Sized {
  fn size(self): int -> { ... }
}

Without generics:

fn getSize(object: ref Sized) -> { ... }

With generics:

fn getSize[T: Sized](object: ref T) -> { ... }

Allow traits to be combined with +, e.g. for traits Sized and Addable - Sized + Addable

Save implemented traits in Class. Check if they are indeed implemented after class definition. Maybe expose implemented traits as __traits__ field in Class. Save required traits for generic type. Think of a better mechanism than implements keyword.