# This is a living document - delete things when done. Avoid discussion.
-## Needs implementations
+## Needs implementation
### Current version (Cataract Creek)
-- allow passing objects to functions by reference is requested
-- '.' modifier to auto-add derefernce if needed
-- Assign/Decl to accept lvalue for assigning to reference
-- add [] as size-of-array
-- replace [foo::] declaration of array with [] - fix all main() calls
-- ensure all param passing and value return is handled correctly
+- use AddressOf instead of AssignRef
- revise all commentary
- blog post
- release
- enum, with multi-valued names. enum foo { yes, no, many(10) }
bar:foo=.yes; if bar == .no... if ?bar.many: print bar.many, "items"
Maybe .true and .false for Boolean
-- change use/case labels in ".name" which creates a local enum if no
- type is evident.
+- change use/case labels to create a local enum if no type is evident.
- set, with bool or int members. set foo { pinned, memalloc, priority(4) }
bar:foo = .memalloc | .priority(2). if bar.pinned: bar.priority += 1
. array slices - references to arrays "foo: []bar"
- array access to read bytes from strings. How to get length? "?string[4]" ??
array[] gets length??
+- remove all tests on type->functions
+- use a type->function for performing function call
- revise all commentary
- blog post
- release
### Subsequent version
+- Maybe allow a reference to be passed to function where the by-value is expected
- 'return' statement similar to 'use', but only valid a function context
- 'return' can take no value when function has inline/transparent return value
- simple methods. Define "func type.name...." and the name will only be visible
- 'then' can extend a case section into some other.
## Needs Design
+- review {} syntax issues - look at weird test cases
+- do I need a 'rune' type? What are the elements of a string?
+ Are they small strings? Can I convert to codepoint by treating as number?
+ How much of this is in the utf8 library? Can a string literal be a number?
- exactly where does auto enref/deref happen?
.foo modifier does auto-deref
(args) modifier does auto-deref (if that makes sense)
NO- typeswitch?
- ??? algebraic types
+- code can appear in multiple forms:
+ - source code
+ - abstract syntax tree
+ - byte-code
+ - loadable machine code
+ - executable-only machine code
+ All but last can be loaded by 'ocean' and transformed into a later form,
+ or executed directly. byte-code and loadable machine code will likely
+ have ast content was well to describe types and provide template code.
+
## Needed in library
- augmented and overloaded pointers
An augmented pointer can also store a flag- for a bitlock etc