Am 05.10.2026 um 06:56 schrieb Damjan Jovanovic:
Hi

Since we now require Java 8 (00a90ea2c35aa0d62b41963f97bc10041530f5d1) and
C++ 2011 (91144cd0085a7583d2099b982122deb2184ab956), it would be good to
update our source code accordingly.
+1

--------
Java
--------
The very old Java code we have uses java.util.Vector (from Java 1.0) a lot,
which is problematic as all its methods are synchronized, while the more
modern java.util.ArrayList (Java 1.2) doesn't lock which is faster. The
same is true with at least java.lang.StringBuffer (1.0) vs
java.lang.StringBuilder (1.5), and java.util.Hashtable (1.0) vs
java.util.HashMap (1.2).

Furthermore a lot of code is written for Java <= 1.4, which had no
generics, and was forced to use a lot of casts. Even for some common calls
to our own APIs, which were made generic, the calling code was never
updated to drop the unnecessary casts.

I've begun improving some of this, with positive results.

UnoRuntime.queryInterface() is very heavily used, and the cast on its
return value is almost never necessary. With a little script I wrote to
look for "UnoRuntime.queryInterface" and analyze surrounding code and
delete casts where possible, I've deleted 7366 unnecessary casts, which has
reduced the total size of all our source files by 124 kB. And many more
casts could be removed, such as from AnyConverter.toObject().

All use of java.lang.StringBuffer has been replaced by
java.lang.StringBuilder.

Regarding java.util.Vector and java.util.Hashtable, I am less certain. It
appears that, at least in certain cases, code may have been written to rely
on their synchronized behaviour. For example in
main/javaunohelper/com/sun/star/comp/helper/ComponentContext.java there is
no synchronization being done on the m_eventListener Vector, despite the
fact it could be accessed from multiple threads, presumably relying on the
Vector's internal synchronization... Converting this to java.util.ArrayList
would result in race conditions.

So far I've only converted java.util.Vector to java.util.ArrayList in cases
where it is safe, where the Vector is created temporarily and not visible
to other callers, such as within a method.

My changes have been pushed to trunk, please let me know if you find any
problems.

-------
C++
-------
Since we started with C++ 2011, the build output has never looked uglier,
with tons of warnings everywhere.

Some of these would be a good idea to fix, for example the deprecated
::std::auto_ptr could be replaced by ::std::unique_ptr in many
places, which would also make ownership clearer and safer from serious
memory bugs.

Some people recommend a global search and replace of auto_ptr with
unique_ptr (
https://stackoverflow.com/questions/3451099/stdauto-ptr-to-stdunique-ptr).
In my quick test on main/codemaker and main/idlc, the search and replace to
unique_ptr does work, the modules compile successfully, but these are small
standalone tools that only use these smart pointers internally within
methods. How the change behaves more broadly, remains to be seen.

I think this is to early. It makes back ports of fixes more work. unlike Java 4.1.x is the blocking factor if we want to cause more work for security patches.

I would suggest we target a V5 release end of the year and start the code overhaul after we have abandoned 4.1.X. I have a 4.2 branch boost-imprint-reduction, that started to prepare this move. It makes the change using standard features, but adds a fallback

method to old boost in case old compilers are used. However since we moved to v5, this mechanism became obsolete. And i need to adjust the branch. But I did not do this because of the blocker i mentioned before. I see this effort after we released v5 and abandoned 4.1.X

Another method could be that we move to bazel. which can build V5 with modernĀ  compiler, and knows how to downgrade to build on winXP with old stack.

But honestly i dont think it is worth the effort.

my 2 cents


Regards
Damjan


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to