The LICENSE has changed from a single license (Apache 2) to a dual license (Apache 2 or MIT, at your option).
- Added
base.bitvec256
. - Added
base.optional_u63
. - Added
base.hasher_bitvec256
. - Added
base.hasher_u32
update!
andchecksum_u32
methods. - Added
base.hasher_u64
. - Added
base.range_ie_i32
. - Added
base.rect_ie_i32
. - Added
compact_retaining
anddst_history_retain_length
. - Added
example/toy-aux-image
. - Added
example/mzcat
. - Added
get_quirk(key: u32) u64
. - Added
std/crc64
. - Added
std/etc2
. - Added
std/jpeg
. - Added
std/lzip
. - Added
std/lzma
. - Added
std/netpbm
. - Added
std/qoi
. - Added
std/sha256
. - Added
std/thumbhash
. - Added
std/vp8
. - Added
std/webp
. - Added
std/xxhash32
. - Added
std/xxhash64
. - Added
std/xz
. - Added
WUFFS_BASE__QUIRK_QUALITY
. - Added
WUFFS_CONFIG__DISABLE_MSVC_CPU_ARCH__X86_64_FAMILY
. - Added
WUFFS_CONFIG__DST_PIXEL_FORMAT__ENABLE_ALLOWLIST
. - Added
WUFFS_CONFIG__ENABLE_DROP_IN_REPLACEMENT__STB
. - Added
WUFFS_CONFIG__ENABLE_MSVC_CPU_ARCH__X86_64_V2
. - Added
WUFFS_CONFIG__ENABLE_MSVC_CPU_ARCH__X86_64_V3
. - Added
wuffs_base__status__is_truncated_input_error
. - Changed
lzw.set_literal_width
tolzw.set_quirk
. - Changed
set_quirk_enabled!(quirk: u32, enabled: bool)
toset_quirk!(key: u32, value: u64) status
. - Deprecated
std/lzw.decoder.flush
. - Fixed
PIXEL_FORMAT__YA_{NON,}PREMUL
constant values. - Generated constants now default to unsigned.
- Halved the sizeof
wuffs_foo__bar::unique_ptr
. - Let
std/png
decode PNG color type 4 toPIXEL_FORMAT__YA_NONPREMUL
(two channels) instead ofPIXEL_FORMAT__BGRA_NONPREMUL
(four channels). - Reassigned
lib/base38
alphabet and numbers. - Removed the
std/gif -> std/lzw
dependency. - Removed
endwhile
keyword. - Removed
example/bzcat
. - Renamed
std/tga
tostd/targa
. - Set image decoder pixel width and height inclusive maximum to
0xFF_FFFF
, down from0x7FFF_FFFF
.
The dot points below probably aren't of interest unless you're writing Wuffs code (instead of writing C/C++ code that uses Wuffs' standard library).
- Added
if.likely
andif.unlikely
. - Added
io_forget_history
. - Added
slice_var as nptr array[etc] etc
conversion. - Added read-only type decorators:
roarray
,roslice
androtable
. - Banned recursive function calls.
- Renamed
base
min/max
argument froma
tono_more/less_than
. - Wuffs struct private data now needs a "+" between the "()" pairs.
wuffsfmt
double-indents hanging lines and each indent is now 4 spaces (not a tab).
- Have
std/png
ignore tRNS chunks for color types 4 (YA) and 6 (RGBA).
The wuffs_base__parse_number_f64
function has been further optimized.
The std/bmp
and std/nie
image decoders' decode_frame
method now allow
decoding to a pixel buffer that's smaller than the source image. This makes
these two image decoders consistent with the other ones in std
.
For a closed io_reader
, the standard library now returns "#truncated input"
instead of "$short read"
. Importantly, this is an error, not a
suspension.
The wuffs_base__parse_number_f64
function's Simple Decimal Conversion
fallback algorithm has been optimized.
The headline feature is that we have a production quality PNG decoder. It's also the fastest, safest PNG decoder in the world. There's also a memory-safe, zero-allocation JSON decoder.
The dot points below probably aren't of interest unless you're upgrading from Wuffs version 0.2.
- Added
0b
prefixed binary numbers. - Added
WUFFS_BASE__PIXEL_BLEND__SRC_OVER
. - Added
WUFFS_BASE__PIXEL_FORMAT__BGR_565
. - Added
WUFFS_CONFIG__MODULE__BASE__ETC
sub-modules. - Added
auxiliary
code. - Added
base
library support for UTF-8. - Added
base
library support foratoi
-like string conversion. - Added
choose
andchoosy
. - Added
cpu_arch
. - Added
doc/logo
. - Added
endwhile
syntax. - Added
example/bzcat
. - Added
example/cbor-to-json
. - Added
example/convert-to-nia
. - Added
example/imageviewer
. - Added
example/json-to-cbor
. - Added
example/jsonfindptrs
. - Added
example/jsonptr
. - Added
example/sdl-imageviewer
. - Added
slice base.u8 peek/poke
methods. - Added
std/bmp
. - Added
std/bzip2
. - Added
std/cbor
. - Added
std/json
. - Added
std/nie
. - Added
std/png
. - Added
std/tga
. - Added
std/wbmp
. - Added
tell_me_more?
mechanism. - Added SIMD.
- Added alloc functions.
- Added colons to const syntax.
- Added double-curly blocks.
- Added interfaces.
- Added iterate advance parameter.
- Added single-quoted strings.
- Added slice
uintptr_low_12_bits
method. - Added tokens.
- Changed
gif.decoder_workbuf_len_max_incl_worst_case
from 1 to 0. - Changed default C compilers from
clang-5.0,gcc
toclang,gcc
. - Changed the C formatting style; removed the
-cformatter
flag. - Changed what the
std/gif
benchmarks actually measure. - Made
wuffs_base__pixel_format
a struct. - Made
wuffs_base__pixel_subsampling
a struct. - Made
wuffs_base__status
a struct. - Prohibited iterate loops inside coroutines.
- Removed
ack_metadata_chunk?
. - Removed
wuffs_base__frame_config__blend
. - Renamed I/O
available
methods tolength
. - Renamed
decode_io_writer?
methods totransform_io?
. - Renamed
example/library
toexample/toy-genlib
. - Renamed
load
andstore
topeek
andpoke
. - Renamed
{read,writ}er_io_position
to{read,writ}er_position
. - Renamed
set_ignore_checksum!
as a quirk. - Renamed
swizzle_interleaved!
toswizzle_interleaved_from_slice!
. - Renamed warnings to notes.
The headline feature is that the GIF decoder is now of production quality. There is now API for overall metadata (e.g. ICCP color profiles) and to recreate each frame (width, height, BGRA pixels, timing, etc.) of a GIF animation, instead of version 0.1's proof-of-concept GIF decoder API, which just gave you a one-dimensional stream of palette indexes. It also now accepts a variety of GIF images that are invalid, when strictly following the GIF specifiction, but are nonetheless accepted by other real world GIF implementations. The Wuffs GIF decoder has also been optimized to be about 1.5x faster than Wuffs version 0.1 and about 2x faster than giflib (the C library).
The Wuffs GIF decoder is being trialled by Skia, the 2-D graphics library used by both the Android operating system and the Chromium web browser.
Work also proceeds on the NIE and RAC file formats, but both are still experimental and may change later in backwards incompatible ways.
The dot points below probably aren't of interest unless you're upgrading from Wuffs version 0.1.
- Renamed Puffs to Wuffs.
- Ship as a "single file C library"
- Added a
skipgendeps
flag. - Added a
nullptr
literal andnptr T
type. - Added
io_bind
andio_limit
keywords. - Added a
use
keyword. - Added a
yield
keyword. - Made the
return
value mandatory; addedok
literal. - Restricted
var
statements to the top of functions. - Dropped the
= RHS
out ofvar x T = RHS
. - Changed func out-type from struct to bare type.
- Renamed the implicit
in
variable toargs
. - Added an implicit
coroutine_resumed
variable. - Added
std/adler32
,std/crc32
andstd/gzip
. - Added
std/gif
quirks. - Spun
std/lzw
out ofstd/gif
. - Spun
std/zlib
out ofstd/flate
. - Let the
std/gzip
andstd/zlib
decoder ignore checksums. - Renamed
std/flate
tostd/deflate
. - Renamed
!=
to<>
;!
is now only for impure functions. - Renamed
~+
to~mod+
; added~mod-
,~sat+
and~sat-
. - Removed
&^
. - Renamed
$(etc)
to[etc]
. - Renamed
[i..j]
to[i ..= j]
, consistent with Rust syntax. - Renamed
[i:j]
to[i .. j]
, consistent with Rust syntax. - Renamed
x T
tox: T
, consistent with Rust syntax. - Renamed
[N] T
and[] T
types toarray[N] T
andslice T
. - Renamed
while:label
towhile.label
. - Renamed
u32
,buf1
, etc tobase.u32
,base.io_buffer
, etc. - Renamed
unread_u8?
toundo_byte!
; addedcan_undo_byte
. - Renamed some
decode?
methods todecode_io_writer?
. - Replaced
= try foo
with=? foo
. - Prohibited effect-ful subexpressions.
- Redesigned iterate blocks.
- Added
{frame,image,pixel}_config
andpixel_buffer
types. - Added a
reset
method. - Added
peek_uxx
,skip_fast
andwrite_fast_uxx
methods. - Renamed some
read_uxx
methods asread_uxx_as_uyy
. - Report image metadata such as ICCP and XMP.
- Added I/O positions.
- Tweaked how I/O marks and limits work.
- Tweaked
io_buffer
/io_reader
distinction in C and Wuffs. - Added extra fields (uninitialized internal buffers) to structs.
- Supported animated (not just single frame) and interlaced GIFs.
- Marked some internal status codes as private.
- Removed closed-for-read/write built-in status codes.
- Changed the string messages for built-in status codes.
- Changed
error "foo"
to"#foo"
orbase."#bar"
. - Added warnings as another status code category.
- Made the status type a
const char *
, not anint32_t
. - Disallowed
__double_underscore
prefixed names. - Added fuzz tests.
- Added
WUFFS_CONFIG__MODULES
. - Added
WUFFS_CONFIG__STATIC_FUNCTIONS
. - Added some C++ convenience methods.
- Added some Go and Rust benchmarks.
- Made struct implementations private (opaque pointers).
- Sped up the
mimic_deflate_xxx
benchmarks. - Fix compile errors under MSVC (Microsoft Visual C/C++).
- Moved the base38 package from
lang/base38
tolib/base38
. - Added a stand-alone
lib/interval
package. - Added NIE file format spec.
- Added RAC file format spec and Go implementation.
- Initial open source release, under the "Puffs" name.
Updated on April 2023.