We're excited to announce the release of Fury v0.5.0. This release incorporates a myriad of improvements, bug fixes, and new features across multiple languages including Java, Golang, Python and JavaScript. It further refines Fury's performance, compatibility, and developer experience.
New Features
Specification
- Introduced fury cross-language serialization specification (#1413, #1508)
- Introduced xlang type mapping (#1468)
- Introduced fury java specification (#1240)
- Introduced meta string encoding specification (#1565, #1513, #1517)
Java
- Support for compatible mode with GraalVM (#1586, #1587).
- Support unexisted array/enum classes and enabled deserializeUnexistedClass by default (#1569, #1575).
- meta string encoding algorithm in java (#1514, #1568, #1516, #1565)
- Support meta string encoding for classname and package name (#1527)
- native streaming mode deserialization (#1451, #1551)
- native channel stream reader (#1483)
- Support registration in thread safe fury (#1280)
- Implement fury logger and remove slf4j library (#1485, #1494, #1506, #1492)
- Support adjust logger level dynamically (#1557)
- Support jdk proxy serialization for graalvm (#1379)
- Specify JPMS module names (#1343)
- Align string array to collection protocol v2 (#1228)
JavaScript
- Align implementation to new Xlang protocol (#1487)
- Implement Xlang map (#1549)
- Implemented xlang map code generator (#1571)
- Added magic number feature for better serialization control (#1550).
- Support oneof (#1348)
- create zero-copy buffer when convert (#1386)
- Implement the collection protocol (#1337)
- Implement Enum (#1321)
- compress numbers (#1290)
C++
- Support optional fields/elements in RowEncoder (#1223)
- Support mapping types for RowEncodeTrait (#1247)
Golang
- Implemented Fury meta string encoding algorithm (#1566).
- concat meta string len with flags (#1517)
Enhancements
Java
- Improved buffer growth strategy to support larger data sizes for serialization (#1582).
- Performance optimizations for MetaStringDecoder and various serialization processes (#1568, #1511, #1493).
- concat write classname flag with package name (#1523)
- concat meta string len with flags (#1517)
- fastpath for read/write small varint in range
[0,127]
(#1503) - optimize read float/double for jvm jit inline (#1472)
- replace Guava's TypeToken with self-made (#1553)
- Remove basic guava API usage (#1244)
- optimize fury creation speed (#1511)
- optimize string serialization by concat coder and length (#1486)
- carry read objects when deserialization fail for better trouble shooting (#1420)
- implement define_class insteadof using javaassist (#1422)
- avoid recompilation when gc happens for memory pressure (#1411, #1585)
- Fix immutable collection ref tracking (#1403)
- reduce fury caller stack (#1496)
- Extract BaseFury interface (#1382)
- refine collection builder util (#1334)
- disable async compilation for graalvm (#1222)
- refine endian check code size in buffer (#1501)
- generate list fori loop instead of iterator loop for list serialization (#1493)
- Reduce unsafeWritePositiveVarLong bytecode size. (#1491)
- Reduce unsafePutPositiveVarInt bytecode size. (#1490, #1489)
- optimize read char/short jvm jit inline (#1471)
- reduce code size of read long to optimize jvm jit inline (#1470)
- reduce readInt/readVarInt code size for for jvm jit inline (#1469)
- refactor readVarUint32 algorithm (#1462)
- rewrite readVarUint64 algorithm (#1463)
JavaScript
- Make PlatformBuffer available if has Buffer polyfill (#1373)
- enhance performance 64bits number (#1320)
- Refactor & Compress Long (#1313)
- Improve tag write performance (#1241)
- Add more methods for BinaryReader (#1231)
- Implements tuple serializer (#1216)
Python
- concat meta string len with flags (#1517)
Bug Fix
Java
- Fix bytebuffer no such method error (#1580)
- Prevent exception in ObjectArray.clearObjectArray() (#1573)
- Fix slf4j on graalvm (#1432)
- Fix illegal classname caused by negative hash (#1436)
- Fix BigDecimal serializer (#1431)
- Fix BigInteger serialization (#1479)
- Fix type conflict in method split (#1371)
- Fix CodeGen Name conflicts when omitting java.lang prefix #1363 (#1366)
- Fix ClassLoader npe in loadOrGenCodecClass (#1346)
- Fix big buffer trunc (#1402)
- Make Blacklist detection is also performed when the Class is registered. (#1398)
- avoid big object graph cause buffer take up too much memory (#1397)
- Fix get static field by unsafe (#1380)
- Fix javax package for accessor codegen (#1388)
- Fix nested collection cast for scala/java (#1333)
- Fix References within InvocationHandler (#1365)
- Allow partial read of serialized size from
InputStream
(#1391) - add potential missing bean class-loader (#1381)
- Fix polymorphic array serialization (#1324)
- Fix nested collection num elements (#1306)
- Fix collection init size typo (#1342)
- Clear extRegistry.getClassCtx if generate serializer class failed (#1221)
Rust
- Fix memory errors caused by casting (#1372)
- Fix incorrect cast (#1345)
Miscellaneous
- Numerous code cleanups, refactorings, and internal improvements across all supported languages to enhance code quality and maintainability.
- Moved various utilities into more appropriate packages to improve code organization and readability (#1584, #1583, #1578).
- rename MemoryBuffer read/write/put/getType with read/write/put/getTypeNumber (#1480, #1464, #1505, #1500)
- extract public Fury methods to BaseFury (#1467)
- Optimize Class ID allocation. (#1406)
- refine Collection util data structure (#1287) (#1288)
- Improve Status by using unique_ptr (#1234)
- Improve FormatTimePoint by removing sstream (#1233)
- Drop optional chaining expression (#1338)
New Contributors
- @nandakumar131 made their first contribution in https://github.com/apache/fury/pull/1244
- @vesense made their first contribution in https://github.com/apache/fury/pull/1260
- @LiangliangSui made their first contribution in https://github.com/apache/fury/pull/1294
- @liuxiaocs7 made their first contribution in https://github.com/apache/fury/pull/1312
- @mtf90 made their first contribution in https://github.com/apache/fury/pull/1343
- @bowin made their first contribution in https://github.com/apache/fury/pull/1353
- @cn-at-osmit made their first contribution in https://github.com/apache/fury/pull/1366
- @Maurice-Betzel made their first contribution in https://github.com/apache/fury/pull/1381
- @phogh made their first contribution in https://github.com/apache/fury/pull/1391
- @laglangyue made their first contribution in https://github.com/apache/fury/pull/1415
- @Munoon made their first contribution in https://github.com/apache/fury/pull/1467
- @pixeeai made their first contribution in https://github.com/apache/fury/pull/1559
- @huisman6 made their first contribution in https://github.com/apache/fury/pull/1572
- @tommyettinger made their first contribution in https://github.com/apache/fury/pull/1573
- @qingoba made their first contribution in https://github.com/apache/fury/pull/1566
Acknowledgements
Thanks @chaokunyang @theweipeng @PragmaTwice @LiangliangSui @nandakumar131 @Munoon @qingoba @vesense @liuxiaocs7 @mtf90 @bowin @cn-at-osmit @Maurice-Betzel @phogh @laglangyue @tommyettinger @huisman6 @pixeeai
A big thank you to all our contributors who have worked hard on this release. Your contributions, whether through code, documentation, or issue reporting, are really appreciated.
Full Changelog: https://github.com/apache/fury/compare/v0.4.1...v0.5.0