This little task list has been retired in favour of GitHub projects
No known bugs 🎉
- parser: keep
scopein parser state as explicit stack - go: revisit
.String()and.Format(), revisitfmt.Println(s1+s2)now thatfmt.Printfworks, also quoting. - Redo
fontcommand - Add
gridcommand - evy:
typeof anyval // "num[]"type reflection;anyval.(num[])type assertion - Add
clscommand - Minor/major release automation via
docs/release-notes/v.*.mdnew file check on merge to master for make release - Add
exitcommand - Revise docs: add default value for
any; removeappend,prepand - allow whitespace inside parens of type assertions
- Fix dot expression WS bug: Endless loop for
m[0]. a = 3 - Learn content fixes
- Add builtin docs
- Add late binding for array / map lit to potential
[]anyor{}any- seefont { size: 4 } - Add
panic - Add late composite literal bindings to allow for evy native
font {size:4}for param type{}any - Revise spec
- Add README.md
- Replace italics with bold in docs (more suited to tech terms)
- Fix literals for []any and {}map
- v0.1.0 release
- learn: 2. Variables and types
num,string,bool, Declaration (typed, inferred);read,cls - learn: 3. Flow control
while,if,for - learn: 4. Operators
num,string,bool, comparison, precedence
unplanned
- parser: Fix function calls with indexed arguments (prev error:
print {} []) - parser: Fix typing of array concatenation expressions (print
(typeof []+[true])->[]≠[]bool) - parser: Fix bad unreachable code error on comments
- format: Fix misplaced NL before func decl
- eval: Type empty array and map lit on assignment
- docs: Add ToC and horizontal separators to builtins
- parser: Remove tinygo v0.27.0 map hack
Longer term evy
- samples: Refactor tictactoe for text / graphic to use same game logic
- frontend: embedable evy code snippet
- frontend: embedable evy editor. Ctrl+f finds everythign 3 times with current solution :(
- frontend: embedable playground / canvas
- frontend: Auto-run, fullscreen, local edits in local storage (
#local)? - backend: firebase snippets
- backend: firebase snippets with user account / namespace
- evy: Allow vertical whitespace within
() - evy:
%dwould be great instead of%.0f - evy:
evy parse|formatto disable "unused variable errors" - heads or tails, guess my colour, turtle draw, bricks, Mandelbrot
- outreach: screen-cast / video - Evy Pitch.
- learn: interactive drawing
- samples: Color Voronoi, Brick Breaker
- evy:
curve(PR 117),img <URL> - evy: modules; test by mocking read/input
- evy: compile to custom VM, compile to wasm
- evy: explore llvm for micorprocessors (see tinygo)
- evy: work with firebase HTTP api to make it replaceable.
- evy: "coach" with cusotm trained self-hosted llm
- tools: vscode / lsp Evy extension
- tools: debugger
- cli: png & ascii based graphics, see pkg image/png
May 2023
- Add tictactoe to games
-
rand 0: panic: invalid argument to Int31n -
readwith empty string panics -
readwith CLI captures"\n" - fix run button animation
- remove
yielder not implementedfrom CLI - water melon sample: click and drag outside of canvas watermelon keeps moving.
- Move ellipse to animations and create simpler ellipse sample, add bounce
- Find a way to write challenges for Mali
- Wiki: https://github.com/foxygoat/evy/wiki disclaimer on numbering Q1.a Q1.b etc.
- Wiki: short description on how stuff works for each section:
print; drawing - missing evaluator errors
- labels on drawing of bottom right corner wrong
- click on link with content, then nav menu broken
- Only eval RHS of and / or if needed
Add curves to canvas
April 2023
- canvas enhancements
- send bouncing ball sample to Miles
- Fix
len arraywith array in outer scope - Fix
""string literal as func arg bug - Reset all error highlights on re-run
- Find a way to write challenges for Mali
March 2023
- canvas enhancements
- README.md & about page
- Transition to ViteJS (& SvelteJS?)
- Auto-run option fragment parameter
- Fullscreen parameter
- Save edits for
#localin local storage - Share button
- Error line highlighted in code
- New design live
- Create exercises as raw evy files
- Dynamic input/output UI
- wasm main arg via
jsAction(format,initui,eval) - Syntax colouring
Use canvas.transform instead of calculating transfors in index.js(would transform text)
- canvas enhancement
- Start on: basic README, revise docs
- merge: Error line highlighting PR114
- start: sharing funcitonality
- start on README / docs
- start new tutorial things (exercises for Mali, explaining canvas)
- rfr: Error line highlighting PR114
- start on README / docs
- start new tutorial things (exercises for Mali, explaining canvas)
- start PR for error line highlighting
- further explore ViteJS - postCSS, unbundle
- start on README / docs
- start new tutorial things (exercises for Mali, explaining canvas)
- rework runtime as interfacae PR106
- merge: jsAction (fmt, ui, eval) / dynamic input/output UI PR106
- merge: Splash of Trig sample PR110
- rfr: Syntax highlighting / yace editor PR111
- rework runtime as interface PR106
- merge: jsAction (
fmt,ui,eval) / dynamic input/output UI PR106 - merge: Splash of Trig sample PR110
- create: Syntax highlighting / yace editor.
- research:
RollupVite
- merge: jsAction (
fmt,ui,eval) / dynamic input/output UI PR106 - merge: improve events sample PR107
- merge: add maths essentials PR108
- start: Syntax highlighting / yace editor.
- Merge frontend housekeeping PR100
- Refactor index.js: globals at top, section headers, focus on readability
- Fix formatting bugs
- Start on course
- Start on action-JS and dynamic UI
February 2023
- Sleep & event handler (on up, down, move, key, animate; readlin)
-
_ignore var.for range 10,nums(str),bools(str),printf,prints - New design live
- README.md & about page
- Investigate strange bug with print inside empty for loop
- Finish first approach to formatting
- Newline inside array and map definitions
- Capture NL and comments in AST
- Create
evy format
- Create PR
on animate elapsed:num(milliseconds) (PR81) - Create PR
randandrand1(PR82) - Use
sleepingYielderinreadandruntime.Sleepresetting count & start (PR81) - add modulo operator (PR83)
-
for range 10 // no decl -
_variable like go
- evy: Merge PR78 builtin
str2numandstr2bool - evy: Merge PR79
readlinePR - evy: Create and merge PR80
on input val:string id:string - evy: Create
on animate elapsed:num(milliseconds) - evy:
for range 10 // no decl - evy:
_variable like go
- evy: Merge PR70
oneventHandler parsing - evy: Merge PR73
oneventHandler eval (up,down,move,key) - evy: Merge PR77 builtin
fprint - evy: Merge PR78 builtin
str2numandstr2bool - evy: Create
readlinePR - evy: Create
on animate elapsed:num(milliseconds) PR - evy: Create
on input val:string id:stringPR - evy:
for range 10 // no decl - evy:
_variable like go
- evy: Merge PR70
oneventHandler parsing - evy: Merge PR73
oneventHandler eval (up,down,move,key) - evy: Create builtin
fprintPR77 - evy: Create builtin
str2numandstr2boolPR78 - evy: Create
readlinePR - evy: Create
on animate elapsed:num(milliseconds) PR - evy: Create
on input val:string id:stringPR - evy:
for range 10 // no decl - evy:
_variable like go
- evy: Merge PR76 finally fix mem corruption bug
- evy: Clean-up and close stale PR mem corruption fix attempts: PR75, PR74
- evy: Merge PR68 - evaluator error panic
- evy: Create PR for
onsyntax in parser - evy: Create PR for
onsyntax signature and name checks fordownlike builtin funcs - evy: Rename all graphics function to avoid
movename collision - evy: Add
on up,on down,on move,on keyandhandlerson animate
- evy: Merge PR67 Add
Stopbutton and func - evy: Replace TODO in eval with
return newError("internal error: unknown node type: " + node.Type().String()) - evy: Add
onmouse/onkeyhandlers,onsyntax (params?) - evy: Add
readln - evy: Add
requestAnimationFramex
Unplanned
- evy: Parse prror on function redeclaration PR69
- evy: Merge PR65 - Use main for evy wasm exec
- evy: Merge PR66 Add
sleepto evy - evy: Add
cancelbutton and func - evy: Add
onmouse/onkeyhandlers,onsyntax (params?) - evy: Add
readln - evy: Add
requestAnimationFrame
- evy: Use main for evy
- evy: Workout webworker as to not freeze browser tab with endless loop
January 2023
- evy: Post message to
#tinygore sleep and reinstantiating - evy: Workout how tinygo playground does sleep
- evy: Explore use of channels for UI events
- css4jsdevs: First exercise
- evy: Merge PR 63: refactor evaluator scope into state
- boutiquemaths: Hand over GH pages website setup to Duana https://boutiquemaths.github.io/
- evy: Workout webworker as to not freeze browser tab with endless loop
- evy: Workout how tinygo playground does sleep
- evy: Explore use of channels for UI events
- 3d: build base layer of bamboo geodesic dome
- css4jsdevs: First exercise
November 2022
- orderer: CSV export in matrixify format
- evy: Workout event-loop / wasm interface via
Stoprunning program button - evy: Fix console output layout
- 3d: print a hexabox
- jul.run: Fix TLS issues with traefik/k8s on pi
- orderer: Deploy OAuth demo on jul.run issuing token (in logs) for shopify dev store
- orderer: CSV export in matrixify format
- evy: Workout event-loop / wasm interface via
Stoprunning program button - 3d: print a pullcopter
- 3d: print a hexabox
- orderer: Decrement inventory optionally with order
- orderer: CSV export in matrixify format
- orderer: Sort out auth flow for custom shopify app
- evy: Merge Whitespace PR 32
- evy: Merge Grphics PR 51
- evy: Add sprint
- orderer: Decrement inventory optionally with order
- orderer: CSV export in matrixify format
- orderer: Sort out auth flow for custom shopify app
- evy: Merge Whitespace PR 32
- evy: Add canvas to playground
- evy:
Add draggable splitter to playground - evy: Add first drawing primitives: Move, Line, Rect, Color, Linewidth
October 2022
- negative step range broken:
for n := range 50 28 -1... - off by one in docs
arr := ["a" "b"]; print arr[1] // index: a
- for range
- builtins:
has,del - WS sensitivity
- graphics library (move, line, square...)
- map builtins: has, del
- update docs with map iteration semantics
- evy: merge docs rework PR 31
- evy: restart ws PR rework PR 32
- 3d: print white jellyfish tentacles
- 3d: make a plan for tank slavation
- 3d: start updating tinkercad deisgns for tank slavation
- order: merge
brew install ordererPR 5, PR 6, PR 7 - order: merge
get,list,deleteandupdatecommands PR 8
- evy: merge map assign fix PR 46
- evy: merge builtins has & del PR 45
- orderer: get start on first PR creating an ORDER in shopify store
- 3d: finish printing jellyfish
- evy: get start on PR fixing map assignment bug for inexistent entries
- evy: ptal builtins has & del PR 45
- orderer: get start on first PR creating an ORDER in shopify store
- 3d: start printing a jellyfish
- 3d: start assemling assemble crawler
- evy: Merge For-Range PR 43
- evy: Get a start on indexing issue [1]
- evy: Get a start on not set isUsed var issue [2]
- evy: Get a start on tests for weird step ranges [3]
[1]: this doesn't seem to work:
a := [ ([1 2 3]) ([4 5 6]) ]
a[0][1] = 7
Also
(a[0])[1] = 7
although that doesn't really need to work if the former does (Thanks, @camh-)
[2]: You need to set v.IsUsed when used on the left-hand side in an array index. e.g:
a := [ ([1 2 3]) ([4 5 6]) ]
b := a[0]
b[1] = 7
print a
This prints the error that b is not used, but it is. (Again: Thanks, @camh-)
[3]:
for x := range 0 (-1) 1 -> no an issue. 0+1 > -1
for x := range 0 1 (-1) -> also not an issue i think: 0 + (-1) < 1
- evy: Merge BasicType Expr evaluation PR 37
- evy: Merge Array and Map literal evaluation PR 38
- evy: Merge index and dot expr evaluation PR 39
- evy: Merge index and dot expr evaluation PR 40
- evy: Merge slice PR 41
- evy: Merge wrapped any fix PR 42
- evy: RFR Start For-Range
- 3d: Print some crawler bits
- 3d: Do a thing in Fusion 360
- evy: Merge BasicType Expr evaluation PR 37
- evy: Merge Array and Map literal evaluation PR 38
- evy: Merge index and dot expr evaluation PR 39
- evy: Merge index and dot expr evaluation PR 40
- evy: RFR slice PR 41
- evy: Start For-Range
- 3d: Print something pink for Anika
- 3d: Do a thing in Fusion 360
- evy: Merge BasicType Expr evaluation PR 37
- evy: Merge Array and Map literal evaluation PR 38
- evy: Start index and dot expr evaluation PR 39
- evy: Replace ErrorVal with panic in evaluator
- 3d: Print a crocodile for Mali
- 3d: Print more cogs & rods for new cog board, see if works with little motor
- 3d: Do a thing in Fusion 360
Unplanned
- evy: Evaluate Array concatenation PR 40
- evy: Merge Pratt Expr parser PR 33
- evy: Remove parser_type.go PR 34
- evy: Invert types: num[] => []num PR 34
- evy: Implement index-expr and dot-expr for left hand of assign PR 35
- evy: Re-review Docs update PR 30
- evy: Get a start on Expr evaluation PR 37
- 3d: Print another gear board
- 3d: Do something with fusion 360
Unplanned
- evy: Rename PREFIX to UNARY in parser PR 36
- evy: Add infix funcs
indexanddotto PR 33 - evy: Add prefix funcs
arrayLitandmapLitto PR 33 - 3d: print hotdog
- evy: Get a start on expression parsing with Pratt parser (whitespace insensitive)
- 3d: Print something
- triangulation: Respond to contracting proposal 😿 - took it
- evy: Merge PR 30 - Break
- evy: Get a start on white space sensitive docs - Parked PR 31
Unplanned
- evy: Get a start on white space sensitive lexing - Parked PR 32
- 3d: Callibrate Prusia
- triangulation: Respond to contracting proposal
- evy: Merge PR 30 - Break
- evy: Get a start on white space sensitive
-and[
- evy: Merge PR 27 - Add PR comment with deployment URL
- evy: get a start on next PR for break statements
Unplanned
- evy: Merge PR 29 - Master/prod deploy fix
- evy: merge PR 24 - unused variable error
- evy: merge PR 25 - stricter linter settings
- evy: get a start on next PR for break statements
Unplanned
- evy: Merge PR 26 - Replace firebase-deployment action
- evy: Merge PR 28 - Fix continuous deployment for master
- evy: Merge PR 27 - Add PR comment with deployment URL
- evy: merge PR 23 return errors
- evy: get a start on next PR for break statements
- 3d: get a start on setting up MK3s
Unplanned
- evy: merge PR 22: while
- evy: get start on break statments
Unplanned
- evy: Start on "unreachable code after return" and return type assertion
September 2022
- evy: merge PR 21: if statements
Unplanned
- evy: merge PR 20 docs: Enforce at least one statement in blocks
- evy: merge PR 19: assignments
- evy: get start on PR: if statements
- 3d: calibrate printer
- 3d: make a third another ullagami
- evy: merge PR 16: return statements + evaluation
- evy: get start on PR 19: assignment statements + evaluation
- 3d: calibrate printer
- 3d: make another ullagami
Unplanned
- evy: merge PR 17 fix typos
- evy: merge PR 18 refactor builtins (edited)
- evy: updated PR 15 to include error message in tests
- evy: ideally merge PR 15
- evy: get start on PR 16: return statements + evaluation
- evy: get start on PR: assignment statements + evaluation
-
pikates: get context back (edited)(not going to happen)