- 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/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/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 preprocessor.
- 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. - 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 January 2020.