You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Oct 19, 2023. It is now read-only.
This data pack version removes the recently introduced execute if function and return run functionality. Flaws with those commands (see bugs MC-264595, MC-264699 and MC-264710) require some substantial changes to fix, which we do not want to make close to a release.
These commands will instead be reintroduced early in the next snapshot series when we can take the time to iterate on and test them together with pack makers.
Box's supported versions start with 23w31a the appropriate version after 23w31a
Older versions are too restrictive:
No overlays
No macros
Macros should be used explicitly if there is a performance overhead
Macros, especially parsing, are too slow!
Representation in type is still necessary?
Using compound stack makes representations unnecessary, but takes more time and memory
As long as list tags are homogeneous, representations are still necessary?
Selective monomorphization?
Remove two-level type theory for a while?
Compile-time only things no longer exist
All we need is a better way to control optimization
Runtime only things still exist (e.g. commands)
Even runtime-only things no longer exist by adding the special world type
Dynamic command generation
Arbitrary command generation is unsafe!
Appropriate abstraction is necessary
Type-safe macros using powerful type system?
Macro definitions?
To explicitly inform overhead of macros
Can always be used as a function definition
Heaps
Typed list heaps that can be accessed in Θ(1) time?
$data get storage heap: string[$(index)]
Typed array heaps using ByteArrayTag/IntArrayTag/LongArrayTag?
This means that we don't need the heap for values with a lexical lifetime!
The heap is used for passing values to the future contexts
Selective parameter specialization?
Similar to polymorphism using intensional type analysis
Explicitly select parameters to ensure optimization
How to statically ensure that a given parameter is in canonical form without 2LTT?
Phase system?
Orthogonal to type system?
Sub-phasing const <: world
Examples:
/command :: world
0 :: const
world def seed() : i32
seed() :: world
def +(a : i32, b : i32) : i32
+(0, 1) :: const
+(seed(), 1) :: world
+(0, seed()) :: world
+(seed(), seed()) :: world
let x := seed(); x :: world
let x := {a: 0, b: seed()}; x.a :: const?
let x := {a: 0, b: seed()}; x.b :: world?
the appropriate version after23w31a23w31atypeis still necessary?Runtime only things still exist (e.g. commands)worldtypeByteArrayTag/IntArrayTag/LongArrayTag?const <: worldEffect system?α <: α ! { world }Can't use commands in compile-timeworldtypeNo canonicityworldtype