JunC++ion v3.0
Release Focus
This release represents a quantum leap for our JunC++ion product. We have tried to minimize breaking changes in generated code, but the runtime library has been completely redesigned and reimplemented. While there was nothing "wrong" with the JunC++ion 2.x design, it proved too inflexible to go in the direction in which we wanted to take it.
A large amount of work went into consolidating the native C/C++ parts of the JuggerNET and JunC++ion runtime libraries. JuggerNET now uses the JunC++ion runtime library to interact with the Java side. This has the benefit of creating a much more uniform user experience across our products line and it eases our maintenance work (very often a bugfix on the JunC++ion side will also be a bugfix on JuggerNET side).
Another nearly invisible focus of redesign was the "backend." JunC++ion 2.x had essentially a "JNI++" runtime design, i.e. it took the Java Native Interface and wrapped it in a more convenient C++ API. The generated code would then use that C++ abstraction rather than the low-level JNI API. That was fine while JNI was the only "backend" for the generated proxy classes. It just didn't hold up when we decided that we also wanted to be able to use the same generated code with different backend implementations, for example our out-of-process Shared JVM. Consequently, we abstracted the runtime library along different lines.
Major areas of user-visible enhancement include:
- a mature configuration framework.
You can choose between four different major styles of configuring your integration module at runtime. The choices range from explicit configuration in code, over configuration files (both XML and old-style JunC++ion), to configuration hooks. - a mature string conversion framework.
Conversions between Java strings and C++ strings were a little ad-hoc'ish in the previous release. Now you can choose default encodings on a global, local, or per-thread basis. - performance enhancements in various areas.
- a mature tracing feature for enhanced debugging.
- improved code portability.
Change history
| Version | Module | Issue |
|---|---|---|
| 3.0.6 | Code Generator | #656 Fields with '$' symbols in name are generated without name mangling. |
| Runtime | #655 Environment variable overrides are not working. | |
| Runtime | #654 Comparison of array elements with null leaks a reference. | |
| 3.0.5 | Runtime | #653 Reference leak in object arrays. |
| Runtime | #652 Reference leak in callbacks. | |
| 3.0.4 | Code Generator | #648 Generated classes don't have a placement new operator. |
| Runtime | #645 setSecurityManager() method interprets empty string differently than expected. | |
| 3.0.2 - 3.0.3 | n/a | only .NET bugfixes. |
| 3.0.1 | Runtime | #641 operator == () not working as expected. |
| 3.0.0 | Major Release | Completely redesigned product. |
