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_u32update!andchecksum_u32methods. - Added
base.hasher_u64. - Added
base.range_ie_i32. - Added
base.rect_ie_i32. - Added
compact_retaininganddst_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/handsum. - 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_widthtolzw.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,}PREMULconstant values. - Generated constants now default to unsigned.
- Halved the sizeof
wuffs_foo__bar::unique_ptr. - Let
std/pngdecode PNG color type 4 toPIXEL_FORMAT__YA_NONPREMUL(two channels) instead ofPIXEL_FORMAT__BGRA_NONPREMUL(four channels). - Reassigned
lib/base38alphabet and numbers. - Removed the
std/gif -> std/lzwdependency. - Removed
endwhilekeyword. - Removed
example/bzcat. - Renamed
std/tgatostd/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.likelyandif.unlikely. - Added
io_forget_history. - Added
slice_var as nptr array[etc] etcconversion. - Added read-only type decorators:
roarray,rosliceandrotable. - Banned recursive function calls.
- Renamed
basemin/maxargument fromatono_more/less_than. - Wuffs struct private data now needs a "+" between the "()" pairs.
wuffsfmtdouble-indents hanging lines and each indent is now 4 spaces (not a tab).
- Have
std/pngignore 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
0bprefixed binary numbers. - Added
WUFFS_BASE__PIXEL_BLEND__SRC_OVER. - Added
WUFFS_BASE__PIXEL_FORMAT__BGR_565. - Added
WUFFS_CONFIG__MODULE__BASE__ETCsub-modules. - Added
auxiliarycode. - Added
baselibrary support for UTF-8. - Added
baselibrary support foratoi-like string conversion. - Added
chooseandchoosy. - Added
cpu_arch. - Added
doc/logo. - Added
endwhilesyntax. - 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/pokemethods. - 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_bitsmethod. - Added tokens.
- Changed
gif.decoder_workbuf_len_max_incl_worst_casefrom 1 to 0. - Changed default C compilers from
clang-5.0,gcctoclang,gcc. - Changed the C formatting style; removed the
-cformatterflag. - Changed what the
std/gifbenchmarks actually measure. - Made
wuffs_base__pixel_formata struct. - Made
wuffs_base__pixel_subsamplinga struct. - Made
wuffs_base__statusa struct. - Prohibited iterate loops inside coroutines.
- Removed
ack_metadata_chunk?. - Removed
wuffs_base__frame_config__blend. - Renamed I/O
availablemethods tolength. - Renamed
decode_io_writer?methods totransform_io?. - Renamed
example/librarytoexample/toy-genlib. - Renamed
loadandstoretopeekandpoke. - Renamed
{read,writ}er_io_positionto{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
skipgendepsflag. - Added a
nullptrliteral andnptr Ttype. - Added
io_bindandio_limitkeywords. - Added a
usekeyword. - Added a
yieldkeyword. - Made the
returnvalue mandatory; addedokliteral. - Restricted
varstatements to the top of functions. - Dropped the
= RHSout ofvar x T = RHS. - Changed func out-type from struct to bare type.
- Renamed the implicit
invariable toargs. - Added an implicit
coroutine_resumedvariable. - Added
std/adler32,std/crc32andstd/gzip. - Added
std/gifquirks. - Spun
std/lzwout ofstd/gif. - Spun
std/zlibout ofstd/flate. - Let the
std/gzipandstd/zlibdecoder ignore checksums. - Renamed
std/flatetostd/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 Ttox: T, consistent with Rust syntax. - Renamed
[N] Tand[] Ttypes toarray[N] Tandslice T. - Renamed
while:labeltowhile.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 foowith=? foo. - Prohibited effect-ful subexpressions.
- Redesigned iterate blocks.
- Added
{frame,image,pixel}_configandpixel_buffertypes. - Added a
resetmethod. - Added
peek_uxx,skip_fastandwrite_fast_uxxmethods. - Renamed some
read_uxxmethods 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_readerdistinction 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_underscoreprefixed 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_xxxbenchmarks. - Fix compile errors under MSVC (Microsoft Visual C/C++).
- Moved the base38 package from
lang/base38tolib/base38. - Added a stand-alone
lib/intervalpackage. - 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.