Skip to content
This repository has been archived by the owner on Jan 28, 2019. It is now read-only.

jaunt-lang/jaunt

Repository files navigation

License EPL 1.0 Patreon Donate Join the chat at https://gitter.im/jaunt-lang/jaunt Twitter Follow

Jaunt logo

Build Status

Branch Status Artifact
master Circle CI [org.jaunt-lang/jaunt "0.2.1"]
develop Circle CI [org.jaunt-lang/jaunt "0.3.0-SNAPSHOT"]

What

The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man.

~ George Bernard Shaw, Maxims for Revolutionists 1903

Jaunt is a hard fork of Clojure. Rich Hickey wrote Clojure to be the language he wanted, and administers it in the way that he wants. This is awesome, but I (Reid McKenzie) disagree with enough of the choices made in the language and its administration that I've forked to go my own way.

See the thesis blog post for more on this.

Getting Started

Jaunt should be supported by Leiningen, Inlein, CIDER (0.12 or later), and Cursive.

With Leiningen

All that's required in order to use Jaunt in a leiningen project is to provide a profile where Jaunt is listed as a dependency, and Clojure is listed as an exclusion. A minimal project.clj which uses only Jaunt would be as such:

(defproject some-jaunt-project "0.1.0-SNAPSHOT"
  :exclusions [org.clojure/clojure]
  :dependencies [[org.jaunt-lang/jaunt "0.2.1"]])

Simply jacking in with CIDER or via lein repl or starting a Cursive repl will drop you straight into a Jaunt environment.

With Inlein

All you need is a jaunt.clj like this

'{:dependencies [[org.jaunt-lang/jaunt "0.2.1"]
                 [reply "0.3.7"
                  :exclusions [net.cgrand/parsley
                               org.clojure/clojure]]
                 [net.cgrand/parsley "0.9.3"
                  :exclusions [org.clojure/clojure]]]
  :jvm-opts     ["-XX:+TieredCompilation" "-XX:TieredStopAtLevel=1" "-Dfile.encoding=UTF-8"]}

(reply.ReplyMain/main (into-array String ["--standalone"]))

inlein jaunt.clj will then drop you straight into a repl just like lein repl.

With Boot

Due to a minor breaking change in Jaunt's implementation details and the fact that Boot is fully AOT compiled against Clojure for startup performance, Jaunt is not usable with boot at this time.

Goals

Jaunt is in no small part an experiment in what Clojure would look like if it had a different contribution process, and was more willing to make bold/risky changes.

Unlike Clojure which is eminently stable, Jaunt is not guaranteed to be stable (yet). Some level of breaking changes with Clojure will be accepted if there is a good reason for them.

Administration

Currently, Jaunt is administered at my (Reid McKenzie's) sole discretion. Contributions, bug reports, and feature requests are welcomed.

It must be stated this is a hobby project for me. I'll respond to issues and pull requests as I have free time to consider and address them.

The EPL license reads

THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF ... FITNESS FOR A PARTICULAR PURPOSE.

And that is the extent of the guarantees I offer with regards to this software. It is my goal to maintain Jaunt in such a way that CIDER works, and that most compatibility with Clojure is maintained but this is not a hard guarantee. If you want a Clojure compatible language, you're gonna have to use Clojure.

In the future when there are other active contributors, it is my desire to hand off issues and patch reviews to volunteer contributors as they may choose to donate time. The precise mechanism by which contributors may approve changes is undecided, but the goal is for significant contributors who have demonstrated that they share some degree of respect for compatibility will be able to approve and merge changes without my involvement.

Contributing

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected]. See CONTRIBUTING.md for more information about this project's development process.

Donations

You can support the development of Jaunt and related tooling via Patreon. Note that choosing to contribute represents blanket support for this and other projects, and does not constitute a contract for support or for a tee shirt.

Legal

Jaunt is (c) Reid McKenzie. All rights reserved. The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (EPL) (/etc/licenses/epl-v10.txt). By using this software in any fashion, you are agreeing to be bound by the terms of this license.

You must not remove this notice, or any other, from this software.

Jaunt is derived directly from Clojure, (c) Rich Hickey, also distributed under the EPL.

This program uses the Guava Murmur3 hash implementation which is distributed under the Apache License, in /etc/licenses/apache.txt

This program uses the ASM bytecode engineering library which is distributed under the license in /etc/licenses/inria.txt

Change Log

An extensive changelog is available here.

FAQ

Will you support $LIBRARY/$PRODUCT?

No. They may work just fine, and you're welcome to offer changes continuing or preserving support as well as to assist in preventing breakages. However no degree of compatibility with Clojure, Cognitect products or the surrounding ecosystem is guaranteed or represented.

Will you add $FEATURE/$PATCH from Clojure?

Maybe. Under the EPL you may port changes from Clojure to Jaunt. However I make no promises of merging or porting upstream changes.

Will you add $FEATURE to the language?

Maybe. For the most part, it seems that clojure.core is shall we say "right sized". In the Scheme tradition, the compiler works and the core is large enough that users can and have built just about everything else you could want as a library. This leads me to believe that for the most part adding features to the language isn't called for.

That said, I don't think the language is perfect. The Java implementation could use some spit and shoeshine in my present estimation. The compiler could be smarter. The various "internal" APIs could be reviewed, documented and published so that users can rely on them. There are some things which clearly deserve to be added such as type predicates which are nearly universally defined by users, but I expect this project to largely be one of refinement rather than one of novel development.