jank is now running on LLVM IR
Jank has transitioned to LLVM IR, improving performance and reducing clojure.core compilation time from 12 seconds to 150 milliseconds, though initial runtime may decline due to manual optimizations needed.
Read original articleJank, a programming language project, has recently transitioned to using LLVM IR for code generation, significantly enhancing its performance and functionality. Over the past few months, the focus has been on developing LLVM IR generation, improving semantic analysis, and refining the module loading system. As of January 2025, the project's lead developer, Jeaye Wilkerson, will be working on Jank full-time, supported by sponsors. The transition to LLVM IR has resolved previous issues with slow startup times, reducing the compilation time for clojure.core from 12 seconds to just 2 seconds, and further down to 150 milliseconds when using object files. However, initial runtime performance may be negatively impacted as the new IR generation requires manual optimization that was previously handled by the C++ compiler. Additionally, the build system has been improved by removing vcpkg, addressing various dependency issues, and eliminating pre-compiled headers to streamline the compilation process. Community contributions have also advanced Jank's capabilities, including Unicode support and improved interoperability with C and C++ libraries. Looking ahead, the next steps involve finalizing LLVM IR generation for try nodes and enhancing error reporting to provide clearer feedback to developers.
- Jank has transitioned to LLVM IR for improved performance and functionality.
- Startup time for compiling clojure.core has been reduced from 12 seconds to 150 milliseconds.
- Initial runtime performance may decline due to the need for manual optimizations.
- The build system has been streamlined by removing vcpkg and pre-compiled headers.
- Community contributions have enhanced Jank's Unicode support and interoperability with C/C++ libraries.
Related
Notes/Primer on Clang Compiler Front End (1): Introduction and Architecture
The article discusses the Clang Compiler Frontend, emphasizing its architecture, development environment setup, and the compilation process involving Lexer, Parser, and Code Generator, particularly for C++ complexities.
Clojure 1.12.0 is now available
Clojure 1.12.0 introduces significant updates, including the last support for Java 8 bytecode, enhanced lazy-seq handling, new library management functions, and security fixes, preparing for future Java compatibility.
Build a quick Local code intelligence using Ollama with Rust
Bosun developed Swiftide, a Rust-based tool for efficient code indexing and querying, utilizing Qdrant and FastEmbed. It enhances performance with OpenTelemetry, integrating various language models for improved response times.
Jank development update – Moving to LLVM IR
Jeaye Wilkerson will work full-time on jank from January 2025, focusing on optimizing startup time and transitioning to LLVM IR for better performance and interoperability, while mentoring new developers.
Why am I writing a JavaScript toolchain in Zig?
The new JavaScript toolchain, Jam, is being developed in Zig to enhance developer tools with features like static analysis, formatting, and optimization, while supporting JSX and TypeScript for improved performance.
Ever since I got into Clojure I have wanted what you are building. I love the language, I love the collections, but I don't love waiting for program startup.
I can't wait until Jank is complete!
In fact, how can we help at the moment?
However, it's a quirky language. So, my quick take, as a glue layer on top of the JVM, it was quite powerful, but jank has me scratching my head. LISP doesn't really read well the bigger the codebase, and as something to write software in standalone environment, it makes me a bit hesitant.
I sometimes would hit walls, because in real world software, you need persistent state. Functional software, for obvious reasons, fights against that, and so modeling state is actually quite difficult. This is where I think, as a small layer on top, it's fast and effective. I would just not want to write more than a few files with it though. Happy to follow along this project though and see where it goes.
Do you have any "killer app" style use cases in mind for jank? Babashka is great in CLI/FaaS settings, native Clojure is great for "situated" programs that can afford a JVM startup and some memory overhead
Which settings are you particularly excited to use jank in?
Related
Notes/Primer on Clang Compiler Front End (1): Introduction and Architecture
The article discusses the Clang Compiler Frontend, emphasizing its architecture, development environment setup, and the compilation process involving Lexer, Parser, and Code Generator, particularly for C++ complexities.
Clojure 1.12.0 is now available
Clojure 1.12.0 introduces significant updates, including the last support for Java 8 bytecode, enhanced lazy-seq handling, new library management functions, and security fixes, preparing for future Java compatibility.
Build a quick Local code intelligence using Ollama with Rust
Bosun developed Swiftide, a Rust-based tool for efficient code indexing and querying, utilizing Qdrant and FastEmbed. It enhances performance with OpenTelemetry, integrating various language models for improved response times.
Jank development update – Moving to LLVM IR
Jeaye Wilkerson will work full-time on jank from January 2025, focusing on optimizing startup time and transitioning to LLVM IR for better performance and interoperability, while mentoring new developers.
Why am I writing a JavaScript toolchain in Zig?
The new JavaScript toolchain, Jam, is being developed in Zig to enhance developer tools with features like static analysis, formatting, and optimization, while supporting JSX and TypeScript for improved performance.