TODO.md (3068B)
1 # NickelEval.jl - Status & TODOs 2 3 ## Current Version: v0.7.0 4 5 ## Completed Features 6 7 ### Core Evaluation 8 - **Subprocess evaluation** - `nickel_eval`, `nickel_eval_file`, `nickel_read` via Nickel CLI 9 - **FFI native evaluation** - `nickel_eval_native` via Rust binary protocol 10 - **FFI file evaluation** - `nickel_eval_file_native` with import support 11 - **FFI JSON evaluation** - `nickel_eval_ffi` with typed parsing support 12 13 ### Type System 14 - **Primitives**: `Int64`, `Float64`, `Bool`, `String`, `Nothing` 15 - **Compounds**: `Vector{Any}`, `Dict{String, Any}` 16 - **Enums**: `NickelEnum` with `tag::Symbol` and `arg::Any` 17 - Simple enums: `'Foo` → `NickelEnum(:Foo, nothing)` 18 - With arguments: `'Some 42` → `NickelEnum(:Some, 42)` 19 - Nested enums, arrays of enums, enums in records 20 - Pattern matching support 21 - Pretty printing: `'Some 42` 22 23 ### Export Functions 24 - `nickel_to_json`, `nickel_to_toml`, `nickel_to_yaml` via subprocess 25 26 ### Infrastructure 27 - Documentation site: https://louloulibs.github.io/NickelEval/dev/ 28 - 180 tests passing (53 subprocess + 127 FFI) 29 - CI: tests + documentation deployment 30 - Registry: loulouJL 31 32 --- 33 34 ## Next Steps 35 36 ### 1. Cross-Platform FFI Distribution (In Progress) 37 38 **Current approach: Self-hosted artifacts via GitHub Releases** 39 40 Status: 41 - [x] GitHub Actions workflow to build for all platforms (`.github/workflows/build-ffi.yml`) 42 - [x] Artifacts.toml template for binary downloads 43 - [x] Updated ffi.jl to use Pkg.Artifacts 44 - [ ] Trigger first build by tagging v0.5.0 45 - [ ] Update Artifacts.toml with actual SHA256 hashes 46 - [ ] Test artifact downloads on all platforms 47 48 Platforms: 49 - Linux x86_64, aarch64 50 - macOS x86_64, aarch64 (Apple Silicon) 51 - Windows x86_64 52 53 **Fallback option: Yggdrasil/BinaryBuilder.jl** 54 55 If self-hosted artifacts become hard to maintain, submit to Yggdrasil: 56 - Create `NickelEval_jll` package via BinaryBuilder.jl 57 - Automatic builds and distribution via General registry 58 - More complex setup but zero maintenance after 59 60 ### 2. CI FFI Testing 61 Update CI workflow to build Rust library and run FFI tests. 62 Currently CI only tests subprocess mode. 63 64 ### 3. Performance Benchmarks 65 ```julia 66 using BenchmarkTools 67 @benchmark nickel_eval("{ x = 1 }") # subprocess 68 @benchmark nickel_eval_native("{ x = 1 }") # FFI 69 ``` 70 71 --- 72 73 ## Nice-to-Have 74 75 - **File watching** - auto-reload config on file change 76 - **NamedTuple output** - optional record → NamedTuple conversion 77 - **Nickel contracts** - expose type validation 78 79 --- 80 81 ## Quick Reference 82 83 **Build FFI locally:** 84 ```bash 85 cd rust/nickel-jl && cargo build --release 86 cp target/release/libnickel_jl.dylib ../deps/ # macOS 87 cp target/release/libnickel_jl.so ../deps/ # Linux 88 ``` 89 90 **Test FFI:** 91 ```julia 92 using NickelEval 93 check_ffi_available() # true if library found 94 nickel_eval_native("42") # => 42::Int64 95 nickel_eval_native("'Some 42") # => NickelEnum(:Some, 42) 96 ``` 97 98 **Registry:** loulouJL (https://github.com/LouLouLibs/loulouJL) 99 **Docs:** https://louloulibs.github.io/NickelEval/dev/ 100 **Repo:** https://github.com/LouLouLibs/NickelEval.jl