8876f5514168a75549537dc62a3a5b654599f967
[ocean-D] / Ocean-methods
1 Methods in Ocean
2
3 methods are any function that is found from a given value.
4 It can be associated with the type or the value
5
6 An interface is a set of methods.  A concrete type can export an
7 interface and a formal type can require an interface.
8
9 A value can be combined with a concrete interface to override or augment
10 what it's type natively has.  Value methods are not so easily
11 overridden.
12
13 The first arg of a method must match the owner, and other args can be of
14 that type
15
16 Interface names are per module.
17 Method names are per interface.  When a variable supports multiple
18 interfaces and names don't conflict, interface name can be left out.
19
20 maybe value method use . and type methods use : ??
21     that would make "case functionname :" tricky to parse.
22
23
24 Thought:
25  Rather than anon structs, allow struct AND references to be marked as 'follow'
26  so anything behind the object appears in the parent.
27  Then foo.method can possible follow a chain of pointers from foo to find the method.
28
29  foo might be an inode and have a pointer to a superblock, which has a
30  pointer to a methods struture contains 'getattr'.  Then 'foo.getattr'
31  transparently becomes 'foo.super.super_methods.getattr.
32  
33  Question.  In what circumstances is 'foo' passed as first argument?
34  Probably it happens by default, but some syntactic escape allows something else
35  to be passed.  Maybe foo::something() ??