v1.9.4
版本发布时间: 2022-08-16 06:49:54
lz4/lz4最新发布版本:v1.10.0(2024-07-22 13:36:45)
LZ4 v1.9.4
is a maintenance release, featuring a substantial amount (~350 commits) of minor fixes and improvements, making it a recommended upgrade. The stable portion of liblz4
API is unmodified, making this release a drop-in replacement for existing features.
Improved decompression speed
Performance wasn't a major focus of this release, but there are nonetheless a few improvements worth mentioning :
- Decompression speed on high-end
ARM64
platform is improved, by ~+20%. This is notably the case for recent M1 chips, featured in macbook laptops and nucs. Some server-class ARM64 cpus are also impacted, most notably when employinggcc
as a compiler. Due to the diversity ofaarch64
chips in service, it's still difficult to have a one-size-fits-all policy for this platform. - For the specific scenario of data compressed with
-BD4
setting (small blocks, <= 64 KB, linked) decompressed block-by-block into a flush buffer, decompression speed is improved ~+70%. This is most visible in thelz4
CLI, which triggers this exact scenario, but since the improvement is achieved at library level, it may also apply to other scenarios. - Additionally, for compressed data employing the
lz4frame
format (native format oflz4
CLI), it's possible to ignore checksum validation during decompression, resulting in speed improvements of ~+40% . This capability is exposed at both CLI (see--no-crc
) and library levels.
New experimental library capabilities
New liblz4
capabilities are provided in this version. They are considered experimental at this stage, and the most useful ones will be upgraded as candidate "stable" status in an upcoming release :
- Ability to require
lz4frame
API to employ custom allocators for dynamic allocation. - Partial decompression of LZ4 blocks compressed with a dictionary, using
LZ4_decompress_safe_partial_usingDict()
by @yawqi - Create
lz4frame
blocks which are intentionally uncompressed, usingLZ4F_uncompressedUpdate()
, by @alexmohr - New API unit
lz4file
, abstracting File I/O operations for higher-level programs and libraries, by @anjiahao1 -
liblz4
can be built for freestanding environments, using the new build macroLZ4_FREESTANDING
, by @t-mat. In which case, it will not link to any standard library, disable all dynamic allocations, and rely on user-providedmemcpy()
andmemset()
operations.
Miscellaneous
- Fixed an annoying
Makefile
bug introduced inv1.9.3
, in whichCFLAGS
was no longer respected when provided from environment variable. The root cause was an obscure bug inmake
, which has been fixed upstream following this bug report. There is no need to updatemake
to buildliblz4
though, theMakefile
has been modified to circumvent the issue and remains compatible with older versions ofmake
. -
Makefile
is compatible with-j
parallel run, including to run parallel tests (make -j test
). - Documentation of LZ4 Block format has been updated, featuring notably a paragraph "Implementation notes", underlining common pitfalls for new implementers of the format
Changes list
Here is a more detailed list of updates introduced in v1.9.4
:
- perf : faster decoding speed (~+20%) on Apple Silicon platforms, by @zeux
- perf : faster decoding speed (~+70%) for
-BD4
setting in CLI - api : new function
LZ4_decompress_safe_partial_usingDict()
by @yawqi - api :
lz4frame
: ability to provide custom allocators at state creation - api : can skip checksum validation for improved decoding speed
- api : new experimental unit
lz4file
for file i/o API, by @anjiahao1 - api : new experimental function
LZ4F_uncompressedUpdate()
, by @alexmohr - cli :
--list
works onstdin
input, by @Low-power - cli :
--no-crc
does not produce (compression) nor check (decompression) checksums - cli : fix:
--test
and--list
produce an error code when parsing invalid input - cli : fix:
--test -m
does no longer create decompressed file artifacts - cli : fix: support skippable frames when passed via
stdin
, reported by @davidmankin - build: fix:
Makefile
respectsCFLAGS
directives passed via environment variable - build:
LZ4_FREESTANDING
, new build macro for freestanding environments, by @t-mat - build:
make
andmake test
are compatible with-j
parallel run - build: AS/400 compatibility, by @jonrumsey
- build: Solaris 10 compatibility, by @pekdon
- build: MSVC 2022 support, by @t-mat
- build: improved meson script, by @eli-schwartz
- doc : Updated LZ4 block format, provide an "implementation notes" section
New Contributors
- @emaxerrno made their first contribution in https://github.com/lz4/lz4/pull/884
- @servusdei2018 made their first contribution in https://github.com/lz4/lz4/pull/886
- @aqrit made their first contribution in https://github.com/lz4/lz4/pull/898
- @attilaolah made their first contribution in https://github.com/lz4/lz4/pull/919
- @XVilka made their first contribution in https://github.com/lz4/lz4/pull/922
- @hmaarrfk made their first contribution in https://github.com/lz4/lz4/pull/962
- @ThomasWaldmann made their first contribution in https://github.com/lz4/lz4/pull/965
- @sigiesec made their first contribution in https://github.com/lz4/lz4/pull/964
- @klebertarcisio made their first contribution in https://github.com/lz4/lz4/pull/973
- @jasperla made their first contribution in https://github.com/lz4/lz4/pull/972
- @GabeNI made their first contribution in https://github.com/lz4/lz4/pull/1001
- @ITotalJustice made their first contribution in https://github.com/lz4/lz4/pull/1005
- @lifegpc made their first contribution in https://github.com/lz4/lz4/pull/1000
- @eloj made their first contribution in https://github.com/lz4/lz4/pull/1011
- @pekdon made their first contribution in https://github.com/lz4/lz4/pull/999
- @fanzeyi made their first contribution in https://github.com/lz4/lz4/pull/1017
- @a1346054 made their first contribution in https://github.com/lz4/lz4/pull/1024
- @kmou424 made their first contribution in https://github.com/lz4/lz4/pull/1026
- @kostasdizas made their first contribution in https://github.com/lz4/lz4/pull/1030
- @fwessels made their first contribution in https://github.com/lz4/lz4/pull/1032
- @zeux made their first contribution in https://github.com/lz4/lz4/pull/1040
- @DimitriPapadopoulos made their first contribution in https://github.com/lz4/lz4/pull/1042
- @mcfi made their first contribution in https://github.com/lz4/lz4/pull/1054
- @eli-schwartz made their first contribution in https://github.com/lz4/lz4/pull/1049
- @leonvictor made their first contribution in https://github.com/lz4/lz4/pull/1052
- @tristan957 made their first contribution in https://github.com/lz4/lz4/pull/1064
- @anjiahao1 made their first contribution in https://github.com/lz4/lz4/pull/1068
- @danyeaw made their first contribution in https://github.com/lz4/lz4/pull/1075
- @yawqi made their first contribution in https://github.com/lz4/lz4/pull/1093
- @nathannaveen made their first contribution in https://github.com/lz4/lz4/pull/1088
- @alexmohr made their first contribution in https://github.com/lz4/lz4/pull/1094
- @yoniko made their first contribution in https://github.com/lz4/lz4/pull/1100
- @jonrumsey made their first contribution in https://github.com/lz4/lz4/pull/1104
- @dpelle made their first contribution in https://github.com/lz4/lz4/pull/1125
- @SpaceIm made their first contribution in https://github.com/lz4/lz4/pull/1133
1、 lz4-1.9.4.tar.gz 345.76KB
2、 lz4-1.9.4.tar.gz.sha256 83B
3、 lz4_win32_v1_9_4.zip 344.46KB
4、 lz4_win64_v1_9_4.zip 604.25KB