This little task list has been retired in favour of GitHub projects
No known bugs 🎉
- parser: keep
scope
in parser state as explicit stack - go: revisit
.String()
and.Format()
, revisitfmt.Println(s1+s2)
now thatfmt.Printf
works, also quoting. - Redo
font
command - Add
grid
command - evy:
typeof anyval // "num[]"
type reflection;anyval.(num[])
type assertion - Add
cls
command - Minor/major release automation via
docs/release-notes/v.*.md
new file check on merge to master for make release - Add
exit
command - 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
[]any
or{}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:
%d
would be great instead of%.0f
- evy:
evy parse|format
to 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 -
read
with empty string panics -
read
with CLI captures"\n"
- fix run button animation
- remove
yielder not implemented
from 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 array
with 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
#local
in 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
rand
andrand1
(PR82) - Use
sleepingYielder
inread
andruntime.Sleep
resetting count & start (PR81) - add modulo operator (PR83)
-
for range 10 // no decl
-
_
variable like go
- evy: Merge PR78 builtin
str2num
andstr2bool
- evy: Merge PR79
readline
PR - 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
on
eventHandler parsing - evy: Merge PR73
on
eventHandler eval (up
,down
,move
,key
) - evy: Merge PR77 builtin
fprint
- evy: Merge PR78 builtin
str2num
andstr2bool
- evy: Create
readline
PR - evy: Create
on animate elapsed:num
(milliseconds) PR - evy: Create
on input val:string id:string
PR - evy:
for range 10 // no decl
- evy:
_
variable like go
- evy: Merge PR70
on
eventHandler parsing - evy: Merge PR73
on
eventHandler eval (up
,down
,move
,key
) - evy: Create builtin
fprint
PR77 - evy: Create builtin
str2num
andstr2bool
PR78 - evy: Create
readline
PR - evy: Create
on animate elapsed:num
(milliseconds) PR - evy: Create
on input val:string id:string
PR - 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
on
syntax in parser - evy: Create PR for
on
syntax signature and name checks fordown
like builtin funcs - evy: Rename all graphics function to avoid
move
name collision - evy: Add
on up
,on down
,on move
,on key
andhandlerson animate
- evy: Merge PR67 Add
Stop
button and func - evy: Replace TODO in eval with
return newError("internal error: unknown node type: " + node.Type().String())
- evy: Add
onmouse
/onkey
handlers,on
syntax (params?) - evy: Add
readln
- evy: Add
requestAnimationFrame
x
Unplanned
- evy: Parse prror on function redeclaration PR69
- evy: Merge PR65 - Use main for evy wasm exec
- evy: Merge PR66 Add
sleep
to evy - evy: Add
cancel
button and func - evy: Add
onmouse
/onkey
handlers,on
syntax (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
#tinygo
re 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
Stop
running 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
Stop
running 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 orderer
PR 5, PR 6, PR 7 - order: merge
get
,list
,delete
andupdate
commands 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
index
anddot
to PR 33 - evy: Add prefix funcs
arrayLit
andmapLit
to 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)