Skip to content

Commit

Permalink
Seed7 release 2024-04-29
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomasMertes committed Apr 29, 2024
1 parent 1157276 commit b6718ac
Show file tree
Hide file tree
Showing 8 changed files with 441 additions and 101 deletions.
153 changes: 153 additions & 0 deletions doc/chlog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,156 @@
20240429:
- The compilation of s7c with tcc has been fixed. Many thanks to
Cheap-Ad9743 for pointing out that compiling s7c with tcc failed.
- Chapters about hashes and templates have been added to the manual.
- The library hash.s7i has been improved to support hash table
literals and the comparison of hash tables with = and <> .
- The new library scanjson.s7i has been added. This library supports
scanning (reading) JSON (JavaScript Object Notation) symbols from
strings and files.
- The experimental readjson.s7i library has been removed.
- The new library fixarray.s7i has been added. This library supports
arrays with a fixed size. The minimum and maximum index of these
arrays is encoded in the type. The functions minIdx(), maxIdx()
and length() can be used with an array or the type as parameter.
The times operator can be used with: arrayType times elementValue.
- The library msgdigest.s7i has been refactored to use fixed size
arrays. The reduction in run-time for some functions is md5: 6%,
sha1: 26%, sha256: 21%, sha512: 22%.
- The library lzma.s7i has been refactored to use fixed size arrays.
The run-time of the XZ decompression has been reduced by 10%.
- The library jpeg.s7i has been refactored to use the fixed size
array type dataBlockType instead of array integer.
- In jpeg.s7i the restart interval handling (with mcuCount) has been
improved.
- The libraries deflate.s7i and gzip.s7i have been refactored to use
a fixed size array for the sliding window.
- The library aes_gcm.s7i has been refactored to use fixed size
arrays for the factor H.
- The interface types for bitStream and huffmanTable have been
removed. This way, bitStream and huffmanTable functions are called
without dynamic dispatch. This change reduces the run-time of the
function readJpeg() by 5.2% (measured with gcc and valgrind and
the s7c options -oc3 -O3).
- The templates DECLARE_CcittModifiedGroup3Fax_FUNCTIONS,
DECLARE_CcittT6Fax_FUNCTIONS and DECLARE_CcittT4Fax2d_FUNCTIONS
have been added to ccittfax.s7i. The templates are instantiated
for MSB and LSB bit ordering. This way ccittfax functions work
without dynamic dispatch.
- A declaration of the template DECLARE_MIN_MAX has been added to
integer.s7i. This template is used to define the functions min()
and max() for the types bigInteger, bigRational, float, integer
and rational (in bigint.s7i, bigrat.s7i, float.s7i, integer.s7i
and rational.s7i respectively).
- Now non-SYMLINK getters and setters in cpio.s7i, tar.s7i and
rpm.s7i follow relative symlinks inside the archive.
- Getters for fileMode, mTime, owner and group of symbolic links
have been added to cpio.s7i, tar.s7i and rpm.s7i.
- Setters for mTime, owner and group of symbolic links have been
added to cpio.s7i, tar.s7i and rpm.s7i.
- In osfiles.s7i SYMLINK setters for mTime, owner and group have
been added for the type osFileSys.
- Setter interface functions for mTime, owner and group of symbolic
links have been added to filesys.s7i.
- The functions removeDotFiles and symlinkDestination have been
added to filesys.s7i.
- In encoding.s7i the functions toBase and toBase58 have been fixed
to allow encoding "". The functions toBase and fromBase have been
improved to work with any digit for 0 (toBase58 encodes 0 with 1).
- In scanfile.s7i the function getLineComment has been fixed to
leave line endings unchanged.
- In scanstri.s7i the function getEscapeSequence has been fixed to
assume that numeric escape sequences end with a semicolon (;).
The function getNumber has been refactored as well.
- A definition of HASHELEMOBJECT has been added to category.s7i.
- The function conv2unicode in the charsets.s7i library has been
improved to use a for-each loop.
- A declaration of the function arrayLength has been added to the
progs.s7i library. This function is used by the compiler.
- The Seed7 compiler (s7c.sd7) has been improved:
- The maximum and minimum values in a constant integer array are
determined. This way the range of possible values for indexing
into this array can be estimated. This allows for the removal of
some overflow checks. The run-time of the function md5() has
been reduced by 2.6% (measured with gcc and valgrind and the s7c
options -oc3 -O3).
- Now assignments with the times operator like
dest := aSize times 0
are optimized to use memset().
- Assignments to an integer array where the source array contains
only zeros are optimized to use memset(). The assignment does
realloc the array if the size changes. For fixed size arrays the
check of the size and the call of realloc is optimized away.
- For fixed size arrays index checks are optimized away if the
range of possible index values is always inside the array. This
optimization reduces the run-time of the function readJpeg()
by 7.5% (measured with gcc and valgrind and the s7c options
-oc3 -O3).
- Fixed size array assignments have been improved to omit the
copy of minIdx and maxIdx (for fixed size arrays they cannot
change with an assignment).
- The index check for fixed size arrays has been simplified. For
these arrays the lower and upper bounds of the index are known
at compile time. This optimization reduces the run-time of the
function readJpeg() by 7.9% (measured with gcc and valgrind and
the s7c options -oc3 -O3).
- Indexing into an array has been improved for fixed size arrays
if the index checks are suppressed.
- In str_act.s7i the index check for the fixLen substring
operation (stri[start fixLen length]) has been simplified.
- Now the division of product with mdiv is optimized. The division
or the multiplication is removed if possible.
- The recognition of constant expressions has been improved.
Constants defined with a parameter list are not considered
constant if at least one parameter is not constant.
- The code generation in set_act.s7i has been improved to avoid
adjacent - operators (e.g. number--1).
- Now a generic function for user defined hashCode function is
generated.
- In int_act.s7i the statistic of suppressed range checks has been
improved.
- Regression tests which create adjacent - operators in the
generated C code have been added to chkset.sd7.
- In drw_x11.c the graphics driver has been improved to support
window titles with Unicode.
- In chkccomp.c test programs have been improved to call
XRenderQueryExtension() only if XOpenDisplay("") succeeded.
- In bitdata.s7i the deprecated functions getBitLsb(), getBitsLsb(),
peekBitsLsb(), skipBitsLsb(), getBitMsb(), getBitsMsb(),
peekBitsMsb() and skipBitsMsb() with a string as parameter have
been removed. The functions with the types lsbBitStream and
msbBitStream should be used instead.
- Tests for the deprecated bitdata functions with a string as
parameter (getBitLsb, getBitsLsb, peekBitsLsb, getBitMsb,
getBitsMsb and peekBitsMsb) have been removed from chkbitdata.sd7.
- In huffman.s7i the deprecated functions
getHuffmanSymbolMsb(string, ...) and
getHuffmanSymbolLsb(string, ...) have been removed. The functions
getHuffmanSymbol(msbBitStream, ...) and
getHuffmanSymbol(lsbBitStream, ...) should be used instead.
- In strifile.s7i the deprecated function openStrifile() has been
removed. The function openStriFile() should be used instead.
- In stritext.s7i the deprecated function openStritext() has been
removed. The function openStriText() should be used instead.
- The syntax of hash literals and fixed size arrays has been added
to syntax.s7i.
- Generic hashCode functions have been introduced in big_gmp.c,
big_rtl.c, bst_rtl.c, int_rtl.c, pcs_rtl.c, set_rtl.c and
str_rtl.c. Function prototypes of these functions are defined
in big_act.s7i, bst_act.s7i, pcs_act.s7i, set_act.s7i and
str_act.s7i. Function pointers to these functions are used by
s7c.sd7 in the function action_address.
- The functions hsh_concat_key_value, hsh_gen_hash and
hsh_gen_key_value have been added to hshlib.c.
- The functions hshConcatKeyValue, hshGenHash and hshGenKeyValue
have been added to hsh_rtl.c.
- The function bld_hashelem_temp has been added to objutl.c.
- Interpreter and compiler have been improved to support the actions
HSH_CONCAT_KEY_VALUE, HSH_GEN_HASH and HSH_GEN_KEY_VALUE.
- Logging functions have been improved in drw_win.c, drw_x11.c,
hshlib.c and sctlib.c.
- Documentation comments have been improved in array.s7i, bin32.s7i,
bin64.s7i, cpio.s7i, hash.s7i, rpm.s7i, tar.s7i and int_rtl.c.

20240322:
- The compiler has been fixed to be able to compile itself without
using the X11 library. Many thanks to Pietro Cerutti for pointing
Expand Down
8 changes: 5 additions & 3 deletions doc/faq.htm
Original file line number Diff line number Diff line change
Expand Up @@ -2274,11 +2274,13 @@ <h2>
string from its byte-length. In an UTF-8 or UTF-16 string the number
of code points must be computed by processing the whole string.
Computing the length of an UTF-32 string does not need such an effort.</li>
<li>Accessing a code point with an index in an UTF-32 string is simple as well.
<li>Accessing a code point with an index into an UTF-32 string is simple as well.
With UTF-8 and UTF-16 it is necessary to process all code points up
to the index. It has been argued, that most strings are processed
sequentially. UTF-32 strings can be processed sequentially, but if
the processing is not sequentially UTF-32 has a big advantage.</li>
sequentially. To process UTF-8 strings sequentially multi-byte
encodings must be decoded to code points. UTF-32 strings don't need
any decoding when code points are accessed. Additionally the
processing of UTF-32 strings is not restricted to be sequencial.</li>
<li>UTF-8 has invalid byte sequences. In UTF-16, single surrogate characters
are invalid. A string library, that is based on UTF-8 or UTF-16
must check for valid byte sequences. UTF-32 does not have invalid byte
Expand Down
8 changes: 5 additions & 3 deletions doc/faq.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1741,11 +1741,13 @@ The usage of UTF-32 for strings in a program has several advantages:
string from its byte-length. In an UTF-8 or UTF-16 string the number
of code points must be computed by processing the whole string.
Computing the length of an UTF-32 string does not need such an effort.
- Accessing a code point with an index in an UTF-32 string is simple as well.
- Accessing a code point with an index into an UTF-32 string is simple as well.
With UTF-8 and UTF-16 it is necessary to process all code points up
to the index. It has been argued, that most strings are processed
sequentially. UTF-32 strings can be processed sequentially, but if
the processing is not sequentially UTF-32 has a big advantage.
sequentially. To process UTF-8 strings sequentially multi-byte
encodings must be decoded to code points. UTF-32 strings don't need
any decoding when code points are accessed. Additionally the
processing of UTF-32 strings is not restricted to be sequencial.
- UTF-8 has invalid byte sequences. In UTF-16, single surrogate characters
are invalid. A string library, that is based on UTF-8 or UTF-16
must check for valid byte sequences. UTF-32 does not have invalid byte
Expand Down

0 comments on commit b6718ac

Please sign in to comment.