aboutsummaryrefslogtreecommitdiffhomepage
path: root/notes/sys_funcs_vs_effects.txt
blob: 6561a9292b36b46e0d6f4828aa1869d12d43984b (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

System functions vs effects
===========================

SLUL will have system functions indirected via arenas
(so that they can be overridden/proxied, and this can be
used to implement capabilities / sandboxing).

Indirected function are somewhat related to effect types.
This could be added as an optional feature:

With the "arena" keyword for arenas:

    func .new(arena) -> arena Thing effect Alloc, Fail
    func arena Thing.do_any_stuff()
    func arena Thing.do_io() effect IO, Fail

With sigills for arenas:

    func .new@() -> Thing@ effect Alloc, Fail
    func Thing.do_any_stuff@()
    func Thing.do_io@() effect IO, Fail

With effect specifications(!) for arenas:

    func .new() -> Thing effect Alloc, Fail
    func Thing.do_any_stuff() effect Any
    func Thing.do_io@() effect IO, Fail

    - How to track whether the return value is an arena or not?

Problem:

    How to track this for variables, or when there multiple arena parameters?
    (Does the latter make any sense?)