home.social

#uxntal — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #uxntal, aggregated by home.social.

fetched live
  1. CW: long code snippet, not screen-reader friendly

    @snufkin_vc

    using my fork of drifblim, OOP and inheritance looks like this:

    @animal
    
    ( | type enum )
    >{ |0 &+ |}
    
    ( | dispatch tables )
    @/[]eat   &+ $10 @/
    @/[]speak &+ $10 @/
    @/[]move  &+ $10 @/
    
    &default-eat ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-speak ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-move ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    ( | init defaults )
    %/Def{ {
        >{
            |&[]eat/+   =&default-eat
            |&[]speak/+ =&default-speak
            |&[]move/+  =&default-move
            |&+
    }
    
    ( | bump pointers )
    %/Def} {
            |&+ $1 &+
            |&[]eat/+   $2 &[]eat/+
            |&[]speak/+ $2 &[]speak/+
            |&[]move/+  $2 &[]move/+
        |}
    }
    
    (
    @|Cat )
    /Def{ &Cat
        |&[]speak/+ =&Cat/speak
    /Def}
    
    @/Cat
        &speak ( self* -- )
            { "meow! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Dog )
    /Def{ &Dog
        |&[]speak/+ =&Dog/speak
    /Def}
    
    @/Dog
        &speak ( self* -- )
            { "woof! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Flying )
    %/Flying/Def{ { /Def{
        |&[]move/+ =&Flying/move
        |&+
    }
    
    %/Flying/Def} {
        /Def}
    }
    
    @/Flying
        &move ( self* -- )
            { "swoosh... 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bird )
    /Flying/Def{ &Bird
        |&[]speak/+ =&Bird/speak
    /Flying/Def}
    
    @/Bird
        &speak ( self* -- )
            { "chirp! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bat )
    /Flying/Def{ &Bat
        |&[]speak/+ =&Bat/speak
    /Flying/Def}
    
    @/Bat
        &speak ( self* -- )
            { "eep! 00 } STH2r str/print
            POP2 JMP2r
    @/
    

    #uxn #uxntal
  2. CW: long code snippet, not screen-reader friendly

    @snufkin_vc

    using my fork of drifblim, OOP and inheritance looks like this:

    @animal
    
    ( | type enum )
    >{ |0 &+ |}
    
    ( | dispatch tables )
    @/[]eat   &+ $10 @/
    @/[]speak &+ $10 @/
    @/[]move  &+ $10 @/
    
    &default-eat ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-speak ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-move ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    ( | init defaults )
    %/Def{ {
        >{
            |&[]eat/+   =&default-eat
            |&[]speak/+ =&default-speak
            |&[]move/+  =&default-move
            |&+
    }
    
    ( | bump pointers )
    %/Def} {
            |&+ $1 &+
            |&[]eat/+   $2 &[]eat/+
            |&[]speak/+ $2 &[]speak/+
            |&[]move/+  $2 &[]move/+
        |}
    }
    
    (
    @|Cat )
    /Def{ &Cat
        |&[]speak/+ =&Cat/speak
    /Def}
    
    @/Cat
        &speak ( self* -- )
            { "meow! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Dog )
    /Def{ &Dog
        |&[]speak/+ =&Dog/speak
    /Def}
    
    @/Dog
        &speak ( self* -- )
            { "woof! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Flying )
    %/Flying/Def{ { /Def{
        |&[]move/+ =&Flying/move
        |&+
    }
    
    %/Flying/Def} {
        /Def}
    }
    
    @/Flying
        &move ( self* -- )
            { "swoosh... 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bird )
    /Flying/Def{ &Bird
        |&[]speak/+ =&Bird/speak
    /Flying/Def}
    
    @/Bird
        &speak ( self* -- )
            { "chirp! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bat )
    /Flying/Def{ &Bat
        |&[]speak/+ =&Bat/speak
    /Flying/Def}
    
    @/Bat
        &speak ( self* -- )
            { "eep! 00 } STH2r str/print
            POP2 JMP2r
    @/
    

    #uxn #uxntal
  3. CW: long code snippet, not screen-reader friendly

    @snufkin_vc

    using my fork of drifblim, OOP and inheritance looks like this:

    @animal
    
    ( | type enum )
    >{ |0 &+ |}
    
    ( | dispatch tables )
    @/[]eat   &+ $10 @/
    @/[]speak &+ $10 @/
    @/[]move  &+ $10 @/
    
    &default-eat ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-speak ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-move ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    ( | init defaults )
    %/Def{ {
        >{
            |&[]eat/+   =&default-eat
            |&[]speak/+ =&default-speak
            |&[]move/+  =&default-move
            |&+
    }
    
    ( | bump pointers )
    %/Def} {
            |&+ $1 &+
            |&[]eat/+   $2 &[]eat/+
            |&[]speak/+ $2 &[]speak/+
            |&[]move/+  $2 &[]move/+
        |}
    }
    
    (
    @|Cat )
    /Def{ &Cat
        |&[]speak/+ =&Cat/speak
    /Def}
    
    @/Cat
        &speak ( self* -- )
            { "meow! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Dog )
    /Def{ &Dog
        |&[]speak/+ =&Dog/speak
    /Def}
    
    @/Dog
        &speak ( self* -- )
            { "woof! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Flying )
    %/Flying/Def{ { /Def{
        |&[]move/+ =&Flying/move
        |&+
    }
    
    %/Flying/Def} {
        /Def}
    }
    
    @/Flying
        &move ( self* -- )
            { "swoosh... 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bird )
    /Flying/Def{ &Bird
        |&[]speak/+ =&Bird/speak
    /Flying/Def}
    
    @/Bird
        &speak ( self* -- )
            { "chirp! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bat )
    /Flying/Def{ &Bat
        |&[]speak/+ =&Bat/speak
    /Flying/Def}
    
    @/Bat
        &speak ( self* -- )
            { "eep! 00 } STH2r str/print
            POP2 JMP2r
    @/
    

    #uxn #uxntal
  4. CW: long code snippet, not screen-reader friendly

    @snufkin_vc

    using my fork of drifblim, OOP and inheritance looks like this:

    @animal
    
    ( | type enum )
    >{ |0 &+ |}
    
    ( | dispatch tables )
    @/[]eat   &+ $10 @/
    @/[]speak &+ $10 @/
    @/[]move  &+ $10 @/
    
    &default-eat ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-speak ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    &default-move ( self* -- )
        { "... 00 } STH2r str/print
        POP2 JMP2r
    
    ( | init defaults )
    %/Def{ {
        >{
            |&[]eat/+   =&default-eat
            |&[]speak/+ =&default-speak
            |&[]move/+  =&default-move
            |&+
    }
    
    ( | bump pointers )
    %/Def} {
            |&+ $1 &+
            |&[]eat/+   $2 &[]eat/+
            |&[]speak/+ $2 &[]speak/+
            |&[]move/+  $2 &[]move/+
        |}
    }
    
    (
    @|Cat )
    /Def{ &Cat
        |&[]speak/+ =&Cat/speak
    /Def}
    
    @/Cat
        &speak ( self* -- )
            { "meow! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Dog )
    /Def{ &Dog
        |&[]speak/+ =&Dog/speak
    /Def}
    
    @/Dog
        &speak ( self* -- )
            { "woof! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Flying )
    %/Flying/Def{ { /Def{
        |&[]move/+ =&Flying/move
        |&+
    }
    
    %/Flying/Def} {
        /Def}
    }
    
    @/Flying
        &move ( self* -- )
            { "swoosh... 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bird )
    /Flying/Def{ &Bird
        |&[]speak/+ =&Bird/speak
    /Flying/Def}
    
    @/Bird
        &speak ( self* -- )
            { "chirp! 00 } STH2r str/print
            POP2 JMP2r
    @/
    
    (
    @|Bat )
    /Flying/Def{ &Bat
        |&[]speak/+ =&Bat/speak
    /Flying/Def}
    
    @/Bat
        &speak ( self* -- )
            { "eep! 00 } STH2r str/print
            POP2 JMP2r
    @/
    

    #uxn #uxntal
  5. Ported the uxntal.vim syntax highlighting plugin over to Lua for Neovim.

    Adds :checkhealth functionality, matchpairs support (so % jumps between pairs), and vimdocs (:h uxntal).

    github.com/edmondburnett/uxnta

    #uxn #uxntal #neovim

  6. Ported the uxntal.vim syntax highlighting plugin over to Lua for Neovim.

    Adds :checkhealth functionality, matchpairs support (so % jumps between pairs), and vimdocs (:h uxntal).

    github.com/edmondburnett/uxnta

    #uxn #uxntal #neovim

  7. Ported the uxntal.vim syntax highlighting plugin over to Lua for Neovim.

    Adds :checkhealth functionality, matchpairs support (so % jumps between pairs), and vimdocs (:h uxntal).

    github.com/edmondburnett/uxnta

    #uxn #uxntal #neovim

  8. Ported the uxntal.vim syntax highlighting plugin over to Lua for Neovim.

    Adds :checkhealth functionality, matchpairs support (so % jumps between pairs), and vimdocs (:h uxntal).

    github.com/edmondburnett/uxnta

    #uxn #uxntal #neovim

  9. I'm starting a blog today at Uxnomicon so I dont flood the #uxn #uxntal and #varvara or the irc channel lol

    Sorry about that, sometimes I feel to exited and start talking to myself, but I don't want to spam anyone.

    If you are a Uxner, feel free to use Uxnomicon for your dev blog (about uxn related) or for your uxn projects documentation, you don't even need to register to contribute to this uxn wiki.

    uxnomicon.miraheze.org/wiki/Sn

  10. I'm starting a blog today at Uxnomicon so I dont flood the #uxn #uxntal and #varvara or the irc channel lol

    Sorry about that, sometimes I feel to exited and start talking to myself, but I don't want to spam anyone.

    If you are a Uxner, feel free to use Uxnomicon for your dev blog (about uxn related) or for your uxn projects documentation, you don't even need to register to contribute to this uxn wiki.

    uxnomicon.miraheze.org/wiki/Sn

  11. I'm starting a blog today at Uxnomicon so I dont flood the #uxn #uxntal and #varvara or the irc channel lol

    Sorry about that, sometimes I feel to exited and start talking to myself, but I don't want to spam anyone.

    If you are a Uxner, feel free to use Uxnomicon for your dev blog (about uxn related) or for your uxn projects documentation, you don't even need to register to contribute to this uxn wiki.

    uxnomicon.miraheze.org/wiki/Sn

  12. I'm starting a blog today at Uxnomicon so I dont flood the #uxn #uxntal and #varvara or the irc channel lol

    Sorry about that, sometimes I feel to exited and start talking to myself, but I don't want to spam anyone.

    If you are a Uxner, feel free to use Uxnomicon for your dev blog (about uxn related) or for your uxn projects documentation, you don't even need to register to contribute to this uxn wiki.

    uxnomicon.miraheze.org/wiki/Sn

  13. Uxntal scripting unlocked!

    paste.sr.ht/~ismael-vc/88d172d

    Paired with uxncli11 subproccess API, I can actually run my own build chain in uxntal alone.

    I'm calling it bake, first to be used in the uxntal koans:

    git.sr.ht/~ismael-vc/uxntal-ko

    I am currently using a wrapper in gforth, but now that I can use shebangs for uxn I don't think I need that anymore! <3

    #uxn #uxntal #varvara

  14. Uxntal scripting unlocked!

    paste.sr.ht/~ismael-vc/88d172d

    Paired with uxncli11 subproccess API, I can actually run my own build chain in uxntal alone.

    I'm calling it bake, first to be used in the uxntal koans:

    git.sr.ht/~ismael-vc/uxntal-ko

    I am currently using a wrapper in gforth, but now that I can use shebangs for uxn I don't think I need that anymore! <3

    #uxn #uxntal #varvara

  15. Uxntal scripting unlocked!

    paste.sr.ht/~ismael-vc/88d172d

    Paired with uxncli11 subproccess API, I can actually run my own build chain in uxntal alone.

    I'm calling it bake, first to be used in the uxntal koans:

    git.sr.ht/~ismael-vc/uxntal-ko

    I am currently using a wrapper in gforth, but now that I can use shebangs for uxn I don't think I need that anymore! <3

    #uxn #uxntal #varvara

  16. Uxntal scripting unlocked!

    paste.sr.ht/~ismael-vc/88d172d

    Paired with uxncli11 subproccess API, I can actually run my own build chain in uxntal alone.

    I'm calling it bake, first to be used in the uxntal koans:

    git.sr.ht/~ismael-vc/uxntal-ko

    I am currently using a wrapper in gforth, but now that I can use shebangs for uxn I don't think I need that anymore! <3

    #uxn #uxntal #varvara

  17. yeyyy we have assert-mem with colors! 🎨

    Do you think it is readable? the test source and the output?

    The implementation just give me time to make it better, but I'm glad this works now.

    Now I only have to fix the stack checking assertion and I think it is complete, and ready fro the uxntal koans. ✅

    I'll have to provide my own copy of drifblim with coloring, because the first exercise will be to fix the syntax of a broken test suite, then to actually fix the tests!

    #uxn #uxntal #varvara

  18. yeyyy we have assert-mem with colors! 🎨

    Do you think it is readable? the test source and the output?

    The implementation just give me time to make it better, but I'm glad this works now.

    Now I only have to fix the stack checking assertion and I think it is complete, and ready fro the uxntal koans. ✅

    I'll have to provide my own copy of drifblim with coloring, because the first exercise will be to fix the syntax of a broken test suite, then to actually fix the tests!

    #uxn #uxntal #varvara

  19. yeyyy we have assert-mem with colors! 🎨

    Do you think it is readable? the test source and the output?

    The implementation just give me time to make it better, but I'm glad this works now.

    Now I only have to fix the stack checking assertion and I think it is complete, and ready fro the uxntal koans. ✅

    I'll have to provide my own copy of drifblim with coloring, because the first exercise will be to fix the syntax of a broken test suite, then to actually fix the tests!

    #uxn #uxntal #varvara

  20. yeyyy we have assert-mem with colors! 🎨

    Do you think it is readable? the test source and the output?

    The implementation just give me time to make it better, but I'm glad this works now.

    Now I only have to fix the stack checking assertion and I think it is complete, and ready fro the uxntal koans. ✅

    I'll have to provide my own copy of drifblim with coloring, because the first exercise will be to fix the syntax of a broken test suite, then to actually fix the tests!

    #uxn #uxntal #varvara

  21. Just finished the stream!

    I implemented some debugging routines inspired by @ show macro in julia, I defined @ show/byte and @ show/short
    ie:

    ( introspection )
    { "@ foo } ;foo show/byte
    { "@ bar } ;bar show/short

    BRK

    ( variables )
    |1335 @ foo [ 42 ]
    |1337 @ bar [ 1337 ]

    ~src/zen.tal

    it get printed like (with colors if enabled)

    |04f8 @ foo 42 ( B )
    |04f9 @ bar 1337 ( .7 )

    #uxn #uxntal #varvara

  22. Just finished the stream!

    I implemented some debugging routines inspired by @ show macro in julia, I defined @ show/byte and @ show/short
    ie:

    ( introspection )
    { "@ foo } ;foo show/byte
    { "@ bar } ;bar show/short

    BRK

    ( variables )
    |1335 @ foo [ 42 ]
    |1337 @ bar [ 1337 ]

    ~src/zen.tal

    it get printed like (with colors if enabled)

    |04f8 @ foo 42 ( B )
    |04f9 @ bar 1337 ( .7 )

    #uxn #uxntal #varvara

  23. Just finished the stream!

    I implemented some debugging routines inspired by @ show macro in julia, I defined @ show/byte and @ show/short
    ie:

    ( introspection )
    { "@ foo } ;foo show/byte
    { "@ bar } ;bar show/short

    BRK

    ( variables )
    |1335 @ foo [ 42 ]
    |1337 @ bar [ 1337 ]

    ~src/zen.tal

    it get printed like (with colors if enabled)

    |04f8 @ foo 42 ( B )
    |04f9 @ bar 1337 ( .7 )

    #uxn #uxntal #varvara

  24. Just finished the stream!

    I implemented some debugging routines inspired by @ show macro in julia, I defined @ show/byte and @ show/short
    ie:

    ( introspection )
    { "@ foo } ;foo show/byte
    { "@ bar } ;bar show/short

    BRK

    ( variables )
    |1335 @ foo [ 42 ]
    |1337 @ bar [ 1337 ]

    ~src/zen.tal

    it get printed like (with colors if enabled)

    |04f8 @ foo 42 ( B )
    |04f9 @ bar 1337 ( .7 )

    #uxn #uxntal #varvara

  25. I made some progress on the "Uxntal Koans":

    git.sr.ht/~ismael-vc/uxntal-ko

    Since this is for the #catjam, I decided to manage my own build tool in Tal with a thin wrapper in Forth, so I just call:

    $ ./bake
    $ ./bake clean

    Instead of:

    $ bin/uxncli bin/bakefile.rom clean

    And the setup has to be done either way outside uxntal; make sure bin dir exists, compile uxncli with subprocess support and assemble the bakefile.tal.

    Once that is done, the rest will be handled 100% by uxn!

    #uxn #uxntal #varvara

  26. I made some progress on the "Uxntal Koans":

    git.sr.ht/~ismael-vc/uxntal-ko

    Since this is for the #catjam, I decided to manage my own build tool in Tal with a thin wrapper in Forth, so I just call:

    $ ./bake
    $ ./bake clean

    Instead of:

    $ bin/uxncli bin/bakefile.rom clean

    And the setup has to be done either way outside uxntal; make sure bin dir exists, compile uxncli with subprocess support and assemble the bakefile.tal.

    Once that is done, the rest will be handled 100% by uxn!

    #uxn #uxntal #varvara

  27. I made some progress on the "Uxntal Koans":

    git.sr.ht/~ismael-vc/uxntal-ko

    Since this is for the #catjam, I decided to manage my own build tool in Tal with a thin wrapper in Forth, so I just call:

    $ ./bake
    $ ./bake clean

    Instead of:

    $ bin/uxncli bin/bakefile.rom clean

    And the setup has to be done either way outside uxntal; make sure bin dir exists, compile uxncli with subprocess support and assemble the bakefile.tal.

    Once that is done, the rest will be handled 100% by uxn!

    #uxn #uxntal #varvara

  28. I made some progress on the "Uxntal Koans":

    git.sr.ht/~ismael-vc/uxntal-ko

    Since this is for the #catjam, I decided to manage my own build tool in Tal with a thin wrapper in Forth, so I just call:

    $ ./bake
    $ ./bake clean

    Instead of:

    $ bin/uxncli bin/bakefile.rom clean

    And the setup has to be done either way outside uxntal; make sure bin dir exists, compile uxncli with subprocess support and assemble the bakefile.tal.

    Once that is done, the rest will be handled 100% by uxn!

    #uxn #uxntal #varvara

  29. Zental testing framework in 1 KiB for Uxntal, version 1.0.0!

    Code:
    git.sr.ht/~ismael-vc/zental

    Docs and examples:
    uxnomicon.miraheze.org/wiki/Ze

    I still have one month before the #catjam ends in which I'll try to implement "Uxntal Koans". 📜

    Inspired by the original "Ruby Koans", an introductory tutorial to the language as a series of test cases the learner has to fix in order to reach enlightenment! 🧘

    I intended to make a TUI game at first but I like the idea of koans better. :P

    #uxn #uxntal #varvara

  30. Zental testing framework in 1 KiB for Uxntal, version 1.0.0!

    Code:
    git.sr.ht/~ismael-vc/zental

    Docs and examples:
    uxnomicon.miraheze.org/wiki/Ze

    I still have one month before the #catjam ends in which I'll try to implement "Uxntal Koans". 📜

    Inspired by the original "Ruby Koans", an introductory tutorial to the language as a series of test cases the learner has to fix in order to reach enlightenment! 🧘

    I intended to make a TUI game at first but I like the idea of koans better. :P

    #uxn #uxntal #varvara

  31. Zental testing framework in 1 KiB for Uxntal, version 1.0.0!

    Code:
    git.sr.ht/~ismael-vc/zental

    Docs and examples:
    uxnomicon.miraheze.org/wiki/Ze

    I still have one month before the #catjam ends in which I'll try to implement "Uxntal Koans". 📜

    Inspired by the original "Ruby Koans", an introductory tutorial to the language as a series of test cases the learner has to fix in order to reach enlightenment! 🧘

    I intended to make a TUI game at first but I like the idea of koans better. :P

    #uxn #uxntal #varvara

  32. Zental testing framework in 1 KiB for Uxntal, version 1.0.0!

    Code:
    git.sr.ht/~ismael-vc/zental

    Docs and examples:
    uxnomicon.miraheze.org/wiki/Ze

    I still have one month before the #catjam ends in which I'll try to implement "Uxntal Koans". 📜

    Inspired by the original "Ruby Koans", an introductory tutorial to the language as a series of test cases the learner has to fix in order to reach enlightenment! 🧘

    I intended to make a TUI game at first but I like the idea of koans better. :P

    #uxn #uxntal #varvara

  33. I spent the night fixing my zen #uxntal testing lib, the documentation is updated:

    uxnomicon.miraheze.org/wiki/Ze

    Added:
    * ValueError if expression is not reduced to 00 or 01.
    * ArityError (OverLeak and UnderLeak) if wst is not in an expected state before running a test and halt immediately.
    * early toggle to exit on the first failed test (default is to keep going).

    With this I think I can start implementing uxntal koans. :)

    200 lines of code, 1042 bytes gotta shave 18 bytes at least.

    almost done!

  34. I spent the night fixing my zen #uxntal testing lib, the documentation is updated:

    uxnomicon.miraheze.org/wiki/Ze

    Added:
    * ValueError if expression is not reduced to 00 or 01.
    * ArityError (OverLeak and UnderLeak) if wst is not in an expected state before running a test and halt immediately.
    * early toggle to exit on the first failed test (default is to keep going).

    With this I think I can start implementing uxntal koans. :)

    200 lines of code, 1042 bytes gotta shave 18 bytes at least.

    almost done!

  35. I spent the night fixing my zen #uxntal testing lib, the documentation is updated:

    uxnomicon.miraheze.org/wiki/Ze

    Added:
    * ValueError if expression is not reduced to 00 or 01.
    * ArityError (OverLeak and UnderLeak) if wst is not in an expected state before running a test and halt immediately.
    * early toggle to exit on the first failed test (default is to keep going).

    With this I think I can start implementing uxntal koans. :)

    200 lines of code, 1042 bytes gotta shave 18 bytes at least.

    almost done!

  36. I spent the night fixing my zen #uxntal testing lib, the documentation is updated:

    uxnomicon.miraheze.org/wiki/Ze

    Added:
    * ValueError if expression is not reduced to 00 or 01.
    * ArityError (OverLeak and UnderLeak) if wst is not in an expected state before running a test and halt immediately.
    * early toggle to exit on the first failed test (default is to keep going).

    With this I think I can start implementing uxntal koans. :)

    200 lines of code, 1042 bytes gotta shave 18 bytes at least.

    almost done!

  37. CW: cursed code, not screen-reader friendly

    in vanilla uxntal this would look like

    @type
    &Frob $1
    &Knob $1
    &Smob $1
    
    ...
    
    &vtable
    =&frobnicate
    =&knobnicate
    =&smobnicate
    

    much simpler, yes!

    but now the definitions are spread across multiple places, forget splitting entities into their own files…


    #uxntal #uxn
  38. CW: cursed code, not screen-reader friendly

    in vanilla uxntal this would look like

    @type
    &Frob $1
    &Knob $1
    &Smob $1
    
    ...
    
    &vtable
    =&frobnicate
    =&knobnicate
    =&smobnicate
    

    much simpler, yes!

    but now the definitions are spread across multiple places, forget splitting entities into their own files…


    #uxntal #uxn
  39. CW: cursed code, not screen-reader friendly

    in vanilla uxntal this would look like

    @type
    &Frob $1
    &Knob $1
    &Smob $1
    
    ...
    
    &vtable
    =&frobnicate
    =&knobnicate
    =&smobnicate
    

    much simpler, yes!

    but now the definitions are spread across multiple places, forget splitting entities into their own files…


    #uxntal #uxn
  40. CW: cursed code, not screen-reader friendly

    hacked modifiable labels into uxntal, for spooky action at a distance :P

    |0 @type/Ptr+
    
    ...
    
    @type
    %/[ { >{  ( } ) |&Ptr+ }
    %/] { &Ptr+ |}_ } 
    
    &vtable &vtable/Ptr+
    %/{ { >{ ( } ) |&vtable/Ptr+ }
    %/} { &vtable/Ptr+ |}_ }
    
    &dispatch ( type -- )
      #0018 SFT2 ;&vtable ADD2 LDA2 JMP2
    
    ~frob.tal
    ~knob.tal
    ~smob.tal
    
    ( | frob.tal )
    /[ &Frob $1 /]
    /{ =&frobnicate /}
    &frobnicate ( -- ) JMP2r
    

    makes organizing OOP stuff a lot easier!


    #uxntal #uxn #0018 #0018
  41. CW: cursed code, not screen-reader friendly

    hacked modifiable labels into uxntal, for spooky action at a distance :P

    |0 @type/Ptr+
    
    ...
    
    @type
    %/[ { >{  ( } ) |&Ptr+ }
    %/] { &Ptr+ |}_ } 
    
    &vtable &vtable/Ptr+
    %/{ { >{ ( } ) |&vtable/Ptr+ }
    %/} { &vtable/Ptr+ |}_ }
    
    &dispatch ( type -- )
      #0018 SFT2 ;&vtable ADD2 LDA2 JMP2
    
    ~frob.tal
    ~knob.tal
    ~smob.tal
    
    ( | frob.tal )
    /[ &Frob $1 /]
    /{ =&frobnicate /}
    &frobnicate ( -- ) JMP2r
    

    makes organizing OOP stuff a lot easier!


    #uxntal #uxn #0018 #0018
  42. CW: cursed code, not screen-reader friendly

    hacked modifiable labels into uxntal, for spooky action at a distance :P

    |0 @type/Ptr+
    
    ...
    
    @type
    %/[ { >{  ( } ) |&Ptr+ }
    %/] { &Ptr+ |}_ } 
    
    &vtable &vtable/Ptr+
    %/{ { >{ ( } ) |&vtable/Ptr+ }
    %/} { &vtable/Ptr+ |}_ }
    
    &dispatch ( type -- )
      #0018 SFT2 ;&vtable ADD2 LDA2 JMP2
    
    ~frob.tal
    ~knob.tal
    ~smob.tal
    
    ( | frob.tal )
    /[ &Frob $1 /]
    /{ =&frobnicate /}
    &frobnicate ( -- ) JMP2r
    

    makes organizing OOP stuff a lot easier!


    #uxntal #uxn #0018 #0018
  43. Take a seat aboard the Lepore Express, listen to a bit of music, play games, look outside, kickback, try to meet with everyone.

    This is @rek and I's humble submission to #Catjam 2026, this rom features a ton of cameos from all sorts of projects we've released over the past 10 years, how many can you recognize? It's written in #Uxntal, a concatenative assembly language.

    play/download: hundredrabbits.itch.io/lepore-
    source: wiki.xxiivv.com/etc/flick.tal.

  44. Take a seat aboard the Lepore Express, listen to a bit of music, play games, look outside, kickback, try to meet with everyone.

    This is @rek and I's humble submission to #Catjam 2026, this rom features a ton of cameos from all sorts of projects we've released over the past 10 years, how many can you recognize? It's written in #Uxntal, a concatenative assembly language.

    play/download: hundredrabbits.itch.io/lepore-
    source: wiki.xxiivv.com/etc/flick.tal.

  45. Take a seat aboard the Lepore Express, listen to a bit of music, play games, look outside, kickback, try to meet with everyone.

    This is @rek and I's humble submission to #Catjam 2026, this rom features a ton of cameos from all sorts of projects we've released over the past 10 years, how many can you recognize? It's written in #Uxntal, a concatenative assembly language.

    play/download: hundredrabbits.itch.io/lepore-
    source: wiki.xxiivv.com/etc/flick.tal.

  46. Take a seat aboard the Lepore Express, listen to a bit of music, play games, look outside, kickback, try to meet with everyone.

    This is @rek and I's humble submission to #Catjam 2026, this rom features a ton of cameos from all sorts of projects we've released over the past 10 years, how many can you recognize? It's written in #Uxntal, a concatenative assembly language.

    play/download: hundredrabbits.itch.io/lepore-
    source: wiki.xxiivv.com/etc/flick.tal.