freenode/#lisp - IRC Chatlog
Search
6:16:22
beach
This one is for discussions about the language, implementations of the language, and implementations of applications written in Common Lisp.
6:35:14
tourjin
quicklisp install fails on (quicksisp-quickstart:install) with error of Condition of type: idxu INVALID-ARGUMENT-ERROR Socket error in "socket": EINVAL (Invalid argument)
6:46:53
tourjin
in ecl (require 'ecl-quicklisp) returns loading #p"/data/blhablha/ecl-20.4.24/ecl-quicklisp.fas, ecl-curl.fas, sockets.fas"
10:35:40
minion
Josh_2, memo from mrcom: EFFECTIVE-SLOT-DEFINITION is a virtual class and should not be directly instantiated. See https://stackoverflow.com/questions/21986977/additional-properties-to-slot-definition
10:35:40
minion
Josh_2, memo from mrcom: Other notes: looks like you're trying to set up a circular dependency with VALIDATE-SUPERCLASS. "`',slot-names-lock-alist" isn't... what you want. The INITFUNCTION is the proper way to do it, completely overriding :INITFORM and :INITARG.
10:35:40
minion
Josh_2, memo from mrcom: And I suspect your end goal is automatically thread-safe slots. This is a common thought, but kind of a dead-end. The primary issue with thread-safety isn't reading or updating a single slot. It's the higher-level cross-slot operations (e.g. changing STREET-ADDRESS and CITY), cross-object (updating object's address and the ADDRESS-HASH-TABLE that points to it), and global (making sure there's only one obje
10:35:40
minion
Josh_2, memo from mrcom: You'll probably find you need a single mutex per object, and one or more global mutexes. Most importantly, you'll need to define atomic functions/generic functions, and these will be completely aware of the mutexes.
10:35:40
minion
Josh_2, memo from mrcom: In other words, you aren't going to need a broad superclass which invisibly adds lock slots.
10:40:02
Josh_2
mrcom: I can get slot-value to grab a mutex using an :around on slot-value-using-class. I guess this could just be one aspect of a library I could create to aid with making parallel systems, because handling locks is such a pita
10:42:01
Josh_2
I'm also not trying to add additional properties to my slot definition, i simply want to append an extra slot
10:53:12
phoe
2) you can use with-slots based on the fact that, even though it's undefined by the standard, the last time I checked *ALL* implementations defined SLOT-VALUE on structures in a meaningful way, the same that you could expect from standard objects.
10:53:39
phoe
and suggesting option 2) is going to get me a real good scolding from beach in a few moments
10:59:28
jackdaniel
I think that it is a pretty bold omission to not even mention the structure-class metaclass in mop
11:39:00
Josh_2
I added a method for my metaclass and it worked just as expected, when I call slot-value slot-value-using-class was called (in sbcl)
11:39:50
jackdaniel
"Although no implementation is required to do so, implementors are strongly encouraged to implement the function slot-value using the function slot-value-using-class described in the Metaobject Protocol. "
12:49:51
tourjin
clang-10: error: linker commnad failed with exit code 1 ( use -v to see invocation)
12:51:48
mrcom
Josh_2: Yep, you're approaching the problem from bottom-up. You'll learn a lot about MOP in the process. Just warning you that you'll discover locking individual slots doesn't buy you much.
12:51:59
jackdaniel
that means that clang failed to link some objects after compiling them, this error doesn't allow to infere more from that
12:56:50
phoe
Josh_2: (defun frobnicate (object x y) (setf (slot-value object 'foo) x (slot-value object 'bar) y))
12:57:27
phoe
even if both slots are synchronized you still can get race conditions from two simultaneous calls to FROBNICATE
12:59:14
tourjin
document says sbcl can be compiled with ecl. so I tryed all day but only failed with several warnings and clang-10 error
13:04:51
mrcom
Josh_2: On 64-bit X86, 64-bit-aligned updates are atomic. Implementations are going to align CONS cells on words.
13:06:37
mrcom
Josh_2: Setting a slot value boils down to updating the CAR of the slot, which will be an atomic 64-operation. One instant the slot will point to the old value, and then the next to the new.
13:11:24
jackdaniel
afair the problem with getting cl-repl there were problems of f-droid maintainers to build the thing, but that was 2y ago or so
13:15:46
eta
i.e. something similar to the (DECLARE (FTYPE ... )) declaration, but for runtime lambda values
13:25:16
eta
ldb, I want to validate that a callback passed into my function takes the right arguments
13:30:09
luqqy
just reflecting here, but one thing that sort of bugs me about common lisp is that functions aren't truly first class citizens
13:30:35
ldb
eta: you may require the client function to by a structure with the function and an validating object
13:31:22
jackdaniel
luqqy: that's a feature. if you want first-class objects, you may subclass a funcallabe-standard-class and setf it to (fdefinition 'symbol)
13:33:04
phoe
if you want FTYPE declarations that you can try to then take apart to validate arglists against, then you can use trivial-cltl2:function-information
13:37:19
luqqy
ldb, beach: lisp 2 for once, the problem eta voiced for two. ok, maybe i am being too brisk about this. there also was a pun in my complaint btw
13:39:09
phoe
eta: figure out how FUNCTION-INFORMATION behaves when there's multiple FTYPE declarations, then, and write something that validates your arguments against each FTYPE declaration it finds there
13:40:12
beach
luqqy: You are pretty new here, it seems. Maybe you need to ask question rather than affirming false statements.
13:40:14
eta
phoe, I mean, to be honest, it's probably more idiomatic to make the thing into a promise returning some CLOS class instead of doing it the callback-ey way
13:40:41
phoe
eta: that's a more troublesome question because it requires some context about what you're doing
13:41:04
eta
phoe, I'm writing a whatsapp library -- you make some request, like "upload a file", and get back some information asynchronously about where to put the file
13:41:04
phoe
but if you need to dive into low-level declaration stuff like this, then there's some mechanisms for that
13:41:28
eta
the issue is "how do I return these 4 pieces of information asynchronously in the most idiomatic way?"
13:42:06
eta
phoe, yeah, I'm already using that elsewhere in the codebase, so I'll probably do that :)
13:42:28
phoe
the erlangesque way of doing stuff is really nice when it comes to modeling asynchronous processes
13:42:34
eta
I've been burned by callbacks a few times with this project, so yeah, I am gonna make it all use message-passing
13:42:58
eta
plus then I can define the messages as CLOS classes and use defgeneric/defmethod dispatch :)
14:42:43
Josh_2
also I understand that you may consider this a fruitless exercise, however I'm doing it as an attempt to learn to use the MOP
15:24:46
treflip
Also, Emacs + Slime + Orgmode. It's a great environment for mixed interactive programming.
15:56:35
mrcom
Josh_2: "Because I want to" is perfectly acceptable. "It will teach me something" is a commendable reason.
15:58:26
mrcom
Josh_2: It will also teach you a lot about parallelism. Take what I said as foreshadowing; it *may* be enlightening in the future.
15:59:06
Inline
but anyway, when i start it i get a connection, but soon after the connection dies the server vanishes, and the stale connection gets tried to be replace forever....
16:03:49
Inline
ok the install-image succeeds but cl-jupyter:install just fails, because then there's no reference to the quicklisp package obviously