diff --git a/TODO.org b/TODO.org index 77aed9ff..d07063ad 100644 --- a/TODO.org +++ b/TODO.org @@ -11,6 +11,11 @@ rejected without a record is an idea that gets re-proposed. * Language surface +** NEXT Dyn unless annotated +Decided 2026-09-25: in both syntaxes an unannotated value is dyn — [6 2 4 9] is a dyn +vector, 1 a dyn integer — and a typed value needs an annotation. Rules and migration +wait on a design pass. + ** DONE Dynamic-first, and the dyn half of the language CLOSED: [2026-09-20] An unannotated parameter or return is =dyn=: a NaN-boxed value over a mark-sweep @@ -296,6 +301,13 @@ keyword resolves against the expected type and against nothing else, so two enum could always share a member spelling. What the prefix buys is the call site read on its own. +** NEXT The .fln printer writes a flat let where the scope does not matter +Decided 2026-09-25: a let whose name no later statement of its block mentions prints +flat, not as a nested block; a one-argument and/or prints as its argument. + +** NEXT A dyn vector prints as [1 2 3], a map as {:a 1} +Decided 2026-09-25: no space after the opening bracket, in every renderer. + ** WAIT ML-style patterns Held 2026-09-25 as a future direction, like the JS backend: nested destructuring, guards, or-patterns, literals at any depth, exhaustiveness over the nesting. diff --git a/test/syntax/algorithms.fln b/test/syntax/algorithms.fln index eaaa4d7a..1f267d09 100644 --- a/test/syntax/algorithms.fln +++ b/test/syntax/algorithms.fln @@ -27,19 +27,30 @@ fn selection-sort(coll: [$t]) -> () where ordered?($t) fn insertion-sort(coll: [$t]) -> () where ordered?($t) let i = 1 let length = length(coll) - while and(i < length) + while i < length let j = i - while j > 0 - and coll[j] < coll[dec(j)] - let temp = coll[j] - coll[j] = coll[dec(j)] - coll[dec(j)] = temp - --(j) + while j > 0 and coll[j] < coll[dec(j)] + let temp = coll[j] + coll[j] = coll[dec(j)] + coll[dec(j)] = temp + --(j) + ++(i) + +fn insertion-sort-dyn(coll) + let i = 1 + let length = length(coll) + while i < length + let j = i + while j > 0 and coll[j] < coll[dec(j)] + let temp = coll[j] + coll[j] = coll[dec(j)] + coll[dec(j)] = temp + --(j) ++(i) fn main() -> i32 = 0 -comment(): +comment: insertion-sort([\I \N \S \E \R \T \I \O \N \S \O \R \T]) insertion-sort(slice([6 2 4 9 1 9 4 5], 0, 8)) let str = bytes("INSERTIONSORT")