X-Git-Url: https://ocean-lang.org/code/?p=ocean-D;a=blobdiff_plain;f=Ocean-operators;h=a2b1ef90788d1d53ef0992c203daf51a927394eb;hp=7c75e6117739472ecb36ad6ff0e0a7e0f184e521;hb=10e77686a11633f31759927b687510bf798919c7;hpb=4cdd68c1e0a2b774c04bb251ad788ccfd958660e diff --git a/Ocean-operators b/Ocean-operators index 7c75e61..a2b1ef9 100644 --- a/Ocean-operators +++ b/Ocean-operators @@ -9,7 +9,7 @@ I might want: Binary: and then, or else, integer division Prefix: int - Suffix: dereference + Suffix: dereference (ref) Do I want COND ? IFTRUE : IFFALSE @@ -59,7 +59,7 @@ I might want: a @@= b does a deep copy -What types do operators act one? +What types do operators act on? numbers + - * / % bitsets & | ~ &~ @@ -91,3 +91,75 @@ Hmm.. not what I imagined. But what I imaging suggested that left-association a op b op c -> (a op b) op c requires that we reduce even when we could shift, ... maybe .... I should leave this until I do precedence. + +-------------------------- + +Thinking about bit operators. + +#foo is 2^foo +So #12-#4 is + 1000000000000 - + 10000 += 111111110000 +which is bits 4 thru 11 + +I'm wondering if it is useful to have a field-select operator, +which could be '#' as infix (rather than prefix) so + + var # field + +would be an lval which can only modify the selected bits + + var # #12-#4 = #6-#4 +would clear bits 6-11. Doesn't actually read very well, does it? +Probably better to use field syntax, with a way to declare fields for an int. +This would be a record. + +Still. + var &~= #4 + var |= #4 +to clear and set bits looks OK. +But ... what syntax do I want for test-and-set? More genericly cmpxchg. +An operator that modifies a variable is something I wanted to avoid. + var ? oldval = newval +could 'use false' if it fails. + +# decided so far: + + + addition or abs value + - subtraction or negation + * multiply + / div + % remainder + ++ catentate + () group + if else conditional + and, or, not Boolean + and then Boolean + or else Boolean + = assignment + : type + < > != == <= >= comparison + [ ] array access + . field access + " ' ` quoting + , ; list + { } grouping + +# expect + & bit and + | bit or + &^ bit subtract + ^ bit invert (prefix or infix) + # 1<< (prefix) + << >> shift + + += -= *= /= %= ++= &= |= &^= ^= + What about boolean? and=? + if c: a=True // if not c: a=False + +# undecided + ? ! @ $ \ ~ + -- ** @@ ^^ + + Equiv of "a ?: b". i.e. a if a else b. Only works if non-Bools can be tested.