freenode/lisp - IRC Chatlog
Search
8:25:27
scymtym
Fare: re UIOP 3.3.0 problem: would upgrading SBCL's bundled ASDF (and UIOP) to 3.3.0 also cause this problem?
11:02:34
Xach
scymtym: I think the problem occurs for current sbcl and new uiop. the explanation on asdf-devel does not match my experience, though.
11:05:43
Xach
(the explanation is that this happens because there is no uiop.asd, but there is, and that it has happened since 3.2.0, but i don't see that behavior in 3.2.1 when i test)
11:39:54
scymtym
Xach: thank you. so upgrading would likely not only not cause the problem but instead prevent it in some instances (for SBCL users) since the combination of old ASDF and new UIOP would become impossible?
12:50:12
jmercouris
what's the difference between (require :some-package) and (require "some-package")
12:51:58
mfiano
jmercouris: nothing, they are both string designators. However, you probably don't want to be using REQUIRE anyway
12:52:35
jackdaniel
jmercouris: there is a difference, because as spec says, they are compared with string=
12:52:57
jackdaniel
and :some-package designator is "SOME-PACKAGE", and it is not the same as "some-package"
12:57:59
jackdaniel
fwiw asdf plugs into implementation machinery when it can, so (require "foo") should be equivalent to (asdf:load-system "foo") - if implementation provides require hooks
13:00:58
jackdaniel
but used string provided by jmercouris, didn't think about the string content tbh
13:01:45
jackdaniel
and I meant module in explanation, because that's what require/provide are about
13:02:47
Fare
yeah, and CL modules seem to standardize on symbol names, that are upcased, where asdf standardizes on canonical system names, that are downcased. Hence suffering at the interface between the two.
13:03:24
jackdaniel
Fare: is ASDF plugging into require machinery officially supported? or it just happens to be implemented?
13:04:23
Fare
jackdaniel, currently, it seems to be defined for all sizable free software implementations, and only them.
13:04:24
jackdaniel
all implementations must support case-sensitive modules, otherwise that would be non-conformant
13:04:45
Fare
but I personally think it's a bad idea and a relic of the past, that I would gladly do away with.
13:05:07
Fare
jackdaniel, they "support" it, but do they actually use it for the modules they provide?
13:08:02
Fare
in any way, I'd like to discourage use of :require for anything than implementation-provided modules.
13:08:33
Xach
scymtym: it looks like the UIOP problem does not occur for asdf 3.3.0 and uiop 3.3.0 together, but it does occur for asdf 3.1.5 (sbcl's provided version) and uiop 3.3.0.
13:25:51
scymtym
Fare: Xach: thanks. so upgrading SBCL's bundled ASDF and UIOP to 3.3.0 (as planned) seems like the way to go
13:27:08
Xach
scymtym: It avoids this specific issue. I would be interested in more testing for other issues.
13:27:22
Fare
I don't see anything special about uiop 3.3.0 that make it differ from 3.2.1 buildwise
13:29:02
scymtym
Xach: the plan is to apply an already-prepared and looked-at-by-fare patch directly after the upcoming release. that way, we have about a month for testing with 3.3.0 before the next release
13:29:34
Fare
also, the behavior of sometimes loading defsystem-depends-on dependencies too many times is expected from asdf 3.2.1 and earlier (or not enough times, in an incremental build).
13:30:27
Fare
scymtym, I don't know if/when rpgoldman will have time to release 3.3.1, but I recommend 3.3.0.1 over 3.3.0 because of a bug fix.
13:38:31
Xach
With stock SBCL, UIOP 3.3.0 increases my build time by a factor of 6 and breaks things previously unbroken, due to package variance warnings.
13:40:27
scymtym
Xach: Fare: https://github.com/scymtym/sbcl/tree/asdf-3.3.0.1 (changes: https://github.com/scymtym/sbcl/compare/asdf-3.3.0.1~5...asdf-3.3.0.1 )
13:59:05
Fare
Xach: I still don't see what the code differences in UIOP can possibly bring that make a difference when the uiop.asd hasn't changed.
14:09:06
Fare
I made a backward incompatible change in representation in stamp< thinking that "nobody uses it except ASDF". I failed to take into account using a newer UIOP with an older ASDF.
14:13:55
mfiano
I would argue that programming is quite easy. Software engineering is another story.
14:15:18
beach
Is it a specialty of #lisp to argue about concepts that are undefined or ill defined, or does that occur in other channels as well?
14:16:28
Shinmera
It is a speciality of lisp that people hardly don't often get steamed, though. Or at least that's my perception.
14:19:29
beach
I can get very angry, but I think it is counterproductive to let it show in utterings.
14:20:43
mfiano
Xach, Fare: What is :NET.DIDIERVERNA.ASDF-FLV? Apparently fiveam doesn't load because of some asdf-flv error
14:29:12
Fare
any suggestions for a better name than stamp< or timestamp< ? what the function does is comparing two real numbers where t means -infinity and nil means +infinity (previously, the opposite)
14:30:56
beach
asarch: That depends on your definition of "object oriented". But this channel is dedicated to Common Lisp, so people here might not know.
14:31:30
beach
asarch: Common Lisp on the other hand, has one of the most sophisticated object systems around.
14:34:23
Fare
asarch, "OO" is a bad, badly defined, package deal. Unbundle the package, and you'll see which parts Emacs has or doesn't have.
14:35:23
Shinmera
Apparently, yes. https://www.ibm.com/support/knowledgecenter/ssw_aix_72/com.ibm.aix.alangref/idalangref_eieio_instrs.htm
14:43:42
jackdaniel
hm, am I wrong here or file-local-variables name is a bit confusing, because it's about bindings not the variables?
14:45:56
jackdaniel
imo UIOP shouldn't be bundled with ASDF (regarding the issue) – it is unreasonable to expect everybody to ship build system at some specific version if library is used. at price of slight increase of memory footprint bundled UIOP could reside in some internal package, like ASDF.INTERNAL.UIOP
14:46:12
jdz
Fare: whatever name you choose I'd vote for the name to include the direction character (i.e., < or >), otherwise it will be unclear which direction the comparison is being made.
14:48:14
Shinmera
I'm used to </<= so much to the point where when I encounter >/>= in algorithms or papers I get confused for a bit.
14:49:01
jdz
I usually get very confused when I see UNLESS, it also does not have to come with the use of AND or OR.
14:49:10
pjb
Furthermore, > and >= are obviously slower, since they're defined as (defun > (&rest args) (not (apply (function <=) args))) and (defun >= (&rest args) (not (apply (function <) args)))
14:49:51
Shinmera
Nah, I think unless is harder to parse because it is an inversion and people think better in terms of affirmatives than negatives.
14:53:21
Fare
no, the situation with UIOP is fine, as long as I don't fuckup and introduce a backward incompatibility
14:54:22
Shinmera
Can't blame you for not having thought of the possibility of ASDF and UIOP being of different versions, since they're treated as one project.
14:55:07
Fare
no, no, I should have known. UIOP was detached specifically so it could be used without ASDF.
14:55:41
Fare
I just forgot about how strict the "no backward incompatibility" requirement was when I made that change.
14:56:10
Fare
"who cares about a slight change in representation when literally no one uses this function except me?"
14:56:43
Fare
(no one in QL was using it, and before 3.2.0 there was only one comment for the entire set of functions)
14:59:18
Fare
OK, renaming stampFOO to timestampFOO in uiop/utility.lisp (mutatis mutandis in asdf) seems to do the trick, including with QL (I reproduced Xach's test case).
15:11:57
d4ryus
yeah there should be a rule that everyone has to use 'affirmative' names instead of 'negatives'. especially on c DEFINEs. reading stuff like '#ifndef NOT_FOR_X' makes me stop for several seconds...
16:03:10
beach
jmercouris: Common Lisp doesn't have a preprocessor, and as the page explains, it is undefined when the object is coerced.
16:06:18
jackdaniel
no, casting is change of interpretation, while coerce may create brand new object
16:06:48
jmercouris
and will convert one object type to an equivalent representation of another if necessary or possible
16:07:49
Bike
it's kind of hard to define what coerce does quickly and completely. it does a couple different things.
16:07:57
jmercouris
I'm not even close to the level where these details will make a huge difference to how I think
16:09:08
beach
In addition, it is not required that COERCE be called to coerce a designator to the designated object.
16:09:32
jackdaniel
jmercouris: coerce is basically a converter – if implementation knows how to convert your object to the desired type, it will.
16:10:11
jmercouris
why allow (require :one-way) and (require "one-way") what's the advantage of having a coercible form?
16:10:18
beach
jmercouris: If the designator is already the right type for the designated object, the original object can be used.
16:11:01
jackdaniel
jmercouris: convenience. also require and provide are both deprecated in the standard afaik
16:11:51
_death
in C++ the possible coercions are given different operators.. static_cast/reinterpret_cast/const_cast/dynamic_cast
16:13:29
jmercouris
Ok, and what mechanisms do they use to load in symbols from different files if not require?
16:15:41
jmercouris
Ah okay, so it has to do with some sort of low-level modules not written in lisp?
16:18:27
jmercouris
jackdaniel: does there exist something like the objective-c bridge in CCL for ECL?
16:18:39
_death
jmercouris: say the lisp implementation doesn't build with asdf.. then it may use the mechanism provided by the standard
16:19:36
pjb
jmercouris: also you would have to distinguish Apple Objective-C version 2 run-time from GNUstep and gcc Objective-C version 1 (or 2) run-time.
16:21:00
jmercouris
I feel like I could make a python bridge or something, but something like the objective-c runtime is a complete blackbox to me
16:21:59
jmercouris
beach: that's the plan, I want to touch this kind of code as little as possible, but I must interface directly with some libraries on OSX
16:22:50
jmercouris
I'll use CCL for now, but I'd like to make my code as portable and as isolated as possible as we were discussing about McClim earlier
16:24:44
pjb
Easy: don't spread you objective-c bridge code all over the place: put it all in a single file or package, inside normal lisp functions, and call them from the other modules.
16:25:08
pjb
Then you can change the implementation, possibly even using another framework than cocoa on a different platform.
16:25:47
jmercouris
pjb: yeah, I will like to isolate to one file, I've been thinking about it for the past two days how to do it
16:26:19
jmercouris
pjb: here's the bridge code: doesn't look like it'd be an insurmountable task: https://trac.clozure.com/ccl/browser/trunk/source/objc-bridge
16:27:45
jmercouris
I will have to come up with my own API/interfaces, hence why I was talking about that McClim stuff earlier
19:11:19
lambdice
hi all, i do you know how to get the equivalent of the function 'class-precedence-list' on sbcl ?
19:15:01
Xach
(apropos "class-precedence-list") shows some promise, and look for things with ":" rather than "::" usually. (even a ":" is no guarantee of supportedness though.)
19:20:57
jmercouris
lambdice: here's an example of my project which has a few dependencies: https://github.com/nEXT-Browser/nEXT/blob/master/next/next.asd and then here is how someone runs it, pullin in those dependencies as necessary: https://github.com/nEXT-Browser/nEXT/blob/master/next/run.lisp
19:21:24
pjb
lambdice: what I do: - add a generate.lisp script that will quickload my asdf system; - add a Makefile to invoke the generate.lisp correct; - add a README telling to do make application to build the application. - push everything on some git repository.
19:21:59
pjb
lambdice: your asdf system and its quicklisp dependencies will ben dealt with automatically in generate.lisp by a ql:quickload of your system.
19:22:15
pjb
lambdice: if you have other kinds of dependencies, you can add what is needed in it to fetch them.
19:23:06
lambdice
yeah i want to share the give the application to someone, and i know the guy just have sbcl installed
19:24:03
Xach
lambdice: another option is quicklisp "bundles", where you can put a set of libraries into a self-contained directory tree
19:25:05
pjb
lambdice: see for examples: https://framagit.org/patchwork/patchwork (it's a complex case, with a separate repo to get dependencies: https://framagit.org/patchwork/scripts ), or https://framagit.org/nasium-lse/nasium-lse/tree/master/src with https://framagit.org/nasium-lse/nasium-lse/tree/master/dependencies (several different executables built (server/client)).
19:25:58
lambdice
Xach: well i mean, lets say.. i wrote a game in common lisp, using cl-sdl2 and other stuff
19:26:52
Xach
Ok. I don't know how best to do that. but people do use lisp to make games, so maybe there is some insight from those people.
19:27:41
Xach
lambdice: it is usually far more challenging to make something someone else wants to run, than to actually make it available for them to run.
19:28:00
Colleen
Unknown command. Possible matches: 8, say, mop, time, tell, roll, help, deny, clhs, login,
19:28:57
pjb
lambdice: you may get more specific answer in #lispgames even for packaging your game releases.
19:30:07
lambdice
well lets say fo cl-sdl2 my first try was like, create an install.lisp, that will run quicklisp to install cl-sdl2
19:36:21
jmercouris
but it produces nice little standalone binaries, and it is easy to get started with
19:36:53
jackdaniel
lambdice: EQL may be used from any implementation via swank protocol. I've encountered such mention in its documentation