venice
venice copied to clipboard
Venice, a Clojure inspired sandboxed Lisp dialect with Java interoperability serving as a safe scripting language.
Venice
Venice is a Clojure inspired sandboxed Lisp dialect with excellent Java interoperability.
Overview
Venice is a Lisp dialect born from the need for a safe, sandboxed, general-purpose language. It shares with Lisp the code-as-data philosophy and a powerful macro system.
Venice is mainly a functional programming language focusing on immutable, persistent data structures.
Venice supports macros, tail-recursion, dynamic code loading, multimethods, protocols and many more. It comes with excellent Java interoperability, and a configurable sandbox that can prevent all sorts of unwanted JVM and Venice interactions. Venice has been designed from the ground-up with a sandbox making it a first class citizen.
Venice comes with a comprehensive library of 900+ core functions. It's immutable persistent data structures together with Clojure style atoms, futures, promises, and agents greatly simplify writing concurrent code.
Have you ever reached your limits with Bash and PowerShell scripts. With Venice you write concise and elegant scripts.
Venice does not depend on any runtime libraries (other than the JVM). You can easily add it as a standalone JAR to your classpath.
Venice requires Java 8 or newer.
Want to try Venice in a REPL? Test it on Gitpod
Cheat Sheet
Change Log
Change Log
Documentation
- Getting started
- REPL
- On Functional Programming
- First Steps in Venice
- Execute Venice scripts
- Embedding Venice in Java
- Datatypes
- Custom Datatypes
- Lazy Sequences
- Functions
- Control Flow
- Filter-Map-Reduce
- Transducers
- Recursion
- Mutable Refs
- Destructuring
- Advanced string features
- Concurrency
- Java interoperability
- Namespaces
- Exception handling
- Multimethods and Protocols
- Macros
- Sandbox
- Cryptography
- JSON
- JSON Lines
- CSV
- EXCEL
- ASCII Tables
- HTTP Client (Java 8+)
- Venice meets LLMs
- Database (JDBC)
- Shell Scripts
- Extension modules
- Source Code as PDF
- Tree walker
- Benchmarks
- Multi-File Apps
- Development Tools
- Build dependencies
- Performance comparison Venice - Clojure - Java
Getting the latest release
You can can pull it from the central Maven repositories:
<dependency>
<groupId>com.github.jlangch</groupId>
<artifactId>venice</artifactId>
<version>1.12.25</version>
</dependency>
Building
From a command shell, run ./gradlew shadowJar in the project home dir, to invoke the Gradle task to build the Venice JAR.
On MacOS / Linux
Give gradlew execute permission after cloning the Venice git repository ...
venice% chmod +x ./gradlew
... and build the project
venice% ./gradlew clean shadowJar
On Windows
C:\Users\foo\venice> gradlew.bat clean shadowJar
Contributing
I accept Pull Requests via GitHub. There are some guidelines which will make applying PRs easier for me:
- No tabs! Please use spaces for indentation.
- Respect the existing code style for each file.
- Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
- Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running gradle.
License
This code is licensed under the Apache License v2.
3rd Party Open Source
- Copyright Notice