freenode/lisp - IRC Chatlog
Search
7:21:12
Lycurgus
pillton that reminds me of when I once asked my mother if they had electricity when she was a child
7:24:45
Lycurgus
in fact before haskell, and erlang (outside switches), when strict FP meant ML, it (strict FP) was considered a useless academic toy
7:29:32
Lycurgus
it also makes it sound like langs with full referential transparency were now the norm which is hardly the case
7:52:06
phoe
jlarocco: compile with debug 3, then the backtrace will have a green-colored frame that shows the form beind compiled
9:47:04
pjb
moon-child: structural editors feel like straight jacket. I like the flexibility of emacs, allowing you to work at the character level as well as structurally thru things like paredit. It's a nice compromise IMO.
9:53:30
beach
But yes, now that we can parse the buffer contents incrementally, using the Common Lisp reader, I don't think there is any need for such restrictions.
10:33:38
pjb
if you have automatic editing to do, why not. But otherwise, consider something like sedit.
10:35:25
pjb
paredit approaches it, while leaving the character basis. We could implement a sedit in emacs, purely structural.
12:51:08
nij
Hello! I found that a script "dictionary" I wrote hasn't been working for a while.. but failed to see why's that the case: https://bpa.st/UILA
12:55:18
beach
You don't exactly give the output that would tell us why. But one hint is that ASDF by default converts warnings to errors that will prevent the compilation from finishing properly. You may want to change that default.
12:57:14
nij
Err. whatelse output should I provide? This is the debugging message after I run (ql:quickload :dictionary)
12:58:30
beach
Try putting this in your .sbclrc: (setf asdf:*compile-file-failure-behaviour* :ignore)
13:50:04
beach
phoe: Are you the one in charge of the streaming for ELS? If so, what is the deadline for uploading the talk?
14:01:36
Josh_2
Was wondering if someone could show me an example in real code where they have used it to get a performance increase
14:02:17
lotuseater
Josh_2: this is something which I still don't get ^^ got to know this after reading the Google Common Lisp style guide
14:04:40
Bike
i mean, honestly, there's not much to it. if you make an object and you know it won't escape you can declare it dynamic-extent to hint to the compiler to stack allocate
14:05:01
pjb
the use of the guard cons cell lets you avoid a special case when you have to insert at the before the first element of the list. However, this cons cell is a temporary cons cell that won't be needed once the function returns.
14:05:12
lotuseater
had the thought it could be useful if you loop many times and create each time new data in a DO clause
14:05:24
pjb
Josh_2: therefore it can be declared dynamic-extend and the implementation could allocate it on the stack instead of the heap.
14:06:26
pjb
It's dangerous to write dynamic-extend declarations, because in maintenance, the status of the object could change! It's better to let the compiler determine it itself, without error.
14:08:23
Nilby
I would only use a dynamic-extent declaration where it was demonstrated to make speed critical code faster.
15:24:40
Bike
hm, dunno. it's a bit of an involved question. for a closure the code will be sort of separate from the closure vector, for example
15:25:42
phoe
beach: I am in charge of streaming; I don't know if we have an established deadline, heisig will know that as the programme chair
15:27:32
Bike
i guess you'd do sb-kernel:fun-code-header, and then look at the... there's a "code-size" and a "text-size". couldn't tell you what they are.
15:31:31
nnni
Bike: I am compiling some data into closures. I want to see the differences b/w (data+runtime functions) and closures implementations.
15:32:27
Bike
well, again, closures aren't stored as one thing. if you have multiple closures of the same function, in basically any implementation they'll all share the same code
15:35:26
Bike
generally speaking closures are represented with a simple vector. there will be an entry for each thing closed over.
15:35:58
Nilby
Perhaps a more portable and comprehensive way is to look at (room) differences under controled conditions, e.g. making sure gc is done.
15:36:22
Bike
i don't think i'm explaining this well, sorry. What I mean is that the code - the executable code I mean - is stored separately from the closure data. That's what I meant by the size of the closure versus the size of the function.
15:39:04
Bike
well it sounds like you're not actually interested in the executable size, since that's a fixed cost, unlike the actual closed over data, which every closure instance will have its own copy of
15:39:42
Bike
i'd say the basic guide here is that you can expect (let ((a x) (b y)) (lambda (n) (if n a b))) and (vector a b) to take up rougly the same amount of space, plus the closure has the fixed space of the code
17:07:30
phoe
During this year's ELS, we will be selling prints and hosting an auction of the original of The Y Combinator Codex, a 42cm x 240cm calligraphy piece.
17:07:37
phoe
All proceeds from the auction and print sales made during the two days of ELS (sans printing and shipping costs) will be split evenly and donated to the following organizations, earmarked as money for promotion and development of the respective Lisp languages and their implementations:
17:07:46
phoe
Free Software Foundation (elisp), Clojurists Together (clojure), Common Lisp Foundation (cl), Software Freedom Conservancy (Racket), and ACM SIGPLAN (earmarked as scholarships for the ICFP Scheme Workshop).
17:07:52
phoe
There's photos: https://www.reddit.com/r/LispMemes/comments/l5f4n9/the_y_combinator_codex_but_its_actually/ and a small-res scan: https://cdn.discordapp.com/attachments/532344856731975690/836296248528732170/y-combinator-codex-micro.jpg