Skip to content

Releases: apache/incubator-fury

v0.5.0

03 May 16:49
Compare
Choose a tag to compare

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

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: v0.4.1...v0.5.0

v0.5.0-rc4

27 Apr 07:01
Compare
Choose a tag to compare
v0.5.0-rc4 Pre-release
Pre-release

What's Changed

Read more

0.5.0-rc3

17 Apr 07:26
fae0633
Compare
Choose a tag to compare
0.5.0-rc3 Pre-release
Pre-release

What's Changed

Read more

0.5.0-rc2

31 Mar 05:37
Compare
Choose a tag to compare
0.5.0-rc2 Pre-release
Pre-release

What's Changed

Read more

v0.5.0-rc1

31 Mar 05:36
Compare
Choose a tag to compare
v0.5.0-rc1 Pre-release
Pre-release

What's Changed

Read more

v0.4.1

08 Dec 17:13
Compare
Choose a tag to compare

What's Changed

  • [Doc] Refine issue template by a yaml form by @chaokunyang in #1185
  • [C++] Fix ownership problem for children writers by visitor by @PragmaTwice in #1193
  • [C++] Remove useless fields and macro in logging by @PragmaTwice in #1195
  • [Doc] add docs for java FuryBuilder #1188 by @mof-dev-3 in #1192
  • [Rust] support row format by @wangweipeng2 in #1196
  • [C++] Add RowEncoder wrapper to RowEncodeTrait by @PragmaTwice in #1200
  • [Rust] Row support more types by @wangweipeng2 in #1202
  • [Rust] Support row map by @wangweipeng2 in #1206
  • [C++] update bazel version from 4.2 to 6.3.2 by @chaokunyang in #1204
  • [JavaScript] Support partial record by @wangweipeng2 in #1208
  • [Java] fix package access level class accessor jit by @chaokunyang in #1210
  • [JavaScript] Fix register a description twice will get undefined serializer by @bytemain in #1211
  • [C++] Support iterable types in RowEncodeTrait by @PragmaTwice in #1212
  • [C++] Support iterable types for RowEncoder by @PragmaTwice in #1215
  • [Python] Refine py register class method by @chaokunyang in #1218
  • [Java] Clear extRegistry.getClassCtx if generate serializer class failed in #1221

New Contributors

Full Changelog: v0.4.0...v0.4.1

v0.4.0

30 Nov 16:18
Compare
Choose a tag to compare

Highlight

  • [Java] Support Graalvm native image. The implementation will generate all serialization code at image build time, the runtime will be extremely fast, see fury graalvm usage doc
  • [Java] Fury vs JDK benchmark on Graalvm native image
  • [Scala] Serialization support for package scoped object
  • [C++] Reflection support by macro/template programing
  • [C++] Automatic row format encoder

What's Changed

Full Changelog: v0.3.1...v0.4.0

v0.3.1

21 Nov 14:32
Compare
Choose a tag to compare

Highlight

  • Support python 3.11 and 3.12, drop python 3.6 support
  • Refactor collection serialization framework to support writeReplace JIT
  • Integrate scala collection with fury java collection framework
  • Support scala collection jit serialization
  • Support shim dispatcher to resolve compatibility problems for common used classes
  • Use lastest arrow 14 version for row format in Java and Python

What's Changed

  • [Doc] add scala sbt install doc by @chaokunyang in #1066
  • [Doc] Update scala_guide.md by @chaokunyang in #1067
  • [Doc] Add scala 2/3 support doc by @chaokunyang in #1068
  • [Java] Refactor collection serialization framework to support writeReplace JIT by @chaokunyang in #1062
  • [Java] Refine collection package by @chaokunyang in #1070
  • [Java] merge map/collection into collection package by @chaokunyang in #1072
  • [Scala] integrate scala collection with fury java collection framework by @chaokunyang in #1073
  • remove unused part of build.sbt by @pjfanning in #1074
  • [Scala] get build to work with Scala 3 by @pjfanning in #1075
  • [Scala] support scala collection jit serialization by @chaokunyang in #1077
  • [Doc] add apache license section to readme by @caicancai in #1080
  • [Java] add option to disable class check warnings by @chaokunyang in #1084
  • [Java] Fix collection serialization NPE when all elements are null by @chaokunyang in #1086
  • [Java] FuryPooledObjectFactory getFury refactor, remove redundant recursive call by @mof-dev-3 in #1088
  • [Rust] add rust-version by @wangweipeng2 in #1091
  • [DOC] add javascript sample by @wangweipeng2 in #1095
  • Make sure the c++ standard is set to 17 by @PragmaTwice in #1093
  • Fix undefined behavior due to use of uninitialized field in Buffer by @PragmaTwice in #1092
  • [Rust] merge derive and make it sample by @wangweipeng2 in #1098
  • [DOC] add rust sample by @wangweipeng2 in #1100
  • Simplify endian utility functions and IsOneOf by @PragmaTwice in #1096
  • [Java] throw error if nested fury serialize happen in serialization by @chaokunyang in #1103
  • [C++] remove useless FromXXXEndian by @chaokunyang in #1105
  • [Rust ] Remove the magic numbers by @wangweipeng2 in #1107
  • [Rust] chore: add rust doc by @wangweipeng2 in #1109
  • [JavaScript] Fill in readme by @wangweipeng2 in #1110
  • chore: check xlang flag by @wangweipeng2 in #1112
  • [Java] Remove guava part1 by @chaokunyang in #1114
  • [Rust] Correct language flag by @wangweipeng2 in #1120
  • [Java] DateTimeUtils minor refactor, reuse floorDiv to calculate floorMod by @mof-dev-3 in #1122
  • [Python] Support python3.11/12 by @chaokunyang in #1064
  • [java] support shim dispatcher to resolve compatibility problems for common used classes by @xiguashu in #1123

New Contributors

Full Changelog: v0.3.0...v0.3.1

v0.3.0

03 Nov 11:22
Compare
Choose a tag to compare

Highlight

  • [Scala] Support scala serialization: case/object/tuple/string/collection/enum/basic all supported
  • [Scala] Add scala user documentation
  • [Scala] add optimized scala singleton object serializer
  • [Java] Make java.io.Externalizable compatible with Java writeReplace/readResolve API
  • [Java] Integrate fury with dubbo apache/dubbo-spi-extensions#226
  • [Java] support bytes string serialization for jdk8 with JDK17 runtime

BugFix

  • [Java] Allow for InputStream not reading entire length
  • [Java] Use ReflectionUtils.getCtrHandle() for non-public constructor in ExternalizableSerializer
  • [Java] fix jdk compatible serialization for inheritance

What's Changed

New Contributors

Full Changelog: v0.2.1...v0.3.0

v0.2.1

18 Oct 11:57
Compare
Choose a tag to compare

Highlight

  • [Go] Support tiny go compilation
  • [Java] Support private JDK17+ record class JIT serialization

Bug fix

  • Fix jit error for register private serializers
  • Upgrade janino version to fix package name conflict with classname

What's Changed

New Contributors

Full Changelog: v0.2.0...v0.2.1