Skip to content

Releases: apache/fury

v0.9.0

10 Nov 06:54
Compare
Choose a tag to compare

Highlight

  • Optimized serializers for Fury kotlin support
  • Highly-optimized UTF-8 string encoding implementation for Java(2x faster than JDK utf8 encoding)
  • Reduce metastring hashcode payload for small string(<=16 bytes)
  • Support building C++ libs on windows platform

How to use Fury kotlin

Install:

<dependency>
  <groupId>org.apache.fury</groupId>
  <artifactId>fury-kotlin</artifactId>
  <version>0.9.0</version>
</dependency>

Usage:

import org.apache.fury.Fury
import org.apache.fury.ThreadSafeFury
import org.apache.fury.serializer.kotlin.KotlinSerializers

data class Person(val name: String, val id: Long, val github: String)
data class Point(val x : Int, val y : Int, val z : Int)

fun main(args: Array<String>) {
    // Note: following fury init code should be executed only once in a global scope instead
    // of initializing it everytime when serialization.
    val fury: ThreadSafeFury = Fury.builder().requireClassRegistration(true).buildThreadSafeFury()
    KotlinSerializers.registerSerializers(fury)
    fury.register(Person::class.java)
    fury.register(Point::class.java)

    val p = Person("Shawn Yang", 1, "https://github.com/chaokunyang")
    println(fury.deserialize(fury.serialize(p)))
    println(fury.deserialize(fury.serialize(Point(1, 2, 3))))
}

Features

  • feat(kotlin): Introduce kotlin package with stdlib collections and tests by @wywen in #1877
  • feat(kotlin): Add Unsigned Primitive Support by @wywen in #1886
  • feat(kotlin): Add unsigned array support and tests for arrays and strings by @wywen in #1891
  • feat(java): Refactor String serialization and deserialization by @HuangXingBo in #1890
  • feat(java): support thread safe register callback for scala kotlin by @chaokunyang in #1895
  • feat(scala): add scala range serializer by @chaokunyang in #1899
  • feat(java): add option to treat enum as string by @orisgarno in #1892
  • feat(kotlin): Add tests and support for built-in types from the kotlin stdlib by @wywen in #1901
  • feat(java): reduce metastring hashcode payload for small string(<=16 bytes) by @chaokunyang in #1909
  • feat(javascript): Added serialization and serialization for Type Meta Layer by @Forchapeatl in #1825
  • feat(bazel): support building C++ libs on windows platform by @An-DJ in #1873
  • feat(scala): support scala native image build by @chaokunyang in #1922
  • perf(python): Add python benchmark test by @penguin-wwy in #1916

Bug Fix

  • fix(scala): ban these sbt commands by @pjfanning in #1862
  • fix(java): fix async compilation switch for non-public nested class by @chaokunyang in #1883
  • fix(java): fix add fury thread safety issue by @chaokunyang in #1889
  • fix(other): fix feature request template by @chaokunyang in #1898
  • fix(java): NonExistentEnum on mode serializeEnumByName by @orisgarno in #1904
  • fix(java): ThreadLocalFury and ThreadPoolFury prioritize using the user classloader by @Aliothmoon in #1907
  • fix(java): child container deep copy by @zhaommmmomo in #1911
  • fix(java): Fix incorrect results of utf16 to utf8 conversion for latin1 but not ascii characters in #1914
  • fix(python): Eliminate PytestCollectionWarning when running pytest by @penguin-wwy in #1917

Other Improvements

  • chore(py314): Replace deprecated pkgutil.find_loader by @effigies in #1888
  • docs(guide): Fix package typo by @mandrean in #1906
  • build(kotlin): Add spotless ktfmt and enable explicit api mode for library code. by @wywen in #1912
  • build(deps): upgrade scala (2.13.15/3.3.4) by @pjfanning in #1861
  • feat(rust): add rust-analyzer to toolchain by @caicancai in #1865
  • chore(scala): add scala build script by @chaokunyang in #1920
  • chore(kotlin): add parent pom for fury kotlin by @chaokunyang in #1921
  • feat(java): Improve error message on architecture not using little-endian format by @apupier in #1918

New Contributors

Full Changelog: v0.8.0...v0.9.0

v0.9.0-rc2

03 Nov 16:08
Compare
Choose a tag to compare
v0.9.0-rc2 Pre-release
Pre-release

Highlight

  • Optimized serializers for Fury kotlin support
  • Highly-optimized UTF-8 string encoding implementation for Java(2x faster than JDK utf8 encoding)
  • Reduce metastring hashcode payload for small string(<=16 bytes)
  • Support building C++ libs on windows platform

Features

  • feat(kotlin): Introduce kotlin package with stdlib collections and tests by @wywen in #1877
  • feat(kotlin): Add Unsigned Primitive Support by @wywen in #1886
  • feat(kotlin): Add unsigned array support and tests for arrays and strings by @wywen in #1891
  • feat(java): Refactor String serialization and deserialization by @HuangXingBo in #1890
  • feat(java): support thread safe register callback for scala kotlin by @chaokunyang in #1895
  • feat(scala): add scala range serializer by @chaokunyang in #1899
  • feat(java): add option to treat enum as string by @orisgarno in #1892
  • feat(kotlin): Add tests and support for built-in types from the kotlin stdlib by @wywen in #1901
  • feat(java): reduce metastring hashcode payload for small string(<=16 bytes) by @chaokunyang in #1909
  • feat(javascript): Added serialization and serialization for Type Meta Layer by @Forchapeatl in #1825
  • feat(bazel): support building C++ libs on windows platform by @An-DJ in #1873
  • feat(scala): support scala native image build by @chaokunyang in #1922
  • perf(python): Add python benchmark test by @penguin-wwy in #1916

Bug Fix

  • fix(scala): ban these sbt commands by @pjfanning in #1862
  • fix(java): fix async compilation switch for non-public nested class by @chaokunyang in #1883
  • fix(java): fix add fury thread safety issue by @chaokunyang in #1889
  • fix(other): fix feature request template by @chaokunyang in #1898
  • fix(java): NonExistentEnum on mode serializeEnumByName by @orisgarno in #1904
  • fix(java): ThreadLocalFury and ThreadPoolFury prioritize using the user classloader by @Aliothmoon in #1907
  • fix(java): child container deep copy by @zhaommmmomo in #1911
  • fix(java): Fix incorrect results of utf16 to utf8 conversion for latin1 but not ascii characters in #1914
  • fix(python): Eliminate PytestCollectionWarning when running pytest by @penguin-wwy in #1917

Other Improvements

  • chore(py314): Replace deprecated pkgutil.find_loader by @effigies in #1888
  • docs(guide): Fix package typo by @mandrean in #1906
  • build(kotlin): Add spotless ktfmt and enable explicit api mode for library code. by @wywen in #1912
  • build(deps): upgrade scala (2.13.15/3.3.4) by @pjfanning in #1861
  • feat(rust): add rust-analyzer to toolchain by @caicancai in #1865
  • chore(scala): add scala build script by @chaokunyang in #1920
  • chore(kotlin): add parent pom for fury kotlin by @chaokunyang in #1921
  • feat(java): Improve error message on architecture not using little-endian format by @apupier in #1918

New Contributors

Full Changelog: v0.8.0...v0.9.0-rc2

v0.9.0-rc1

27 Oct 05:12
Compare
Choose a tag to compare
v0.9.0-rc1 Pre-release
Pre-release

Highlight

  • Optimized serializers for Fury kotlin support
  • Highly-optimized UTF-8 string encoding implementation for Java(2x faster than JDK utf8 encoding)
  • Reduce metastring hashcode payload for small string(<=16 bytes)
  • Support building C++ libs on windows platform

Features

  • feat(kotlin): Introduce kotlin package with stdlib collections and tests by @wywen in #1877
  • feat(kotlin): Add Unsigned Primitive Support by @wywen in #1886
  • feat(kotlin): Add unsigned array support and tests for arrays and strings by @wywen in #1891
  • feat(java): Refactor String serialization and deserialization by @HuangXingBo in #1890
  • feat(java): support thread safe register callback for scala kotlin by @chaokunyang in #1895
  • feat(scala): add scala range serializer by @chaokunyang in #1899
  • feat(java): add option to treat enum as string by @orisgarno in #1892
  • feat(kotlin): Add tests and support for built-in types from the kotlin stdlib by @wywen in #1901
  • feat(java): reduce metastring hashcode payload for small string(<=16 bytes) by @chaokunyang in #1909
  • feat(javascript): Added serialization and serialization for Type Meta Layer by @Forchapeatl in #1825
  • feat(bazel): support building C++ libs on windows platform by @An-DJ in #1873

Bug Fix

  • fix(scala): ban these sbt commands by @pjfanning in #1862
  • fix(java): fix async compilation switch for non-public nested class by @chaokunyang in #1883
  • fix(java): fix add fury thread safety issue by @chaokunyang in #1889
  • fix(other): fix feature request template by @chaokunyang in #1898
  • fix(java): NonExistentEnum on mode serializeEnumByName by @orisgarno in #1904
  • fix(java): ThreadLocalFury and ThreadPoolFury prioritize using the user classloader by @Aliothmoon in #1907
  • fix(java): child container deep copy by @zhaommmmomo in #1911
  • fix(java): Fix incorrect results of utf16 to utf8 conversion for latin1 but not ascii characters in #1914

Other Improvements

  • chore(py314): Replace deprecated pkgutil.find_loader by @effigies in #1888
  • docs(guide): Fix package typo by @mandrean in #1906
  • build(kotlin): Add spotless ktfmt and enable explicit api mode for library code. by @wywen in #1912
  • build(deps): upgrade scala (2.13.15/3.3.4) by @pjfanning in #1861
  • feat(rust): add rust-analyzer to toolchain by @caicancai in #1865

New Contributors

Full Changelog: v0.8.0...v0.9.0-rc1

v0.8.0

05 Oct 05:06
Compare
Choose a tag to compare

HighLights

  • Support graalvm 17/21/22 native image
  • Release fury optimized serializers for scala

Features

Bug Fix

Other Improvements

  • chore(java): fix default value doc for metaShareEnabled/scopedMetaShareEnabled by @chaokunyang in #1826
  • chore(doc): fix 'how to upgrade fury' link in README by @sh-cho in #1846
  • build(deps): bump com.google.protobuf:protobuf-java from 3.16.3 to 3.25.5 in /java/benchmark by @dependabot in #1847
  • chore(java): simplify generated codec name by @chaokunyang in #1850
  • ci: only run sync job if the repo is apache/fury by @pjfanning in #1860
  • feat(scala): upgrade sbt and sbt-apache-sonatype by @pjfanning in #1859

New Contributors

Full Changelog: v0.7.1...v0.8.0

v0.8.0-rc1

05 Oct 05:02
Compare
Choose a tag to compare
v0.8.0-rc1 Pre-release
Pre-release

Features

Bug Fix

Other Improvements

  • chore(java): fix default value doc for metaShareEnabled/scopedMetaShareEnabled by @chaokunyang in #1826
  • chore(doc): fix 'how to upgrade fury' link in README by @sh-cho in #1846
  • build(deps): bump com.google.protobuf:protobuf-java from 3.16.3 to 3.25.5 in /java/benchmark by @dependabot in #1847
  • chore(java): simplify generated codec name by @chaokunyang in #1850
  • ci: only run sync job if the repo is apache/fury by @pjfanning in #1860
  • feat(scala): upgrade sbt and sbt-apache-sonatype by @pjfanning in #1859

New Contributors

Full Changelog: v0.7.1...v0.8.0-rc1

v0.7.1

12 Sep 07:58
Compare
Choose a tag to compare

Features

  • feat(javascript): Added MetaString Class for Unicode Encoding/Decoding in Type.Object Code Generation by @Forchapeatl in #1774
  • feat(Rust): Refine Code Structure & Prepare for Future Compatibility Features by @theweipeng in #1787
  • feat(java): ThreadSafeFury add getClassResolver method by @funky-eyes in #1780
  • feat(Rust): Implement TypeMeta part of the compatibility features by @theweipeng in #1789
  • feat(Rust): Support polymorphism by @theweipeng in #1795
  • feat(java): Support copy capabilities for some classes without no-argument constructors by @zhaommmmomo in #1794
  • feat(java): support jdk9+ java.util.ImmutableCollections copy by @zhaommmmomo in #1800
  • feat(rust): support enum serialization by @jiacai2050 in #1817
  • refine fury website and add chinese documents by @yuluo-yx and @LofiSu

Bug Fix

Other Improvements

  • chore(java): Disallow writing meta classdef when obj is null by @LiangliangSui in #1686
  • chore(infra): optimize github tmpl & update actions/checkout version to 4.1.7 by @yuluo-yx in #1807
  • chore(infra): remove redundant bug reporting options by @yuluo-yx in #1810
  • docs: add check lint ci & fix md lint by @yuluo-yx in #1811

New Contributors

Full Changelog: v0.7.0...v0.7.1

v0.7.0

04 Aug 13:38
Compare
Choose a tag to compare

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: v0.6.0...v0.7.0

v0.7.0-rc1

27 Jul 13:20
Compare
Choose a tag to compare
v0.7.0-rc1 Pre-release
Pre-release

What's Changed

New Contributors

Full Changelog: v0.6.0...v0.7.0-rc1

v0.6.0

23 Jul 15:16
Compare
Choose a tag to compare

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

  • feat(java): support nonexistent class deserialization in meta share mode by @chaokunyang in #1646
  • feat(java): scoped meta share mode for type forward/backward compaibility by @chaokunyang in #1660
  • feat(java): support meta compression by Deflater by @chaokunyang in #1663
  • perf(java): Add ClassInfo ClassBytes generation conditions. by @LiangliangSui in #1667
  • feat(javascript): use TextDecoder to decode buffer by @bytemain in #1699
  • feat(Python): meta string encoding algorithm in Python by @pandalee99 in #1702
  • feat(C++): String detection is performed using SIMD techniques by @pandalee99 in #1720
  • feat(C++): The use of SIMD accelerated to implement and optimize utf16 utf8 by @pandalee99 in #1732
  • feat(java): enable scoped meta share for compatible mode by default by @chaokunyang in #1733
  • perf(java): optimize scoped meta share mode perf by @chaokunyang in #1734

Bug Fix

Others

New Contributors

Full Changelog: v0.5.1...v0.6.0

v0.6.0-rc1

16 Jul 13:52
Compare
Choose a tag to compare
v0.6.0-rc1 Pre-release
Pre-release

What's Changed

New Contributors

Full Changelog: v0.5.1...v0.6.0-rc1