oakc 0.6.1

A portable programming language with a compact backend
Documentation
#[std]


struct Test {
    let item: num;
    
    fn new(n: num) -> Test {
        return n as Test;
    }

    // Defining either the `copy` or `drop` methods for a type will prevent
    // the user from copy-constructing unbound objects.
    fn drop(self: &Test) {}
}

fn test() -> Test {
    return Test::new(1);
}

fn main() {
    // When `test` returns the `Test` object, it is temporarily stored
    // on the stack. Since it implements the `copy` method, it could be
    // managing memory somewhere. So, when we use it as a temporary value
    // on the stack without binding it to a variable or function argument,
    // there's a big problem. **We can't call the `drop` method on the object
    // after it disappears off of the stack.** So, temporary values such
    // as `test()` must be bound before they're accessed.

    // Okay!
    let t = test();
    putnumln(t->item);

    // Error
    putnumln(test()->item);
}