Koru logo Koru
Learn Platform Status Blog GitHub (soon) Discord
The Koru Book

443/539 tests passing

CORE LANGUAGE / BASIC SYNTAX 4/4
  • ✓ 001 hello world
  • ✓ 002 simple event
  • ✓ 003 event multiline shape
  • ✓ 020 eol comments
CORE LANGUAGE / EVENTS FLOWS 12/12
  • ✓ 001 simple flow
  • ✓ 002 multiple flows
  • ✓ 003 inline flow basic
  • ✓ 004 void event
  • ✓ 005 void event chained
  • ✓ 006 inline flow chained
  • ✓ 006 void pipeline sequence
  • ✓ 007 binding annotations
  • ✓ 008 wildcard branch payload
  • ✓ 009 empty branch no binding
  • ✓ 010 expression with brace
  • ✓ 011 reject tilde inside flow
CORE LANGUAGE / TYPES VALUES 6/6
  • ✓ 010 array literal simple
  • ✓ 011 array literal bindings
  • ✓ 012 struct literal inline
  • ✓ 013 array of structs
  • ✓ 016 array literal subflow impl
  • ✓ host type injection
CORE LANGUAGE / CONTROL FLOW 32/34
  • ✓ 001 inline flow binding
  • ✓ 002 inline flow branches
  • ✓ multiple branches
  • ✓ binding scopes
  • ✓ shadowing behavior
  • ○ shadowing rejected
  • ✓ labels and jumps
  • ✓ zig keyword escaping
  • ✓ continuation label
  • ✓ branch constructor basic
  • ✓ nested labels
  • ✓ branch constructor multiline
  • ✓ label scope errors
  • ✓ arbitrary label jumps
  • ✓ label scope isolation
  • ✓ proc flow expression
  • ✓ simple server flow
  • ✓ branching flow
  • ✓ proc implicit return
  • ✓ proc flow patterns
  • ✓ nested depth 2
  • ✓ nested depth 3
  • ✓ nested depth 4
  • ✓ nested depth 5
  • ✓ nested depth 5 multi branch
  • ✓ reserved keyword branch
  • ✓ namespace nested flow
  • ✓ nested labels
  • ✓ multi event chain
  • ✓ namespace labels combo
  • ○ inline flow no continuation
  • ✓ empty payload branches
  • ✓ loop module qualified
  • ✓ loop imported module
MODULE SYSTEM / IMPORTS 15/16
  • ✓ 001 file import basic
  • ✓ 002 directory import basic
  • ✓ 003 directory import public
  • ✓ 004 file processor
  • ✓ 005 deep error handling
  • ✓ 006 transitive file import
  • ✓ 007 dir import basic
  • ✓ 008 dir import no pub
  • ✓ 009 dir import dotted
  • ✓ 010 dir import flow
  • ○ 011 parent plus submodule
  • ✓ 012 auto import parent
  • ✓ 012 optional parent
  • ✓ 013 module event globbing
  • ✓ 014 auto import index
  • ✓ 015 sibling in same directory
MODULE SYSTEM / NAMESPACES 2/2
  • ✓ 001 directory namespace collision
  • ✓ 002 local name priority
MODULE SYSTEM / PACKAGES 1/2
  • ○ 001 full package import
  • ✓ 002 package requires npm
PARSER 6/6
  • ✓ 050 identity branches
  • ✓ 051 identity branch empty capture
  • ✓ 052 braceless branch constructors
  • ✓ 053 braceless continuation constructors
  • ✓ 060 single line source blocks
  • ✓ 070 nested tilde invocations
COMPILER FEATURES / PARSER 47/48
  • ✓ lenient multiple errors
  • ✓ 001 event multiline shape
  • ✓ 002 branch constructor multiline
  • ✓ 003 conditional imports
  • ✓ 004 branch when clauses
  • ✓ 006 flow checker validation
  • ✓ 007 flow checker missing else
  • ✓ 008 tap nested continuation
  • ✓ 009 source with scope capture
  • ✓ 010 module annotations
  • ✓ 011 optional branch catchall
  • ✓ 012 missing required branch
  • ✓ 013 void event chaining
  • ✓ 014 void chaining nested
  • ✓ 015 abstract impl
  • ✓ 016 optional branches ignored
  • ✓ 017 catchall end to end
  • ✓ 018 multiline annotations
  • ✓ 019 subflow multiline call
  • ✓ 020 transitive imports
  • ✓ 022 invocation parentheses rules
  • ✓ 023 template interpolation
  • ✓ 024 source scope capture
  • ✓ 029 transform requires comptime
  • ✓ 030 comptime flows
  • ✓ 031 annotations in ast
  • ✓ 032 implicit source param
  • ✓ 034 parser wrapper
  • ✓ 035 circular imports
  • ✓ 035 loop unhandled branch
  • ✓ 036 expression parameter
  • ✓ 036 parser runtime
  • ✓ 037 expression scope capture
  • ✓ 038 implicit expr and source
  • ✓ 039 file source syntax
  • ✓ 040 expression string capture
  • ✓ 041 expression backslash escape
  • ✓ 042 orisha pattern
  • ✓ 043 inline continuation rejected
  • ✓ 044 source block with branches
  • ✓ 045 source block in pipeline
  • ✓ 050 expression parameter emit
  • ✓ 050 subflow field shorthand
  • ✗ 051 comments in continuations
  • ✓ 052 pattern branches
  • ✓ 053 reject old tap syntax
  • ✓ 054 inline source block args
  • ✓ 055 inline pipe in string
COMPILER FEATURES / COMPILATION 16/16
  • ✓ 001 cross module type basic
  • ✓ 002 ast json with stdlib
  • ✓ 003 cross module type basic
  • ✓ 004 cross module type nested
  • ✓ 005 cross module type nullable
  • ✓ 006 std module type ref
  • ✓ 007 parser dump ast
  • ✓ 008 parser benchmark
  • ✓ 009 json vs koru bench
  • ✓ 010 module annotation serialization
  • ✓ 020 nested branch shadowing
  • ✓ 021 void chaining codegen
  • ✓ 022 combined continuation bugs
  • ✓ 023 comptime program return
  • ✓ compiler requires
  • ✓ compiler flags declare
COMPILER FEATURES / FLOW CHECKER 3/3
  • ✓ 001 unused binding error
  • ✓ 002 discard binding ok
  • ✓ 010 optional branch catchall required
COMPILER FEATURES / CODEGEN 1/1
  • ✓ 002 emitter wrapper
COMPILER FEATURES / EMITTER 3/3
  • ✓ 010 variable naming nested scopes
  • ✓ 011 print ln continuation ordering
  • ✓ 012 for binding in nested range
COMPILER FEATURES / SUBFLOW 1/1
  • ✓ 010 plain value branch
SYNTAX / STRUCT CONSTRUCTORS 2/2
  • ✓ 020 field punning
  • ✓ 021 field punning shorthand
ADVANCED FEATURES / COMPTIME 46/55
  • ✓ 001 import registers taps
  • ✓ 002 import registers taps wildcards
  • ⏭ 003 shorthand syntax
  • ✓ 005 annotation inline syntax
  • ✓ 006 event taps
  • ✓ 007 event taps nested
  • ✓ 008 annotation vertical syntax
  • ✓ 009 multiple taps
  • ✓ 010 annotation edge cases
  • ○ 011 wildcard patterns
  • ○ 012 module taps
  • ✓ 013 tap chains
  • ✓ 014 taps with labels
  • ✓ 015 when clauses
  • ✓ 017 namespace wildcards
  • ○ 018 ccp opt in
  • ○ 019 ccp flag injection
  • ✓ 020 ccp flag only
  • ○ 021 build requires basic
  • ✓ 022 multiline params
  • ✓ 023 scoped patterns
  • ✓ 024 shorthand field params
  • ✓ 025 qualified patterns
  • ✓ 026 destination scoping
  • ✓ 027 conditional imports
  • ✓ 028 conditional import flag off
  • ✓ 029 conditional import flag on
  • ✓ 030 build command sh
  • ✓ 031 flow annotations
  • ✓ 032 default override basic
  • ✓ 033 default with dependencies
  • ○ 034 metatype branch requires binding
  • ✓ 035 tap void event transition
  • ✓ 036 tap terminal invocation
  • ✓ 037 tap destination matching
  • ✓ 038 tap terminal void
  • ✓ 039 branch payload requires binding
  • ○ 040 literate annotations
  • ✓ 040 opaque tap skipping
  • ✓ 040 tap as library
  • ✓ 041 metatype profile binding
  • ✓ 042 metatype transition binding
  • ○ 042 named expression params
  • ✓ 042 tap nested invocation
  • ✓ 043 metatype audit binding
  • ✓ 044 metatype multiple observers
  • ✓ 045 metatype when guards
  • ✓ 046 metatype enum helpers
  • ✓ 047 deps system
  • ✓ 048 branch payload discard ok
  • ✓ 049 invocation meta
  • ✓ 050 build flag check
  • ✓ 051 build variants
  • ✓ comptime pass noop
  • ✓ buildstep api
ADVANCED FEATURES / STDLIB 38/46
  • ✓ 001 std if
  • ✓ 002 stdlib if
  • ✓ 003 stdlib if scoped
  • ✓ 010 std for basic
  • ✓ 011 std for nested
  • ✓ 018 template define
  • ✓ 019 template lookup
  • ✓ 020 if inline codegen
  • ✓ 021 for zero overhead
  • ○ 021 template lookup in transform
  • ○ 022 for outer scope
  • ✓ 023 for pipeline
  • ✓ 024 for deeply nested
  • ✓ 025 if deeply nested
  • ✓ 026 for subflow
  • ✓ 027 capture basic
  • ○ 028 capture multi
  • ✓ 030 println basic
  • ✓ 031 println types
  • ✓ 032 println blk basic
  • ✓ 033 println koru scope
  • ✓ 034 capture nested
  • ✓ 034 println conditionals
  • ○ 035 capture multi field
  • ✓ 035 println blk conditionals
  • ✓ 036 capture nested qualified
  • ✓ 036 transform order
  • ✓ 037 nested if simple
  • ✓ 038 capture binding qualified
  • ✓ 038 nested for simple
  • ✓ 039 if inside for
  • ✓ 040 for inside if
  • ✓ 041 triple nested
  • ✓ 042 capture if for multi
  • ✓ 043 const basic
  • ✓ 044 const simple
  • ✓ 045 capture array index
  • ✓ 046 capture existing struct
  • ✓ 050 transform impl pattern
  • ○ 060 fs read lines
  • ✓ 070 for with binding
  • ○ 080 ecology circular import
  • ✓ 081 ecology pass ran mechanism
  • ○ 082 ecology custom transform
  • ○ 083 ecology module aliasing
  • ✓ 090 rings basic
ADVANCED FEATURES / KEYWORD 5/5
  • ✓ 001 keyword basic
  • ✓ 002 keyword collision
  • ✓ 003 keyword explicit
  • ✓ 004 keyword requires pub
  • ✓ 005 keyword expression
ADVANCED FEATURES / PHANTOM TYPES 59/64
  • ✓ 001 module qualified phantom states
  • ✓ 002 phantom state mismatch
  • ✓ 003 unknown phantom module
  • ✓ 004 cleanup obligation escape
  • ✓ 005 cleanup obligation satisfied
  • ✓ 006 cleanup consumed by disposal
  • ✓ 007 use after disposal
  • ✓ 008 obligation escapes via interface
  • ✓ 009 universal wildcard metatype
  • ✓ 010 module wildcard metatype
  • ✓ 011 auto discharge multiple
  • ○ 011 transition metatype
  • ✓ 012 auto discharge explicit with multiple
  • ✓ 012 auto discharge none
  • ✓ 013 auto discharge explicit ok
  • ✓ 014 scope for loop inner
  • ✓ 015 scope for loop outer
  • ✓ 016 scope nested
  • ○ 017 scope label loop
  • ✓ 018 auto discharge escaped obligation
  • ✓ 019 auto discharge branch constructor
  • ✓ 019 for manual done ok
  • ○ 020 auto discharge void event
  • ✓ 020 for manual each error
  • ✓ 021 auto discharge multiple resources
  • ✓ 021 for auto done ok
  • ✓ 022 if manual both branches
  • ✓ 023 if auto both branches
  • ✓ 024 if hybrid manual auto
  • ✓ 025 auto discharge disabled
  • ✓ 025 nested if in for
  • ✓ 026 auto discharge warn
  • ✓ 026 nested for in if
  • ✓ 027 db transaction pattern
  • ✓ 027 default discharge annotation
  • ✓ 028 ambiguous without default
  • ✓ 028 optional branch obligation
  • ✓ 029 auto discharge void chain
  • ✓ 030 taps with auto discharge
  • ✓ 031 tap binding substitution
  • ✓ 032 nested for scopes
  • ✓ 035 autodischarge prefers void
  • ✓ 036 autodischarge no void candidate
  • ✓ 037 default discharge must be void
  • ✓ 040 undisposed nested obligation
  • ✓ 041 auto discharge single
  • ✓ 042 metatype binding scope
  • ✓ 050 union accepts either state
  • ✓ 051 union with consume marker
  • ✓ 052 escape field name mismatch
  • ✓ 053 for loop obligation escape
  • ○ 055 auto discharge cascade
  • ✓ obligation lost at boundary
  • ✓ multiple cleanup paths
  • ✓ multiple resources cleanup
  • ✓ multiple resources partial cleanup
  • ✓ state variable wildcard
  • ✓ state variable constrained accepts
  • ✓ state variable constraint violation
  • ✓ state variable chaining
  • ✓ emitter inline flow numbering
  • ○ phantom state mismatch
  • ✓ phantom state valid
  • ✓ multiple errors
ADVANCED FEATURES / FUSION 2/6
  • ✓ detect chain
  • ○ simple fusion
  • ○ fusible flows
  • ✓ proc inline flow expressions
  • ○ 001 concrete source concrete branch
  • ○ 002 concrete source metatype
ADVANCED FEATURES / TRANSFORMS 2/2
  • ✓ 010 parser generator
  • ✓ 011 derive basic
ADVANCED FEATURES / TYPE SYSTEM 1/1
  • ✓ 001 type declaration
ADVANCED FEATURES / TYPES 1/1
  • ✓ 001 struct basic
ADVANCED FEATURES / AUTO PROC 4/4
  • ✓ 001 basic passthrough
  • ✓ 002 phantom transition
  • ✓ 003 mismatch must error
  • ✓ 004 uncalled event ok
ADVANCED FEATURES / SUBFLOWS 7/7
  • ✓ subflow immediate
  • ✓ subflow flow
  • ✓ subflow chained
  • ✓ subflow multi continuation
  • ✓ subflow invalid branch
  • ✓ subflow with taps
  • ✓ nested recursive label
ADVANCED FEATURES / TAPS OBSERVERS 5/7
  • ✓ branch coverage complete
  • ✓ void event no branches
  • ✓ multiple events mixed
  • ○ tap when clause filtering
  • ✓ tap shorthand syntax
  • ○ multi branch tap
  • ✓ meta event taps
ADVANCED FEATURES / INTERCEPTORS 0/4
  • ○ 001 basic intercept
  • ○ 003 single interceptor error
  • ○ 004 opaque protection
  • ○ 010 no function calls in payload
ADVANCED FEATURES / PHANTOM TYPES 0/1
  • ○ 020 label jump obligation
ADVANCED FEATURES / POLYGLOT 3/8
  • ✓ polyglot basic
  • ○ polyglot compilation
  • ✓ blur variants
  • ✗ gpu blur real
  • ✗ zig and gpu variants
  • ✓ gpu compiler pass
  • ○ actual glsl compilation
  • ○ gpu execution
ADVANCED FEATURES / TEMPLATING 2/4
  • ✓ 001 basic interpolation
  • ✓ 002 conditionals
  • ○ 003 source metadata
  • ○ 004 optimized codegen
ADVANCED FEATURES / KERNEL 7/10
  • ✓ 001 shape basic
  • ○ 002 array init
  • ✓ 003 pairwise basic
  • ○ 004 dynamic shape
  • ✓ 005 user event binding
  • ✓ 010 layout metadata
  • ✓ 020 nbody benchmark
  • ✓ 021 multiline source
  • ○ 022 singleline shape bug
  • ✓ 023 init in pipeline
ADVANCED FEATURES / TESTING 10/10
  • ✓ 001 test syntax
  • ✓ 002 mock multiple branches
  • ✓ 003 pure event no mock
  • ✓ 004 constant event auto inline
  • ✓ 005 impure event error
  • ✓ 006 impure event fixed
  • ✓ 007 failing test
  • ✓ 008 complex flow test
  • ✓ 009 cross module mock
  • ✓ 010 unexpected branch fails
CONTROL FLOW 3/4
  • ✓ 050 expand basic
  • ✓ 051 expand stdlib wrap
  • ✓ 052 expand with continuations
  • ○ 060 auto thread pipeline
RUNTIME FEATURES 2/2
  • ✓ 060 fmt blk autodispose
  • ✓ 061 phantom autodispose
RUNTIME FEATURES / BUDGETED INTERPRETER 6/6
  • ✓ 001 basic budget tracking
  • ✓ 002 budget exhaustion
  • ✓ 003 handle pool tracking
  • ✓ 004 auto discharge
  • ✓ 005 exhaustion with handles
  • ✓ 006 identity branch phantom
RUNTIME FEATURES / PURITY CHECKING 8/11
  • ✓ 001 pure annotation
  • ⏭ 002 inline proc
  • ✓ 003 flow purity
  • ✓ 004 transitive pure
  • ○ 005 transitive impure
  • ✓ 006 event purity
  • ✓ 007 cyclic calls
  • ✓ 008 mixed impls
  • ✓ 009 subflow pure
  • ✓ 010 subflow impure
  • ○ 011 opaque procs
RUNTIME FEATURES / PERFORMANCE 0/29
  • ? array by reference
  • ○ 001 profile metatype
  • ○ 002 profile release
  • ○ 003 profiler loop
  • ? 006 rings vs channels
  • ? 007 simple loop
  • ○ 008 event taps overhead
  • ? 009 multi consumer async
  • ○ 010 threading library
  • ? 011 loop optimization basic
  • ○ 012 loop optimization nested
  • ○ 013 loop optimization work
  • ? generic ring type
  • ? generic ring actual
  • ? ring with taps
  • ? ring with when filter
  • ? when at callsite
  • ? ring with multitaps
  • ○ optional branches
  • ○ optional handled
  • ○ optional mixed
  • ○ optional shape error
  • ○ all optional
  • ○ api evolution
  • ○ when guards
  • ○ event pump
  • ○ error no catchall
  • ⏭ dead code elimination
  • ⏭ handler caching
RUNTIME FEATURES / COORDINATION 7/10
  • ✓ 001 user coordinator
  • ○ 003 impl override only
  • ○ 004 impl with delegation
  • ✓ 005 impl no implementation
  • ✓ 006 coordinator timing
  • ○ 007 tap visibility delegation
  • ✓ 008 pipeline profiling
  • ✓ 009 composed timing
  • ✓ 010 ast dump stages
  • ✓ custom coordinator bug
RUNTIME FEATURES / RUNTIME 34/34
  • ✓ 001 parser userland
  • ✓ 010 registry scope basic
  • ✓ 011 registry scope composition
  • ✓ 012 registry dispatch test
  • ✓ 013 interpreter test
  • ✓ 014 interpreter benchmark
  • ✓ 015 interpreter dataflow
  • ✓ 016 interpreter conditionals
  • ✓ 017 expr evaluator
  • ✓ 018 runtime if
  • ✓ 019 interpreter if
  • ✓ 020 interpreter if e2e
  • ✓ 021 if arg inspection
  • ✓ 022 if expression parsing
  • ✓ 025 interpreter benchmark real
  • ✓ 026 interpreter run event
  • ✓ 030 honest benchmark
  • ✓ 035 interpreter binding args
  • ✓ 036 interpreter for loop
  • ✓ 037 interpreter field types
  • ✓ 038 interpreter nested loop benchmark
  • ✓ 039 runtime eval scope
  • ✓ 040 registry scope dotted
  • ✓ 041 registry typed args
  • ✓ 042 registry scope debug
  • ✓ 043 runtime run scope
  • ✓ 044 runtime run budget
  • ✓ 045 runtime run event denied
  • ✓ 046 runtime run scope not found
  • ✓ 047 runtime run parse error
  • ✓ 048 runtime run fail fast
  • ✓ 049 runtime run lenient
  • ✓ 050 runtime eval autodischarge
  • ✓ 051 runtime run budget autodischarge
RUNTIME FEATURES / RESOURCE BRIDGE 2/2
  • ✓ 001 bridge basic
  • ✓ 002 cross session discharge
INTEGRATION TESTING / NEGATIVE TESTS 10/10
  • ✓ 001 unclosed input brace
  • ✓ 002 unclosed branch brace
  • ✓ 005 missing event name
  • ✓ 011 invalid module qualifier
  • ✓ 012 multiple defaults error
  • ✓ 013 ambiguous override error
  • ✓ 070 universal wildcard concrete
  • ✓ 071 module wildcard concrete
  • ✓ 072 event wildcard concrete
  • ✓ 080 mock shape mismatch
INTEGRATION TESTING / NEGATIVE TESTS / 020 parse errors 1/1
  • ✓ missing event keyword
INTEGRATION TESTING / NEGATIVE TESTS / 030 type errors 1/1
  • ✓ undefined event
INTEGRATION TESTING / NEGATIVE TESTS / 060 compiler crashes 1/1
  • ✓ inline flow continuation chain
INTEGRATION TESTING / BUG REPRODUCTION 7/7
  • ✓ 001 slice type imported module
  • ✓ 002 array literal imported type
  • ✓ 003 stdlib runtime import
  • ✓ 004 inline flow imported
  • ✓ 005 proc branch constructor bug
  • ✓ 006 branch constructor bug
  • ✓ 007 module qualified bug
INTEGRATION TESTING / VALIDATION 7/7
  • ✓ import io
  • ✓ import dotdot forbidden
  • ✓ import unknown alias
  • ✓ import lib root
  • ✓ import requires dollar prefix
  • ✓ import explicit extension
  • ✓ field shadows event name
STDLIB / STRING 2/2
  • ✓ 001 string basic
  • ✓ 002 string ownership
EVENT GLOBBING 4/11
  • ○ 000 permissive event name parsing
  • ✓ 001 glob declaration syntax
  • ✓ 002 glob invocation match
  • ✗ 003 glob suffix validation
  • ○ 005 glob with variants
  • ✓ 010 generics bracket syntax
  • ✓ 011 generics param extraction
  • ○ 020 generics ring buffer e2e
  • ○ 030 ai error explanation
  • ○ 031 ai test analysis
  • ○ 040 abstract compiler pipeline
EXAMPLES SHOWCASE 1/1
  • ✓ HELLO WORLD
EXAMPLES SHOWCASE / LANGUAGE SHOOTOUT 4/9
  • ? nbody
  • ? nbody optimized
  • ? nbody granular
  • ? nbody extreme
  • ✓ nbody pure capture
  • ✓ nbody pure scalar
  • ✓ nbody arrayed capture
  • ✓ nbody kernel pairwise
  • ? nbody subflow
Learn / INTEGRATION TESTING / BUG REPRODUCTION

integration testing / bug reproduction

✓ 7 passing

Lessons

1 ✓ Passing
001 slice type imported module
2 ✓ Passing
002 array literal imported type
3 ✓ Passing
003 stdlib runtime import
4 ✓ Passing
004 inline flow imported
5 ✓ Passing
005 proc branch constructor bug
6 ✓ Passing
006 branch constructor bug
7 ✓ Passing
007 module qualified bug
Koru logo Koru

The Event Continuation Language

Community

Contributing GitHub (soon) Discord

Resources