libera/#sicl - IRC Chatlog
Search
14:36:24
beach
scymtym: What if we started a separate repository with an extracted version of the package system from SICL? Could such a system serve as the "model" that you use for your IDE experiments?
14:37:42
beach
As usual, we would then create an "intrinsic" and an "extrinsic" version, and the extrinsic version could then serve that purpose.
14:45:35
scymtym
beach: i think a separate repository for a portable implementation of the package system would be useful in general. however, the IDE use case could require things that might not fit too well into the general architecture. but then again, maybe a few additional protocol generic functions and a client parameter would be enough
14:46:56
scymtym
at least for me, this question is not urgent since the simple package system "model" that i am using at the moment is sufficient for the work i'm doing
14:48:30
whereiseveryone
having both an intrinsic and extrinsic version of sicl sounds like a good idea given what I've learned about it so far. Sounds like having only one or the other would be limiting for certain user's use cases
15:20:28
beach
It is an interesting exercise to extract something like this. One has to think differently compared to when the system is an intrinsic part of a specific Common Lisp implementation.
15:21:02
beach
For example, FIND-PACKAGE is not a function that can be defined in the system, because it really isn't a package function, but an environment function.
15:36:21
beach
So here is the plan: Parcl will use the s-expression-syntax library, in particular for the DEFPACKAGE macro. So I won't use it immediately in SICL because that library may evolve. There will be separate documentation and a separate test suite.
15:37:32
beach
It would also be interesting to optimize for performance, like the COMMON-LISP package could have a special representation for the symbols to make lookup faster.
16:36:19
Bike
you could probably use perfect hashing, since it's pretty unusual to add external symbols after the fact... lots of internal symbols for user systems, though
16:51:47
beach
Sure. I was thinking for the CL package to have a big function that basically does a binary search for each character code.
16:53:41
beach
Like (if (< (char-code (char name 0)) 40 (if (< (char-code (char name 1)) 35 ...) ...) (if ...)))
16:54:42
beach
And the coefficients could be adapted to the frequency of use of Common Lisp symbols.
16:59:28
beach
Such a function would be constructed automatically from the list of symbol names, of course.
17:01:40
beach
And if a prefix such as ARR has been found, then it is mostly a matter of checking that the next two letters are R and Y. Stuff like that.
17:18:41
Bike
https://github.com/pkhuong/string-case/blob/master/string-case.lisp#L130-L168 yeah, and it doesn't just do prefixes, either
17:32:30
beach
I don't immediately see how the test is performed if there are many strings with the same length, like "foa", "fob", "foc"...
17:33:09
beach
If he emits a CASE for the third letter, that might be costly because of how CASE is implemented.
17:38:03
Bike
It does some sbcl hacks to do a bunch of tests in a row without branching, which are then or'd together into a result
17:38:18
Bike
i think with the actual branching the idea is to rely on the compiler to turn that into a multiway branch
17:47:20
beach
My (admittedly small) family just announced that dinner is served. I'll be back tomorrow.