aboutsummaryrefslogtreecommitdiffhomepage
path: root/notes/transitive_const.txt
blob: 6aa8e46571ea417e088bfa0f37ab8b18ac397568 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

Transitive const
================

Problem:

    type TreeMap = struct {
        # Should always be const
        ref const TreeNode defaults
        # Should be transitive-const
        ref TreeNode root
    }

Solution 1:
- Allow explicitly marking fields as const, to avoid "var" qualifiers from
  being transitive.

    type TreeMap = struct {
        ref const TreeNodes defaults
        ref TreeNode root
    }



XXX is this even needed?
Can't we just use the "var" keyword, like this:

    type TreeMap = struct {
        ref TreeNodes defaults
        var ref var TreeNode root
        var int num_nodes
    }

(The same could also be applied for threaded, shared, etc...)

... and how about re-considering "ref>" syntax:

    type TreeMap = struct {
        ref> TreeNodes defaults
        var ref> var TreeNode root
        var int num_nodes
    }

... or:

    type TreeMap = struct {
        >TreeNodes defaults
        var > var TreeNode root
        var int num_nodes
    }