IE> I recall there being problems taking base class injection out of
IE> shared-initialize - can initialize-instance manipulate the class
IE> precedence list and direct superclasses at that point in the instance
IE> initialization?
I think it should work the same way -- INITIALIZE-INSTANCE :aroun
I also made a change for ccl so we don't inject the class if the dependencies
argument was not provided (vs passing it along as a nil argument). I'll look
at the alternate placement.
AMOP spec says that users shouldn't add methods to SHARED-INITIALIZE of
a metaclass. I think it can be moved
IE> Anyone remember why we put this into the elephant.asd file?
IE> (defmethod operation-done-p ((o load-op) (c elephant-c-source)) nil)
To make sure that library is loaded at least once? There is no way to check
whether it is loaded via UFFI.
And if you return T ASDF might skip loading altoge
AB> After looking into this for way too long...It turns out I'm a complete
AB> idiot : I forgot SBCL had been updated at the same time I changed my
AB> code to split store controllers, and I was running into the MOP issue
AB> of new SBCL versions.
Hmm, what SBCL version is that? Can you please ch
Recent patches:
* set-valued slot tests, optimized postmodern support
* test-slot-sets enabled in asd
test-slot-sets thoroughly verifies current behaviour (rather weird)
optimized postmodern support uses pm-pset for backend storage which
keeps everything in one btree (database table)
*
It turns out that for compatibility with RT deftest we redefine
5am:finishes (not shadowing it) into something which is supposed to work
with deftest -- it returns NIL if there was error and T otherwise.
There are three problems with it:
1. if `finishes` is in a middle of deftest its output is
> IV. Lacking features
I think it would be great if we also add features for:
1. Initializing slot-set from list. Something like:
(setf (numbers-of obj1) (make-slot-set :items '(1 2 3 4))
2. Wipe contents of a slot-set. You can do it via slot-makunbound, sure,
but it is kinda ugly. (setf (numb
I. RATIONALE
There is a number of cases where one might want to store more than one
value in a slot. An example from our testassociations: person can hold
multiple jobs, job can have multiple holders.
There is a number of ways how you can hold these multiple values in a
single slot:
1. Lis
I worked on this project with Clojure, so they may be willing to help diagnose.
I'll be looking into this later this month when I upgrade the running server
and add some features to that old project I mentioned. -Ian
That would be cool, as I'm not comfortable with diving too deep into
CCL's CL
I use CCL for some production CL applications that use Elephant. Which version
of CCL are you having problems with? I haven't upgraded in awhile - 1.2-1.4
were all good for me.
The latest available, 1.7, 64-bit. 1.6 had same problems IIRC.
I've localized a problem a bit: it is triggered by
Unexpected Error: #"
{1002E81E41}>
failed AVER: NSLOTDS
I've found source of this error -- SBCL's internal %UPDATE-CLASS assumes
that slot-allocation is either :instance or :class (and we have
:database for persistent slots), so it breaks when you drop a virtual
slot (i.e. redefine class with
It looks like something weird happens with CCL's CLOS when we load
Elephant. Given that we have openmcl-mop-patches.lisp, it might be that
we break something with out patches. Or something...
Is anybody interested in Elephant on CCL? Or other CL implementations?
If not, it will be SBCL-only un
I would like to discuss handling of types, i.e. integer/string keys
which support range queries (and work faster).
There is a couple of options for handling type mismatches, I want to
consider possible applications.
___
elephant-devel site list
ele
I've fixed problem with db-postmodern, now it passes almost all tests on
SBCL 1.0.16 (except NIL-SLOT-CLASS).
The problem was that with-btree-cursor using WITHOUT-INTERRUPTS while
making cursor to prevent potential resource leak, but POSTMODERN depends
on interrupts for socket communications (
KR> Nikodemus, you can do the following to test the BDB backend, assuming
KR> that you have the BDB libs installed and your my-config.sexp* setup:
KR> (asdf:operate 'asdf:load-op :elephant)
KR> (asdf:operate 'asdf:load-op :ele-bdb)
KR> (asdf:operate 'asdf:load-op :elephant-tests)
KR> (in-package
Current status:
1. SBCL 1.0.16:
BDB -- all tests ok (on the first run)
Postmodern -- about 350 tests pass, then it loses database connection in
test-indices test and all subsequent tests fail.
Also it says something about starting select when interrupts are
off, maybe it is connec
I've pushed both my patches and fix posted by Nikodemus.
These ones fix general elephant functionality, so code review is welcome:
* default-pset workaround
* removed unnecessary MOP manipulations for SBCL (as reported by N.
Siivola)
* fix dropping instance with derived index
* derived
Anyway ,if you are the only one who reads this list and can push patches
then no one will answer your question, because you are the only one
qualified to answer it :)
Not all questions require qualifications...
It looks like we have enough people here who can participate in
discussions, it is j
This does not appear to have been pushed yet--are there any objections
to the patch?
It looks like nobody who can push patches reads this mailing list anymore.
So, well, maybe I should take over maintainership after all?
___
elephant-devel site list
> What about an :after or :before method on update-instance-for-redefined-class?
It is called once for each instance, but we want update once per class.
But we can hook make-instances-obsolete GF which is called once for class.
> But maybe your idea works.
Hooking compute-slots definitely works
I've found the problem: finalize-inheritance is not always called on
class updates (even when compute-slots is called). Spec says that it is
called at least once somewhere between class being defined and
instantiation of its instances, and that's it.
CCL calls it just once for class and never a
> I would recommend a complete code review of the schema implementation as a
> good first step;
> that's one area that often causes problems when making changes to different
> slot types.
Yep, I've just noticed this: I've started investigating why derived
indices just stop working from time to
hi
I was inspecting code of rebuild-slot-indices and it looks like it has a
problem with inherited indices (although it is not easy to reproduce it).
rebuild-slot-index drops index first. With inherited indices it tries to
drop an index but fails (because it looks for index for this class
rath
> How can you guarantee that the postgres cache is coherent across machines?
When something is updated invalidation notifications are recorded.
Notifications are read and applied before each transaction.
> Also, BDB does caching in shared memory regions across multiple processes,
> so I'm not s
> I am curious why the postgres backend is so unpopular.
I would not recommend postgres backend as a default choice because it
has its own "peculiarities". Particularly, it requires a discipline with
use of types, as only strings and (64-bit) integers are properly sorted.
Another major drawback
IE> Leslie and Alex are both capable of making changes and improvements and
IE> I'm happy to give checkin privs if they're interested (I think Leslie
IE> has them already).
Yep, I'd like to get checkin privs too :)
IE> Also, if someone wants to step up as maintainer I'm happy to step
IE> d
IE> One solution is to get rid of the :inherited option and simply allow a
IE> :subclasses? option to get-instances-by-value/range that uses the mop
IE> to find subclass indexes and does a merge sort of all objects returned
IE> by the various indexes. This becomes time O(k log_b n) and gets ri
> Why? I am by no means an expert and never looked thoroughly the code,
> but ,abstractly speaking, doesnt it boil down to just creating
> more indexes automatically at class definition time?
Code assumes that there is only one index it needs to update at time, so it
needs to be revised to handl
> After creating a lot of objects of a specific class I decided to change a
> slot to be indexed.
> It did change, no old items were included in the index.
Isn't this a bug?
> How can I populate the index with old values?
(defmethod rebuild-slot-index ((sc store-controller) class-name index-nam
> Currently, I do something along the lines of the following on the results
> on get-instance[s]-by-XXX functions:
> (remove-if #'(lambda (x) (not (member ',class-name (mapcar #'class-name
> (sb-mop:class-precedence-list x) lst :key #'class-of)
> if I want results on the whole inheritance cha
Index inheritance is a nice feature for the case when you have several
sub-classes inheriting from a common base class and you want to lookup
instances by a slot value regadless of the sub-class.
E.g. if super-from and mega-frob inherit from frob base class you can look
up any kind of frob by fr
New derived index API is pretty nice, but it looks like implementation isn't
quite mature.
Particularly, I've encountered a problem with redefinition -- when derived
index definition in class changes
nothing changes.
Besides that, there is no analog of rebuild-slot-indices/rebuild-slot-index
f
LPP> the documentation for close-store says:
LPP> If you pass a custom store controller,
LPP> you are responsible for setting it to NIL.
What is "it" in this context"? I think it is pretty hard to read this as
"you are responsible for setting elephant:*current-controller* to NIL".
LPP>
RD> For example, when a new slot is introduced it is unbound in existing
RD> instances. I will often set the slot value to nil in the migration
RD> function. Other times I will need to query the web for the correct
RD> value for existing objects' new slots.
Here's how I do it (my-persistent-
> The issue I have is: I am using Weblocks + Elephant + Postmodern to
> display the instances of a class in
> paginated web pages. Weblocks needs to know the total count of the
> instances to plan the pagination (so it > can display something like "1 of
> xxx pages" ). It turns out just counting
??>> I think it is pretty clear -- if you do not give your application that
??>> is using BDB in source or binary form to third parties, you're
??>> ok. That is, using it for web site should be ok.
q> This was precisely my understanding, but the text in the elephant
q> documentation threw me
q> This was rather disturbing (to me) so I read the license documentation
q> from the oracle site and it is quite ambiguous about above stated
q> point.
I don't think it is ambigous. License only restricts _redistribution_ (if
you redistribute, you must also release source code), but it doesn'
??>> SLSIA. I create a brand new BDB-backed elephant repository
??>> and it takes up 40MB of disk space. Why?
LPP> Elephant creates some btrees as part of repository initialization.
LPP> What you're seeing is probably a combination of BDB log files (try to
LPP> invoke db_archive with the -
IE> Should be easy to add an index lookup to shared-initialize and a check
IE> in indexed slot access as to whether you are changing the unique value.
Hmm, there is a problem with this and concurrency -- one thread does a
check, it passes and it inserts a value, and another thread does the same
hi
> it seems that there is a problem with sbcl and linux 64-bit.
> I noticed that this problems does not appear on my 32-bit systems only on
the 64-bit systems.
I've tested it on Debian 5.0 64-bit: SBCL 1.0.18, BDB 4.6, both stock from
Debian packages.
There is no leak neither for get-instan
IE> As I recall, when allocating space in the heap for new objects, SBCL
will periodically
IE> ask the OS for more heap memory. Even if the objects are garbage
collected later,
IE> the allocated memory will remain (SBCL never releases heap memory back
to the
IE> OS even if it isn't using mo
LG> So when I use an oid that stores an object that is not of the given
class, there is no error thrown or no warning.
LG> Is there any possibility to be sure that the given oid stores an object
of the given class?
You shouldn't use make-instance with :from-oid initarg to recreate
instances -
LG> Is it necessary to call sb-mop:finalize-inheritance explecitely?
Elephant should call this function itself before trying to get class-slots.
I guess it calls it too late or too early...
LG> Maybe the class-hierarchy can help a little bit:
Do you load your source files in this order?
I'm
HH> I have an idea: we could have a second elephant database used only for
HH> reference tracking. It does not have to have the same backend,
HH> bdb will probably be the best choice at all time. This should be easy
HH> to implement and avoid the problem completely?
There is a catch -- s-seria
hi
Previous discussion of gp-export did not cover its design in details. I
think if we're going to bundle gp-export with elephant, it is better to
dicuss its features and shortcomings, so we can either try to fix them or
document them.
Basic idea how it works -- it goes through objects in dat
IE> We introduced recreate-instance in 1.0 which does not call your
IE> initialize-instance when existing instances are pulled from the DB.
IE> You are not the first to have this problem. ;) Under the new system,
IE> you'll use initialize-instance which should have the expected behavior
IE>
> 2. What we have decided is to make separate persistent class for each
> predicate.
So, class is a predicate, right?
>3. (defpclass dependson ()
> ((subject :accessor subject)
> (predicate :accessor predicate)
> (object :accessor object)))
Why do you need a
helo
(Short introduction for those who does not know what is this about:
gp-export is a tool
to export/import databases in human-readable (SEXP) format, with
serialization based on
s-serialization of cl-prevalence, meant to work with different databases. In
previous discussions
it was considere
LPP> I've noticed that MAP-CLASS wraps the whole op in one large
LPP> transaction. This is often neither necessary nor feasible.
do cursors work accross transaction boundaries?
i had an impression they do not.
___
elephant-devel site list
elephant
??>> if you have a multi-core system and value stability over performance,
??>> i strongly recommend binding you lisp process to a single core (via
??>> taskset in Linux, for example). this way multithreading-related issues
??>> will have much less chances to happen.
LPP> No choice in a web s
LPP> I spawned a thread that does some heavy slot access. So maybe
LPP> the serializer isn't entirely multi-thread or multi-process safe
LPP> yet?
maybe. there were some issues with it (trivial ones), who knows,
maybe we've overlooked something.
if you have a multi-core system and value stabil
;; gmane was eating message with patch attached without forwarding it to
mailing list, so
;; i'm now trying with email
here's bunch of patches for 1.0:
* postmodern documentation update
i've updated documentation in postmodern-backend.texinfo.
i'm not really good at texinfo, so it might be not
hi
i've promised to fix some bugs in db-postmodern and make it ready for 1.0
"soon", but unfortunately those issues were much more serious than i thought
(i found some more bugs), and that required considerable changes. but
finally it seems to be done, now i'm doing tests and making patches.
m
IE> How many people currently directly use the Btree/cursor interface?
we use cursors to iterate through multiple sequences in order, e.g. we
want, say 10 latest items that satisfy certain criteria, and candidates
come from different indices.
___
e
AP> I could redistribute that "core" as open source, and run
AP> my "script" (i.e. my website) "on top of" that.
If you're using it only in your website, I think you don't even
need this open source mumbo-jumbo, as Oracle's license
only restricts _redistribution_ but not use, and
redistribution
ap> I'm deeply interested in finding out where Oracle states those
ap> "friendly terms" you are referring to. Can you post a pointer?
I meant the next paragraph in the same document:
Do I have to pay for a Berkeley DB license to use it in my Perl or Python
scripts?
No, you may use the Be
IE> Alex, what would the issues be for the postmodern backend?
IE> Could we use a behind the scenes convert-to-string strategy so we had
IE> a common API for indexing on tuples?
doing it in "proper way" (sorting on multiple columns) will be quite hard
in postmodern, as it means complicating c
YK> Is this a reasonable way of finding an object of type
YK> 'my-class that matches on values val-a and val-b for slots a and b?
yep, it is reasonable if you have relatively low number of objects
in returned by (get-instances-by-value 'my-class 'slot-b val-b) query.
if number of objects is signif
> In the BDB backend I
> persist data for indexed-btrees so I make that a persistent-metaclass
> and thus shared-initialize always gets called. pm-btree is a unique
> case that wasn't handled.
pm-indexed-btree is of persistent-metaclass, pm-btree is not, for
bootstrapping
reasons.
> My soluti
IE> Is anyone still using the CL-SQL store?
the poll says no one, except one vote in "testing" section
IE> release, although SQLite support is the only way to use Elephant with a
IE> cheap, free, easy to install/ distribute backend.
i think a backend using SQLite directly would make a lot of
HD> Which of stable/unstable do you recommend using?
i think we'll eventually switch to "unstable", so if you're planning
for the future, this would be a better option. also the more people
use it, faster we will find all bugs in a new version. OTOH in a short
term perspective "stable" is more te
Looks like that is not one of "usual suspects".. And it is more than
weird -- key-type slot in pm-btree
has initform, so it is unbound only when one explicitly makes it unbound,
and I have no idea where
that could be (in theory, we do not do that at all). To debug this you can
add checks like
(
> Could someone point me to any discussions WRT to choice of back-end?
> I'm looking at BDB and Postmodern. What are advantages/disadvantages of
> either one?
think like BDB is a baseline implementation, and Postmodern is an option for
special cases.
Postmodern is designed to work absolutely t
HD> I am having trouble reducing the code to a sensible test case that
HD> exhibits the same behaviour. Any suggestions on how I can track this
HD> down?
what kind of objects do you put in this btree? i think i've seen a problem
with
upgrading btree object type, it might be related.
other qu
ES> Are cached slots usable yet (at least in a single-threaded situation)?
When I use ":cached t" in my slot definitions, I get errors.
i postmodern backend rather than doing caching on a slot level we're doing
it on btree level. that is, get-value and (setf get-value)
functions do lookups/writ
hello
i've got curious what elephant backends do people use, so i've made an
online poll:
http://www.misterpoll.com/polls/373489
it has some other interesting questions too.
please vote if you're using elephant,
or even if you're only evaluating it.
thanks.
___
RS> I have two other minor worries about this technique. First, it would
RS> seem possible that if, say, we have slot1 in object1 which was set to
RS> :some-opt at some time in the past, but is now totally unused by any
RS> object, the blob row containing that would be considered dead; if
RS>
HH> I agree with Alex, just one perhaps obvious comment: I would have one
HH> transaction around cleaning up one blob-id, not a big transaction
HH> around cleaning up the whole blob table. If you do several
HH> transactions it doesn't lock up much, so it
HH> should be able to execute at the sa
RS> then the slot definitions in the slot table are removed, but the
RS> actual slot _values_, which live in the blob table, are retained. Is
RS> this intended behaviour?
yep, it is. it sort of sucks, i know.
whether or not it becomes a problem depends on what kind of data
you store in slots.
IE> What interface do you use to deal with opening/closing separate
IE> connections in your system?
connection management is not a problem.
problem is that close-store unconditionally makes controller totally
unusable, and that might cause problem if there are some with-open-store
commands goin
IE> with-open-store closes the store when you're done, null'ing out *store-
IE> controller*. With sufficient concurrency you are likely to get a race
IE> condition where the if stmt in with-city-store succeeds but the body
IE> fails since you aren't locking access to *store-controller*.
well,
TJG> With Elephant under both Postmodern and CLSQL, I'm consistently losing
TJG> my DB connection. This apparently happens when writing from fairly
TJG> simultaneous threads. (Two threads may write to the same btree key at
TJG> around the same time.)
weird. could be broken Lisp implementation,
RS> I'm wondering does anyone have any tips on setting up postgres as a
RS> postmodern backend for Elephant. I suspect that my issues are just a
RS> case of not really having enough memory for my data set, but if
RS> there's anything obvious I should be doing, I might as well do that
RS> first
PE> I'm wondering if it is appropriate to use the OIDs that elephant
PE> assigns objects for this purpose.
yep, i think it's fine
PE> Will these values change during the lifetime of the associated object?
they shouldn't.
oids are not preserved across export/import operations (by design of t
lR> I'm just finding time again to get back into elephant. So I downloaded
lR> latest unstable darcs and when I run the tests, it aborts as shown
lR> below. Any ideas?
lR> There is no class named PERSON.
tests are broken -- something about class definitions/redefinitions, not
related to eleph
as> I am using SBCL 1.0.21.
but which version of elephant do you use?
please try darcs version if you're not using it already
___
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel
RS> On this subject, is there a particular branch that I should be using
RS> for postmodern?
first of all, definitely a version from darcs rather than a 0.9.1 release.
release version has lots of bugs.
as for stable/unstable branches, there shouldn't be a big difference as most
stuff is same an
??>> and taking into account other cursor operations, instead of 3 query
??>> templates we now have something like 12 different queries now, and
??>> i see any pattern how they can be merged :(
??>> or maybe it makes sense to ditch templated query generations and just
??>> write these conditio
LPP> I must've missed something or unintentionally used a db
LPP> with older stuff already in it.
yep, old format database could be the case if you've got it broken
at start.
but it seems our current tests are broken, so you get always get some
error on the first run regardless of backend used.
IE> Historically we've had problems with tests being non-idempotent. I
IE> usually wipe the dbs between runs to ensure that hidden interactions
IE> don't break test assumptions.
i have errors in a completely clean environment with a clean store:
Did 455 checks.
Pass: 449 (98%)
Skip:
LPP> The only major problem with it is that the Postmodern backend
LPP> hasn't kept up with the schema evolution changes.
hm, what do you mean? i thought it works reasonably well, as there
are just a handful of glitches to left resolve, but i won't call that "a
major problem".
or am i missing
LPP> BDB is the fastest backend currently available. Postmodern
LPP> is about half as fast
a little clarification -- it is not like there is a constant slowness
factor.
PostgreSQL storage itself is pretty fast , and probably in some aspects
it is even better than BDB storage.
but there is pret
LPP At least one revision from stable produces a non-trivial
??>>> merge in unstable.
??>>>
??>>> what does this mean?
LPP> It means I have to manually wade through at least two conflicting
LPP> revisions.
and what? i had some really painful 3-way merges in git, does that mean
th
??>> First, since I need to use multiple web application machines,
I'm
using the Postmodern backend. I assume there's no sane way to share a
BDB db between multiple machines? My BDB knowledge more or less caps
out at using it as a key/value store from C years ago, I'm afra
LPP> At least one revision from stable produces a non-trivial
merge in unstable.
what does this mean?
LPP> If no one objects I'd do it with Mercurial and then upload
the resulting repository to Bitbucket.
why do you think mercurial would be free of problems? why not g
RS> First, since I need to use multiple web application machines, I'm
RS> using the Postmodern backend. I assume there's no sane way to share a
RS> BDB db between multiple machines?
i think so too
RS> Also, I want to do paginated data, so, for instance, I might, given an
RS> object A with in
FS> May be it is due to my configuration, which is ele 0.9 on
FS> lispworks/win32 with postmodern.
yep i think in 0.9 postmodern backend was quite botched.
i recommend using version from darcs, considerable amount of issues were
fixed since then.
_
IE> Currently none of the stores support comparing lists.
em, we do not support get-instances-by-range queries,
but get-instance-by-value should be fine, as long as serialized
representation of list is same.
ELE-TESTS> (open-store *testbdb-spec*)
#
ELE-TESTS> (defpclass rsdrp ()
((islot :a
M> that sounds like the key for this specific mismatch of the BDB locking
M> philosophy – which for the scenarios you describe is perfect – and our
M> quite different needs.
there is other sort of locking philosophy in BDB too -- so-called "snapshot
isolation"
(also known as multi-version concu
??>> so do you people think that inheritance support on map level is a
??>> right thing?
LPP> Yes, definitely.
LPP> Got a code draft?
yep, sort of.. but i think Ian's approach is "good enough" since
rarely people need both superclass and subclass lookups to
be fast enough.
but i'll probably
> I don't think Elephant is inherently multi threaded, and Elephant/BDB
Elephant/pgsql uses thread API to reap orphaned connections.
> why not just move the dependency into the elephant-tests system
definition?
yep we could make it more fine-grained, i think, but what is a problem with
bordea
??>> Section
??>> 2.10 of the manual mentions that you can "query a base class of type
??>> people to get subclass instances such as employee, manager,
??>> consultant, etc".
??>> I happen to need to do exactly that, but I can't actually find the
??>> appropriate section in the manual.
LPP> I don
??>> My impression from the last time I tried it was that SBCL was
??>> insufficiently mature on Win32 to be a reasonable configuration to
??>> target. Has this changed? Is it getting more use?
ES> I don't know exactly what qualifies as "more use", but I believe that
ES> every SBCL release sinc
LPP> I can sort out the objects with NIL values later on the Lisp
LPP> side -- that's acceptable. But those objects not showing up
LPP> at all in the index is pretty bad indeed!
if you don't need sorting you can just call get-instances-by-class and
sort stuff manually.
i've taken one more look
LPP> While we're at it, I remember running into a similar problem
LPP> with float slots.
yep, if it sees float it will upgrade column to "object" type and
sorting will be lost
LPP> Are there any hidden difficulties in implementing float sort
LPP> support?
i think there are no, we just didn't
??>> question is _why_ should you use GET-INSTANCES-BY-RANGE when
??>> you can do this via GET-INSTANCES-BY-VALUE?
LPP> Because I need sorting... ideally the NIL values should just be
LPP> clustered at the end or beginning of the sorted space.
it seems you're using db-postmodern, i have bad news f
LPP> Is there any sense behind this result? Are NIL values somehow
LPP> special to the secondary indexing mechanism?
it is somehow special in map-index, and inherently in
GET-INSTANCES-BY-RANGE --
if start is NIL it starts from beginning, it end is NIL it iterates to the
end, so (NIL, NIL)
ran
??>> We could then do without proxy objects in Weblocks.
LPP> This seems to work nicely, even with secondary indices.
that looks like an ugly hack, though. what problem are you trying to solve?
hide some instances from enumeration? why not just make slot called
"visible" so you can just filter o
??>> Or s-exp. Just something I can parse and manipulate with text-
oriented tools. :)
LPP> Good for you, 'cause gp-export already has a sexp exporter.
There's no import, though.
??? it has import too, i'd say it would be nearly useless if it didn't have
import..
however,
LPP> Clues?
just a guess -- after re-loading some stuff (such as defconstant and
defparameter definitions)
will be re-created and won't be EQL to previous versions, so comparisons
might fail.
___
elephant-devel site list
elephant-devel@common-lisp.
1 - 100 of 221 matches
Mail list logo