downwardsfor all ppc and s390 variants [Kimb B. Heino]
downwardson ARM [Kim B. Heino]
downwardsfor x86_64. Self-detection doesn’t work with gcc >= 4.7.0 [Kim B. Heino]
positonmeta-function [Jeremy Hankins] [Eli Barzilay]
rep.ffi.utilmodule [Sergey Bolshakov]
A new module containing utils for rep’s ffi binding is added.
function-name returns the name of the function object. (see Functions)
remove-hook-by-name removes functions from a hook by their name. (see Normal Hooks)
in-hook-p now has the documentation. (see Normal Hooks)
remove-hookused to emit an error if the hook was unbound, but it’s fixed. [Teika kazura]
You need to rebuild rep-gtk and sawfish against this version of librep, because of an ABI-change.
Your lisp files have to be byte-compiled again, too.
Previously, setting these values to
t triggered the debugger /
backtracer even if the error was signalled inside of
This behavior can still be obtained by setting them to the symbol
Now, if they’re
t, the debugger / backtracer is invoked only
if the control is not inside of any
condition-case. Notice that
the condition is NOT if the error is actually handled by an error
handler. It is not the best, but we can’t improve it.
The default value of
backtrace-on-error is now
Handling of functions’ docstring is improved. The revised
documenation function is ensured to return the docstring
of functions, macros, and special forms (see Docstrings).
Previously, fuctions’ docstrings of byte-compiled user-files (eg: pager.jlc) were lost, but not now.
Reorganized documentation files. Many capital letter name files were updated or merged into the info.
New entries: See Crash course for Elisp users, See Closures,
on leading tilde in a filename and tarball access (see File Handlers),
fully revised the module section (see Modules), improved
description on invocation (see Invocation), improved
let descriptions (see Fluid Variables,
and see Local Variables), improved the read syntax of character
(see Characters). Module names are supplied for all functions.
Supplied documentation to some functions: Input stream functions
read-char (see Input Functions), list
remove-if-not (see Mapping Functions),
table-size (see Hash Tables),
cdddr family (see Cons Cells),
assoc-regexp (see Association Lists).
define-special-variableis replaced by
The former is still valid, but it’s a very confusing name, therefore the latter is introduced.
in suffix handling of
load function. More details on the function
Practical effect: Previously, if a user byte-compile files, then the docstring is lost in sawfish-config. This is fixed.
Details: Loss of docstring happened only if (1) byte compiler is not
--write-docs, so only byte-compilation by user (2) defvar
is invoked within macro definition, including
Sawfish. Plain defvar was not affected by this bug. It was because in
’trans-defvar’ in lisp/rep/vm/compiler/rep.jl, the docstring is stored
in a wrong property
variable-documentation. It is corrected to
variable-documentation is not used elsewhere, including
Sawfish and emacs’ sawfish-mode.
file-gid-pfunction for getting the gid of a file [Christopher Bratusek]
file-uid-pfunction for getting the uid of a file [Christopher Bratusek]
rep.ffimodule (Foreign Function Interface). Uses gcc’s libffi. Very untested.
systemfunction (race condition that only seems to show up on Linux 2.6 kernels)
rep.xml.printer, though these should probably be used with extreme caution
rep.net.rpcmodule, protocol is incompatible with previous version. Should be more robust
rep.i18n.gettextmodule exports the
bindtextdomaincodesetfunction (Christophe Fergeau)
inexact->exactcan now convert floating point numbers to rationals (though not optimally). This means that
denominatoralso work better with floats now
lexical-originfunctions. This adds memory overhead but is only enabled in interpreted mode, or other times it could be useful (e.g. when compiling)
weak-ref-set. A weak reference is a pointer to another object. When that object is garbage collected, the pointer in the weak reference is set to false.
#undefinedvalue. Returned by
%defineand the macros using it (
thread-suspendreturns true iff the timeout was reached (i.e. return false if
thread-wakewas used to unsuspend the thread)
objectmacro now have an implicit
selfbinding – the object representing their self (or their most derived self)
rep.threads.message-portmodule, implements a simple message queue for threads
logfunction now optionally accepts a second argument, the base of the logarithm
string-replacefunction may now be given a function as its template parameter
all-threadswill create a thread object for the implicit thread if there isn’t one already
letrecbindings may now have more than one form
objectmacro now evaluates its base-object parameter exactly once
mips-compaq-nonstopuxarchitecture (Tom Bates)
,unloadrepl commands not to try to remove non-existent structures
rep.util.md5, has two functions for generating MD5 message digests (of files or strings)
socket-server function the host and/or port
arguments may be false, meaning to listen on all addresses and to
choose a random unused port.
these always returns the details of the far end of the connetion.
socket-port have been changed to
always return the details of the local connection point.
crypt. A wrapper for the system’s
cryptfunction (if it has one)
rep.net.rpc, provides a text-stream based RPC mechanism for Lisp programs. Similar in some ways to untyped CORBA. (This is still in the experimental stage – its interface may change in forthcoming releases)
define-special-variable. A combination of
setq– it always makes the variable special and it always sets it to the given value
testmacros. This provides a framework for implementing unit tests in Lisp modules (such that running the interpreter with the ‘--check’ option will run all tests that have been set up to be autoloaded
rep_parse_numberfunction not to require a terminating null character in the string when parsing bignums
defvarforms, add any doc string they have to the database
defvarspecial form can now take only a single argument
#\returncharacters as white space
rep_guardian_typeto the list of symbols exported from librep
install-aliasesscript (Peter Teichman)
string-replaceto the gaol
readlinefunction, a function to call to generate completions. The
rl-completion-generatormethod of supplying this function is deprecated
premature-end-of-streamerror. This is signalled instead of
end-of-streamwhen reading characters in the middle of a syntax form. The
end-of-streamerror is only signalled when the end of the stream is reached before encountering anything other than whitespace characters
defineso that it tracks bound variables and ignores shadowed keywords when traversing code
#!restare now uninterned symbols. Keywords are interned in a separate obarray
nil. Instead there is a special object
()fulfulling these two roles. For modules importing the
repmodule, the symbol
(). This allows the
schememodule to be more compliant with the Scheme standard
&rest, in favour of
#!keyto declare them. Keyword syntax is ‘#:param’. For example:
((lambda (#!key a b) (list a b)) #:b 2 #:a 1) ⇒ (1 2)
#!keyparameters may now have default values, syntax is
(var default). For example:
((lambda (#!optional (a 1)) a)) ⇒ 1
All module names prefixed with ‘rep.’ are reserved for librep, other top-level names should be picked to be as unique as possible
The existing modules have been renamed to fit this scheme (see the file TREE in the distribution for the hierarchy details). However, old module names will still work for the time being
repmodule no longer includes the
rep.io.file-handlersmodules. These need to be imported explicitly
definemacro now takes a doc string as its optional third parameter
unschememodule. Another Scheme implementation, but the goal of this one is to integrate cleanly with the librep runtime environment, even if this is at the expense of R4RS compliance
For example, in
#f ⇒ () and
#t ⇒ t. This allows rep and unscheme functions to call
each other without needing to convert any data
define-structuresto export multiple views of a single underlying environment
$LD_LIBRARY_PATHfor plugins, but prepend all directories in colon-separated
dl-load-path. Similarly, the contents of
$REP_LOAD_PATHis prepended to
(/ x) ⇒ (/ 1 x)
#tare now primitive symbols, not special objects
apply, to ensure they get eliminated
long longtype on AIX, IRIX and Solaris (Dan McNichol, Albert Chin-A-Young)
DEFUNmacro for C++ (Matt Tucker); also fixed header files to avoid C++ keywords
defvarforms if the symbol isn’t already bound
caseexpressions correctly; eliminate tail-recursion in
condforms when possible
long longfor non-fixnum integers (promote to floats when out of range); no exact rationals. There’s also an option to disable continuations/threading (‘--disable-continuations’)
(declare (inline names…))to tell the compiler that it might be useful to inline the named functions
gaolmodule. Interface is essentially:
gaol-opento import complete modules. Still supports old interface
thread-join, waits for a specified thread to exit, then returns the value of the last form it evaluated
ringmodule, sanitized the interface (preserving compatibility with old functions), also added a
setcdr) functions now return the cell being modified, not the value being stored into it, for compatibility with CL (Karl Hegbloom)
condition-case: these special forms are now macros
missing-argerrors, try to include the function as the first element of the error data
loadfunction now only loads files without suffixes if no-suffix arg is non-
nil(prevents picking up un-suffixed files by mistake, e.g. from the current directory)
gettextmodule not redefining
rep-configscript (Mark Hewitt, Dan Winship)
rep_INTERN_SPECIALmacro not looking for default values of special variables
maxwhen operating on non-numeric values
gaolmodule can now create multiple gaols, each with it’s own namespace
defconstnever evaluates its constant)
Modelled after the Scheme48 system, but simpler. At its simplest,
define-structure form in each file representing a
(define-structure name interface config body…)
The external definitions of this module can then be imported by other
modules through their config statements, e.g.
NAMES…). Most modules will open
rep to get the
standard language definitions.
foo#bar reads as
(structure-ref foo bar)
gaol features are all now modules
(this is backwards compatible, since modules may be imported using
See the “Modules” section of the manual for more details.
define-record-typemacro for defining data structures (the
queuesmodule providing a basic queue type
equalno longer ignore exactness when comparing numbers.
>=do ignore inexactness. E.g.
(eql 2 2.) ⇒ nil (= 2 2.) ⇒ t
scheme). Do ,new foo RET ,open scheme to test it in the repl, use
(open scheme)instead of
(open rep)to use it within modules.
The compiler also knows enough about Scheme to be able to compile it. Also, use the ‘-s’ or ‘--scheme’ options to load a file of Scheme code.
nconcmay be a non-proper-list now
domacro for iteration
definesupports curried functions. E.g.
(define ((plus a) b) (+ a b)), then
(plus 1)evaluates to the function that adds one to its argument.
(declare clauses…)form. See the “Compiler Declarations” section of the manual for details on the actual declarations supported.
beginforms themselves into the top-level (for when macros expand into multiple definitions)
(let () …)as a named let
letnow supports Scheme’s named-let construct for iteration via tail recursion
rubout), and ‘#(…)’ vectors
RTLD_GLOBAL; everything should work on Tru64 now (Aron Griffis)
make-guardianfunction (as described in Dybvig’s paper). These are a clean mechanism for allowing the programmer to control when arbitrary lisp objects are finally deallocated. Also added a new hook:
error-handler-functioncontains a function then it will be called to handle the error, with arguments
case, switches on a key value and sets of constants
call/cc(also available through the alias
call-with-current-continuation). Provides scheme-like continuation functions. Special variables are now deep-bound to support this correctly
(lambda (x . y) …)
definesyntax, with support for inner definitions
tablesplugin implements hash tables, with extensible hashing and comparison methods; supports both strongly and weakly keyed tables
getfunctions now use
equalto compare property names
Compiled lisp code will need to be rebuilt to run on the modified virtual machine.
macro-environmentto the macro environment it was called with. This allows macros to reliably expand inner macro uses
before-exit-hook. Called immediately before exiting
rep-xgettextnow has an option ‘--c’. This makes it output pseudo C code containing the string constants found
define-value. A combination of
defvar, but without implying dynamic scope
loadscans after-load-alist for plugins as well as lisp libraries
(if t)now evaluates to
defvarallows symbols to be redefined in protected environments if they haven’t also been defined by unprotected environments
__builtin_return_addressfunctions (George Lebl)
gettextimplementation, but only if it looks like it’s the GNU implementation
unlessto have the Common Lisp semantics—return
nilwhen the condition evaluates true, not the value of the condition
rep-xgettextscript to remove duplicated strings and to search exhaustively
add-hookforces the hook variable to be special (in case it wasn’t declared using
Fixed some documentation bugs; fixed some build problems
defvarare dynamically scoped.
fboundpfunctions have been removed
This allows all elements in procedure-call forms to be evaluated equally (as in scheme), so things like:
((if t + -) 1 2)
now work. Related to this, function names (i.e. symbols and lambda expressions) are no longer dereferenced by any operations taking functions as arguments. Only built-in subroutines and closures are considered functions.
This means that where before you’d write something like:
(mapcar '+ '(1 2 3))
this is now illegal; the
+ function must be evaluated:
(mapcar + '(1 2 3))
lambdais now a special form evaluating to a closure (as in scheme); this means that the following are exactly equivalent:
(lambda (x) x) ≡ (function (lambda (x) x)) ≡ #'(lambda (x) x)
An alternative method of enclosing a lambda expression is to use the
gaolmodule providing semi-safe environment for untrusted code to evaluate in
gettextmodule; also support for ‘%1$s’ type format specifiers
process-idfunction now returns pid of lisp interpreter when called with zero arguments
autoload-verbosevariable; set it to
nilto turn off the messages when autoloading
No new features; minor portability tweaks and build changes. Fix bug of trying to load directories as Lisp scripts
set-input-handler, registers an asynchronous input handler for a local file
repbinary by default always loads a script named rep, not named by it’s
argv(this breaks under the newer libtool)
SIGUSR2prints all debug buffers
interrupt-modecontrol where errors and user-interrupts (i.e.
SIGINTsignals) are handled. The three possible values are:
nil(denotes the current event loop).
SIGTERMsignals should now be caught more successfully.
dl-load-path: ‘libexecdir/rep/arch’ to contain third-party shared libraries.
First public release.