Previously, the format was ad-hoc and implicitly defined by
doc/manual/docstrings.lisp. Now, it is a bit less ad-hoc and still
implicitly defined docstrings.lisp.
The syntax is now a simple, strict subset of Markdown with escaping
extensions. The long comment near the top of docstrings.lisp has the
documentation.
Some notable changes:
- Markdown backticks are supported (e.g. `exit`(3),
`/usr/local/bin/`).
- When the heuristic codification is overly eager, use backslashes to
prevent codification (e.g. \\HTTP, where the backslash is doubled
assuming that this is in a docstring).
- It is now possible to have code that's not downcased
(`\\\\AC_LOCAL`, backslashes doubled again).
- Fenced code blocks are supported (but use them sparingly).
- Texinfo @itemize is used instead of @table.
- Texinfo @var was inconsistently used at best. What used to be @var
is now simply @code.
For the user, the most visible effect of this change is that the
manual has much fewer errors in codification, and a few docstrings
have backticks and escapes in them, which should be acceptably
readable in the sources or via CL:DOCUMENTATION.
Do not do anything in the :LOAD-TOPLEVEL case (the common case for
requiring the sb-md5 contrib module). Also undo the compiler policy
restriction used to compile the md5 routines at the end of the file.
* MD5SUM-SEQUENCE didn't just "deprecate" giving a string as the sequence.
It plain old doesn't work; and calling FILL-BLOCK-CHAR can't happen.
* It's poor style to use UB8-BASH-COPY on arrays whose element widths
are not the same; e.g. it copied from (simple-array (unsigned-byte 8) 25)
to something different in its tests, and who knows what else.
It used to be worse until I fixed the overun/underrun problems in the
UB<n>-BASH-COPY functions, but still it's confusing because those are
defined in terms of "elements", not bytes.
%BYTE-BLT is more logical in that it means "octets", as does "UBB"
but that doesn't mean it's an approved use, because I added assertions
(if #+sb-devel) that things in bit-bash are called only as expected.
* Eliminate some double-bounds checks: since WITH-ARRAY-DATA does
bounds checking, there is no need to vet START and END with
%CHECK-VECTOR-SEQUENCE-BOUNDS.
* Eliminate some fill-pointer confusion: Since WITH-ARRAY-DATA is
used both in contexts where fill-pointer needs to be used, and
in contexts where we only care about the total array size, add
a :CHECK-FILL-POINTER argument to WITH-ARRAY-DATA.
* Do bounds checking in WITH-ARRAY-DATA based on
INSERT-ARRAY-BOUNDS-CHECKS policy -- not SPEED vs. SAFETY
comparison. Adjust tests to check for this.
Fix SB-MD5 bugs:
* Updating the MD5 state with a "short" sequence was buggy;
...and the moral of the story is: (SAFETY 0) hides real bugs
* MD5SUM-SEQUENCE did not respect fill pointers.
Enable faster REPLACE on declared specialized arrays.
Overview of necessary machinery:
* New %VECTOR-RAW-BITS and %SET-VECTOR-RAW-BITS functions/VOPs
which automatically take into account VECTOR-DATA-OFFSET
(eliminates tedium associated with previous bit-bashing code
and makes things slightly faster). It's not clear if the
old %RAW-BITS and %SET-RAW-BITS functions need to remain;
* Generalize the old bit-bashing code to generate bit-bashers
for differently sized "bytes" (1-bit, 2-bit, 4-bit, etc.);
* Add REPLACE transforms for most specialized array types
(those with elements not larger than the word size);
* Replace various incantations of COPY-FROM-SYSTEM-AREA,
COPY-TO-SYSTEM-AREA, BIT-BASH-COPY, etc. with their new
width-aware equivalents (this accounts for the bulk of the
changed files, if not the changed lines);
* Add systematic tests for UB*-BASH-{FILL,COPY};
* Add generalized SUBSEQ and COPY-SEQ transforms while we're
at it (FILL would be nice to have, but is a little bit
trickier to do in the general case).
These changes also open up the possibility of removing %BYTE-BLT
from the sources. Benefits: decrease in the number of
WITHOUT-GCING forms required, less calling out to C, more of
the system in Lisp, etc. %BYTE-BLT remains in this version,
but may be removed if there is sufficient support for its
removal.
Manual build fixes.
* Allow the manual to be built with an sbcl in a non-standard
place. This is supposed to help the autobuilder/benchmarker
build a manual without jumping through too many hoops.
* Add a docstring to sb-md5's md5sum-string, to make the
manual happy again.
Merge Robert J. Macomber's octets3.lisp (sbcl-devel 2005-01-06)
patch.
... use WITH-ARRAY-DATA for bounds checking and simple-array
extraction;
... implement ASCII external format (and MALFORMED-ASCII
condition);
... don't need CODE-RANGE type, we can use CHAR-CODE;
... make it compile in #!-SB-UNICODE;
... one or two other frobs. I don't think this is in its final
form even now, but it's good enough, and...
Implement SB-MD5:MD5SUM-STRING, calling STRING-TO-OCTETS
... adjust md5-tests.lisp to use it;
... tests now pass. Hooray.
Merge modular_arithmetic_branch
... include untested modular arithmetic implementation for hppa
... unkludge sb-md5: now implemented using natural, high-level
lisp. (and as a bonus, compiles to shorter code on x86
at least).
... passes self-tests and pfdietz-tests on x86 at least.
More exhaustive testing on other platforms is probably
needed, maybe with the torturer
* Fix bug in the portable implementation of SB-MD5::I;
* add support for modular functions with argument number
different from 2;
* SB!C::CUT-TO-WIDTH: derive node type from the type
declaration;
* on x86 reimplement LOGNOT as a modular function and
implement 32BIT-LOGICAL-NOT in terms of LOGNOT;
... remove optimization of LOGNOT with LOGAND dest.
Add one more contrib
... SB-MD5, based on Pierre Mai's highly-frobbed implementation of
RFC1321;
... a couple of cosmetic changes to rotate-byte to accommodate the
demands of code that wants to use it.