Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andreypopp/k.jl
K programming language dialect embedded in Julia
https://github.com/andreypopp/k.jl
array-language julia julia-lang
Last synced: 28 days ago
JSON representation
K programming language dialect embedded in Julia
- Host: GitHub
- URL: https://github.com/andreypopp/k.jl
- Owner: andreypopp
- License: mit
- Created: 2022-05-12T12:43:58.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-12-02T15:17:51.000Z (12 months ago)
- Last Synced: 2024-10-05T13:59:01.608Z (about 1 month ago)
- Topics: array-language, julia, julia-lang
- Language: Julia
- Homepage:
- Size: 192 KB
- Stars: 18
- Watchers: 3
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# K.jl
**WARNING: EXPERIMENTAL, DO NOT USE**
[K programming language][K] 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"
10The 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
[Julia]: https://julialang.org
[K]: https://en.wikipedia.org/wiki/K_(programming_language)
[ngn/k]: https://codeberg.org/ngn/k