SkillAgentSearch skills...

K.jl

K programming language dialect embedded in Julia

Install / Use

/learn @andreypopp/K.jl
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

K.jl

WARNING: EXPERIMENTAL, DO NOT USE

K programming language dialect embedded in Julia, inspired by ngn/k.

Installation

The package is not registered and therefore requires cloning the repo with development environment:

$ git clone --recursive https://github.com/andreypopp/K.jl
$ cd K.jl
$ julia
julia> using Pkg
julia> Pkg.activate(".")
julia> Pkg.instantiate()

Usage

Start julia and:

julia> using K

julia> k"+/1 2 3 4"
10

The K REPL can be entered via \ key:

  +/1 2 3 4
10

Motivation

K.jl is not an independent implementation of K programming language but a notation to manipulate native Julia data structures.

K.jl works by parsing a string with K notation and turning it into Julia AST, you can of think of K.jl as of a non-trivial macro. Fortunately semantics of K and Julia are not so different and thus K.jl is relatively simple.

Why K though? K is terse and expressive. Programs in K are very small and it is easier to keep them entirely in one's head. K programs can be used for communication (it's easier to send a K one liner, the information density is high).

Status & Roadmap

K.jl is wildly incomplete at this point, any help would be very much appreciated, list of incomplete items include:

  • special forms
    • [ ] (x;..):y unpack
    • [ ] o[..] recur
    • [ ] nv:x reassignment
    • [ ] n[..]:x indexed assignment
  • verbs
    • [ ] s$y cast
    • [ ] s$y int
    • [ ] $x string
    • [ ] i$C pad
    • [ ] s$y cast
    • [ ] ?i uniform
    • [ ] .S get
    • [ ] .C eval
    • [ ] @x type missing impl for function values
    • [ ] @[x;y;f] amend
    • [ ] @[x;y;F;z] amend
    • [ ] .[x;y;f] drill
    • [ ] .[x;y;F;z] drill
    • [ ] .[f;y;f] try
    • [ ] ?[x;y;z] splice
  • adverbs
    • [ ] X' binsearch
    • [ ] I/ decode missing impl for higher rank arrays
    • [ ] I\ encode missing impl for higher rank arrays
  • [-] tables
    • [x] tables are supported through TypedTables package
    • [ ] support from most of primitives are missing
  • [ ] pretty printer / value string representation

Development

$ julia
julia> using Pkg
julia> Pkg.activate(".")
julia> Pkg.develop("./K.jl")
julia> Pkg.develop("./NarrativeTest.jl")
julia> Pkg.instantiate()

To run tests:

$ make test

To run tests (compat with ngn/k, very broken, not a goal but helps guiding K.jl):

$ make test-ngn

Related Skills

View on GitHub
GitHub Stars18
CategoryDevelopment
Updated1y ago
Forks2

Languages

Julia

Security Score

80/100

Audited on Jun 8, 2024

No findings