NickelEval.jl

Julia FFI bindings for Nickel configuration language
Log | Files | Refs | README | LICENSE

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