freenode/#clasp - IRC Chatlog
Search
13:25:26
Bike
i like the ir generated by my arguments parsing rewrite. clean. simpler to understand, i think. puts a lot more in llvm values. now if only it actually fuckin worked
13:37:27
karlosz
Bike: don't know if you got a note, but I did find a case in the wild where dominating definers don't exist for closure variables
13:38:04
karlosz
i fixed it by using lowest common ancestor in the dominance tree, so it shouldn't leave any undefined cells know
13:38:42
drmeister
In babel https://github.com/quicklisp/quicklisp-client/blob/master/dists/quicklisp/software/babel-20170630-git/src/strings.lisp#L96
13:38:46
karlosz
whenever you have time it would be great if you could spin up a build and see if it gets farther or not
13:42:10
Bike
basically it looks like there's a reference to the type (unicode-char *) somewhere, but that's not valid
13:57:48
drmeister
I just realized that the cl-jupyter code uses pzmq:bind and I was using pzmq:connect - I'll try switching to bind
13:59:44
drmeister
For some reason it thinks the argument is unicode (pzmq:bind worker "ipc://routing.ipc")
14:00:12
frgo
drmeister: The client uses connect to connect to a server socket that has established a listening socket using bind.
14:04:36
drmeister
frgo: I've got a really nasty bug that has knocked me on my butt for a week with a critical zmq message being dropped.
14:07:34
drmeister
I've got a DEALER -> ROUTER connection where the jupyter python middle-ware DEALER sends a kernel_info_request to the kernel ROUTER. The kernel gets the message and then sends a kernel_info_reply response. The response never makes it to the python middle-ware.
14:07:36
frgo
0MQ dropping a msg only happens when the protocol is violated in some way (that's what I have seen so far)
14:08:23
drmeister
The middle-ware doesn't provide a uuid identity - so zeromq creates a 5-byte identity with the form 0x0 w x y z where w x y z code a 4-byte random integer.
14:09:31
Bike
man llvm is really aggressive sometimes. i wrote in a comment that we could maybe generate a switch on the number of args for &optional, and llvm just takes my shitty series of conditions and makes a switch out of it
14:37:42
drmeister
The kernel gets the identity and I believe that I now faithfully capture it and send a message with the correct identity to the middleware
15:02:40
drmeister
Bike: The bind worked when I passed it (pzmq:bind socket (format nil "tcp://127.0.0.1:9343"))
15:05:15
drmeister
I have a python script that sends a message and then waits for a response and a Common Lisp script that waits for the message and sends the response.
15:36:36
drmeister
Say something like "Chris - could you evaluate (core::expand-deftype 'babel:unicode-string) and paste the response"?
16:33:03
Bike
it wasn't anything recent. probably back when i changed deftype months ago. we haven't noticed since coerce with a variable argument is a little unusual.
17:08:01
drmeister
I have the test case working in sbcl now. tcpdump indicates that the response is not making it out of the Common Lisp code.
17:27:59
drmeister
I just read that I'm supposed to send one. I've tried "", #(), nil - non seem to behave like a delimiter
17:47:12
drmeister
I can do... (make-array 3 :element-type 'base-char :initial-contents (list #\a #\a #\a))
18:05:10
drmeister
I've got really limited mental bandwidth at the moment. I'm trying to write a pair of functions encode a vector of bytes as a string with utf8 (I guess) and then back again
18:05:38
drmeister
This freaking cl-jupyter was broken so badly - I have to rewrite the communication code
18:09:08
Bike
in other news, after those stupid bugs it's gone pretty well. i think i can eliminate the use of vaslists for normal functions
18:11:50
drmeister
Is this sort of thing reasonable? (position #(1 2) (vector #(2 3) #(1 2) #(5 6)) :test #'equalp)
18:19:09
drmeister
message-recv and message-send are now returning and accepting only list of (array (unsigned-byte 8) *)
18:20:10
drmeister
How can I get (array (unsigned-byte 8) *) to print as something with asc characters?
18:20:56
Bike
though hopefully you mean vectors and not multidimensional arrays? I dunno how it would work with those
18:22:01
Bike
i would just write a quick function that does like what shinmera said, and use that to show the debug output.
18:23:31
Shinmera
(defun print-ub8-array-as-string (array &optional (stream *standard-output*)) (write-char #\" stream) (loop for i across array for c = (code-char i) do (when (char= c #\") (write-char #\\ stream)) (write-char c stream)))
18:32:34
Bike
llvm has seen fit to turn allocasinto twelve-clause phi nodes, but that's probably good for it
18:33:40
Bike
keyword parsing is still impossible to understand, but i think that's inevitable, and now at least the generating code is commentated
18:37:38
Bike
a vaslist is a va_list plus the count of arguments remaining, but we don't actually need to update that count as we go, or store it in a structure
18:41:06
Bike
the main thing is the not updating, so e.g. if you have three required arguments (and not in registers) the ir just goes "%r1 = va_arg ...; %r2 = va_arg ...; %r3 = va_arg ...;" lickety split
18:41:39
Bike
we actually had (well, have, i can't push this for a while) two counts, one up and one down
18:43:48
drmeister
I'm getting the same damn result over and over and over and over and over and over again.
18:44:25
drmeister
No f*cking permutation of inserting null anywhere is getting the response to pass into the middle ware.
18:45:11
Bike
So you determined that the messages weren't passing /out/ of lisp, did i have that right? rather than the middleware getting them and then dropping them or something?
19:15:35
frgo
drmeister: I am back - sorry, got distracted by family - my wife and our dog requested their fair share of frgo time ;-)
19:17:01
drmeister
I'm stuck - I have two programs - one Python (called middle.py) that sends a simple request to the other in Common Lisp (kernel.lisp) that gets the request and is supposed to send a response to middle - but the response is lost/dropped whatever
19:17:25
drmeister
I'm looking for a pair of python examples that do the same thing but can't find one.
19:18:11
frgo
Could you post all source code involved somewhere? I'd like to see both kernekl.lisp and middle.py ...
19:27:47
drmeister
Because when I use the Common Lisp version of kernel.py - the response never makes it to the middle.py
19:37:15
drmeister
My mind is boggling wrt how that can impact here - everything is bytes in between.
19:38:07
frgo
Well, obviously middle.py does not see a "message end" expecting at least a different message end "signal".
19:38:49
drmeister
middle.py doesn't see it when it's sent from kernel.lisp - but it does see it when it is sent from kernel.py. Why?
19:39:43
frgo
And we need to find the difference between the message sent by lisp and by python - byte by byte
19:40:47
drmeister
Sure - but how? I used tcpdump - no response comes out of the kernel.lisp - but I do see the request from middle.py
19:52:07
scymtym
drmeister: is the DO loop in MESSAGE-SEND right? have you tried TRACEing PZMQ:SEND?
19:53:23
drmeister
Yes - we have an unrelated problem with clasp that bike may have fixed - but I want to work with something more reliable at the moment.