fury

A blazingly fast multi-language serialization framework powered by JIT and zero-copy.

APACHE-2.0 License

Stars
2.9K
Committers
61

Bot releases are hidden (Show)

fury - v0.7.1

Published by chaokunyang about 1 month ago

Features

Bug Fix

Other Improvements

New Contributors

Full Changelog: https://github.com/apache/fury/compare/v0.7.0...v0.7.1

fury - v0.7.0 Latest Release

Published by chaokunyang 3 months ago

High Light

Experimental

Implement fast object deep copy framework for java:

Fury fury = Fury.builder().withRefCopy(true).build();
fury.register(SomeClass.class);
SomeClass a = xxx;
SomeClass copied = fury.copy(a);

Benchmark result:

Benchmark objectType Score Error Units
fury_copy MEDIA_CONTENT 1243297.690 ± 451828.452 ops/s
fury_copy SAMPLE 2670545.816 ± 1378536.021 ops/s
fury_copy STRUCT 2673356.422 ± 202288.322 ops/s
fury_copy STRUCT2 1943587.774 ± 392513.707 ops/s
fury_copy_int_map int map 1470264.733 ± 1021875.257 ops/s
fury_copy_list List 3556892.276 ± 127410.724 ops/s
fury_copy_object_array array 4430589.112 ± 25366.893 ops/s
fury_copy_string_map string map 1736145.327 ± 377806.877 ops/s
kryo_copy MEDIA_CONTENT 804208.092 ± 27429.069 ops/s
kryo_copy SAMPLE 717669.608 ± 71093.370 ops/s
kryo_copy STRUCT 1076048.642 ± 223194.146 ops/s
kryo_copy STRUCT2 141374.767 ± 14150.535 ops/s
kryo_copy_int_map int map 546203.187 ± 54669.173 ops/s
kryo_copy_list List 843643.496 ± 312306.921 ops/s
kryo_copy_object_array object array 1593267.344 ± 1721824.436 ops/s
kryo_copy_string_map string map 574809.875 ± 47316.340 ops/s

Features

Bug Fix

Other Improvements

New Contributors

Full Changelog: https://github.com/apache/fury/compare/v0.6.0...v0.7.0

fury - v0.7.0-rc1

Published by chaokunyang 3 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/fury/compare/v0.6.0...v0.7.0-rc1

fury - v0.6.0

Published by chaokunyang 3 months ago

The Apache Fury team is pleased to announce the 0.6.0 release. This is a major release that includes 35 PR from 12 distinct contributors. See the Install Page to learn how to get the libraries for your platform.

High light

In this release, we introduced a scoped meta share mode for schema evolution in java and enabled it by default when CompatibleMode is set to Compatible. This mode is 50% faster than previous KV compatible mode, and only 1/6 size of serialized payload than before.

Feature

Bug Fix

Others

New Contributors

Full Changelog: https://github.com/apache/fury/compare/v0.5.1...v0.6.0

fury - v0.6.0-rc1

Published by chaokunyang 3 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/fury/compare/v0.5.1...v0.6.0-rc1

fury - v0.5.1

Published by chaokunyang 5 months ago

We're excited to announce the release of Apache Fury v0.5.1. This release includes some fix for Apache Fury v0.5.0. We suggest all users of Apache Fury v0.5.0 upgrade to this version.

Feature

Bug Fix

Misc

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.5.0...v0.5.1

fury - v0.5.1-rc2

Published by chaokunyang 5 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.5.0...v0.5.1-rc2

fury - v0.5.1-rc1

Published by chaokunyang 5 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.5.0...v0.5.1-rc1

fury - v0.5.0

Published by chaokunyang 6 months ago

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: https://github.com/apache/incubator-fury/compare/v0.4.1...v0.5.0

fury - v0.5.0-rc4

Published by chaokunyang 6 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.4.1...v0.5.0-rc4

fury - 0.5.0-rc3

Published by chaokunyang 6 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.4.1...v0.5.0-rc3

fury - 0.5.0-rc2

Published by chaokunyang 7 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.4.1...0.5.0-rc2

fury - v0.5.0-rc1

Published by chaokunyang 7 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/apache/incubator-fury/compare/v0.4.1...v0.5.0-rc1

fury - v0.4.1

Published by chaokunyang 11 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/alipay/fury/compare/v0.4.0...v0.4.1

fury - v0.4.0

Published by chaokunyang 11 months ago

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: https://github.com/alipay/fury/compare/v0.3.1...v0.4.0

fury - v0.3.1

Published by chaokunyang 11 months ago

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

New Contributors

Full Changelog: https://github.com/alipay/fury/compare/v0.3.0...v0.3.1

fury - v0.3.0

Published by chaokunyang 12 months ago

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 https://github.com/apache/dubbo-spi-extensions/pull/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: https://github.com/alipay/fury/compare/v0.2.1...v0.3.0

fury - v0.2.1

Published by chaokunyang about 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/alipay/fury/compare/v0.2.0...v0.2.1

fury - v0.2.0

Published by chaokunyang about 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/alipay/fury/compare/v0.1.0...v0.2.0

fury - v0.2.0.alpha1

Published by chaokunyang about 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/alipay/fury/commits/v0.2.0.alpha1