I think most of my comments and error messages are written in Portuguese, but this is only a prototype, so please ignore that.

Kata manages memory with per-fiber bump arenas backed by structured concurrency — no garbage collector, no borrow checker, no reference counting; escape analysis decides at compile time whether each value stays local or escapes to the caller's arena, and ; in actions distinguishes "local computation" from "value that escapes." Refined types (data (Int, > _ 0) as PositiveInt) carry logical predicates validated at compile time, participate in multiple dispatch, and can delegate interface implementations to their base type through refines — a fallback mechanism with no equivalent in Rust or Haskell. The pure/impure boundary is not a monad you thread through your code — functions (lambda) and actions (action) are separate syntactic domains with their own structural rules, enforced at compile time; where Haskell tracks purity through IO as a type-level effect, Kata makes it a property of the syntax you write.


Memory

• Kata: Per-fiber bump arenas + escape analysis; no GC, no borrow checker

• Python: Refcounting + cycle GC

• Haskell: Tracing GC

• Rust: Ownership + borrow checker


Refined types

• Kata: data (Int, > _ 0) as PositiveInt — predicates validated at compile time, participate in dispatch, refines delegates interfaces to base

• Python: Not available

• Haskell: Liquid Haskell (external plugin, not core)

• Rust: Not available


Purity

• Kata: Physical barrier: separate syntax, operators, structural rules

• Python: Not enforced

• Haskell: Monadic IO (type-level effect)

• Rust: Not enforced


Conditionals

• Kata: Pattern matching + guards (exhaustiveness enforced)

• Python: if/elif/else

• Haskell: if + pattern matching

• Rust: if + match


Backend • Kata: Cranelift JIT/AOT (native, no VM)

• Python: CPython interpreter

• Haskell: GHC (LLVM/native)

• Rust: LLVM (native)

The repo is at github.com/ArthurJ/Kata — build with cargo build, then try kata repl, kata run examples/, or kata test. I'd love feedback on the language design: what feels right, what feels wrong, what you'd do differently.

action greet (name::Text) => Unit
    echo!(+ "Hello, " (+ name "!"))

action main
    greet!("World")
    greet!("Kata")

main!()
enum BMI
    Underweight(< _ 18.5)
    Normal(<= _ 25.0)
    Overweight(<= _ 30.0)
    Obese

action main
    echo!(BMI 17.0)
    echo!(BMI 22.0)
    echo!(BMI 27.0)
    echo!(BMI 35.0)
main!()
fizzbuzz :: Int => Text
lambda x:
    both: "FizzBuzz"
    fizz: "Fizz"
    buzz: "Buzz"
    otherwise: show x
    with
        fizz := divisible x 3
        buzz := divisible x 5
        both := and fizz buzz


divisible :: Int Int => Boolean
lambda x n:
    match div x n
        Ok q: = x (* n q)
        Err _: Boolean::False


action main
    for i in [1..16]
        echo!(fizzbuzz i)


main!()

no comments (yet)

sorted by: hot top controversial new old
there doesn't seem to be anything here
3 comments in c/programming_languages@programming.dev view that post
[–] 2 points 3 days ago* (last edited 3 days ago) (2 children)

Gostei de ver! Pode ser capaz de liberar-nos da porcaria que é lua, lol Sera que tem como desenhar "constraints" parametricos para componentes de structs? Nao estou em casa, ainda nao posso esperimentar, mas sera que da para ter terminador/juntador de blocos? Seria triste se seguise o python em o amor de espaços syntacticos. Tems algum projecto em mente que queres implementar nele? Se ainda nao, sera que ja consideras-te formalizacao? Se adicionar constraints parametricos, estarias em bom caminho para Relational Type Theory (RelTT). Se supportar row polymorphism (do Wand) seria o meu sonho :)

  • source
  • hideshow 2 child comments
  • [–] [S] 1 point 2 days ago

    Cara, não conheço o Wand mas vou dar uma olhada. Não considero terminado, quero unificar Tuplas e Structs, formalizar a sintaxe de arquivos e sockets num "reino" separado de data, flexibilizar algumas amarras e fazer algumas outras mudanças ainda, mas num passo menos frenético; essa versão do projeto foi feita em menos de 2 meses. Mas diria que está perto de 95% do que eu queria.

  • source
  • parent