]> mj.ucw.cz Git - libucw.git/blob - ucw/doc/relnotes.txt
8f46e1da116a96aa0809f425c5908721446fde26
[libucw.git] / ucw / doc / relnotes.txt
1 Release notes
2 =============
3
4 5.0 (work in progress)
5 ----------------------
6
7 * *Incompatible:* The `timestamp_t` type has been decoupled from wall clock time.
8   It now specifies the number of milliseconds from an unspecified origin, so that
9   it can for example refer to the system monotonic clock. The `ucw_time_t` type
10   has been removed.
11
12 * The <<mainloop:,mainloop>> module has been rewritten:
13 ** Multiple instances of the main loop are supported (to be used in different
14    threads or locally within a library function).
15 ** The new implementation is more efficient: it uses heaps for timers,
16    epoll() for file descriptors (when available).
17 ** The return value of <<mainloop:struct_main_file,`main_file`>> handlers has been
18    changed to <<mainloop:enum_main_hook_return,`HOOK_IDLE`>> and <<mainloop:enum_main_hook_return,`HOOK_RETRY`>>.
19    However, the numerical values are equal, so old code should keep working.
20 ** *Incompatible:* The main loop time (`main_now`) has been decoupled from wall clock time
21    and moved to a field in the `main_context` structure. It can be accessed either directly
22    or via <<mainloop:fun_main_get_now,`main_get_now()`>>. The `main_now_seconds` variable has
23    been removed, `main_idle_time` has become a structure field.
24 ** *Incompatible:* The interface for asynchronous reading and writing
25    (file_read() and friends) has been separated from the core of the main loop.
26    Use <<mainloop:struct_main_block_io,`struct main_block_io`>> and related functions instead.
27 ** *Incompatible:* file_close_all() is gone. You have to call <<mainloop:fun_main_teardown,`main_teardown()`>>
28    or <<mainloop:fun_main_destroy,`main_destroy()`>> to clean up properly after fork().
29 ** Added support for <<mainloop:signal,synchronous delivery of signals>>.
30 ** Added relative timers: <<mainloop:fun_timer_add_rel,`timer_add_rel()`>>.
31 ** Modification of events from a running event handler is always safe.
32 ** Deleting an already deleted event is always safe.
33 ** For any event type, it is possible to ask whether it is active (added to the mainloop) or not: <<mainloop:fun_hook_is_active,`hook_is_active()`>> and friends.
34 ** A new mainloop front-end for asynchronous <<mainloop:recordio,record-based I/O>> has been added.
35
36 * Added support for <<trans:,resource pools and transactions>>, which is a general
37   mechanism for tracking resources and reporting errors. It is still considered
38   experimental, so the API can change in future releases.
39
40 * Added a growing array module `gary.h`, similar to `gbuf.h`, but with
41   a much more convenient interface.
42
43 * The <<lists:,Circular linked lists>> can recognize unlinked nodes,
44   see <<lists:fun_clist_unlink,`clist_unlink()`>>.
45
46 * Added `strtonum.h` -- a module for precise parsing of numbers.
47
48 * When compiled by a recent enough GCC, `__thread` is used for thread-local variables,
49   which is more efficient than the POSIX per-thread storage.
50 ** *Incompatible:* `ucwlib_context->thread_id` is no longer available directly,
51   please use ucwlib_thread_id() instead.
52
53 * *Incompatible:* Several modules have been declared obsolete and removed:
54 ** `sighandler` -- generic signal handling (it still exists internally)
55 ** `qache` -- a mmap-based shared cache
56 ** `prefetch` -- an interface to memory prefetch instructions; superseded by GCC `__builtin_prefetch`
57 ** `randomkey` -- a generator of cryptographically strong pseudo-random tokens; will be replaced
58    by something more generic soon
59 ** `profile` -- a profiling hack
60
61 * *Incompatible:* Several modules now have their own header files:
62 ** `process.h` -- all functions related to processes, previously declared in `lib.h`
63 ** `io.h` -- functions related to files from `lib.h` and `lfs.h`
64 ** `time.h` -- timestamps and interval timers, previously in `lib.h`
65
66 * *Incompatible:* Several configuration options were renamed or removed:
67 ** `CONFIG_FAKE_ELTPOOL` &rarr; `CONFIG_UCW_FAKE_ELTPOOL`
68 ** `CONFIG_LARGE_FILES` &rarr; `CONFIG_UCW_LARGE_FILES`
69 ** `CONFIG_OWN_GETOPT` &rarr; `CONFIG_UCW_OWN_GETOPT`
70 ** `CONFIG_DIRECT_IO` &rarr; `CONFIG_UCW_DIRECT_IO`
71 ** `DEFAULT_CONFIG` &rarr; `CONFIG_UCW_DEFAULT_CONFIG`
72 ** `ENV_VAR_CONFIG` &rarr; `CONFIG_UCW_ENV_VAR_CONFIG`
73 ** `CONFIG_LFS` was removed
74 ** `CONFIG_URL_ESCAPE_COMPAT` was removed
75
76 * `UCW::Configure` supports running of test programs.
77
78 * `UCW::CGI` support multiple argument tables and UTF-8 mode. Also, it uses the
79   proper HTTP status codes when reporting errors.
80
81
82 4.0 (2009-04-13)
83 ----------------
84 This was the first stand-alone release of LibUCW. Before that, LibUCW was developed
85 as a part of the http://www.ucw.cz/holmes/[Sherlock Holmes project].