-
Notifications
You must be signed in to change notification settings - Fork 790
Bootstrapped ClojureScript FAQ
It is not a goal of bootstrapped ClojureScript to eliminate the JVM.
- The JVM is used by Google Closure Compiler. Thus a JVM needs to be present for anything other than compiler
:optimizations
set to:none
. (While:none
is common for REPL development,:advanced
is often used for production builds.) - The JVM implementation is efficient. As things stand now it usually leads to faster reading, analysis, and compilation than most JavaScript engines.
- Much of the existing ClojureScript compiler infrastructure relies on Java-based file I/O and use of the classpath.
While there may be some advantages to a completely JVM-free implementation, developing and maintaining such a thing is not free, and is thus not a goal of the project.
Having said that, there is nothing preventing the creation of development tools (REPLs, IDEs, etc.) that make use of bootstrapped ClojureScript without a JVM present.
Reach.
Without bootstrapped ClojureScript, if you want to build an application that can evaluate ClojureScript forms at runtime, you need to delegate that task to some backend compiler service (this is how Himera works). By enabling the compiler to be used from within the target JavaScript environment, novel use cases can be implemented. This enables innovation in new creative ways:
- Shipping dev tools that don't require a JVM dependency.
- Low-latency scripting, making use of JavaScript engines' inherent fast startup in interpreted mode.
- Live update to deployed codebases. (Ship code that can be compiled in target environment and dynamically incorporated in app. Mobile app updates, etc.)
- Web pages that provide dynamic online tutorials or showcase ClojureScript libraries.
- REPLs on mobile devices, without requiring network access to a compiler backend.
- Rationale
- Quick Start
- Differences from Clojure
- [Usage of Google Closure](Google Closure)