|
| 1 | +--- |
| 2 | +title: "Upstreaming jank-lang specific patches back to CppInterOp" |
| 3 | +layout: post |
| 4 | +sitemap: false |
| 5 | +author: Iva Fezova |
| 6 | +permalink: blogs/upstreaming_jank_lang_patches_Iva_Fezova_blog/ |
| 7 | +thumbnail_image: /images/mg-pld-logo.png |
| 8 | +date: 2026-03-08 |
| 9 | +excerpt: "Integrating jank-specific improvements directly into CppInterOp to eliminate maintenance overhead and empower the native Clojure dialect." |
| 10 | +tags: clang llvm diagnostics c++ interop |
| 11 | +--- |
| 12 | + |
| 13 | +{% include dual-banner.html |
| 14 | +left_logo="/images/mg-pld-logo.png" |
| 15 | +right_logo="/images/cr-logo_old.png" |
| 16 | +caption="" |
| 17 | +height="20vh" %} |
| 18 | + |
| 19 | +## Introduction |
| 20 | + |
| 21 | +My name is Iva Fezova, and the goal of this project is to focus on integrating **jank** specific modifications directly into the official **CppInterOp** upstream repository. This will not only simplify the development of jank-lang but also enhance CppInterOp for other projects that require similar advanced interoperability features. The jank project is a native Clojure dialect that compiles to C++ and leverages the power of LLVM. |
| 22 | + |
| 23 | +**Mentor:** Vassil Vasilev |
| 24 | + |
| 25 | +## Overview |
| 26 | + |
| 27 | +Maintaining local patches—often referred to as "downstream patches"—comes with a significant maintenance cost. Every time the upstream CppInterOp library or the underlying Clang/LLVM infrastructure is updated, these patches must be manually re-applied and tested. The current reliance on local patches meets specific immediate requirements, but to ensure long-term stability, we are moving toward this upstream-first approach. |
| 28 | + |
| 29 | +## Technical Implementation |
| 30 | + |
| 31 | +The implementation process involves a deep dive into the existing modifications and the CppInterOp codebase: |
| 32 | +* **Analysis of Modifications**: I am currently analyzing the specific jank-lang patches to determine which functionalities are missing from the current CppInterOp implementation. |
| 33 | +* **Refactoring and Generalization**: To make these patches acceptable for upstream, they must be refactored from specialized "hacks" into general-purpose, robust components. |
| 34 | +* **API Compatibility**: The work involves heavy interaction with LLVM and Clang APIs to ensure that the new CppInterOp features are performant and stable across different compiler versions. |
| 35 | +* **Incremental Integration**: Following a review-oriented approach, changes are being prepared as incremental pull requests to allow for thorough peer review and testing. |
| 36 | + |
| 37 | +## Goals |
| 38 | + |
| 39 | +The primary objectives of this project are: |
| 40 | +1. **Reduce Maintenance Overhead**: Eliminate the need for jank-lang to maintain separate CppInterOp patches. |
| 41 | +2. **Standardize Interoperability**: Provide a well-designed, repeatable process for establishing language interoperability through CppInterOp. |
| 42 | +3. **Enhance the Ecosystem**: Contribute improvements that benefit the broader CppInterOp user base and the C++ tooling community. |
| 43 | + |
0 commit comments