[Ecls-list] Project status and changes (directions? help?)
Matthew Mondor
mm_lists at pulsar-zone.net
Mon Oct 21 04:16:44 UTC 2013
On Mon, 7 Oct 2013 10:54:01 +0200
Juan Jose Garcia-Ripoll <juanjose.garciaripoll at gmail.com> wrote:
> * *I am resigning and opening the position of ECL maintainer for anyone to
> take*. I will grant him or her with full administrative rights and full
> responsibility over the project's future. No need to fork the project: if
> you really feel you can make it better, step ahead and take it. I will
> remain as a support developer and help you as much as I can.
>
> * If no one takes over maintenance, I will *continue working as I can*,
> when I can. This may be *unsatisfactory* for many of you -- if this is the
> case, I am sorry, but that's all there is.
>
> * I am also *abandoning the effort to do extensive testing of ECL on
> various platforms*. If you are interested on a particular platform, you
> will have to build and test yourself and report problems through SF's bug
> report.
I was told recently that the SAGE project could possibly help to provide
development/testing resources (I have had no confirmation of this
yet though, it was an informal IRC discussion with a NetBSD developer
who would have liked me to offer to maintain ECL). It would be nice to
build a list of people or organizations who care enough about ECL to
join in occasional such OS/compiler related tests and fixes for the
platform(s) they use the most.
I'm unsure if it's because we are too few on this list, if ECL users
are alltogether too few (I know the CL community itself is not large),
or if it's because most ECL users don't consider themselves qualified,
but I do remember Juan asking a few times on this list for help, and
recently he reminded us that noone actually joined the project yet.
It's also possible that at such requests we had no idea in which
direction help was needed.
I'm reticent to ask to officially maintain ECL for the following
reasons:
- Time constraints, as always
- I consider myself at an intermediate (non-expert) Common Lisp level,
and have no official CS credentials
- I only develop and test on specific environments (NetBSD/amd64,
NetBSD/i686, Linux x86_64)
- Despite having used ECL a few years on and off and having read
carefully a good part of its source, I'm still not very familiar with
a number of aspects, most notably the compiler internals
- Some aspects of the signalling are still mysterious to me, I just
recently learned what the SIMPLE prefix actually meant technically
IRT to ECL's implementation
- I also see some old and new redundant code sections which might
indicate that some cleanup should eventually take place, but I'm still
confused as to what needs keeping or dropping/moving. Examples that
come to mind are two symbol lists, two allocators, several garbage
collectors, there might be other redundancies
- This can be remedied with some time, but my experience with GIT is
limited versus with CVS. I currently use the SF GIT repository for
tracking changes and commiting my custom changes locally, but have
had to extract my diffs and reapply them to a new freshly extracted
tree a few times since (the last time when the repository moved and
the git-documentation-suggested migration method failed and I had
trouble recovering).
- I might likely let ASDF rot, I would not notice when it breaks
(excepts when it alters the behaviour of aspects of ECL iself).
Someone else would have to maintain it.
- I have few experience with other implementations, I'm in no
position to make decisions when the hyperspec is obscure, or about
details of "defacto standards" relative to their precedents, as I
simply lack the experience.
That said, Juan also wrote that future ECL developers would have access
to his technical support. Having occasionally suggested patches for
ECL in the past, I would gladly register an SF account and apply for
access, but as another developer rather than as project leader. I hope
that some other developers also join in (and that Juan is able to also
keep doing what he can, when he can, even if only that)...
With some directions there are probably tasks which I can participate
on over time. It would be nice to build a TODO list for people (and
myself) to know what needs to be done and work on it if/when possible.
Ideally the mailing list should not be an official place for such a
projects list in the long term, but here are a few starting ideas I can
come up with easily. Comments are welcome, and it would be most helpful
if others are interested on working on some of these, or have other
suggestions. If some of these points are considered counterproductive,
it would also be nice to know.
- Testing on various OSs and toolchains (used to exist)
The ideal for this would be access to a system with various VMs and
OSs relatively up to date, but it can also be split among users of
various platforms, as long as they can report errors, produce and/or
test patches...
- Benchmark comparisons between a few ECL versions, HEAD and a known
performant CL implementation (i.e. SBCL), on at least one common
OS+architecture (also used to exist)
- There is an existing TODO file as part of the ECL tree:
src/new-cmp/TODO
- I think that I've noticed some non-public-API C macros which were
lowercase. It would not be very difficult to make those uppercase as
per usual C convention to enhance code clarity (especially that it's
easy to overlook the bad use of a C macro causing unintended side
effects.
- Some macros might be written as C99 inline functions to help
debugging and avoid side effects without affecting performance
dramatically
(copied from above as it also fits here)
- I also see some old and new redundant code sections which might
indicate that some cleanup should eventually take place, but I'm still
confused as to what needs keeping or dropping/moving. Examples that
come to mind are two symbol lists, two allocators, several garbage
collectors, there might be other redundancies
- The configure script options, or their descriptions seem inconsistent,
I have the impression that where two methods are provided to
specify if a library should be built statically from the
distribution, or dynamically from the OS, both are marked as
obsolete. There ideally should only be one consistent method.
- I have only really surveyed once the ECL interpreter, but if it does
not have these features already, it would be possible to explore
various areas, such as a "hardened interpreter" option, perhaps
eventually using a JIT, LLVM, etc. I am not necessarily qualified
for all of this, though.
- Enhancing the documentation: some aspects are not yet documented at
all. Others might need some examples or minor additions. Eventually
even review, adapt or (re)write some documentation on the internals
of the implementation, intended for developers.
- I have noticed that when heavily testing threads some difficult to
explain pauses and lags can suddently begin to occur after some
sustained high load. This is something that would be nice to
understand better and fix. When this occurs, reducing the load for
some time before trying again helps. I could reproduce it on the two
OSs I use. I should try to come up with the smallest test case which
reproduces the problem.
- There are bug/support tickets on SF, some of which might be obsolete,
others which should be closed as resolved, unreasonable request or
fixed.
- I have some ideas to extend or complement the native C FFI. I don't
have distribution-ready code, but have worked on extensions and have
tested them using SDL and GD. Unfortunately it's low-priority and
long-term work-in-progress. Following from that I could distribute
an optional general POSIX module as contrib supporting a number of
syscalls and libc functions. I have an internal edition of the latter
which was built over less powerful extensions to the FFI and which
are NetBSD-specific only. The second implementation based on the new
FFI extensions would be easier to port to various POSIX systems.
Possibly that libevent would be used instead of exposing kqueue
directly as well. Another project on TODO would be full support for
PostgreSQL's libpq (including asynchronous features, I don't envision
this as part of ECL, but as OS-friendly package, i.e. initially
pkgsrc+debsrc).
- I think that eventual transparent support for "UTF8-B" with streams
would be a good idea. In this mode invalid UTF-8 sequences would be
read and mapped automatically to characters within the UTF-16
surrogate range, to preserve their original octets. In output mode,
those would be output as octets. This would provide lower overhead
than having to use signals to detect invalid sequences and restarts
to convert them, and would allow to preserve the original "mixed
encoding" data. Examples where mixed UTF-8 and LATIN-* data are
common are filenames in some file systems, IRC lines, etc. Currently
one can gracefully deal with these when treated as bytes or 8-bit
characters, unless one also needs to have an extended character set
interface, in which case some conversion must be done anyway.
If I remember there exists a limitation in the current system to
easily implement this without touching the stream or
encoding/decoding system much, but I forgot the details (I have notes
somewhere on this though).
- There are various situations where although not necessary by the
standard, printing, describing or inspecting objects with the default
generic functions could provide more information. This also helps
debugging. Some work has already been done like printing the
condition type, although the results may sometimes be surprising or
not totally clear. Of note are SYS/SYSTEM/SI, SIMPLE, etc. On
occasion it was difficult for me to discover exactly which symbol to
use in HANDLER-CASE/HANDLER-BIND to handle a condition, which
function to use to invoke a restart, for instance. Perhaps that
instead of only printing the type printing its hierarchy would also
be useful. Also compare ECL and SBCL when using DESCRIBE on the
symbol of a condition type (on SBCL the hierarchy is shown).
- It might be nice to have documented (obviously
implementation-specific) environment objects, as well as features to
evaluate at macro-expansion and compile-time the state of custom (and
system) definition/declaration (DECLARATIONS) variables without
needing custom define macros. Apparently cltl2 VARIABLE-INFORMATION?
- Inconsistent package name reporting was previously mentioned,
possibly that if some names are deprecated since a while, they should
be phased out, and every reporting system should also use consistent
names.
- Might be slightly redundant with the last point, but deserves its own
point: review deprecated interfaces, evaluate if they have been
deprecated long enough to have spawned at least a few official
releases, and if so, consider dropping those legacy interfaces, after
making sure that the new interface provides the equivalent
functionality and are documented. Unfortunately doing this always
incurs some annoyance for some users, but it helps to keep a clean
source tree, which is especially useful when there are few
developers/maintainers.
Thanks,
--
Matt
More information about the ecl-devel
mailing list