freenode/#lisp - IRC Chatlog
Search
10:45:58
phoe
My format call has three arguments - first, second (boolean), and third. I only want to print and process the third if the second one is true.
10:50:02
jdz
I always have to read the documentation of ~:[ at least three times — the double negativism trips me up.
10:53:54
phoe
_death: I had an instinct to s/with out/without/ but then I re-re-read and noticed that OUT is likely a formatlike library
10:59:11
phoe
_death: I saw and I'd do that myself, but there's a missing field or two in the ASDF file
10:59:16
pjb
phoe: (loop for b in '(b nil) collect (format nil "~A~@[ ~A ~A ~]" 'a b 'c)) #| --> ("a b c " "a") |#
11:00:12
pjb
(loop for b in '(b nil) collect (format nil "~A~:[ false~; true ~A~]" 'a b 'c)) #| --> ("a true c" "a false") |#
11:00:41
_death
phoe: I was referring to the not-for-public-consumption part.. but since it's been a decade, maybe it's ready for a little use
11:37:01
Xach
lukego: i wish there was a middle ground where things mostly work most of the time but you can hack on and sync upstream projects more easily
12:18:28
flip214
minion: memo for karlosz: we're scheduling right now... please tell us all topics and approx. time
12:20:57
lottaquestions
Hi all, I have a question based on one of the code examples in Practical Common Lisp
12:21:52
lottaquestions
(defmacro define-binary-class (name slots) `(defclass ,name () ,(mapcar #'slot->defclass-slot slots)))
12:22:50
lottaquestions
(macroexpand-1 '(define-binary-class id3-tag ((identifier (iso-8859-1-string :length 3)) (major-version u1) (revision u1) (flags u1) (size id3-tag-size) (frames (id3-frames :tag-size size)))))(DEFCLASS ID3-TAG NIL ((IDENTIFIER :INITARG :IDENTIFIER :ACCESSOR IDENTIFIER)
12:22:51
lottaquestions
(MAJOR-VERSION :INITARG :MAJOR-VERSION :ACCESSOR MAJOR-VERSION) (REVISION :INITARG :REVISION :ACCESSOR REVISION) (FLAGS :INITARG :FLAGS :ACCESSOR FLAGS) (SIZE :INITARG :SIZE :ACCESSOR SIZE) (FRAMES :INITARG :FRAMES :ACCESSOR FRAMES)))T
12:24:13
lottaquestions
Is there something I should be doing to ensure the () does not get converted to a NIL?
12:28:35
lottaquestions
So does that mean that the code generated by the macro will run OK with the NIL
12:29:27
pjb
lottaquestions: it means that there's no difference! The object read when you read NIL or () with the default read-table is exactly the same symbol CL:NIL.
12:30:25
pjb
(mapcar 'read-from-string '("()" "( )" "NIL" "nil" "cl:nil" "CL:\Nil")) #| --> (nil nil nil nil nil nil) |#
12:31:09
pjb
lottaquestions: you should not confuse the textual representations from the actual lisp objects that are read to, or printed from.
12:42:25
kmeow
is there a built in function that produces a sequence from a sequence, but with elements meeting a condition removed?
12:49:03
drmeister
fe[nl]ix: the problem with the zip file idea is that macOS needs the dwarf file to be out in the open file system alongside the fast
13:33:26
drmeister
We get about a 2x speed increase and with our slow llvm based compiler i desire very much to get it online.
13:39:39
drmeister
So one source file generates multiple object files. That’s a problem on macOS - the ld64 linker will only reference one object file per source file.
14:10:06
drmeister
You compile to native code - right? If you had to describe how you do that in an elevator ride - how would you?
14:11:32
drmeister
When jupyterlab starts up - you can have several cando instances startup at once. They all start building asdf systems and stomp all over each other.
14:11:45
pjb
So you might solve it either by exchanging the order of generation, or by generating the fasl file under a different name and renaming it after the dwarf file is created.
14:12:41
pjb
drmeister: you will have to solve the cando problem in a different way, given 1- file generation is not atomic, and 2- you won't want to mix fasl files from different (versions of the) sources either.
14:14:07
drmeister
We thought we could use a directory as a fasl file. Then we can put whatever inside of it and rename the directory atomically.
14:14:08
pjb
drmeister: because asdf only tests and deals with the fasl file. It doesn't care about the other files.
14:14:28
froggey
for compile-file: forms are read, top-level form processing is performed (eval-when, etc), then anything that needs to be saved is fed into the compiler which produces a regular compiled-function (along with a set of relocations). compile-file accumlates the compiled functions until it finishes reading the input file, then writes out everything to the fasl
14:15:42
drmeister
Yes - so the two processes write to temporary directories and then each tries to rename its directory overwriting whatever target was there.
14:16:30
drmeister
And it works well enough for clasp - although I haven't tried multiple processes doing competitive compilation.
14:17:18
drmeister
ASDF explicitly checks that fasl files are files and not directories. I disabled that for clasp.
14:17:48
drmeister
Now I'm running into ASDF's own version of writing to a temporary fasl and then renaming it causing problems.
14:18:58
pjb
drmeister: The point here is to keep consistency. You may want to keep files consistent. But I'm saying that you will also want to keep whole directory hierarchies consistent. You don't want half the fasl files compiled by one instance of cando, and the rest by another, because then the fasl files can be inconsistent, either by way of the compilation process itself (assuming the sources are the same; eg. perhaps different optimi
14:19:19
drmeister
This is really just a problem on macOS. They do this thing where they separate out code from debug info. It's causing me grief.
14:19:25
pjb
drmeister: so you must manage it at this higher level, forbiding the two initializations to occur at the same time.
14:20:05
pjb
drmeister: this can be a problem everywhere. jupyterlab & tar xvf sources.tar && jupyterlabe
14:21:00
drmeister
Not two jupyterlab instances. One jupyterlab instance with multiple sessions running. That's very common.
14:21:39
pjb
ok. So the solution is to be solved in jupiterlab, which must prevent the launching of new session when the old ones are not finished initializing and compiling stuff.
14:21:54
drmeister
Much of the cando source code is written using ASDF systems and loaded using quicklisp.
14:22:26
drmeister
So if I edit the source code and start up jupyterlab I get like five cando instances starting up at the same time trying to build the same code. It's trample town.
14:23:01
drmeister
It works because they keep crashing and starting up again automatically and picking up where the whole mess left off. But it's not pretty.
14:27:19
drmeister
These are running in different unix processes - how would you do a lock like that?
14:35:59
pjb
drmeister: the alternative, is to compile your system before launching the cando instances!
15:34:47
boeg
A loop using :for, :with and such, what is it called? I see it used in some code, but I can't find documentation for it and don't really understand how its supposed to work
15:36:55
pfdietz
Some people prefer ITERATE, others do not. https://common-lisp.net/project/iterate/
15:37:51
pjb
a loop not using anything is a simple loop (there's an implicit block nil): (let ((i 0)) (loop (print 'hi) (when (< 3 (incf i)) (return 42)) (print 'lo)))
15:38:43
aeth
pjb: not really, LOOP is kind of a demo of what macros can do in Lisp rather than the Lispiest way to write such a macro
15:40:05
boeg
What I'm currently interested in is that is that I saw something like this somewhere: `(loop :with (a . b) = c ....` where I'm guessing that c, a list, get's "deconstructed" into the variables a and b, so a contains car and b cdr, to be used the loop, but I'm not succesful in looking that up in the documentation. I guess it'll be easier as I can more used to the customs of common lisp :D
15:40:08
aeth
pjb: If I had to implement LOOP, what I would do is I would make each of its clauses be its own s-expression and I would use plist tails to implement its vocabulary via DESTRUCTURING-BIND, which is common in macros. This would also mean that ordering within a clause wouldn't matter past the first. e.g. (:for x :from 1 :below 10) vs. (:for x :below 10 :from 1)
15:40:55
mhcat
Hi Lispers, does anyone have a recommended threading macro implementation for CL? I found alexandria's COMPOSE which solved one of my discomforts (I'm a habitual clojurist) but threading would be super useful for controlling my cascading indentation.
15:40:57
aeth
pjb: I have written something that does some limited parsing (for HTML generation), I guess sort of like what LOOP does, and it's its own thing and doesn't quite feel as right.
15:41:15
dlowe
boeg: http://www.lispworks.com/documentation/HyperSpec/Body/06_aag.htm explains the destructuring assignment
15:41:35
mhcat
If anyone has other pointers for useful utilities or other essentials, I'd be grateful
15:42:22
aeth
Josh_2: The most spirit-of-Lisp kind of thing to do is to write your own DO-FOO on top of DO (or on top of another macro that probably itself uses DO like DOLIST or DOTIMES)
15:44:46
aeth
dlowe: well, the other "right thing" that seems CLish is to use higher order functions like MAP and REDUCE
15:45:31
pjb
aeth: (defmacro loop (&rest stuff) (if (every (function consp) stuff) `(block nil (tagbody #1=#:loop ,@stuff (go #1#))) (parse-and-generate-extended-loop stuff)))
15:45:46
aeth
pjb: Having written macros where you have a "vocabulary" to parse like LOOP and macros where you just have a bunch of lists to DESTRUCTURING-BIND, I can definitely say that the latter is waaaaay easier because &key does most of your work for you
15:46:19
aeth
The only reason why D-B has some haters is because its condition is inconsistent across implementations so you can't really handle it, afaik.
15:46:44
pjb
aeth: Not only the extended loop is what you say, but it's an example of a generic macro, that dispatches to TWO different macros, depending on the arguments!!!
15:47:16
aeth
phoe: (destructuring-bind (a) (list)) ; [Condition of type SB-KERNEL::ARG-COUNT-ERROR]
15:48:16
aeth
phoe: The standard doesn't specify destructuring-bind conditions, so there's no way for you to handle them programmatically in a portable way.
15:49:26
aeth
phoe: oh, good solution, it looks like you eventually just generate a destructuring-bind so it shouldn't hurt efficiency
15:51:25
phoe
anyway, feel free to use this one and/or test it and/or file a bugticket if something is broken
15:53:35
pfdietz
Ah, it uses a flag to determine if the error comes from the destructuring or the body.
15:53:50
aeth
phoe: doesn't someone have a random tester for standard CL? you could run that but adding a * after destructuring-bind and see what comes up
15:54:57
pfdietz
Anyway, the random tester is limited to mostly integer valued forms, so it doesn't test destructuring-bind much.
16:03:24
aeth
pfdietz: that's unfortunate, I'm sure there are probably some nice, fun binding bugs out there, especially with the more advanced binding forms like destructuring-bind and defmacro
16:13:37
beach
Davd33: There are also a bunch of others that don't hang out here, like Didier Verna and Jim Newton. They are at EPITA.
16:24:01
pjb
Shinmera: it's faster than any plane, since you can work non-stop during 4 hours with your laptop. You cannot do that when you take a plane…
16:24:42
boeg
Right now i'm running my scripts with simply "sbcl --load file.lisp" but this current one is taking a looong time to finish when I use the real input to the program instead of just the test input. Can I tell sbcl to optimize the compilation - like remove debug info and so on - to run faster?
16:26:01
Xach
boeg: it is likely doing a pretty good job by default. if it takes a long time to do its work it may be the algorithm needs attention.
16:26:18
Xach
there are certainly settings to improve the margins after you have done lots of other low-hanging fruit
16:27:45
pjb
boeg: You can put (declaim (optimize (safety 3) (debug 3) (space 0) (speed 0) (compilation-speed 3))) in ~/.sbclrc
16:28:06
boeg
Xach: Well, it's surely my algorithm - I haven't optimized at all, just wanted to see if the real input gave the real output
16:28:33
pjb
boeg: and when you want to generate a binary, use (declaim (optimize (safety 3) (debug 0) (space 3) (speed 3) (compilation-speed 0))) in your generation script.
16:32:56
boeg
I have a list ((1 2 3) (5 3 6)) and I need to find the items in the two list that are in both lists. So that would be the `3` only. Right now, I just loop the first list and on each item loop the next, check if theres a match and collect the match if there is. This is probably why it takes so damn long with the real input.
16:38:00
boeg
Yeah, I was actually looking for a hash table in the beginning, but I'm pretty new to common lisp, doing advent of code to learn it, and couldn't find anything immediately, so just went with list
16:38:36
boeg
but I just confirmed that the algorithm works as it should, its just slow, so now i just need to optimize it
16:41:16
pjb
boeg: CL has no list. It has no set. But it has functions that work on lists built with cons cells, and on sets built with lists.
16:48:58
pjb
boeg: you can use a reader macro to read easily bit-vectors: https://pastebin.com/E0yfLGHS
16:50:01
arichiardi
Hi there, I have submitted an email patch to alexandria-cvs but I think it got stuck. I was wondering who I can reach out for un-stuck it :D
16:50:13
boeg
I have to go for a while, but i'll be back in a bit, optimizing my code with all of yalls suggestions cause its taking way to long right now :P
18:08:30
arichiardi
Hi all, I was wondering if I can ping someone for a patch to alexandria on common-lisp.net
18:21:15
_death
arichiardi: maybe you can post an issue at https://gitlab.common-lisp.net/alexandria/alexandria/issues
18:35:28
galdor
regarding Alexandria, it says in a PR that "Well, as ALEXANDRIA is so widely used, we cannot put new (exported) symbols in its package." I don't get it, why is this a problem ? removing symbols would be a problem, adding them should not be
18:36:48
_death
galdor: I guess many people :use it, so if they have a defined name that alexandria will now export, redefinition may happen and you may not be so lucky as to detect it
18:37:13
Xach
I want to try building the quicklisp world with everything package-locked to see what breaks
18:54:18
Xach
You can do as alexandria did and version your names, and for a given version, the set of external symbols is fixed.
18:55:31
Xach
Joe Marshall wrote a thing about never ever putting package prefixes in code and that was kind of interesting
18:58:09
Xach
the thing I was thinking of is using a package prefix for a versioned package with a "nice" local name
18:59:09
_death
personally I :use only cl or packages I control.. for the rest I :import-from.. if the symbols are generic, I tend to :import-from with no symbols (so that it depends on the library; package-inferred-systems) and use the FQLN
18:59:38
Shinmera
Xach: while using versions in packages is great in concept, in practise asdf can't deal with it at all so it would be a kludge at best.
19:01:05
Xach
Shinmera: ??? it's nothing to do with asdf and all about the interfaces supported by a project. the project offers multiple versions of the external symbols.
19:01:33
Shinmera
yes, but you won't be able to load the same project at different versions, so what's the poitn?
19:02:57
Shinmera
Because it should be the job of the build system to determine the versions required and only load those.
19:03:35
jackdaniel
*that* would be impractical, because two different libraries may depend on different versions
19:03:48
Xach
I don't think alexandria should provide every version, but as a mechanism to ease the transition from one version to another (at possibly multiple levels of supporting older interfaces) I think it is practical.
19:04:24
Xach
If versions are additive, especially, a v2 package with a few more symbols is not, I think burdensome.
19:05:27
jackdaniel
Shinmera: having build system determine versions -- you could have two incompatible versions as dependencies of different libraries, and without global environments you wouldn't be able to depend on both
19:05:51
jackdaniel
having different packages for different sets of exported symb0ols makes more sense
19:06:11
Shinmera
I'm saying package versioning is a good idea /if/ the build system can determine which of those versioned packages to provide.
19:06:39
jmercouris
people like to imagine that such functionality would be super useful, and it really wouldn't be
19:07:03
jmercouris
I'm not saying that, I'm just saying that your versions should be backwards compatible
19:07:16
jackdaniel
Shinmera: if library provides mutliple packages with different sets of symbols it makes sense and it is already solved then, do I misunderstand what you are picking at then?
19:08:38
jackdaniel
and if there are multiple packages, then depending on alexandria is good enough and I don't see a purpose of special handling by a build system
19:09:07
Shinmera
jackdaniel: I'd like to be able to publish a library at version 1 and 2, and have those versions in the package name. Each release ships one of those versions. Now the build system should determine which of those to load (or both) as needed, and people can then safely rely on their versioned package always being available.
19:09:38
Shinmera
currently I would have to roll my own version management system because ASDF cannot do it.
19:10:37
jackdaniel
so you suggest essentially loading two different systems (potentialy with the same name), so you have a version-per-system?
19:11:50
jackdaniel
OK, now I understand you better and it makes sense (however I think that having multiple packages for single project is better, having incompatible versions of the system (imo) would justify naming it differently)
19:12:32
jackdaniel
you may only specify, that version older than "FOO" is not good enough, and asdf will refuse to load your system
19:12:59
Shinmera
you can't even have multiple versions of the same system in your asdf system registry.
19:13:47
jmercouris
I agree that should your API change significantly enough, perhaps a new packkage name is in order
19:14:46
jackdaniel
the discussion is about multiple-packages-in-single-system vs different-packages-in-different-system-versions
19:15:52
jackdaniel
asdf is a) constrained with backward-compatibility, b) nightmare to work with due to non-obvious class hierachies and gf specializations
19:18:02
_death
even if this feature is desired, this macro just translates defun/defgeneric to defun*/defgeneric*
19:20:41
_death
jackdaniel: I'm not sure why it wasn't the first idea popped.. maybe there's a reason that I'm not aware?
19:22:52
jackdaniel
I would be fine with uiop if it weren't such a pita to deal with (independent from asdf my ass; as preloaded system it is hard to deal with - you must acquire newer version manually)
19:24:36
jackdaniel
well, I'm actively opposing propositions to put uiop in dependencies for systems I maintain
19:27:35
_death
one issue about versions in package names is that you need to inform the user when the version is "finalized", i.e. when the set of names will no longer change
19:29:09
_death
maybe it could be something like alexandria.2020.. so users should not use it before 2020
19:43:23
_death
names are only one facet of the versioning problem.. I don't know that there exists a satisfactory solution, other than designing perfect software..
19:45:06
_death
and why does alexandria have to grow new functionality? put things in your personal library.. but alexandria could definitely be improved in what it already does
19:47:23
pfdietz
The reason to stick things in a de facto standardized library is to enable others to more easily understand your code.
19:54:34
_death
pfdietz: ok, but how do good standards come about? I think the way is you have a bunch of approaches and then one prevails and becomes a defacto standard.. CL got lucky with innovation (when they unified a bunch of things)
19:55:52
pfdietz
The benefit arises regardless of how the standardization comes about, so that's a separate issue.
20:05:03
_death
pfdietz: maybe for understanding a good specification/manual is more useful for understanding
20:05:35
phoe
_death: yet another solution for CLtL4 would be to deprecate :USE in DEFPACKAGE now that PLNs are ubiquitous
20:05:54
_death
jackdaniel: well, here I'm talking about a CDR for a new version of a library, not an implementation
20:06:45
_death
jackdaniel: it could in principle have different implementations, but you don't need to convince multiple vendors, just the authors of the single library
20:07:21
galdor
Xach: the whole :use thing feels silly to me, it's a death sentence if libraries cannot be extended because they might break someone
20:08:17
galdor
I do not like :use anyway, I wish the standard could be updated so that package local nicknames become universal
20:08:18
_death
phoe: personally I've no experience with PLNs, and I'm not sure about others.. also I remember criticizing it on theoretical grounds..
20:08:55
phoe
galdor: they are universal enough already. From the alive FLOSS implementations, only CLISP needs to implement them, and someday I may do that myself.
20:09:39
phoe
_death: I know a few lispers who are using them commonly now that they are available mostly everywhere
20:09:51
jackdaniel
one could argue, that packages are not very flexible and all that use pln and stuff are just workaround over their quirks
20:16:25
jackdaniel
ACTION wishes jmercouris enlightenment to understand, in a meantime he goes to rest
20:17:01
phoe
pjb: that chapter is funny, it is named System Construction but it doesn't define what a system is or how to construct it
20:17:16
jmercouris
I assume that UIOP cannot be loaded as a normal system since ASDF needs it to load systems
20:18:44
jmercouris
I don't kknow if that is good, but I'm not particularly interested in cl systems as a computer scientist
20:21:04
_death
phoe: is this the spec for PLN? https://github.com/3b/package-local-nicknames/blob/master/docs.org
20:22:46
_death
phoe: I suppose sbcl's manual can serve as a useful document on how to start using them
20:23:25
jackdaniel
jmercouris: plesae do not confuse concepts. they are called package-inferred-systems
20:24:18
copec
jmercouris: https://davazp.net/2014/11/26/modern-library-with-asdf-and-package-inferred-system.html
20:24:19
_death
so that's a good candidate for a CDR, and it will be a success - vendors already adopted it :)
20:25:17
jackdaniel
jmercouris: one strategy to deal with inner confusion is not to make statements to avoid risk of sarcasm ,-)
20:25:48
jmercouris
every truck driver from my village knows how to make 'clever' sarcastic comments
20:26:09
jackdaniel
but you may be worried with spreading misinformation due to lack of knowledge (or confusion)
20:27:30
copec
Is there any sort of a shim library/de-facto-standard in between loading packages and build systems?
20:32:54
jackdaniel
I suspect taht some pre-common-lisp implementations could have defsystem builtin
20:33:12
_death
asdf used to be a simple, portable library that solved deficiencies in previous solutions
20:33:20
jackdaniel
it is a de facto standard because almost all libraries 2000+ use asdf to define their systems
20:34:12
phoe
_death: now it is a complex, somehow portable library that has invented its own deficiencies to make up for all the deficiencies of older systems that got forgotten
20:34:31
jmercouris
jackdaniel: well yeah, that which is used extensively is be definition a de-facto standard, my question is *why* is it a de-facto standard? why was it so heavily adopted?
20:35:12
jmercouris
_death: can you name some things it grew which in your opinion were not necessary?
20:37:00
jmercouris
_death: given your power of hindsight, which features are, in your opinion, a bad idea
20:37:42
copec
It seems to have been the first defsystem tool that solved most of the major problems and was usable
20:38:26
jackdaniel
since many people do uneducated decisions mere veolcity gives you a big bonus for popularity
20:38:37
jmercouris
I'm just wondering if some other tool could usurp ASDF by perhaps providing compatibility but with a new codebase
20:39:15
phoe
or rather, without something that will abstract away some of the filesystem and OS details
20:39:19
_death
jmercouris: personally I'm avoiding complex use of asdf, so I don't have much trouble with it.. when it annoys me, it's small things
20:39:26
|3b|
_death: sbcl package-local-nicknames was based on my spec, but i'd say sbcl's docs/implementation is the current 'official' definition
20:40:15
_death
jmercouris: but I remember reading the old asdf and feeling that I understand most of it.. nowadays I wouldn't bother reading asdf to understand it, just the parts I need to understand
20:40:28
jmercouris
my biggest complaint with ASDF is the M-. we had talked about, and the very cryptic error messages when things don't load
20:41:47
jmercouris
I'm not incapable of humor, I just don't see how that would be funny in any circumstance
20:42:10
jmercouris
still, I've never laughed at reading the draft of an essay 'lol! this document in progress!'
20:42:13
mfiano
The biggest issue with a CL build system is in a modern internet-connected age, is no missing feature of ASDF - it's packages loaded into a flat, global namespace. RENAME-PACKAGE hacks can only get you so far. If we ever moved beyond Quicklisp to support features such as multiple versioned transitive dependencies, maybe even some files LOAD'ed at runtime, we have some issues that can only really be
20:42:15
mfiano
solved by another convention like PLN that needs to be widely adopted by implementors.
20:42:19
_death
jmercouris: yes, dbus uses package-inferred-systems... I think that's a good feature of asdf for many kinds of projects
20:43:17
jmercouris
_death: why do you think so? I was under the exact opposite feeling, I would be interested in your rationale
20:43:18
jackdaniel
mfiano: beach wrote a specification for global environments which may be different for different code
20:43:47
jackdaniel
I find it very appealing from the perspective of creating multi-versioned systems in a single image
20:45:25
mfiano
jmercouris: Not every implementation ever will. Some are abandoned, or aren't even conformant yet (GCL)
20:45:55
|3b|
and lower memory usage/executable size still matters for some things, also possibly supports some more platforms than the others
20:47:21
phoe
see your favorite modern Intel CPU for an example of hardware that runs minix by default
20:49:13
jmercouris
every CL has some unique feature and reason for existing, in my opinion, the ones for CLISP are not there
20:49:42
|3b|
jmercouris: regarding humor of that pln spec, if nothing else, the ratio of "how should this work" to "it should work this way" is amusingly high now that i look at it again :p
20:50:25
mfiano
CLISP supports arbitrary floating point reprentations. You can calculate pi to the Nth digit if you want just by printing PI with some arbitrary precision. It also has very nice memory profiling support for #'room, and a bunch of other niceties.
20:51:03
phoe
what the fuck, seriously, today I learn that software needs to be justified in order to exist
20:51:04
Xach
jmercouris: things exist because people who want to work on it continue to work on it, and effort and enthusiasm go a long way (and are not easily conjured up or transferred around)
20:51:25
_death
jmercouris: basically each file defines its own package, so you don't feel like you may be stepping on some other module's toes when defining names.. with principled use of :use and :import-from you know exactly the symbols available.. you export just the names you want to export, and it's easy to import them in another file.. factoring a project to use package-inferred-systems sometimes leads you to discover issues of modularity, e.g.,
20:51:26
_death
you didn't expect this piece of code to use that functionality from the other piece of code, but it happened because it's too convenient when they define symbols in the same package.. also each file becomes a system you can load, and loads just the stuff it needs.. also, some modules may only use :cl and not import any other stuff.. those are now self-contained modules, where in ordinary use they would start with in-package and the
20:51:34
jackdaniel
I find it silly to think that worthwile endavours are directed by reasons for existing -- I wouldn't use CL if I weren't taking the fun factor into account :)
20:51:36
copec
clisp compiles on every architecture, it is in every netbsd pkgsrc tree, for instance
20:52:40
mfiano
Above all, it is a nice addition to CI for testing conformance for a particular project (or finding implementation bugs to report)
20:53:18
jmercouris
_death: I guess it could be a very effective way of debugging your own code :-D converting to them and back! I do find it however very unnatural, maybe if I give it a try for 3 months or something I would change my mind though, I have half a mind to try to do so after what you wrote
20:53:46
jmercouris
phoe: firstly, I think that is a bit too aggressive, secondly I did not say software needs justification to exist, I simply said that CLISP has no justification to exist
20:53:46
phoe
jackdaniel: I kinda agree, a surprising lot of free software exists because someone wanted to write it for no particular reason
20:54:42
phoe
jackdaniel: this, plus software that scratched someone's itch and then grew, plus some happy accidents, plus someone's personal frustrations
20:55:23
_death
jmercouris: it also makes it easier to thing about interfaces explicitly, since you have to decide what to export and from where
20:56:13
jmercouris
phoe: so what, why does that make you so angry? it is my belief that software *should* have a purpose for existing, even if that purpose is the amusement of the authors. When we are talking about CLISP as an implementation though, if it has no greater purpose beyond the author's amusement, why should the community care if it implements PLN or not?
20:56:47
jackdaniel
jmercouris: the one who is agitated is you. clisp has multiple unique featues, one is that it is the most portable
20:57:00
jmercouris
_death: CL has made me very lax with that regard, I used to consider that a lot more back in high school when programming in basic :-D
20:57:01
jackdaniel
second is that it is the only one I'm aware of which implements JIT (not ahead of time compilation)
20:57:49
_death
I think clisp is a cool implementation.. it has a good manual, quite portable, the code is not hard to understand.. was the first implementation I used
20:57:52
jackdaniel
note that you've brought the topic that "you don't understand why people do use clisp"
20:58:33
phoe
it's trivial to neglect the upsides of any piece of software and, from that point on, proceed about how it has no right to exist
20:59:36
phoe
I could do a low kick and start rambling about how nextbrowser is pointless purely for the purpose of demonstrating what I just said, but that's as pointless as rambling about clisp
21:00:10
jmercouris
phoe: well, saying you could do a low kick and then not doing it is effectively the same thing :-D