All notable changes to this project will be documented in this file.
- :openai module support for assistant api
- :openai module support for assistant threads api
- :openai module support for assistant message api (in work)
- :openai module support for assistant run api (...)
- :openai module support for assistant run steps api (...)
- module :keystores to deal with certificates (PKCS12, ...)
- function
add-url-hyperlink
to :excel module - function
add-email-hyperlink
to :excel module - function
remove-hyperlink
to :excel module - function
remove-formula
to :excel module - function
cell-lock
to :excel module
- the Tomcat download URL in the :tomcat-util module to use HTTPS instead of
HTTP. The new official archive URL is:
https://archive.apache.org/dist/tomcat
- the module :qrref that manages QR references according to the Swiss payment standards.
- function
add-conditional-bg-color
to :excel module - function
add-conditional-font-color
to :excel module - function
add-conditional-border
to :excel module - function
add-text-data-validation
to :excel module
- a bug in the Venice PDF cheatsheet generation where the doc section header was not rendered in the right doc section column.
- Bumped Apache POI from 5.2.3 to 5.3.0
- a bug in the :excel module when reading values
(excel/read-val sheet row col)
from string cells with formulas and the cell's value wasnil
.
- function
delete-row
to :excel module to delete a row in a sheet - function
copy-row
to :excel module to copy a row to another row in a sheet - function
copy-row-to-end
to :excel module to copy a row to the end of a sheet - function
insert-empty-row
to :excel module to insert an empty row in a sheet - function
clear-row
to :excel module to clear a row's cells in a sheet
- a bug in the Venice REPL setup on Windows with canonical path conversion.
- support for an explicit install directory (other than the current working directory) to the REPL installer
- better error messages to the REPL installer
- Bumped Gradle from 8.3 to 8.9
- an unattended setup option for installing the Venice REPL. This allows for automated setups or unit testing the setup.
- the Gradle shadow plugin. The Gradle plugin "io.github.goooler.shadow" has been retired now as well. Migrated to "com.gradleup.shadow" (see https://github.com/GradleUp/shadow). This seems to be the final new home for the retired "com.github.johnrengelman.shadow" plugin.
- the Gradle CI workflow to build and test on Ubuntu and Windows using JDK 8, 17 and 21.
- the MeterRegistry. On M2 Macs some events reported with 0ns elapsed time. These 0ns events have been skipped resulting in a wrong profiler event count under heavy load.
- 32-bit
float
data type that complements the 64-bitdouble
data type - functions
java-float-list
,java-double-list
, andjava-long-list
to support LLM embedding vectors with vector databases like Pinecone or Qdrant - support for shebang lines. Venice allows shebang lines simply by implementing
#!
as a reader macro defining a comment like;
- support for
#_
reader macro to skip forms
- :openai module support for chat completion streaming usage
- :openai module support for embedding api
- the Gradle shadow plugin. The Gradle plugin "com.github.johnrengelman.shadow" has been retired. See johnrengelman/shadow#908. Switched to the fork "io.github.goooler.shadow"
- the OpenAI client api slightly to allow the integration of the assistants functionality. Use the actual OpenAI examples from the README with Venice 1.2.24+!
- :openai module support for audio speech api
- :openai module support for files api
- :openai module support for models api
- OpenAI vision examples
- the Venice logo to the cheatsheet
- :openai module support for image creation
- :openai module support for image variants
- :openai module support for image edits
Google changed the download URL for fonts from Google Fonts again causing all font examples to fail. Moved to Font Squirrel.
-
the True Type font source from Google Fonts to Font Squirrel.
The PDF font examples now use "Opens Sans", "Roboto", "Source Code Pro" and "JetBrains Mono" fonts from the Font Squirrel repository.
The :fonts module has been updated to download these fonts from Font Squirrel. They are available under the Apache License v2 or the SIL Open Font License v1.10.
- a bug in the Venice setup that crept into the last 1.12.19 release
- many new imaging functions to the
:images
module - function
fn-args
to return meta data on a functions' arguments.
- 'repl.sh' and 'repl.bat' to source the 'repl.env' within the restart loop
- function
openai/assert-response-http-ok
to simplify error handling in the OpenAI examples
- :openai module with chat completion support (incubation status). The openai module runs out-of-the-box with Venice, it does not require any 3rd party libraries. Support for Audio, Images, Embeddings, and Assistants will follow soon.
- :jtokkit module, bringing the Java JTokkit library functionality to Venice
- JDBC query result table renderer uses now right alignment for numeric columns
- fixed a bug in the HTTP client when slurping a binary data response
- JDBC support through the modules
:jdbc-core
and:jdbc-postgresql
:cargo-postgresql
module to install/start/stop PostgreSQL DB docker containers:postgresql-jdbc-install
module to install the PostgreSQL JDBC driver
- a problem with starting an already running docker container. Venice is doing nothing if the container version is ok, otherwise it stops the container and runs a new one with the desired version.
- support for sourcing environment vars in the Windows REPL start script
- the REPL setup. Maven will now be installed locally to the REPL to allow on demand installation of modules like Tomcat, LangChain4J, ... with its dependencies.
- the REPL setup for Gitpod.io instances regarding the sourcing of environment variables from repl.env.
- functions
get-request-parameter
, andget-request-long-parameter
to :ring-util module - more HTTP status codes with short names and descriptions
- SSE WebApp example to demonstrate explicit connection closing on the server side
- REST WebApp example to demonstrate the use of query parameters
- HTTP client SSL requests
- custom type support for Venice persistent collections
- more options to slurp a HTTP client's JSON response
- the HTTP client to gracefully react on interrupted exceptions and close the streams
- the HTTP client debug mode to print authorization header values as "******"
- the
:ring
debug mode to print authorization header values as "******" - an edge case with function
str/equals-ignore-case?
- options
:async-support
and:load-on-startup
totomcat/tc-start
servlet options :ring
support for asynchronous handlers. See example "async-webapp.venice".:ring
support for Server-Side-Events. See example "sse-webapp.venice".- content encoding (gzip, deflate) support for http client response processing
- support for server-side-events processing in the http client
- support for multiple url mappings for a servlet in the
:ring
module. See example "rest-webapp.venice". - a
:ring
example with a 2 servlet configuration. See example "two-servlet-webapp.venice". - the effective url (the url after a redirect) to the response map in the http client
- http status code helpers:
http-client-j8/status-ok-range?
http-client-j8/status-redirect-range?
http-client-j8/status-client-range?
http-client-j8/status-server-error-range?
- the http client to provide the name of the HTTP status code in the response
map. E.g.:
HTTP_OK
for status code 200
- support for module
:http-client-j8
to ungzip a response data stream with the content encoding 'gzip' - function
io/wrap-is-with-gzip-input-stream
to gzip data sent to the stream - function
io/wrap-os-with-gzip-output-stream
to ungzip data read from the stream - improvements to the
:multipart
parser. The parsers is now more robust in parsing the part headers and returns all part headers in its raw form in parsed data map.
- the multipart parser's mimetype handling for content type headers
- module
:http-client-j8
. A handy HTTP client based on the JDK HttpUrlConnection. The HttpClient can be used to send requests and retrieve their responses. It supports sending multi-part requests. The HTTP client does not depend on 3rd party libraries! There are REST and file upload examples in the Venice script examples directory. - module
:multipart
that supports the subtypemultipart/form-data
. Renders and parses multi-part binary buffers - support for multi-part requests to
:ring
module and improved the request/response dump functions - function
bytebuf-merge
to merge byte buffers - function
bytebuf-index-of
for searching patterns in byte buffers using the Knuth-Morris-Pratt (KMP) pattern matching algorithm
- the return status handling in the
:ring
module
- function
io/file-normalize-utf
. This is useful to make it easier to process MacOS filenames with umlauts. - thread type support to the function
thread
to allow spawning daemon or user threads - support for tracing exceptions in
trace/trace-var
- math function
rand-bigint
. Venice uses this function to create unique boundary strings for multipart HTTP requests. - function
mimetypes/probe-content-type
to get mimetypes for file names.
- function
str/normalize-utf
. This is useful to make it easier to process MacOS filenames with umlauts. - a pure ascii version of the Venice cheatsheet to feed it as embeddings to LLMs
- improvements on to markdown to ascii text renderer to allow the Venice Github flavoured markdown documentation to be converted to pure ascii to feed it as embeddings to LLMs
:cargo-qdrant
module to install/start/stop Qdrant Vector DB docker containers
- the
:docker
module to support now multiple port publish definitions
- a markdown parser edge case when a table block is immediately followed by a list block with no empty line in between
- function
zip-folder
tozipvault
- support italic font style in the :ansi module
- the function
maven/download
to accept a single artifact as well as a list of multiple artifacts
- :maven module (a bug has been added with V1.12.0 refactoring)
- math function
clamp
- basic authentication support for
io/download
- follow redirects supports for
io/download
, if the protocol does not change for the requested redirect
- the geoip module to use basic authentication to access the MaxMind databases. This is mandatory starting from May 1st, 2024 with MaxMind's effort to improve security and reliability on its services.
- Java interop function
enum?
- support for Java enums
- Java interop documentation on enums
- functions to hide columns in an excel sheet
- the global vars "*REPL*" and "*repl-color-theme*". Dedicated REPL functions like
(repl/color-theme)
provide now access to the REPL configuration. This affects only the internal REPL scripts.
This release focuses on Windows.
- and simplified the setup of custom REPLs
- all unit tests to run on Windows too
- a path composition problem in the :gradlew module when running on Windows
- :grep module to run on Windows
- an edge case in load-path management on Windows
- REPL terminal width/height functions on Windows
- function
io/file-set-readable
- function
io/file-set-writable
- function
io/file-set-executable
- function
io/copy-files-glob
- function
io/copy-file-tree
- function
io/move-files-glob
- function
io/symbolic-link?
- function
io/create-symbolic-link
- function
io/create-hard-link
- an :installer module to simplify the installation of 3rdparty libraries from within the REPL and to simplify the REPL setup process
- improvements to REPL demo fonts. See the font demo in the PDF readme chapter.
- an optional force flag to maven/download
- documentation for :matrix module
- Bump flying-saucer from 9.3.2 to 9.4.0
- Bump xchart from 3.8.2 to 3.8.6
- Bump pdfbox from 2.0.27 to 3.0.1
- the function
maven/mvn
to run a maven command - the function
maven/dependencies
to get the dependency tree of an artifact (e.g.: "org.knowm.xchart:xchart:3.8."). Venice creates a temporary maven project to compute the dependency tree and removes the project afterwards
- Bump flying-saucer from 9.3.1 to 9.3.2
- Bump openpdf from 1.3.32 to 1.3.35
- the availability detection of ChaCh20 and ChaCha20-BC file encryption algorithms on all setup combinations Java 8 / Java 11+ with or without the BouncyCastle libraries
- documentation
- module :ascii-table for creating and customizing simple ASCII tables
- :core module to use qualified core functions within macros to follow the "principal of least surprise".
- AES-256 (CBC, PKCS5Padding) file encryptor/decryptor to :crypt module (for testing purposes only, in production use AES-256 GCM)
- ChaCha20 file encryptor/decryptor to :crypt module (Java 11+)
- ChaCha20 BouncyCastle file encryptor/decryptor to :crypt modul (Java 8+)
- functions for handling byte order (little/big endian) on byte buffers
- external entities in XML parser utils
- function
str/align
- bytebuf allocation with random values
- bytebuf allocation with a fill value
- an example script comparing AES-256 CBC, AES-256 GCM, and AES-256 ZIP encryption and decryption performance
- an example script comparing MD5, SHA-1, SHA-256 hashing performance
- AES-256 (GCM, NoPadding) file encryptor/decryptor to :crypt module
- improvements to :zipvault module. New functions
zipvault/entries
zipvault/add-file
,zipvault/add-folder
,zipvault/add-stream
- support for Docker ArangoDB dump & restore in the :cargo-arangodb module
- support for copying Docker ArangoDB dumps to/from the local file system
- support for 'docker/exec' detached/non detached (async/sync) mode
- module :zipvault to create AES-256 encrypted and password protected zip files that can be opened by most unzip/uncompress tools on MacOS, Linux, or Windows
- Fixed 'docker/exec' function. The docker tool expects the exec command and
its args as individual arguments:
docker exec 0286eb877a91 ls /var/lib
.
Passing "ls /var/lib" is not accepted. - option processing in 'io/file-out-stream' function
- support for docker volumes in
cargo/start
function
- an edge case with handling envs and args in
docker/run
function
- an additional check to the CSV reader to reject quote chars in non quoted fields. This is not allowed by the CSV standard
- function
finder
to find symbols
- an edge case with CSV reader on a sequence of empty fields
- jsonl/splitln function
- io/print-line support for a single stream argument
- docker module to use :jsonl module to parse JSON command output
- improvements to simplify the time function's support for ISO formats
- support for full decimal number range with JSON read/write. Reading and writing
of decimals like
99999999999999999999999999999999999999999999999999.3333333333333333M
in its full precision is now possible. This feature must be activated explicitly because its not part of the JSON standard. (Note: the JSON standard itself is limited to the double floating-point number range and precision)
- function
io/print-line
- an optional filter function to
jsonl/slurp
- support for lazy sequences and transducer to JSON Lines data slurper
- performance of JSON Lines
jsonl/spit
function - JSON Lines documentation
- support for JSON Lines (see module :jsonl)
- function docker/container-exec-by-name
- function read-line to detect end-of-stream properly
- functions to handle locks based on a semaphore
- :cargo-arangodb module to disable the ArangodDB telemetrics sent home
- Venice to follow the Java rules when propagating exceptions from
try-with-resources blocks:
- exception from finally block
- exception from catch block
- exception from body block
- exception from resource auto-close
- :pdf module dependencies to flyingSaucer 9.3.1 and openpdf 1.3.30
- Bump gradle from 8.0.2 to 8.3
- function
running?
andprune
to :cargo module
- error messages for the :cargo and :docker module
- module :cargo to run testcontainers with the support of Venice
- function argument type hints
- an optional timeout to
sh
function
- the functions
time/plus
andtime/minus
to accept:java.time.Period
and:java.time.Duration
too as the amount of time to add or subtract
- function
docker/rm
- a no arg function variant to
crypt/ciphers
- a
docker
module to manage docker images and containers from Venice scripts. The functions support both TEXT and JSON output of the docker commands. The JSON output is parsed and converted to Venice data for further processing. A generic docker function can run any docker command.
Requires a local docker installation.
Venice supports the most used docker commands:- docker version,
- docker images, docker rmi, docker image prune/rm/pull
- docker run/ps/start/stop/cp/exec/diff/logs/pause/unpause/wait/prune
- docker volume list/create/rm/exists
- functions
var-sym-meta
andvar-val-meta
to access the meta data of the symbol and of the value of a var.
- unwrapping a Java object of type
Optional<T>
ifT
is a Java array type
- formal type support for unwrapping a Java object of type
Optional<T>
through the functionjava-unwrap-optional
. - detailed explanation of the role of Java formal types in Venice. (See the functions:
formal-type
,cast
, andremove-formal-type
) - function
crypt/ciphers
to list the available ciphers
- documentation and examples for lazy sequences
- 'str/split' doc examples
- UTF-8 module with common UTF-8 character constants
- function
remove-formal-type
- not working service registry lookup when any sandbox is active. The affected Java classes are white-listed as default now and the service registry sandboxing is simply controlled through black-listing the
service
function.
- function
str/split-columns
- the ability to use dynamic service discovery with Venice service registry to simplify Venice embedding use cases
- a service registry to simplify Venice integration in application scripting scenarios
- Excel module to work with Apache POI 4.1.x again. To use charts with Excel documents Apache POI 5.2.0 or newer is required!
- Gradle build shadow jar task. Gradle 8.0.x does not accept the
classifier
property anymore. Renamed toarchiveClassifier
and usearchiveClassifier = ''
to prevent the shadow jar task to add the '-all' classifier to the jar name.
- a PDF to text tool:
pdf/to-text
- functions
io/filesystem-total-space
,io/filesystem-usable-space
- function
inet/reachable?
to check if an INET addr is reachable - improvements to Excel renderer regarding column hiding
- support for PNG and JPEG images to
:excel
module - support for line, bar, area, and pie charts to
:excel
module
- :excel module 3rd-party library dependencies
- Bump com.github.johnrengelman.shadow gradle plugin from 7.1.2 to 8.1.1
- Bump gradle from 7.5 to 8.0.2
- functions
str/nrest
,str/butnlast
, andstr/split-at
- a parallel reduce
preduce
based on a reduce / combine strategy - module
:qrref
- parsifal parser combinator
let->>*
and>>*
macros
- setup script
- module
:qrbill
to create Swiss QR bills - function
io/file-basename
- improvements to
:excel
module cell styling - support for freeze panes to
:excel
module - function
excel/read-error-code
to read the error code from a formula cell - function
excel/read-val
to have an option to read data from cells generically
- and simplified the function
excel/write-data
for writing 2 dimension tabular data to an excel sheet
- an optional start row/col to
excel/write-data
- an edge case in
macroexpand-all
when the upfront macro expansion meets java data structures. Runtime macro expansion works fine in these cases. - function
excel/write-items
handling formulas
- Excel reader / writer converter
excel/sheet-index
(must be 1-based)- Excel formula cell evaluation
- Excel vertical middle alignment
- functions to automate downloading 3rd party Java libraries and fonts required for PDF, Excel, Chart, and Tomcat modules
- Bump Apache POI from 4.1.2 to 5.2.3 (compatibility with POI 4.1.2 is still provided)
- the function 'excel/sheet-index' to get an excel sheet's index
- a HTML and PDF renderer for syntax highlighted Venice source files
- 'excel/open' when passing a bytebuf
- support for interfaces with default implementations that are not overridden for Java interop dynamic proxies
- macros
assert-ne
andassert-does-not-throw
- function
qualified-symbol?
,regex/matches-not?
,io/file-within-dir?
- functions
match?
andnot-match?
to support also regex patterns (:java.util.regex.Pattern)
- REPL command completer to consider special forms as well
- the Tomcat WebApp modules
:tomcat
and:ring
to the Java EE 9 Jakarta versions of Tomcat. Tomcat 9 is not supported anymore. Use Tomcat 10.0.x with Java 8 and Tomcat 10.1.x with Java 11+.
- support for destructuring in
loop / recur
loops - an optional customized indentation string to the JSON pretty printer
- proxy builder for Java functional UnaryPredicate interface
- macros
assert-eq
andassert-throws
- file, line, and column information to the exceptions raised by the assert
macros
assert
,assert-eq
, andassert-throws
- :com.github.jlangch.venice.AssertionException to the list of the default class imports
- a test framework
str/split
to support an optional limit
- proxy builder for Java functional BiPredicate and BiConsumer interfaces
- optimizations to pre-compiled execution
- sandbox construction
- a cheatsheet example
- pre-compiled scripts to reach the performance level of Venice V1.10.0 scripts again.
-
pre-compiled scripts to support namespace aliases for loaded modules and files.
-
pre-compiled scripts to support macro expansion for loaded modules and files
- renamed the public class 'com.github.jlangch.venice.PreCompiled' to 'com.github.jlangch.venice.IPreCompiled' to pave the way for Java modules.
- load path support for
io/delete-file
-
CSV and JSON to use the I/O module to handle its file I/O.
This way CSV and JSON can be controlled by the sandbox's I/O configuration -
the support for data sources and sinks CSV and JSON functions can handle to slurp or spit data.
- function
partition-all
- load path support for
io/slurp
,io/spit
,io/file-in-stream
, andio/file-out-stream
-
the sandbox's control over
load-classpath-file
. Instead of just being able to allow or reject calls toload-classpath-file
the sandbox offers now a finer control over the function by applying the classpath access rules on the resource being loaded. The sandbox configuration provides now three options:- no restrictions at all
- reject all calls to
load-classpath-file
- accept calls to
load-classpath-file
based on the classpath resource
-
the core module to not rely on Java interop anymore. The core module can now be used without restrictions when Java interop is disabled.
-
REPL to add expressions with leading spaces to the history too by overriding
jline3
's default configuration -
Venice to not wrap a
SecurityException
with aVncException
on sandbox violations.
- better documentation for
load-file
andload-resource
regarding load paths
- load path access, ZIP files on the load path are now fully supported
- functions
io/touch-file
,io/delete-files-glob
- support for queues with transducers and reducers
- performance improvements to the
grep
functions by usingpmap
instead ofmap
in its implementation. - a
delay-queue
that is based on the Java classjava.util.concurrent.DelayQueue
- reader macro for regex patterns: #"[0-9]+"
- the message of the exceptions raised by
str/format
on illegal formats. Additionally provide a Venice stack trace with these exceptions.
- Fix Partial Path Traversal Vulnerability submitted by Jonathan Leitschuh
- Bump gradle from 7.4.1 to 7.5
- support for import aliases
(import :java.awt.Color :as :Col)
(import :java.awt.Color)
is equivalent to(import :java.awt.Color :as :Color)
- support for regex rematching in function
regex/matches?
- a grep module with grep like search for lines in text
- the implementation of the special forms. It's now easier to add and document special forms
- all tabs to spaces in the sources
io/delete-file-on-exit
to work with directories too- a bug in the markdown table renderer with parsing custom column styles
- color definitions in :xchart module.
- JavaInterop to run on Java 17. All unit tests run now on Java 8, 11, and 17.
- the 'component' extension module to work with vanilla Venice values that do not implement the Component protocol. This allows for a smoother integration with configurations created by the 'config' module.
- refactored the 'component' extension module to store a component's dependencies in the component's meta data.
- the namespaces of the extension modules 'tomcat', 'tomcat-util', and 'benchmark' to follow the module name. Using namespace aliases, introduced with Venice 1.10.11, helps a lot in working with qualified symbols.
- fixed the '-setup-ext' option in the repl-setup.venice script
that is used to install Venice with additional fonts and 3rdparty
libraries
shell> java -jar venice-*.jar -setup -colors
shell> java -jar venice-*.jar -setup-ext -colors
- function
str/hexdigit?
- CSS column styles for markdown tables. Currently 'text-align' and 'width' are supported
- new features to the Parsifal parser combinator:
- Deduping the error message list, to avoid repeated error messages
- Allow customized error messages with the
never
parser - Added protocol 'SourcePosition' and changed function
inc-sourcepos
to support error messages with source line/column nr for item types other thanchar
. - A parser for any token:
any
- A parser for hex digits:
hexdigit
- the
load-module
,load-file
, andload-classpath-file
macros to accept an optional ns alias - the name of the parser combinator to Parsifal
- Bump openpdf from 1.3.27 to 1.3.28
- namespace aliases (
ns-alias
,ns-aliases
,ns-unalias
) Object
protocol to support customizedcompareTo
function for custom datatypes- a Parsifal expression parser example 'doc/example/scripts/expr-parser.venice'
- functions
str/trim-left
andstr/trim-right
- the printing of 'Infinite' and 'NaN' double numbers in the reader format for
the functions
pr-str
,pr
, andprn
.
- function
name
to return the simple name only (without namespace)
- support for char literals:
#\A
,#\u03C0
,#\space
(implemented as reader macro) - support for multiple collections to function
pmap
- macro
letfn
anddef-
- function
deliver-ex
to complete promises exceptionally by delivering an exception - functions
prewalk-replace
andpostwalk-replace
(recursive replace) - functions
pr
andprn
that round out the printing functions's support for the Venice's reader format
- a problem with the functions
io/string-in-stream
andio/bytebuf-in-stream
not being accessible through its global symbols - an edge case with dynamic vars propagation across threads
- functions
select-keys
- functions
pmap
andpcalls
- Bump openpdf from 1.3.26 to 1.3.27
- Bump gradle from 7.2 to 7.4.1
- math functions
exp
,asin
,acos
,atan
- functions
nan?
andinfinite?
for double values Object
protocol to support customized 'toString' conversion for custom datatypes- improvements to documentation
- Bump jline3 from 3.20.0 to 3.21.0
- Bump com.github.johnrengelman.shadow gradle plugin from 7.1.0 to 7.1.2
- Bump junit-jupiter-api from 5.7.0 to 5.8.2
- Bump junit-jupiter-engine from 5.7.0 to 5.8.2
- functions
user-name
,io/file-in-stream
,io/string-in-stream
- timeout functions for promise chaining
- function
future-task
that offers an alternative processing model for asynchronous tasks - functions
drop-last
,take-last
- chaining async tasks for promises
- support for
done?
,cancel
,cancelled?
to promises
- functions
cartesian-product
andcompositions
- functions
subset?
andsuperset?
for sets - support for running app archives from the REPL
- application archive runner
- Bump jline3 from 3.20.0 to 3.21.0
-
support for isolated root components that have no dependencies for the
:component
module -
support for protocol default function implementations
- support for
doc
function to print the functions of protocols and to print the associated protocols for custom types.
assoc
on custom types to keep the meta data
- module :component
- function
str/levenshtein
doc
function to use Levenshtein distance if the exact symbol is not found to do a fuzzy search for candidates.
- a namespace problem with protocols
- a DAG (directed acyclic graph) data type with topological sorting using Kahn's algorithm
- function
deftype-describe
to get details on a custom type definition - Protocols (
defprotocol
,extend
)
- an edge case with
core
namespace. E.g:(do (ns foo) (defn foo/* [x y] (core/* x y 2)))
- functions
merge-deep
,io/->url
,io/->uri
, - the module
:config
to simplify application configuration - support for
java.net.URL
andjava.net.URI
withio/slurp
andio/slurp-lines
- improvements to cheatsheet rendering for inline code sections
- multimethods to support
isa?
semantic when dispatching on data types
- improvements to callstack when threads are used
- the HTML cheatsheet link in the README. Prepended the Markdown URL with
https://htmlpreview.github.io/?
to make it work again. - generated HTML cheatsheet to pass the W3C Markup Validation Service without warnings and errors
- the isolation of the try-catch-finally local vars against each other
- arity exceptions to carry a callstack
- a custom mode to
ansi/progress
ns-remove
to not allow the removal of the current namespace- an edge case with special form
ns-list
io/watch-dir
when the optional error and termination listener are not passed
- :ansi module progress bar percentage to be converted to an integer always thus preventing the progress bar from displaying floats and decimals
- import in module :benchmark
- an edge case with destructuring in binding special form
(binding [bindings*] exprs*)
- a Venice
com.github.jlangch.venice.SecurityException
that is thrown by the sandbox instead of ajava.lang.SecurityException
to indicate a sandbox violation. This allows Venice to pass a more user friendly Venice stacktrace with the exception - support for nillable types with
deftype
- tee functions to the tracing module
CapturingPrintStream
to use the system-dependent line separator string.
- VAVR dependency to version 0.10.4
- function
vector*
- optimizations to global var lookup
- callstack info to error messages where it was missing
-
support for Gitpod VS Code
-
color mode switching to the REPL. The REPL commands
!lightmode
and!darkmode
switch Venice's color mode to adapt to the REPL's terminal color mode. -
VS code settings for Venice source code syntax highlighting for editing on Gitpod
- destructuring with lazy sequences. All destructuring features are now supported with lazy sequences.
- added an exception catch selector for exception cause types in try-catch blocks
- a markdown rendering problem for text mode with list items
- exception selectors for
catch
clauses in try-catch blocks - utility functions to access message, cause, and stacktraces of an exception
- a problem with the
ValueException
class regarding introducing Java modules
- improvements to the exception handling. The new function
ex
simplifies the creation of exceptions and plays well with the full restricted sandbox. E.g.:(throw (ex :VncException "test"))
- improvements to the online and cheatsheet documentation.
- prevention of redirecting stdin, stdout, and stderr streams explicitly. Any redirection attempt by changing the thread local vars (:in, :out, :err) throws an exception.
- access to REPL info when running in the REPL.
E.g.:
(repl/info)
,(repl/term-rows)
,(repl/term-cols)
- JLine dependency to version 3.19.0
- OpenPDf dependency to version 1.3.26
- JAnsi dependency to version 2.3.2
- migrated the documentation to markdown for more flexibility when rendering to
the Venice HTML/PDF cheatsheet or for REPL documentation in a terminal through
the
doc
function (e.g.(doc filter)
)
- REPL restart honors now the current macro expansion setting
- JLine3 Jansi dependency to version 2.1.0: org.fusesource.jansi:jansi:2.1.0
- 3rdParty library availability check in :xchart module
- the
partition
function to behave like Clojure'spartition
function - the function
hexdump/dump
to handle an edge case correctly
- refactorings to the :crypt module. It's now a pure Venice module without needing Java helper functions.
- a potential missing of closing a nested FileOutputStream in a try-with-resources block with function json/spit. Reported by LGTM CI
- dropping a file to the REPL that has special characters (space, asteriks, ...) in the filename. The underlying OS shell is escaping these characters. E.g. on MacOSX: "test\ 1.venice", "test?1.venice"
- build to Gradle 7.0 and moved to MavenCentral because JCenter's shutdown has been announced by JFrog in February 2021
- synchronous element processing to the Venice queue:
(queue)
- alerts reported by the LGTM code quality analysis
- function
swap-vals!
for atoms - the option to pass arguments for opening MacOS apps. E.g.: (shell/open-macos-app "TextEdit" "example.txt")
- an ESR module for dealing with Swiss ESR reference numbers
- a restartable option for the REPL if the REPL launcher script supports it. While REPL 'reload' creates a new Venice context, a 'restart' exits the current REPL process and starts a new REPL with a new Java VM running.
- function >, >=, <, and <= support now more than 2 arguments and throw an exception if the arguments are not numbers
- Google open source font download directories for extended REPL setup
- support for 24-bit colors, cell border, and cell rotation to Excel builder
- Excel builder
supertype
for number types. Returns now e.g. ":core/number" for(supertype 1)
instead of ":core/val".instance-of
to support unqualified Java types that get resolved by import statements
- function
instance?
toinstance-of?
- build to Gradle 6.8
- JLine dependency to version 3.19.0
- XChart dependency to version 3.8.0. Due to an incompatible API change in the XChart 3.8.0 Java library, Venice 1.9.10+ does not work with earlier XChart versions!
- improvements to documentation
- options for
io/zip-file
andio/zip-list
to print progress to*out*
- an optional mapper to
io/zip-file
to simplify the creation of anonymized archive files - function
ip-private?
to test for private IP addresses like 192.168.170.181
- fixed the function
total-memory
to return the correct value for the total memory available to the JVM
- Refactored regex API regarding find functions returning positional group
information and improved doc.
find-group
renamed tofind+
,find-all-groups
renamed tofind-all+
.
- improvements to documentation
- function
trace/trace-str-limit
- fixed function
var-name
for qualified vars - fixed :xchart module bar charts with multiple categories
- XChart dependency to version 3.7.0. Due to an incompatible API change in the XChart 3.7.0 Java library, Venice 1.9.8+ does not work with earlier XChart versions!
- improvements to documentation
- function
io/file-last-modified
- support for JavaDoc. Opens a browser window displaying the JavaDoc
for a Java class. E.g:
(java/javadoc :java.lang.String)
- documentation for Kira templating
- fixed functions
os-type
andos-type?
for Linux operating systems
- JLine dependency to version 3.18.0
- an issue with the REPL where the expression history stopped working
- function
cycle
- threading macros
some->
andsome->>
- cross references to cheatsheet
- syntax highlighting for cheatsheet examples
shell/processes-info
to list the process info of all running processes- arity check for passed arguments for all special forms
- callstack for map/set/vector used as function
- added optimizations to the interpreter that makes it up to 40% faster
- word wrap with function names in PDF cheatsheet
shell/process-info
to handle Java Optional in lieu of the caller- callstack for macro arity exception
let
,recur
, andbindings
to throw an exception if the binding vector does not have an even number of forms
- function
partition-by
- macro
doseq
- arity check for passed arguments to functions. Throws an ArityException if the args do not match the function's parameter count.
- automatic TCO, that was an experimental feature since version 1.9.3
- improvements to the 'kira' template extension module. With the availability of
doseq
the module could be simplified. 'kira/emit' has been removed and 'kira/foreach' is replaced by 'doseq'. See the documentation in the readme.
- function
partition
for overlapping parts (when steps is smaller than n, the size of a part) - method execution to throw an exception if a macro is passed where a function is expected
- a tracing extension module to help with debugging
- a hexdump extension module
- a few helper functions to simplify using Java Dynamic Proxies with Java functional
interfaces.
E.g.:
(proxify :java.util.function.Function { :apply #(+ % 1) })
can be simplified to(as-function #(+ % 1))
- experimental automatic tail call optimization, not yet enabled for releases.
- experimental JPMS (Java Platform Module System) support, not yet enabled for releases. Enhanced the Gradle build for building Venice as a Java 8 library supporting JPMS
- stack trace for some special form errors. The line/col information was missing.
- stack trace for symbol not found errors. The line/col information was missing.
- function
map
to support lazy seq when passing multiple collections. E.g:(map list [:a :b :c] (lazy-seq 1 inc))
- a security issue with Venice precompiled script execution not using the active interceptor
- load paths for running a Venice app (the application zip must be added to the load paths)
- function
map-keys
andmap-vals
- function
io/await-for
to wait for a file getting created, modified, or deleted - function
io/watch-dir
andio/close-watcher
to watch file modifications in a directory - function
shell/open
to open a file or an url with the associated application - process management function for the shell extension module
- 'gradle' extension module to run gradle build tasks
- support for SHA-1 hashes (
crypt/sha1-hash
) - REPL support for drag/drop Venice files for execution
- load paths (used with
load-file
andload-resource
) to the sandbox to make load paths more secure
- the function
load-file
to accept absolute file paths, if the Venice sandbox permits it.
- lazy sequences with values generated by functions
(lazy-seq 100 #(+ % 1))
- big integer as core type
- hex long literals:
0x00A020FF
- macros
cond->
andcond->>
- documentation for double/decimal literals in scientific notation
- the possibility to redefine a
defmethod
definition likedefn
does - support for underscores in number literals. E.g.:
1_000_000
map
in its transducing version to accept a map, a keyword, or a set as mapping function. E.g.:(transduce (map :ip) conj [{:ip 6}])
filter
in its transducing version to accept a map, a keyword, or a set as filter predicate. E.g.:(transduce (filter #{1 3 5 7 9}) conj [1 2 3 4 5 6])
- an edge case with complex macro bodies
- a problem with legend/series styling in the 'xchart' extension module
- REPL to add input that caused a ParseError to the command history to be available for repeated correction.
- 'math' module. Big integer is now a core type
- custom types support
assoc
to change one or multiple fields
- The GEOIP module country lookup is now lightning-fast. A country lookup for an IPv4 address on a 2017 MacBook Pro (Mac OSX, Core i7 2.8 GHz) takes ~1.1us based on actual MaxMind data. Venice uses now an ultra-fast trie concurrent data structure to store CIDR / country relations and do IP lookups. This impressively demonstrates the power of trie data structures used for this kind of problems.
- Improved function invocation efficiency
- pre-loaded modules to honor the 'macroexpandOnLoad' flag (Java integration API)
- profiling to show now details on each macro type expansion
- macro expansion of the core module at startup if up-front macro expansion is activated
- macros to use the current namespace when expanding as opposed to functions that use the namespace they have defined in when executing the body.
- the REPL to leave char escaping to the Venice Reader. Now (print "abc\ndef")
works fine in the REPL too. No double escape (print "abc\\ndef") needed anymore. - JLine3 from throwing an IllegalStateException in the REPL while an escaped char is typed manually.
- line joining for text blocks (backslash at the end of a line)
- support for private vars and functions. Private vars and functions may only be accessed from callers within the same namespace as the private var or function.
- a check to prevent the definition of private macros. Private macros open all sort of complex access verification problems when macros get nested.
- an enhancement to the syntax highlighter to mark unprocessed forms like
(inc 1)
in(do (+ 1 2)) (inc 1)
in the REPL with a special color. This feature also makes unbalanced parenthesis visible. - a history file for the REPL commands
- a clear history command to the REPL
- REPL to handle an edge case of unprocessed forms gracefully. E.g.: adding
(+ 1 2)\n(+ 2 3)
with copy/paste to the REPL. - REPL to handle [ctrl-c] gracefully when the user interrupts the REPL while reading user input
- exit from REPL with command
!q
or!quit
deftype-of
validation with predicate functions as an alternative to useassert
- missing type check for 'deftype-of' builder
- 'deftype-or' with 'nil' choice (optional)
- REPL light color theme
- Gradle Maven publication task to publish the shadow Jar instead of the plain Jar. The published releases 1.8.3 to 1.8.5 contained the plain Jar that missed the repackaged JLine and Vavr libs.
- publish to Maven by falling back to manual publication. The Gradle Maven publication task published the plain Jar instead of the shadow Jar.
- REPL setup on Windows
- Refactored the Venice tokenizer to improve performance by another 30%
by simplifying character look ahead.
The Venice reader (parser) processes now 1'000'000 source lines per second
measured for
core.venice
on a 2017 MacBook Pro (Mac OSX, Core i7 2.8 GHz), Java 8 server VM. See the JMH reader benchmark 'ReaderBenchmark.java'
- improvements to syntax highlighting color themes
- function
highlight
to make syntax highlighting publicly available
- ansi module progress bars to reduce flickering on slower systems
- Refactored the Venice reader (parser) to not use regular expressions anymore
for tokenizing and reading S-expressions, resulting in a 50% performance
improvement.
The Venice reader processes now 750'000 source lines per second measured
for
core.venice
on a 2017 MacBook Pro (Mac OSX, Core i7 2.8 GHz), Java 8 server VM. See the JMH reader benchmark 'ReaderBenchmark.java'
- syntax highlighting for the REPL. REPL syntax highlighting can be turned on/off.
- function
fnil
- function
str/lower-case
andstr/upper-case
to accept an optional locale - from manual Maven publishing to the "Maven Publisher" Gradle plugin
- VAVR dependency to version 0.10.3
- JLine dependency to version 3.15.0
- optional OpenPDF dependency to version 1.3.17
- Gradle build automated Maven publish
- PDF watermark text outline customization
- implicitly generating build and check functions for custom types
- 'parsatron' parser combinator
- functions
deftype
,deftype-of
, anddeftype-or
- PDF watermark color opacity: OpenPDF library changed behavior in one of the recent releases!
- access to stdin in the REPL and Venice scripts
- function
read-line
- optional revision number support to 'semver' module (ArangoDB uses 3.6.3.1 style versions thus not sticking to semantic versioning)
- REPL setup: repl.bat gets an
@ECHO OFF
to suppress command echoing
- REPL setup: handles color mode better
- function
str/replace-first
to optionally support replacing ignoring case and replacing the first n occurrences - function
str/replace-last
to optionally support replacing ignoring case
- edge cases in functions
str/replace-first
andstr/replace-last
- functions
str/expand
- function
str/truncate
to support an optional truncation mode:start
,:middle
, or:end
- REPL setup: put the generated 'repl.json' on the classpath
drop
function (dropped 1 item too much, the corresponding unit test did not have a test annotation, so the test slipped)
- functions
io/internet-avail?
,str/cr-lf
,charset-default-encoding
- simplified REPL setup (automated extended setup)
- module 'tomcat' throws an exception when used and the Tomcat libs are not on the classpath
- module 'xchart' throws an exception when used and the XChart libs are not on the classpath
- fixed REPL on Windows to load the 'jansi' library
- fixed function 'print' to return always 'nil' instead of the print stream's class name
- module
tput
for terminal output on Linux and Mac OSX - module
ansi
to use colors and cursor control on ANSI terminals - functions
update-in
anddissoc-in
- sequential destructuring to return
nil
on empty varargs. E.g.:(let [[a b & c] '(1 2)] [a b c])
c must benil
and not an empty list - an edge case (nil collection) with function
apply
.(apply + 1 2 nil)
is equal to(apply + 1 2 [])
.
- function
io/download
to accept a progress function, a connection timeout, and a read timeout as option - optional OpenPDF dependency to version 1.3.16
- dark mode support for the REPL. Launch the REPL with the command line option '-colors-darkmode'
- accidentally bundled OpenSans and SourceCodePro fonts with the Venice 1.7.22 Jar
- functions
nfirst
andnlast
to work with Java based lists too - default sandbox rules to include Venice exception types
CallbackPrintStream
class to simplify stdout/stderr capturing in some Java integration scenarios
- functions
keep
,remove
,every?
,filter-k
, andfilter-kv
to work with sets as predicate functions too - a bug in the xchart module. With the introduction of formal types (Venice 1.7.17) the chart stylers need explicit casts, to circumvent a flaw in the XChart API.
- OpenPDF lib to actual version 1.3.15
- function
deref?
to test if a value is dereferenceable to get the 'boxed' value - enhancements to the sandbox to allow blacklisted Venice functions sets to
be opened by specific functions.
E.g.: blacklist all IO functions but allow
print
,println
,printf
, andnewline
. - module
fam
to support functors, applicatives, and monads
send-off
to be optionally called without fn args
- JLine3 lib to actual version 3.14.1
- build to Gradle 6.3
- macro
with-err-str
that returns the captured text from stderr - stderr support for functions
print
,println
,printf
,newline
, andflush
- stderr support for REPL. While stdout text is printed in grey stderr text is printed in light red
- function
filter-k
to filter maps by key - function
filter-kv
to filter maps by key and/or value - improvements to mercator and geoip modules
- an issue with Java Interop exception messages
- JLine3 lib to actual version 3.14.0
- build to Gradle 6.2.2
- functions
cast
andformal-type
to allow explicit casts on Java objects - an optional user-agent string for
io/download
. Some servers reply with a 403 (access denied) if there is no user-agent sent with the HTTP request. E.g.:(io/download "https://foo/foo.png :binary true :user-agent "Mozilla")
- new sandbox default rules due to introduction of formal types:
- class:java.util.List:*
- class:java.util.Set:*
- class:java.util.Map:*
- optional upfront macro expansion for all execution modes (REPL, Launcher, and embedding in Java)
- customizable mercator maps and rendering styles to mercator module
- OpenPDF libs to 1.3.12
-
Java Interop reflection to use the formal type of the value an instance method returns for subsequent calls on the returned object. This fixes the warnings "An illegal reflective access operation has occurred" on Java 9+. Future Java versions will even deny this access.
E.g.: java.awt.BufferedImage::createGraphics() defines 'java.awt.Graphics2D' as the formal type in the API and returns a 'sun.java2d.SunGraphics2D' object that is in a private module.
- performance improvements to function invocation
- throw an exception if a 'recur' expression is not in tail position
- loop-recur to allow multiple expressions in the body
- improvements to REPL for printing to terminal
- function
io/list-files-glob
to list files with a glob pattern
- the launcher when passing a '-file' option to run a script.
- customizable marker and labels to the 'mercator' map module
- 'tomcat-util' module access log file parser
- function 'disj' to work with all set types
- JLine3 lib to version 3.13.3
- FlyingSaucer lib to version 9.1.20
- CSV writer
- macro
when-let
- CSV module embedded quote characters in cells. They are represented by a pair of the quote character.
- function
map
to accept a keyword as mapping function
- improved performance of the CSV reader and the CIDR IP block parser
- modules
cidr
,mercator
, andgeoip
to map IP address locations to a 2D map. Use case: visualize Tomcat client IP addresses from the access log file on a world map. - function
io/zip-list-entry-names
- macro
load-file
to honor the 'force' option - deprecated Gradle build properties
- function
empty
to support sets (required formacroexpand-all
) - function
map
to support sets (required formacroexpand-all
) - transfer of meta data in simple destructuring [x 10] from symbol to bind value
coalesce
to evaluate its arguments lazy. It's now a macro.
- optional macro expansion at precompilation phase. This gives another performance gain when using Venice as an expression or rules engine. See the benchmark in Embedding Venice
- conj on maps to accept multiple elements
- a tree walker (
prewalk
,postwalk
) for Venice data structures - function
macroexpand-all
to recursively expand macros in a s-expression - load path file completion for the REPL with
(load-file file-path)
- load path to support ZIP files in addition to directories
- support for Venice archives for simplified distribution of Venice apps (see extension module :app)
- print functions (
println
,newline
) to use the platform specific newline LF or CR-LF - an edge case with auto gen symbols for macros
- zipper: adding a ZIP entry from a java.io.File caused a ClassCastException
- the sandbox to a whitelist model regarding loading extension modules. This is less error prone if Venice is providing more extension modules in the future.
- JLine3 lib to actual version 3.13.2
- build to Gradle 6.0.1
- a problem with caching Java interop meta data under heavy multi-threaded load.
- functions
every-pred
,any-pred
- function
locking
, Venice's equivalent forsynchronized
in Java - auto generated unique symbol names (hash suffix) for macros
to be used within syntax quotes. E.g.:
`(let [a# 100] (println a#))
expands to(let [a__9__auto 100] (println a__9__auto))
- function
load-file
supports now an optional load-path that defines a set of ';' delimited paths the file is searched for. In absence the file is loaded relative to current working directory. The load-path is passed to Venice via the command line arg '-loadpath'. The load-path is supported in all run modes: REPL and Venice file/script execution. - functions
futures-fork
,futures-wait
- function
mod
is now implemented with JavaMath.floorMod(x,y)
instead ofx % y
to change the behavior on negative values:(mod -1 5)
returns now4
. - JLine3 lib to actual version 3.13.1
- Flying-Saucer libs to version 9.1.19
- keywords to work as discriminator function with multi-methods
- 'tomcat-util' module TC installation cleanup
- function
io/list-file-tree
- function
str/double-unquote
- a syntax problem with a comment in the benchmark module causing the module load to fail
- function
load-file
andload-classpath-file
to load the file only once. There is an option to force a reload.
- char data type
- an edge case with java interop matching number args
- tomcat-util module function
process-running?
- Java «raw string literals» style triple quoted strings
- function
=
. Returns true if both operands have equivalent type and value.(= 1 1) ; true
,(= 1 1.0) ; false
,(== 1 1.0) ; true
- fixed java interop bean setters
- build to Gradle 5.6.2
- functions
merge-with
,fourth
,shuffle
- transducing function
map-indexed
- sandboxed access to individual system environment variables (function
system-env
). - enhancement to
io/file
to accept multiple children paths - enhancement to
io/copy-file
to support file replace option - enhanced stdout/stderr processing of the
sh
function - module for semantic versions
(load-module :semver)
- module for Tomcat management
(load-module :tomcat-util)
- fixed function
sh
: the subprocess should inherit the environment of the current process if no explicit environment is given
- OpenPDF lib to actual version 1.3.11
- function
str/reverse
nfirst
andnlast
to work with strings as well- enhancements to the
math
module to support the examples in the Recursion read-me
- collection
set
to work as a function:(#{1 2 3} 1)
- macro
condp
- function
trampoline
- fixed function
some
- fixed JSON to handle empty objects and empty arrays.
- fixed
reduce-kv
. Can now reduce to any type not just maps. - fixed
flatten
. Keep it from flattening maps.
- tested JSON reader on large files. Reading a 800MB JSON file into Venice data types took 3.5s on a 2017 MacBook Pro.
- full namespace support
- meta data for
nil
constant
- VAVR lib to actual version 0.10.2
- JLine3 lib to actual version 3.12.1
- an edge case with symbol lookup
- renamed 'kira/docoll' to 'kira/foreach'
- benchmark module
- statistics functions
mean
,median
,quartiles
,quantile
,standard-deviation
- math functions
log
,log10
,pow
remove
,distinct
,reverse
,flatten
,sorted
, andhalt-when
to the list of transducer functionsrf-first
,rf-every?
,rf-any?
reducing functions to be used withtransduce
- function
constantly
comp
function to allow 0-arity:(map (comp) [1 2 3 4])
=> (1 2 3 4)
- Transducers
- PDF renderer & tools
(conj nil item)
to return(item)
- cheat sheet generator to use Venice/Kira as templating engine
- maven extension module group-id handling
- layout improvements to the PDF cheatsheet. The PDF cheatsheet embeds now the 'Open Sans' and 'Source Code Pro' open source fonts to be available on all platforms the cheatsheet is opened.
- helper functions to Kira templating to simplify template processing
- extensive documentation to Kira templating: Kira
- runtime dependency on commons-lang3 lib.
- queue datatype (bounded or unbounded)
- registration of Venice functions as JVM shutdown hooks
- a one-shot and a periodic function scheduler
schedule-delay
,schedule-at-fixed-rate
- bytebuf hex conversion functions
str/hex-to-bytebuf
,str/bytebuf-to-hex
,str/format-bytebuf
- cryptographic hash functions for PBKDF2 and SHA-512
- encryption/decryption functions for DES, 3DES, and AES256
- REPL wildcard filters for listing symbols:
!env global
,!env global io/*
,!env global *file*
- function
io/zip-list
to list zip file content (similiar to Linux' «unzip -vl x.zip» command) - function
io/zip-append
to append or replace files to a zip - function
io/zip-remove
to remove files from a zip
- function
io/zip
to support empty directories
- XML doc to cheat sheet
- zip and gzip functions
- try/catch/finally supports now multiple body expressions for each of the try, catch, finally blocks
- try-with/catch/finally supports now multiple body expressions for each of the try-with, catch, finally blocks
- JLine3 lib to actual version 3.11.0
- to Gradle 5.4.1
- special form
set!
to set a global or thread-local variable - the option 'decimal-as-double' to the JSON writer to control whether the writer emits decimals as JSON strings or doubles.
- improvements for 'ring' and 'tomcat' module
- an XML parser built on the JDK's SAX parser: XML
- support for JSON:
json/write-str
,json/read-str
,json/spit
,json/slurp
,json/pretty-print
- map conversion to Java HashMap when a map entry value was nil
- functions
regex/find-all
,regex/find-group
, andregex/find-all-groups
- code completion for the REPL
- function
match?
that replacesmatch
.match
did not follow the naming conventions. - function
match-not?
that replacesmatch-not
.match-not
did not follow the naming conventions.
- demo WEB application
- a
~{x}
string interpolation problem with trailing"
:(let [a 1 b 2] """{ "~{a}": "~{b}" }""")
- a
~(x)
string interpolation problem with trailing"
:(let [a 1 b 2] """{ "~(str a)": "~(str b)" }""")
- function
match
- function
match-not
- function
regex/matches
- a simple templating module: Kira
- encoding/decoding functions for Base64 and URLs
- escape functions for HTML and XML
regex/group
to handlenil
groups correctly
- stack datatype
- defaults for keyword as function:
(:c {:a 1 :b 2} :none))
- an embedded Apache Tomcat WEB Server launcher
- handle REPL parse errors gracefully, allow to get the incorrect expression from the history to fix it
- the order of the stacktrace frames (reversed it)
- dereferencing a
future
when the future has thrown an exception io/copy-stream
- removed 'io/spit-temp-file', replace with 'io/spit'
- removed 'io/slurp-temp-file', replace with 'io/slurp'
- functions
str/letter?
,str/digit?
,str/whitespace?
,str/linefeed?
- regular expression functions:
regex/pattern
,regex/matcher
,regex/find?
,regex/group
, ... - enhanced REPL to change and manage the sandbox. Type
!sandbox
in the REPL.
- a problem with detecting unauthorized private function calls
- function
defn-
to simply private function definition - inheritance of thread-local vars for child threads used by futures and agents
- support for raw Java array data types. E.g.:
(long-array '(1 2 3))
- locale support for
str/format
function - function
resolve
to resolve symbols - private functions
- unit tests for Java 11
- enhanced the function
into
to handle raw Java collections the most efficient way - int numeric type (int literals have suffix 'I'). E.g.
2I
,(+ 2I 3I)
,(int 2)
- a limit to the number of bytes that can be written to a CapturingPrintStream by a Venice script to prevent buggy or malicious scripts to overrun the memory. Defaults to 10MB.
- a problem with the
*out*
dynamic var not being visible to precompiled scripts
- improved performance of precompiled scripts
- significantly reduced the size of precompiled scripts
- math module with bigint support
- support for
compare
function for all raw java types. Thereby sequences with raw java types can be sorted. - function
instance?
- sandbox support for macros. E.g. Venice macros like
load-file
andload-classpath-file
can now be rejected by the sandbox without needing to sandbox the underlying functions.
- Clojure style multi methods for dynamic method dispatching
- result history to the REPL. The symbols
*1
,*2
,*3
return the last, the second last and the third last result - REPL help
- meta data handling for documenting. E.g.:
(def ^:test m [1 2 3])
,(def ^{:test true} m [1 2 3])
- REPL multi-line support
- handling EOF/EOL in strings and providing better error messages
- problem with Maven repo push
- REPL to be built on JLine3
- function
replace
- VAVR lib to actual version 0.10.0
- compareTo for collection types (list, vector, set, and map)
- a problem with incorrectly evaluated quoted symbols used as map keys.
E.g.:
(replace {'a 5} [10 'a])
- map to work as function that delivers a value to a passed key
({:a 1 :b 2} :b)
- functions (
prof
,perf
,dorun
) to simplify Venice performance tests
- ValueException stack trace
- migrated all collections to immutable persistent data structures based on VAVR.
- multi-arity functions and macros
- line escapes to make
str/strip-indent
work (see README) - function
sqrt
- nested associative destructuring
- functions
print
andprintln
to printnil
values correctly - sequential destructuring when using remaining and :as element
together
(let [[x y & z :as all] [1 2 3 4 5 6]] ...)
- support for triple quoted, multi-line string literals:
"""{ "name": "john" }"""
- string interpolation:
(do (let [x 100] """~{x} ~(inc x)"""))
- a cached thread pool to run the futures for scripts with execution time limit
- execution time limit with sandbox
- a configurable execution time limit for Venice scripts running within a sandbox
- multi expression body for functions
- defn macro support for pre conditions
- agent shutdown-agents? arity error message
- more implicit type conversions to convert Java lists to Venice lists.
- default sandbox rules to allow invoking
(delay 100)
under a sandbox
- agents that complement Venice concurrency features. Agents provide independent, asynchronous change of state.
- special form defonce. e.g:
(defonce x 100)
- dynamic (thread-local) binding. e.g:
(binding [x 100] (print x))
- with-out-str macro that returns the captured text from stdout.
- delay macro that defers function evaluation.
- function realized? for delays, futures, and promises
- functions io/file-parent, io/file-name, io/file-path
- error message for map creation with an odd number of items and added file location.
- improvements to stack traces
- user friendly stack traces as an alternative to pure Java stack traces that are pretty difficult to read
- internal datatypes on public APIs.
- support for optional names for anonymous functions. e.g.
(fn double [x] (* 2 x))
- function doc
- function list*
- function io/file-size
- the with-sh-dir macro to check that the directory exists. If not an exception is thrown.
- sandbox for proxy methods. Venice proxy callbacks can potentially run in a thread other than the Venice parent function. The Venice parent function's sandbox is now applied to the proxy function.
- function with-sh-throw that causes subsequent sh calls to throw an exception if the exit code of the spawned shell process is not equal to 0.
- function io/delete-file supports multiple files
- function time/leap-year?
- function time/length-of-year
- function time/length-of-month
- cons, conj, disj for sets
- reader macro
#{}
to create sets. e.g.#{1 2}
- reader macro
@
for dereference(@a -> (deref a)
- reader macro
#()
to create anonymous functions. e.g.(map #(* 2 %1) (range 1 5))
- default sandbox class rules (they were missing)
- function compare
- function printf
- support to execute scripts:
java -jar venice-0.9.9.jar -script "(+ 1 1)"
- partial function
- macro case
- pre-conditions for functions
- function str/char to convert a number into single char string
- def global variables to be redefined locally
- ability to mix Venice functions with Java streams
- migrated to JUnit 5
- def creates now global variables instead of using the local env context
- function 'io/load-classpath-resource' to load resources from classpath. The function is sandboxed.
- function 'lock' and 'unlock' to WebDAV extension module.
- documentation for function 'future'. The function is sandboxed!
- function 'reduce' to work with maps too.
- function 'repeatedly'
- sandboxed access to system properties
- a Java interop issue with with boxing args to type byte[] (the boxing works now for all ByteBuffer subclasses)
- support for Futures (the sandbox is active in the future's thread)
- support for Promises (aka CompletedFuture)
- support for sandboxed Java system properties
- function 'system-prop' to access to Java system properties
- function 'butlast'
- threading macro 'as->'
- 'sh' function when providing stdin data to subprocess
- function 'time/with-time'
- function 'time/first-day-of-month', 'time/last-day-of-month'
- function 'time/earliest', 'time/latest', 'time/within?'
- function 'name', 'split-with'
- function 'sh', 'os?', 'sleep'
- XChart xy-chart
- try-with-resources to close the resources in reversed order of its definition
- time functions
- support for thread local
- webdav extension module
- a hiding exception problem with JavaInterop on static method calls
- printing full exception stack trace in REPL not just the message
- support for catching multiple exceptions within a try-catch-finally block
- chart examples
- updated cheat sheets
- function 'load-classpath-file' to sequentially read and evaluate the set of forms contained in the classpath file.
- function 'io/move-file'
- documentation for functions 'proxify' and 'cond'
- xchart extension module xy-chart axis styling
- function 'io/slurp-stream'
- function 'io/spit-stream'
- function 'io/delete-file-on-exit'
- function 'flush' takes an optional argument output stream. E.g.: (flush os)
- try-with-resources block 'try-with'
- Cheat Sheet for functions referenced multiple times
- cheat sheet page breaks on PDF
- try-catch-finally. The finally block is only evaluated for side effects
- dpi scaling to charts (high-res charts)
- sandboxing for created temp files
- more documented functions in the cheatsheet
- xchart/to-bytes
- str/join
- function 'type' to reveal the type of an item
- set functions 'intersect' and 'union'
- function 'into'.
- adding elements to data type 'set'.
- README Java Interop example
- function keep, merge, assoc-in, get-in
- function update, vec, difference
- function every? and any? operating on sequential collections
- associative destructuring
(let [{:keys [a b]} {:a 1 :b 2}] (+ a b))
(let [{:syms [a b]} {'a 1 'b 2}] (+ a b))
(let [{:strs [a b]} {"a" 1 "b" 2}] (+ a b))
(fn [x {:keys [a b]}] (+ x a b))
- destructuring
:as
and:or
options(fn [x {:keys [a b] :or {b 2} :as params}] (+ x a b))
(let [[x y :as coords] [1 2 3 4]] (str "x:" x ", y:" y ", dim:" (count coords)))
- improved Java interop with Java functions returning arrays
byte[]
is converted to bytebuf- all other arrays are converted to vector
- Java interop proxifying interfaces with void functions (e.g. Runnable)
- sort function to work on sets as well
- apply function to handle coll with nil value correctly
- function empty
- function mapv
- function docoll
- support to change 'stdout' stream by adding the variable
*out*
- mixed precision math (+, -, *, /). Implicitly coerce values to higher precision operand type. As a result (range 0 5 0.5) emits correct values and does not loop anymore.
- function str/blank?
- support for
**
pattern in sandbox rules: E.g.:org.apache.commons.text.**:*
- Java Interop callbacks to support import statements
- function str/quote
- function bytebuf-from-string, bytebuf-to-string
- support for Java callbacks
- REPL
- CheatSheet: not is a function not a macro
- JSON lib detection
- removed function 'class-for-name'. The JavaInterop function already provides that. E.g.: (. :java.lang.Math :class)
- loading forms from strings, files, and modules
- JavaInterop on invoking methods with byte array parameters
- OSS release
- function composition
- partial functions
- functions partition, distinct, and dedupe
- an explicit Venice type for keywords
- keywords to act like functions on maps: (:b {:a 1 :b 2}) => 2
- JSON util functions (requires Jackson lib at runtime on classpath)
- support for scoped enum values while interacting with Java objects
- support for Java arrays
- SecurityException handling
- made 'not' a function (instead of a macro) so it can be used from higher order functions
- Java Interop function (. classname :class). Returns the class for the classname
- improved error messages for Java Interop
- smarter type coercion, replaces simple casts and giving better error messages if the coercion is not possible
- zipmap, interleave, interpose, nfirst, and nlast functions
- PDF cheatsheet
- line and column number to parser exception
- file I/O functions
- refactored sandbox
- supporting escaped unicode '\u0041' characters in string literals
- JavaInterop passing enums args
- project opened