- Better and more consistent error messages when there is a missing key in an environment.
- Add new engine :async.virtual-futures that uses Java 21 support for virtual threads
- Allow sequences to refer to any node in the environment for the mapped fn
- Allow running the lazy synchronous engine with a channel return.
- Fix bug that allowed a leaf body to be run multiple times in engines which used the lazy environment.
- Fix bug preventing nil values to the passed through channels on core-async applicative engine
- Create a blocking tag that allows leafs and sequences to be tagged with blocking to signal that they contain a blocking IO or other expensive blocking op. Engines can choose to optimize runs with this info
- Core Async Lazy Scheduler and Core-Async Applicative support for blocking tags. Leafs with blocking tags will be dispatched through the dynamic thread pool instead of the fixed core-async worker pool
- Add eval-key-contextual function to applicative engine for eval-node-channel evaluation. Enable returning a core.async channel to e.g. Pedestal from the applicative engine.
- Add applicative.core-async as engine to api v0
- Rename async.applicative to applicative.promesa
- Add checked-env function for cycle detection in env
- Added applicative synchronous engine (:async.applicative)
- Applicative engine support for core-async
- Applicative engine support for sync execution
- Add schema validation syntax
- Add support for schema validation on applicative engine
- Add an applicative/monad engine using funcool/promesa in the backend, but theoretically extendable to anything implementing applicative and monad protocols. This is experimental and comes with no guarantees. Some minor tweaks might be needed to support cljs.
- Add data constructors to api
- solve #89
The raw constructors are useful to build nodes dynamically
- Add nodely tutorial
- add eval to api.v0
- fix >or and >and
- Add >if helper with similar behavior to clojure
if
- Lazy Scheduler Core.Async Engine throws exception when looking for a key that is missing
- Fixes #67
- Lazy Scheduling Core.Async Engine Optimization
- Remove some unnecessary go blocks by passing out-ch explicitely to eval-async
- Async Leaf Interface: AsyncThunk is a record that receives a function that returns a channel. With this, AsyncThunk implements
evaluation-channel
and invoke
. The former is needed for non-blocking async behaviour. Invoke is needed to keep compatibility with sync.lazy engine and other engines relying on sync call behaviour. Helpers for creating leaf returning a channel is provided. - Core Async Exception Handling: We're using an exception channel for fast tracking exceptions and end execution early without bubbling up exception through channels. This required some machinery to make the job easier.
- Fix flaky test (collision on keywords on sequence-gen having same value)
- Add api for evaluation returning a channel
- Use the
evaluation-channel
protocol function to get values out of
the fn position on nodes. - Should allow e.g. async http request thunks to work right without
any more protocol fns.
- You have to close channels in
async-pipeline
!!! Otherwise it
blocks indefinitely.
- On lazy scheduling core async engine, extended IFn protocol so that it implements sync/async protocol
- Make lazy scheduling core async engine use async protocol by default
- Fix error where engine swallows nil values when executing a sequence
- [Fix] Add back iterative scheduling
- Change the api so that there is only one eval-key with options to customize the engine.
- Add api.v0 namespace
- Add core-async engine with lazy scheduling support
- Describe your change here.
- Add >value helper
- remove prismatic/schema-generators from core deps
- All evals return a channel
- Pipe channel results to the promise channel in the graph
- Eval leaf and eval node run trivial go blocks to get their returns
in channels.
- Eval seq sets up parallel pipeline to process the sequence in
parallel.
nodely.engine.core-async/*eval-sequence-parallelism*
affords
client control of sequence parallelism, defaults to 4 pipelines.
- Added commited-dependencies function, a helper for efficiently processing nodely graphs async
- Leaf inputs are now called
::inputs
and accept a set - Sequence inputs are now called
::input
and accept a keyword
Handles https://github.com/nubank/nodely/issues/54
- Add core async engine implementation. This engine unravels the branches sync first before solving the dag with core async. Sequences are still using manifold futures.
- Change branch data structure to allow node on condition
- Simplify syntax macros
- Change branch data structure attribute from left -> truthy and right -> falsey
This change allows the user to express conditions as nodes, and also include branches and branch-like structures on this condition. Example:
(>cond
(>and (>leaf (check-1 ?a))
(>leaf (check-2 ?b)))
(>leaf (do-something ?a ?b))
(>leaf (check-3 ?c)
(>leaf (do-something-else ?d))
The trade off is some added verbosity for extra simplicity and consistency.
Addresses https://github.com/nubank/nodely/issues/4
- Enable support for sequences
- Use recursive schema declaration
- Fix env macro to enable declaration of partial envs
- Support direct node definition on cond and env by escaping inner node with
>node
symbol.
- Refactor api and add helpers for values
- Remove unnecessary var quote.
- Switch async implementation to use deferred/future from manifold instead of future. Deferred/future uses a default executor that may or may not start a new thread depending on thread pool utilization. It is possible to customize executor in the future if necessary to provide additional thread pool control.
- Add async execution engine
- Reorg engine ns into core, sync and lazy ns
- Change api to reflect async vs lazy eval
- Fix bug that was generating leaf with a 0-arg function for leaf with no input
- fix broken eval and add tests
- cond and env was incorrectly expanding expr with no dependencies as values, but they should be leaves to defer evaluation
- add engine and syntax namespace
- Add data namespace and schemas
- Add cond with question mark syntax
- Empty change to fix pipeline
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning.
- Something has been changed.
- Something has been fixed.
- Something has been removed.