The LICENSE has changed from a single license (Apache 2) to a dual license (Apache 2 or MIT, at your option).
base.bitvec256.base.optional_u63.base.hasher_bitvec256.base.hasher_u32 update! and checksum_u32 methods.base.hasher_u64.compact_retaining and dst_history_retain_length.example/toy-aux-image.example/mzcat.get_quirk(key: u32) u64.std/crc64.std/etc2.std/jpeg.std/lzip.std/lzma.std/netpbm.std/qoi.std/sha256.std/thumbhash.std/vp8.std/webp.std/xxhash32.std/xxhash64.std/xz.WUFFS_BASE__QUIRK_QUALITY.WUFFS_CONFIG__DISABLE_MSVC_CPU_ARCH__X86_64_FAMILY.WUFFS_CONFIG__DST_PIXEL_FORMAT__ENABLE_ALLOWLIST.WUFFS_CONFIG__ENABLE_DROP_IN_REPLACEMENT__STB.WUFFS_CONFIG__ENABLE_MSVC_CPU_ARCH__X86_64_V2.WUFFS_CONFIG__ENABLE_MSVC_CPU_ARCH__X86_64_V3.wuffs_base__status__is_truncated_input_error.lzw.set_literal_width to lzw.set_quirk.set_quirk_enabled!(quirk: u32, enabled: bool) to set_quirk!(key: u32, value: u64) status.std/lzw.decoder.flush.PIXEL_FORMAT__YA_{NON,}PREMUL constant values.wuffs_foo__bar::unique_ptr.std/png decode PNG color type 4 to PIXEL_FORMAT__YA_NONPREMUL (two channels) instead of PIXEL_FORMAT__BGRA_NONPREMUL (four channels).lib/base38 alphabet and numbers.std/gif -> std/lzw dependency.endwhile keyword.example/bzcat.std/tga to std/targa.0xFF_FFFF, down from 0x7FFF_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).
if.likely and if.unlikely.io_forget_history.slice_var as nptr array[etc] etc conversion.roarray, roslice and rotable.base min/max argument from a to no_more/less_than.wuffsfmt double-indents hanging lines and each indent is now 4 spaces (not a tab).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.
0b prefixed binary numbers.WUFFS_BASE__PIXEL_BLEND__SRC_OVER.WUFFS_BASE__PIXEL_FORMAT__BGR_565.WUFFS_CONFIG__MODULE__BASE__ETC sub-modules.auxiliary code.base library support for UTF-8.base library support for atoi-like string conversion.choose and choosy.cpu_arch.doc/logo.endwhile syntax.example/bzcat.example/cbor-to-json.example/convert-to-nia.example/imageviewer.example/json-to-cbor.example/jsonfindptrs.example/jsonptr.example/sdl-imageviewer.slice base.u8 peek/poke methods.std/bmp.std/bzip2.std/cbor.std/json.std/nie.std/png.std/tga.std/wbmp.tell_me_more? mechanism.uintptr_low_12_bits method.gif.decoder_workbuf_len_max_incl_worst_case from 1 to 0.clang-5.0,gcc to clang,gcc.-cformatter flag.std/gif benchmarks actually measure.wuffs_base__pixel_format a struct.wuffs_base__pixel_subsampling a struct.wuffs_base__status a struct.ack_metadata_chunk?.wuffs_base__frame_config__blend.available methods to length.decode_io_writer? methods to transform_io?.example/library to example/toy-genlib.load and store to peek and poke.{read,writ}er_io_position to {read,writ}er_position.set_ignore_checksum! as a quirk.swizzle_interleaved! to swizzle_interleaved_from_slice!.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.
skipgendeps flag.nullptr literal and nptr T type.io_bind and io_limit keywords.use keyword.yield keyword.return value mandatory; added ok literal.var statements to the top of functions.= RHS out of var x T = RHS.in variable to args.coroutine_resumed variable.std/adler32, std/crc32 and std/gzip.std/gif quirks.std/lzw out of std/gif.std/zlib out of std/flate.std/gzip and std/zlib decoder ignore checksums.std/flate to std/deflate.!= to <>; ! is now only for impure functions.~+ to ~mod+; added ~mod-, ~sat+ and ~sat-.&^.$(etc) to [etc].[i..j] to [i ..= j], consistent with Rust syntax.[i:j] to [i .. j], consistent with Rust syntax.x T to x: T, consistent with Rust syntax.[N] T and [] T types to array[N] T and slice T.while:label to while.label.u32, buf1, etc to base.u32, base.io_buffer, etc.unread_u8? to undo_byte!; added can_undo_byte.decode? methods to decode_io_writer?.= try foo with =? foo.{frame,image,pixel}_config and pixel_buffer types.reset method.peek_uxx, skip_fast and write_fast_uxx methods.read_uxx methods as read_uxx_as_uyy.io_buffer / io_reader distinction in C and Wuffs.error "foo" to "#foo" or base."#bar".const char *, not an int32_t.__double_underscore prefixed names.WUFFS_CONFIG__MODULES.WUFFS_CONFIG__STATIC_FUNCTIONS.mimic_deflate_xxx benchmarks.lang/base38 to lib/base38.lib/interval package.Updated on April 2023.