You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
10 KiB
211 lines
10 KiB
2 months ago
|
Release notes
|
||
|
=============
|
||
|
|
||
|
6.5 (2015-07-17)
|
||
|
----------------
|
||
|
* Added companion library <<../ucw-json/index:,LibUCW-JSON>> for parsing
|
||
|
and formatting JSON.
|
||
|
* Fastbufs have a new wrapper for parsing and generating hex-dumps.
|
||
|
Useful primarily for debugging.
|
||
|
* Unicode functions are now more strict and they reject denormalized
|
||
|
UTF-8 sequences. Also, it is now possible to append UTF-8 characters
|
||
|
to a memory pool.
|
||
|
* The naming of memory pool functions mp_append_printf() and mp_append_vprintf()
|
||
|
turned out to be unfortunate as they have differently from all other functions
|
||
|
operating on growing buffers. They have been renamed to mp_printf_append()
|
||
|
and mp_vprintf_append() with the old names kept as aliases for backward
|
||
|
compatibility.
|
||
|
|
||
|
6.4 (2015-04-08)
|
||
|
----------------
|
||
|
* Fixed several minor bugs in the <<mainloop:,mainloop>> module.
|
||
|
|
||
|
6.3 (2015-02-14)
|
||
|
----------------
|
||
|
* Cleaned up and documented the <<../ucw-xml/index:,LibUCW-XML>> companion
|
||
|
library -- a lightning fast standards-complient XML parser.
|
||
|
* Solved problems with closing of stderr in daemons: see the new function
|
||
|
<<log:log_drop_stderr()>>.
|
||
|
|
||
|
6.2 (2015-01-16)
|
||
|
----------------
|
||
|
* Fixed race conditions in <<daemon:,daemon helpers>>.
|
||
|
* The <<xtypes:,extended types>> have been documented and integrated
|
||
|
in the table printer, command-line option parser, and configuration parser.
|
||
|
* The <<ucw-tableprinter.5:,table printer options>> have been documented.
|
||
|
|
||
|
6.1 (2014-08-09)
|
||
|
----------------
|
||
|
|
||
|
Incompatible changes
|
||
|
~~~~~~~~~~~~~~~~~~~~
|
||
|
* Major changes of the table printer module. Finally, its interface can be
|
||
|
considered stable now.
|
||
|
|
||
|
Minor changes
|
||
|
~~~~~~~~~~~~~
|
||
|
* The <<opt:,command-line option parser>> gained `OPT_BREAK` class and
|
||
|
`OPT_HELP_COLUMNS` flag.
|
||
|
* The strtonum module supports more types.
|
||
|
|
||
|
6.0 (2014-06-20)
|
||
|
----------------
|
||
|
|
||
|
Incompatible changes
|
||
|
~~~~~~~~~~~~~~~~~~~~
|
||
|
* *Incompatible:* It turned out that almost all users of the <<gary:,growing array>>
|
||
|
module push/pop individual elements. Therefore, we have removed the second
|
||
|
argument (item count) of `GARY_PUSH` and `GARY_POP`. If you want to push/pop
|
||
|
multiple elements at once, use `GARY_PUSH_MULTI` and `GARY_POP_MULTI`.
|
||
|
* *Incompatible:* The interface of the <<heap:,heap>> module was cleaned up
|
||
|
to remove non-systematic side-effects. The `HEAP_INSERT` operation is now
|
||
|
a proper insert (previously, it was just cleanup after insertion performed
|
||
|
by the caller), similarly `HEAP_INCREASE` and `HEAP_DECREASE`. The `HEAP_DELMIN`
|
||
|
operation was renamed to `HEAP_DELETE_MIN`. New operations `HEAP_REPLACE` and
|
||
|
`HEAP_REPLACE_MIN` have been added. If you need to track positions of elements
|
||
|
in the heap, please check the notes at individual functions.
|
||
|
* The <<conf:,configuration file parser>> has been improved:
|
||
|
** Multiple instances of the configuration parser are supported.
|
||
|
** *Incompatible:* As there may be more instances, we can no longer use
|
||
|
global variables to control the configuration system. In particular,
|
||
|
`cf_need_journal` and `cf_pool` variables have been replaced by
|
||
|
functions <<conf:cf_set_journalling()>> and <<conf:cf_get_pool()>>.
|
||
|
** *Incompatible:* Loading of configuration files has been decoupled from
|
||
|
the getopt wrapper, so you might need to include `conf.h` for functions
|
||
|
which were previously declared in `getopt.h`.
|
||
|
** New functions have been added:
|
||
|
<<conf:cf_open_group()>>, <<conf:cf_close_group()>>, and <<conf:cf_revert()>>.
|
||
|
** *Incompatible:* Dynamic configuration arrays have been re-implemented in
|
||
|
terms of our generic <<gary:,growing arrays>>. This makes them easier to
|
||
|
use and most of the interface has been preserved. The only exception is
|
||
|
static allocation via the DARY_ALLOC() macro, which is no longer available.
|
||
|
* *Incompatible:* The `UCW::CGI` Perl module has its custom error handlers
|
||
|
(which override default Perl error handlers) split off to a separate module
|
||
|
`UCW::CGI::ErrorHandler`.
|
||
|
|
||
|
New modules
|
||
|
~~~~~~~~~~~
|
||
|
* <<daemon:,Daemon helpers>> have been added including a new `daemon-control`
|
||
|
utility. The old `daemon-helper` utility has been obsoleted and it is not
|
||
|
compiled by default.
|
||
|
* <<signal:,Signal helpers>> for translation between signal names and numbers
|
||
|
have been added.
|
||
|
* The fastbuf I/O layer received a new back-end <<fastbuf:fbmulti,fb_multi>>,
|
||
|
which concatenates several fastbuf streams to form a single virtual stream.
|
||
|
* Added <<varint:,varint>> module for efficient UTF-8-like encoding of 64-bit
|
||
|
integers to byte sequences.
|
||
|
* Added <<table:,table printer>> module for configurable formatting of
|
||
|
2-dimensional tables in both user-friendly and machine-friendly ways.
|
||
|
* A <<opt:,parser of command-line options>> has been added, similar in spirit to
|
||
|
our <<conf:,configuration file parser>>. The <<conf:getopt_h,getopt>> module
|
||
|
has been obsoleted
|
||
|
* <<alloc:,Generic allocators>> have been introduced, providing an abstract
|
||
|
way of memory allocation. <<gary:,Growing arrays>> are now based on such
|
||
|
allocators, which allows for example growing arrays in memory pools.
|
||
|
|
||
|
Cleanups
|
||
|
~~~~~~~~
|
||
|
* Libucw finally has a clean ABI, which does not pollute namespace, risking
|
||
|
collisions with other libraries. However, we did not want to abandon our
|
||
|
nicely and simply named functions, so the header files define macros,
|
||
|
which translate names of all externally visible symbols to start with `ucw_`.
|
||
|
If you don't like this, configure libucw with `CONFIG_UCW_CLEAN_ABI` turned off.
|
||
|
* All helper utilities are now installed with names starting with `ucw-` to
|
||
|
prevent collisions.
|
||
|
* The auxiliary libraries have been renamed to `libucw-charset`, `libucw-images`,
|
||
|
`libucw-xml`. The clean ABI promise does not extend to them yet.
|
||
|
* The alias `uns` for `unsigned int` has been replaced by a more common `uint`.
|
||
|
The old name is still maintained for backward compatibility.
|
||
|
* Several functions now accept `size_t` instead of `unsigned int` for size arguments.
|
||
|
|
||
|
Minor changes
|
||
|
~~~~~~~~~~~~~
|
||
|
* `<stdbool.h>` is automatically included by `<ucw/lib.h>`.
|
||
|
|
||
|
5.0 (2012-02-21)
|
||
|
----------------
|
||
|
|
||
|
* *Incompatible:* The `timestamp_t` type has been decoupled from wall clock time.
|
||
|
It now specifies the number of milliseconds from an unspecified origin, so that
|
||
|
it can for example refer to the system monotonic clock. The `ucw_time_t` type
|
||
|
has been removed.
|
||
|
|
||
|
* The <<mainloop:,mainloop>> module has been rewritten:
|
||
|
** Multiple instances of the main loop are supported (to be used in different
|
||
|
threads or locally within a library function).
|
||
|
** The new implementation is more efficient: it uses heaps for timers,
|
||
|
epoll() for file descriptors (when available).
|
||
|
** The return value of <<mainloop:struct_main_file,`main_file`>> handlers has been
|
||
|
changed to <<mainloop:enum_main_hook_return,`HOOK_IDLE`>> and <<mainloop:enum_main_hook_return,`HOOK_RETRY`>>.
|
||
|
However, the numerical values are equal, so old code should keep working.
|
||
|
** *Incompatible:* The main loop time (`main_now`) has been decoupled from wall clock time
|
||
|
and moved to a field in the `main_context` structure. It can be accessed either directly
|
||
|
or via <<mainloop:main_get_now()>>. The `main_now_seconds` variable has
|
||
|
been removed, `main_idle_time` has become a structure field.
|
||
|
** *Incompatible:* The interface for asynchronous reading and writing
|
||
|
(file_read() and friends) has been separated from the core of the main loop.
|
||
|
Use <<mainloop:struct_main_block_io,`struct main_block_io`>> and related functions instead.
|
||
|
** *Incompatible:* file_close_all() is gone. You have to call <<mainloop:main_teardown()>>
|
||
|
or <<mainloop:main_destroy()>> to clean up properly after fork().
|
||
|
** Added support for <<mainloop:signal,synchronous delivery of signals>>.
|
||
|
** Added relative timers: <<mainloop:timer_add_rel()>>.
|
||
|
** Modification of events from a running event handler is always safe.
|
||
|
** Deleting an already deleted event is always safe.
|
||
|
** For any event type, it is possible to ask whether it is active (added to the mainloop) or not: <<mainloop:hook_is_active()>> and friends.
|
||
|
** A new mainloop front-end for asynchronous <<mainloop:recordio,record-based I/O>> has been added.
|
||
|
|
||
|
* Added support for <<trans:,resource pools and transactions>>, which is a general
|
||
|
mechanism for tracking resources and reporting errors. It is still considered
|
||
|
experimental, so the API can change in future releases.
|
||
|
|
||
|
* Added a <<gary:,growing array>> module `gary.h`, similar to `gbuf.h`, but with
|
||
|
a much more convenient interface.
|
||
|
|
||
|
* The <<lists:,Circular linked lists>> can recognize unlinked nodes,
|
||
|
see <<lists:clist_unlink()>>.
|
||
|
|
||
|
* Added `strtonum.h` -- a module for precise parsing of numbers.
|
||
|
|
||
|
* When compiled by a recent enough GCC, `__thread` is used for thread-local variables,
|
||
|
which is more efficient than the POSIX per-thread storage.
|
||
|
** *Incompatible:* `ucwlib_context->thread_id` is no longer available directly,
|
||
|
please use <<thread:ucwlib_thread_id()>> instead.
|
||
|
|
||
|
* *Incompatible:* Several modules have been declared obsolete and removed:
|
||
|
** `sighandler` -- generic signal handling (it still exists internally)
|
||
|
** `qache` -- a mmap-based shared cache
|
||
|
** `prefetch` -- an interface to memory prefetch instructions; superseded by GCC `__builtin_prefetch`
|
||
|
** `randomkey` -- a generator of cryptographically strong pseudo-random tokens; will be replaced
|
||
|
by something more generic soon
|
||
|
** `profile` -- a profiling hack
|
||
|
|
||
|
* *Incompatible:* Several modules now have their own header files:
|
||
|
** `process.h` -- all functions related to processes, previously declared in `lib.h`
|
||
|
** `io.h` -- functions related to files from `lib.h` and `lfs.h`
|
||
|
** `time.h` -- timestamps and interval timers, previously in `lib.h`
|
||
|
|
||
|
* *Incompatible:* Several configuration options were renamed or removed:
|
||
|
** `CONFIG_FAKE_ELTPOOL` → `CONFIG_UCW_FAKE_ELTPOOL`
|
||
|
** `CONFIG_LARGE_FILES` → `CONFIG_UCW_LARGE_FILES`
|
||
|
** `CONFIG_OWN_GETOPT` → `CONFIG_UCW_OWN_GETOPT`
|
||
|
** `CONFIG_DIRECT_IO` → `CONFIG_UCW_DIRECT_IO`
|
||
|
** `DEFAULT_CONFIG` → `CONFIG_UCW_DEFAULT_CONFIG`
|
||
|
** `ENV_VAR_CONFIG` → `CONFIG_UCW_ENV_VAR_CONFIG`
|
||
|
** `CONFIG_LFS` was removed
|
||
|
** `CONFIG_URL_ESCAPE_COMPAT` was removed
|
||
|
|
||
|
* `UCW::Configure` supports running of test programs.
|
||
|
|
||
|
* `UCW::CGI` support multiple argument tables and UTF-8 mode. Also, it uses the
|
||
|
proper HTTP status codes when reporting errors.
|
||
|
|
||
|
* Implementation details of <<fastbuf:,fastbufs>> have changed. The new code checks
|
||
|
invariants more carefully, so it is possible that custom fastbuf back-ends which
|
||
|
are buggy now fail, although they previously seemed to work.
|
||
|
|
||
|
|
||
|
4.0 (2009-04-13)
|
||
|
----------------
|
||
|
This was the first stand-alone release of LibUCW. Before that, LibUCW was developed
|
||
|
as a part of the http://www.ucw.cz/holmes/[Sherlock Holmes project].
|