freenode/#lisp - IRC Chatlog
Search
21:51:40
Xach
I am hacking on building quicklisp dists from within a fresh vm, to shake out issues of lingering state
21:58:06
mason
jmercouris: It was on the edge of my memory but I couldn't recall, so I read down the DistroWatch list until it popped into focus.
21:59:36
mason
Hey, a general question... Is there a CL library that will let me do line-oriented socket IO without threading or having to resort to manually buffering input until I see a valid line ending show up?
21:59:42
jmercouris
mason: I kept thinking "Balloons" was the name for some reason, all my queries involving balloons of course came up short :D
22:00:52
mason
jmercouris: Imagine the project developers' glumness when the recent kernel side-channel vulnerabilities were announced, obviating the security afforded by heavyweight VMs. :P
22:01:22
mason
So, no one's leaping up with an answer, and I have to wonder if I'm thinking about this wrong somehow. I'd think a line-oriented library would be the first thing anyone would want.
22:02:08
mason
Shinmera: But, won't that block? I want multiple sockets and I want a line returned when one's ready, but without explicit threading. So, implemented with select or similar.
22:03:16
Shinmera
And also I'd think that's too application specific to be "the first thing anyone would want"
22:03:20
mason
It's not entirely different. I didn't note the desire to not block, but it was implied by the "without threading".
22:03:58
mason
Like, the IRC we're using now, or email, or HTTP, or almost everything else we use...?
22:04:23
mason
Ah, well. Yeah. But it seems like large classes of software would want it, and yet, it exists almost nowhere. Erlang maybe.
22:04:48
Shinmera
Because people just write a standard blocking algorithm and then use a thread per socket
22:05:00
mason
Ignore the "line oriented" part and think of it as structured data where line-oriented is just one example of it.
22:05:35
Xach
mason: For what it's worth, when I did that, I treated everything from the network initially as binary and used epoll.
22:06:16
mason
I wrote one for Perl but now I want one for Lisp, and I don't see why I have to solve this each time. :P
22:06:44
mason
Xach: But yeah, that's what I've done thus far. It's all binary, I parse it and figure out when I've got a usable chunk to peel off.
22:07:03
Xach
mason: Sorry to suggest something I haven't personally tried - I've been meaning to. It might not suit.
22:07:19
mason
Shinmera: As I explained to you, I want something that damned near every network service does, only they all have to implement it independently, which strikes me as weird.
22:09:26
Xach
mason: I go the binary route because I find it harder to handle trying to customize encoding error handling, line ending conventions, etc. for character streams, and I haven't had much luck with bivalent streams, but I can predict binary streams pretty well.
22:09:38
mason
Xach: You may have a winner there. I want to see how they implement it, but it initially looks right.
22:11:28
Shinmera
mason: More libraries, even smaller wrappers to make things trivial to get going with, are always welcome.
22:12:41
mason
Shinmera: I want to spend a little time with Xach's basic-binary-ipc suggestion, but if it doesn't quite fit I'll plan on contributing something.
22:13:29
Shinmera
Well, even if b-b-i does do the trick, it might need a bit of work out of which making a library might be useful.
22:57:37
norserob
Hi, I am trying to use libdrm on linux from lisp. Looked at cl-drm on github, and it works ok for some sthings. But I want to access framebuffers, and it looks like I need to do some ioctl calls. So far this fails, not sure why. I put an example in a gist: https://gist.github.com/rfolland/6f0aba4171519881f938040d9d0f237b
23:33:33
norserob
Xach: I got it from a very instructive C program by D.Herrmann at https://github.com/dvdhrm/docs/tree/master/drm-howto. I printed the value from there. It is calculated by a macro, I'll need to look into that. But it looks like I'm getting there anyway now, I got a better result after setting some of the values on the struct before doing the ioctl call. Forgot to do that in the small example in the gist. I
23:34:31
norserob
I want to get the examples by Herrmann working in ccl before moving on with my own stuff.
0:42:13
jasom
mason: b-b-i provides the primitives that you can build your library off of, but you'll have to create a buffer for each socket and fill them in as you go, then add the logic for detecting newlines
3:08:43
pjb
asarch: you have two ways of detecting it: returning a value, or signaling a end-of-file condition.
3:10:12
pjb
Note, you can always save the detection of eof into some hash-table and write a feof function to get it, if you want to reproduce the bugs of C…
3:10:37
pjb
asarch: alternatively, in the case of file-stream, you can test (= (file-position stream) (file-length stream)).
3:17:20
pjb
asarch: but similarly after this test of file-length, it may change, so if the test is false, it doesn't mean you will be able to read anything. If it returns true, it doesn't mean you won't be able to read something.
4:01:27
pierpa
just tell him what he probably is looking for? asarch, probably you want: (loop for line = (read-line in nil nil) while line do ...)
4:11:57
pjb
asarch: so read-line returns usually a string, so returning NIL when eof is discriminating.
4:13:55
pierpa
right. Thanks pjb. I must correct myself: most input functions can either signal a condition or return a value you choose on end of file.
4:22:18
asarch
Question: if Common Lisp is not a multi-threating environment per se, why the "feof checks it too late, the file might have grown since!" condition?
4:25:11
pjb
This is because the OS and CL are different entities that you cannot know when the file will grow (or shrink).
4:26:00
asarch
pierpa, I just looking for something a la C: while (feof(fp) != NULL) {fscanf(fp, "%s", buffer); printf("%s", buffer);}
4:28:15
pjb
asarch: reproducing C bugs in CL will require more work; as I explained above, you can define a feof function, by memorizing the result of the last read operation for each stream!
4:31:11
pjb
Notice that C doesn't have multiple values, conditions, or types associated to objects. This is so defectuous! This is why the function fread() cannot distinguish between end-of-file and error! Hence the need to store the eof status in the stream record, and retrieve or clear it with feof and clearerr.
4:31:46
pjb
asarch: but this let you forget that those are not synchronous operations! You're just accessing a memorized flag in a structure.
4:34:35
pjb
asarch: for example, that you don't write a while(!feof(fp)) loop. You're a lame C programmer.
4:39:12
asarch
When I was learning JavaScript, I asked if there was a shell who could understand JavaScript commands directly
4:40:19
asarch
However, they told me that it was not possible because the common and useful shell constructs like piping and redirection would conflict with JavaScript constructs
4:58:18
pjb
asarch: cd ~/quicklisp/local-projects ; git clone https://gitlab.com/com-informatimago/com-informatimago.git # Then (ql:quickload :com.informatimago.common-lisp.cesarum)
4:59:29
pjb
(com.informatimago.common-lisp.interactive.interactive:lspack :com.informatimago.common-lisp.unix.passwd t)
6:42:02
jackdaniel
but looking at PRs it seems it is not *actively* maintained. but it is not abandoned either
8:59:07
phoe
I have a DEFINE-FOO macro that has a &body as its last argument. I need to tell it that the first string of that &body is a docstring and should be highlighted as such, not as an usual string.
9:10:19
dmiles
lets say my lisp reader is reader a symbol had just read.. "#:A" . Are these the only characters that will stop reading the symbol? #\; #\, #\( #\) #\' #\` #\" #\: ?
9:11:13
schweers
dmiles: if I understand your question correctly, every terminating macro character will terminate (hence the name) reading the symbol (or number)
9:12:48
schweers
they are listed somewhere in the hyperspec, I’m looking for the page right now, give me a sec