./lang/ecl, Embeddable Common Lisp

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]

Branch: CURRENT, Version: 20.4.24, Package name: ecl-20.4.24, Maintainer: asau

ECL stands for Embeddable Common-Lisp. The ECL project is an effort to
modernize Giuseppe Attardi's ECL environment to produce an implementation of
the Common-Lisp language which complies to the ANSI X3J13 definition of the

The current ECL implementation features:
* A bytecodes compiler and interpreter.
* A translator to C.
* An interface to foreign functions.
* A dynamic loader.
* The possibility to build standalone executables.
* The Common-Lisp Object System (CLOS).
* Conditions and restarts for handling errors.
* Sockets as ordinary streams.
* The Gnu Multiprecision library for fast bignum operations.
* A simple conservative mark & sweep garbage collector.
* The Boehm-Weiser garbage collector.
* Threads using the POSIX threads library.
* Unicode.

Required to run:
[devel/gmp] [devel/libffi] [devel/boehm-gc]

Required to build:

Package options: ffi, unicode

Master sites:

SHA1: 96daa970ae31821c44d9e8ee344f62106d6d79a0
RMD160: 003ba6262219fabe04970ee31035d7bd3dd44df8
Filesize: 7632.27 KB

Version history: (Expand)

CVS history: (Expand)

   2020-07-09 10:23:37 by Yorick Hardy | Files touched by this commit (4) | Package updated
Log message:
lang/ecl: update to ecl-20.4.24

PR 55227

Pkgsrc changes: a newer version (5.2) of texinfo is required to build the \ 

This updates breaks math/maxima when built with ecl (clisp is the default). Maxima
upstream has already fixed this in a later release.

From the CHANGELOG file:

** Announcement
Dear Community,

After more than three years of development, we are proud to announce a new
ECL release having the version tag `20.4.24`. During that time many
important improvements have been made including bug fixes, stability
enhancements and new features. Changes include but are not limited to:

- package local nicknames support
- atomic operations support
- specialized representations of complex float types
- a port to the iOS platform
- fixes for weak hash tables and weak pointers
- fixes for race conditions in the ECL internals
- hash table extensions (synchronization and custom test functions)
- better MOP conformance and improved meta-stability
- improvements to the manual

For more information please read the file CHANGELOG which is located in the
source code, and browse commits. We'd like to thank all people who made
this release possible by contributions of code, documentation, issue
reports, testing and others. Some of them are listed here (without any
particular order): Paul Ruetz, Karsten Poeck, Vadim Penzin, Roger Sen, Stas
Boukarev, Michael Fox, Erik Bray, Bo Yao, Jeremy Cooper, Florian Margaine,
Fabrizio Fabbri, Tomek Kurcz, Kris Katterjohn, Marcin Kolenda, Zhang Yuguo,
Sébastien Villemot, Moritz Petersen, Marius Gerbershagen and Daniel
Kochmański. We'd also like to thank the company Rigetti Computing for
sponsoring the work on specialized complex float representations.

We have another important announcement we'd like to make. Embeddable
Common-Lisp project has now two maintainers: Daniel Kochmański and Marius
Gerbershagen. After numerous contributions from Marius I've proposed him
this responsibility and to my rejoice he has accepted it. That reflects our
community growth.

This release is available for download in a form of a source code archive
(we do not ship prebuilt binaries):

- [ECL 20.4.24 tarball \ 
archive](https://common-lisp.net/project/ecl/sta … 0.4.24.tgz)
- [The ECL Manual](https://common-lisp.net/project/ecl/static/manual/)

Happy Hacking,
The ECL Developers

** Enhancements
- iOS support thanks to the help of P. Ruetz and gitlab user Whimse
- hash-table may now have a custom equivalence predicate
- ~make-load-form-with-slots~ works for structs even if slot names are not interned
- ~ext:weak-pointer-value~ returns two values (value and its presence)
- specialized complex float types based on C99 complex numbers have been
  added, together with corresponding specialized array element types.
- support for atomic operations added with an interface similar to SBCL.
  Currently (SBCL 1.4.12), it differs in the following points:
  - the set of supported places is slightly different
  - ~atomic-incf/decf~ always implement modular arithmetic with respect to
    the width of a fixnum, instead of a width of 64 bits as for some places
    in SBCL.
  - Functions such as ~(cas foo)~ analogous to ~(setf foo)~ are not allowed
    in ECL.
  - The arguments of ~defcas~ are consistent with the short form of
    ~defsetf~ in contrast to SBCL, where they are different.
  - compare-and-swap expansions can be removed with ~remcas~
- experimental support for serializing Lisp objects in compiled files
  directly instead of using the reader for faster loading of .fas files
  (configure option ~--enable-serialization~).
- improvements to C backtrace interface. Compile with CFLAGS+="-rdynamic"
  ./configure ... (Unix) or nmake ECL_USE_DBGHELP=yes ... (MSVC) to take
  full advantage of this feature.
- better handling of fifo files (see man 7 fifo)
- unicode names are always linked for unicode builds (~--with-unicode-names~ removed)
- numerous bytecodes compiler enhancements
- ~ext:run-program~: process streams may be virtual streams (for instance
  ~*standard-output*~ in slime, or a string-output-stream)
- ~ext:run-program~: environ argument defaults to ~:default~, when NIL
  passed empty environment is used
- compiler: when gcc fails ecl prints the failing command output
- ASDF has been updated to
- The Boehm-Demers-Weiser garbage collector has been updated to version 7.6.8
- libffi has been updated to version 3.3
- package local nicknames has been implemented (after SBCL)
- hash table extensions are documented in newdoc
- various cleanups performed in the compiler
- compiler is less verbose by default now
- ~ext:run-program~ has been rewritten (almost) from scratch
- improved documentation of operating system interface (newdoc)
- example of parsing arguments in standalone executable (newdoc)
- example of using shared libraries from C world (newdoc)
- reduced =format= directive tables size
- simplified ~atan2~ implementation by using c99 equivalent - now we
  produce correct output for signed zeros, infinities and nans.
- configure script supports new options =--with-libgc-prefix=,
  =--with-libgc-incdir= and =--with-libgc-libdir= (these flags work the
  same as flags for =libffi= and =libgmp=)
** Issues fixed
- issues with type system revealed by sbcl bootstrapping are gone
- classes are not defined at compilation time
- weak hashtables mishandled weak values when keys were present
- gethash on weak hashtables returned the pointer instead of the value
- maphash on weak hashtables mapped over pointers instead of the values
- initarg caches are now invalidated when new methods are defined. Problem
  found and fixed by Alexander Wood.
- ECL allocated too much space in lisp stack. Instead of the specified size
  x in bytes, ECL allocated roughly x^2/p where p is defined in
  LISP_PAGESIZE (2048 by default). If you're setting the value of
  ECL_OPT_LISP_STACK_SIZE, please check whether you really have
  set a high enough value.
- ~block/return-from~ fixed (didn't work across some closure boundaries)
- ~mp:semaphore-signal~ fixed (race when count was > 1)
- Multiple native threads issues fixed
- ASDF systems like foo/base and bar/base doesn't have conflicts in bundles
- interactive input stream in ext:run-program on Windows
- removed race condition between waitpid and sigchld handler on UNIX
- buildsystem parallel builds work (i.e make -j999)
- ECL builds on consoles with unusual encodings on Windows (i.e cp936)
** API changes
- ~LISP~ and ~USER~ package nicknames to ~COMMON-LISP~ and
  ~COMMON-LISP-USER~ are removed
- make-hash-table accepts a new keyword argument ~:hashing-function~
- no-op ~--enable-asmapply~ configure option has been removed
- ~profile~ and ~rt~ contribs are now deprecated and disabled by default
- thread-local variable support has been removed (~--with___thread~)
- deprecated configure option ~--enable-opcode8~ has been removed
- mk-defsystem is not build by default (enable by ~--with-defsystem=yes~)
- asdf:make-build accepts ~:init-name~ argument for libraries
this allows specifying human-memorable initialization function name to call
in C code
- package local nicknames protocol (documented in newdoc)
- make-hash-table accepts ~:synchronize~ flag for thread safe variant. New
  predicate ~ext:hash-table-synchronized-p~ implemented
- make-hash-table ~:weakness~ argument new variant ~:key-or-value~
- No more explicit option in ~main.d~ to trap SIGCHLD asynchronously
- Zombie processes are cleaned in ~external-process~ finalizer. If process
  is still referenced in the memory, it's programmer duty to call wait.
- The ECL_OPT_SIGALTSTACK_SIZE option has been removed, because it had no
- Non-standard package nicknames (USER for COMMON-LISP-USER and LISP for
  COMMON-LISP) have been removed.

"Okay if you have tested it" from wiz@, tested mostly with math/maxima.
   2020-05-22 03:18:33 by Joerg Sonnenberger | Files touched by this commit (2)
Log message:
Fix build with newer libffi
   2020-03-08 17:42:31 by Benny Siegert | Files touched by this commit (67)
Log message:
Revbump packages depending on libffi after .so version change.

Requested by Matthias Ferdinand and Oskar on pkgsrc-users.
   2019-11-03 20:04:09 by Roland Illig | Files touched by this commit (159)
Log message:
lang: align variable assignments

pkglint -Wall -F --only aligned --only indent -r

No manual corrections.
   2019-03-01 14:30:52 by Leonardo Taccari | Files touched by this commit (5) | Package updated
Log message:
ecl: Update to 16.1.3

pkgsrc changes:
 - Remove clx option. Bundled clx is no longer provided by ecl

** Announcement
Dear Community,

After almost a year of development we are proud to present a new release of
ECL tagged with version =16.1.3=. All changes are backward compatible
fixing bugs and other issues, implementing new interfaces and cleaning up
the code base.

ECL manual has been updated in a few places. Work on a new documentation is
still pending. It is still incomplete, but you may check see it here:

Before this release we have performed extensive tests on various platforms
(Linux, FreeBSD, OpenBSD, NetBSD, OSX, Windows MSVC, Windows MinGW, Windows
Cygwin, Android and Haiku). For details please consult
https://gitlab.com/embeddable-common-li … ssues/307. Extra attention
has been paid to Windows testing to improve that platform support.

Best regards,
ECL Development Team

** API changes
- Added better interface for package-locks.

  Introduced functions:
  =ext:package-locked-p package=
  =ext:lock-package package=
  =ext:unlock-package package=

  To use these functions user has to require the module
  #+BEGIN_SRC lisp
    (require '#:package-locks)

  =defpackage= accepts new option =lock= to allow locking package on

  #+BEGIN_SRC lisp
    (defpackage foo (:lock t))

- =mp:holding-lock-p=: introduce new function for multiprocessing. Function
  verifies if lock is hold by the thread which calls the function. Usage:
  =(mp:holding-lock-p my-lock)=.

- =make-random-state=: fix problem with simple-vectors. The correct
  initialization types for =make-random-state= are: =(OR RANDOM-STATE

  Initializing a random state with an appropriate array (element type and
  arity dependent on platform) is also possible.

- =ext:random-state-array=: new extension for random-states. Usage:
  =(ext:random-state-array random-state)=.

- =ext:terminate-process=: new extension for external processes. Usage:
  =(ext:terminate-process process)= with a second, optional boolean
  argument whenever termination should be forced or not.

** Enhancements
- Implemented =CDR-7=.
  https://common-lisp.net/project/cdr/doc … index.html

- implemented CDRs: =CDR-1=, =CDR-5=, =CDR-14=. Both =CDR-1= and =CDR-5=
  were already implemented, CDR-14 made us to list them in =*features*=
  (https://common-lisp.net/project/cdr/doc … index.html).

- if ECL is build with =--with-cxx= option, =:CXX-CORE= is present in

- deprecated configure option =--with-local-gmp= has been removed - use
  =--enable-gmp= (defaults to auto).

- configure options has been revised.

- ASDF has been upgraded to version (with a few patches scheduled
  for 3.2.0).

- bundled CLX has been purged. Lately I've fixed ECL support on portable
  CLX maintained by sharplispers on https://github.com/sharplispers/clx
  (available via QuickLisp).

- initial port for the Haiku platform. The port is done by Kacper Kasper's
  work, one of Haiku developers. Threads are not supported yet.

- refactored ECL internal tests framework. Tests in =src/tests= are now
  asdf-loadable (with =load-source-op=) and divided into test suites. =make
  check= target runs all regression and feature tests which aren't supposed
  to fail.

- removed 15000 lines of obsolete code. Files not included in the
  buildsystem but lingering in the codebase or options failing to
  build. All info is added in the new documentation in the section "Removed

- improved man page and help output. Man page now contains up-to-date list
  of flags, as well as explanation of flag's behavior.

- deprecated long flags with one dash, added two-dash version. Flags that
  aren't one-character, but start with one dash (e.g. =-eval=) are now
  deprecated; long version =--eval= was added instead.

- indented C/C++ code to follow emacs's gnu C style.  This is a first step
  towards coding standards in the documentation. Additionally all in the
  src/c/ directory are listed in the appropraite documentation section

- refactored =list_current_directory in unixfsys.d=. Function was
  obfuscated with ifdefs with non-even pairs of =#\{= and =#\}=.

** Issues fixed
- ECL signals floating point exceptions in top-level console.

- =mp:rwlock= is treated as built-in class (previously process crashed if
  =class-of= was called on such object).

- ECL builds now succesfully with =--with-ieee-fp=no= option.

- =ext:file-stream-fd=: doesn't cause an internal-error if called with
  something not being a =file-stream= (signals a =SIMPLE-TYPE-ERROR=

- =stable-sort=: bugfix and improvement in speed. Adapted from SBCL by
  Diogo Franco.

- typep: accept =*= type specifier as abbreviation of =T= as described in
  =2.4.3 Type Specifiers= of the specification.

- MOP: fix problemes when redefining non-standard and anonymous
  classes. Bugs identified and fixed by Pascal Costanza.

- =getcwd=: fix issue with too long pathname. This fixes the regression,
  which crashed ECL at start when pathname exceeded 128 characters limit.

- =make-random-state=: fix a problem with simple-vectors. Until now =#$=
  reader macro accepted simple vectors as an argument, what lead to bugs if
  vector didn't match specific requirements like the element type or the
  arity. Now we sanitize this.

- =make-load-form=: provide implementation for random-state objects.

- thread fix on msvc: on windows importing thread was closing the thread
  handler so the thread wakeup wasn't working because the handler is not
  more valid.

- import thread wasn't set upping a proper environment: on some case the
  thread was mistakenly thinking that the thread was already registered.

- =ECL_HANDLER_CASE= and =ECL_RESTART_CASE= didn't work as expected. Bug
  identified and fixed by Vadim Penzin.
   2018-07-04 15:40:45 by Jonathan Perkin | Files touched by this commit (423)
Log message:
*: Move SUBST_STAGE from post-patch to pre-configure

Performing substitutions during post-patch breaks tools such as mkpatches,
making it very difficult to regenerate correct patches after making changes,
and often leading to substituted string replacements being committed.
   2018-01-01 23:30:04 by Roland Illig | Files touched by this commit (537)
Log message:
Sort PLIST files.

Unsorted entries in PLIST files have generated a pkglint warning for at
least 12 years. Somewhat more recently, pkglint has learned to sort
PLIST files automatically. Since pkglint 5.4.23, the sorting is only
done in obvious, simple cases. These have been applied by running:

  pkglint -Cnone,PLIST -Wnone,plist-sort -r -F
   2018-01-01 19:16:39 by Roland Illig | Files touched by this commit (47)
Log message:
Replaced $(ROUND) with ${CURLY} variable references.

This has been a pkglint warning for several years now, and pkglint can even
fix it automatically. And it did for this commit.

Only in lang/mercury, two passes of autofixing were necessary because there
were nested variables.