]> mj.ucw.cz Git - libucw.git/blob - ucw/doc/relnotes.txt
ce1a90b9921a0bccf71f61b39e4dfac0b106557a
[libucw.git] / ucw / doc / relnotes.txt
1 Release notes
2 =============
3
4 WIP
5 ---
6
7 * A <<opt:,parser of command-line options>> has been added, similar in spirit to
8   our <<conf:,configuration file parser>>. The <<conf:getopt_h,getopt>> module
9   has been obsoleted
10 * `<stdbool.h>` is automatically included by `<ucw/lib.h>`.
11 * *Incompatible:* The interface of the <<heap:,heap>> module was cleaned up
12    to remove non-systematic side-effects. The `HEAP_INSERT` operation is now
13    a proper insert (previously, it was just cleanup after insertion performed
14    by the caller), similarly `HEAP_INCREASE` and `HEAP_DECREASE`. The `HEAP_DELMIN`
15    operation was renamed to `HEAP_DELETE_MIN`. New operations `HEAP_REPLACE` and
16    `HEAP_REPLACE_MIN` have been added. If you need to track positions of elements
17    in the heap, please check the notes at individual functions.
18 * The <<conf:,configuration file parser>> has been improved:
19 ** Multiple instances of the configuration parser are supported.
20 ** *Incompatible:* As there may be more instances, we can no longer use
21    global variables to control the configuration system. In particular,
22    `cf_need_journal` and `cf_pool` variables have been replaced by
23    functions <<conf:fun_cf_set_journalling,`cf_set_journalling()`>> and
24    <<conf:fun_cf_get_pool,`cf_get_pool()`>>.
25 ** *Incompatible:* Loading of configuration files has been decoupled from
26    the getopt wrapper, so you might need to include `conf.h` for functions
27    which were previously declared in `getopt.h`.
28 ** New functions have been added:
29    <<conf:fun_cf_open_group,`cf_open_group()`>>,
30    <<conf:fun_cf_close_group,`cf_close_group()`>>, and
31    <<conf:fun_cf_revert,`cf_revert()`>>.
32 * <<daemon:,Daemon helpers>> have been added including a new `daemon-control`
33   utility. The old `daemon-helper` utility has been obsoleted and it is not
34   compiled by default.
35 * <<signal:,Signal helpers>> for translation between signal names and numbers
36   have been added.
37 * The fastbuf I/O layer received a new back-end <<fastbuf:fbmulti,fb_multi>>,
38   which concatenates several fastbuf streams to form a single virtual stream.
39 * *Incompatible* The `UCW::CGI` Perl module has its custom error handlers
40   (which override default Perl error handlers) split off to a separate module
41   `UCW::CGI::ErrorHandler`.
42
43 5.0
44 ---
45
46 * *Incompatible:* The `timestamp_t` type has been decoupled from wall clock time.
47   It now specifies the number of milliseconds from an unspecified origin, so that
48   it can for example refer to the system monotonic clock. The `ucw_time_t` type
49   has been removed.
50
51 * The <<mainloop:,mainloop>> module has been rewritten:
52 ** Multiple instances of the main loop are supported (to be used in different
53    threads or locally within a library function).
54 ** The new implementation is more efficient: it uses heaps for timers,
55    epoll() for file descriptors (when available).
56 ** The return value of <<mainloop:struct_main_file,`main_file`>> handlers has been
57    changed to <<mainloop:enum_main_hook_return,`HOOK_IDLE`>> and <<mainloop:enum_main_hook_return,`HOOK_RETRY`>>.
58    However, the numerical values are equal, so old code should keep working.
59 ** *Incompatible:* The main loop time (`main_now`) has been decoupled from wall clock time
60    and moved to a field in the `main_context` structure. It can be accessed either directly
61    or via <<mainloop:fun_main_get_now,`main_get_now()`>>. The `main_now_seconds` variable has
62    been removed, `main_idle_time` has become a structure field.
63 ** *Incompatible:* The interface for asynchronous reading and writing
64    (file_read() and friends) has been separated from the core of the main loop.
65    Use <<mainloop:struct_main_block_io,`struct main_block_io`>> and related functions instead.
66 ** *Incompatible:* file_close_all() is gone. You have to call <<mainloop:fun_main_teardown,`main_teardown()`>>
67    or <<mainloop:fun_main_destroy,`main_destroy()`>> to clean up properly after fork().
68 ** Added support for <<mainloop:signal,synchronous delivery of signals>>.
69 ** Added relative timers: <<mainloop:fun_timer_add_rel,`timer_add_rel()`>>.
70 ** Modification of events from a running event handler is always safe.
71 ** Deleting an already deleted event is always safe.
72 ** 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.
73 ** A new mainloop front-end for asynchronous <<mainloop:recordio,record-based I/O>> has been added.
74
75 * Added support for <<trans:,resource pools and transactions>>, which is a general
76   mechanism for tracking resources and reporting errors. It is still considered
77   experimental, so the API can change in future releases.
78
79 * Added a growing array module `gary.h`, similar to `gbuf.h`, but with
80   a much more convenient interface.
81
82 * The <<lists:,Circular linked lists>> can recognize unlinked nodes,
83   see <<lists:fun_clist_unlink,`clist_unlink()`>>.
84
85 * Added `strtonum.h` -- a module for precise parsing of numbers.
86
87 * When compiled by a recent enough GCC, `__thread` is used for thread-local variables,
88   which is more efficient than the POSIX per-thread storage.
89 ** *Incompatible:* `ucwlib_context->thread_id` is no longer available directly,
90   please use ucwlib_thread_id() instead.
91
92 * *Incompatible:* Several modules have been declared obsolete and removed:
93 ** `sighandler` -- generic signal handling (it still exists internally)
94 ** `qache` -- a mmap-based shared cache
95 ** `prefetch` -- an interface to memory prefetch instructions; superseded by GCC `__builtin_prefetch`
96 ** `randomkey` -- a generator of cryptographically strong pseudo-random tokens; will be replaced
97    by something more generic soon
98 ** `profile` -- a profiling hack
99
100 * *Incompatible:* Several modules now have their own header files:
101 ** `process.h` -- all functions related to processes, previously declared in `lib.h`
102 ** `io.h` -- functions related to files from `lib.h` and `lfs.h`
103 ** `time.h` -- timestamps and interval timers, previously in `lib.h`
104
105 * *Incompatible:* Several configuration options were renamed or removed:
106 ** `CONFIG_FAKE_ELTPOOL` &rarr; `CONFIG_UCW_FAKE_ELTPOOL`
107 ** `CONFIG_LARGE_FILES` &rarr; `CONFIG_UCW_LARGE_FILES`
108 ** `CONFIG_OWN_GETOPT` &rarr; `CONFIG_UCW_OWN_GETOPT`
109 ** `CONFIG_DIRECT_IO` &rarr; `CONFIG_UCW_DIRECT_IO`
110 ** `DEFAULT_CONFIG` &rarr; `CONFIG_UCW_DEFAULT_CONFIG`
111 ** `ENV_VAR_CONFIG` &rarr; `CONFIG_UCW_ENV_VAR_CONFIG`
112 ** `CONFIG_LFS` was removed
113 ** `CONFIG_URL_ESCAPE_COMPAT` was removed
114
115 * `UCW::Configure` supports running of test programs.
116
117 * `UCW::CGI` support multiple argument tables and UTF-8 mode. Also, it uses the
118   proper HTTP status codes when reporting errors.
119
120 * Implementation details of <<fastbuf:,fastbufs>> have changed. The new code checks
121   invariants more carefully, so it is possible that custom fastbuf back-ends which
122   are buggy now fail, although they previously seemed to work.
123
124
125 4.0 (2009-04-13)
126 ----------------
127 This was the first stand-alone release of LibUCW. Before that, LibUCW was developed
128 as a part of the http://www.ucw.cz/holmes/[Sherlock Holmes project].