]> ocean-lang.org Git - ocean-D/blobdiff - 00-TODO
updates
[ocean-D] / 00-TODO
diff --git a/00-TODO b/00-TODO
index ded804871cafc76738b857a4a331b546154caf38..18e8006d510a04f65ebbee1e3e0a7af8902b4a33 100644 (file)
--- a/00-TODO
+++ b/00-TODO
@@ -4,11 +4,13 @@
 
 ### Current version (Cataract Creek)
 
-- reference to struct or intrinsic (@foo), with @new, @free, @nil and ? to test
+- track lvals when propagatign types, and ensure we have one when needed.
 - allow passing objects to functions by reference is requested
+- 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
+- remove all UNTESTED
 - revise all commentary
 - blog post
 - release
 - int nat cyc {i,n,c}{8,16,32,64} - maybe not cyc - it needs size.
 - ops: # & | ~ &~  - no shift: use (N * #shift) or (N / #shift)
 - op=
-- make '.' modifier interpolate a deref if needed
 - 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"
 - 'then' can extend a case section into some other.
 
 ## Needs Design
+- exactly where does auto enref/deref happen?
+    .foo modifier does auto-deref
+    (args) modifier does auto-deref (if that makes sense)
+    assignments does auto-enref
+    function parameter passing does auto enref and auto deref
+
+    general operators?  Not comparison.  Not test.  Probably not anything.
+
+- can "A if B else C" have "A" and "C" be different - one a ref and one not?
+  This might make sense if a ref was wanted - an lvalue is then accepted.
+
+- ? modifier for type makes "no such value" an option, detected by '?' operator
+- $ operator to convert to ?number from ... ref? enum?
+  ?$"hello" can test if the conversion would work. '$foo ?? default'
+  provides a default value
 - a suffix on a number/string can provide soft typing which is interpreted
   in type context.  Must like .enumvalue is interpreted only the context of
   expected type, '43i' would only be meaningful in the same context.
   balanced.  Lists should not have gratuitous indents.
   Revisit everything I considered before, but now consider it only
   for ignore IN/OUT.
+
+- "debug" code that can be compiled out.  For code, "if debug" is enough
+  if the const can be set easily.  For structure members a 'debugonly'
+  attribute needs to be handled.  Of course 'debug' is multifaceted.
+  We might want tracing, consistency, profiling, etc.
+
 - union types - how do I want to support these? inheritance with variance?
 - lambda
 - 'error' value for various types. NIL for pointer NaN for float, extra flag bit
@@ -176,6 +197,16 @@ NO - pattern matching for destructuring??
 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