freenode/#lisp - IRC Chatlog
Search
1:11:06
peterppp
so I just installed sbcl and usocket on ubuntu and am trying to load usocket with the line (require :usocket)
1:12:50
aeth
ASDF knows where to find usocket, if it's installed in a place where it looks for ASDF system definition files. And Quicklisp uses ASDF to go beyond that, downloading dependencies for you.
1:13:02
aeth
Generally the only reason not to use Quicklisp for handling your dependencies is if you're packaging something.
1:15:59
aeth
Usually, the way to handle dependencies is to create a your-project.asd file (just look how existing projects set up their ASDF files) at the top level of the directory, and put a link to that directory in ~/quicklisp/local-projects/ so you can treat your project as if it's included in Quicklisp and just (ql:quickload :your-project)
1:16:26
aeth
There's actually a library that can automate this. https://www.xach.com/lisp/quickproject/
1:30:24
aeth
I do just this: cp -t . ../some-old-project/LICENSE.txt ../some-old-project/.gitignore ../some-old-project/some-old-project.asd
1:30:37
aeth
And base everything on some old project of mine, with edits to update the name, copyright year, etc.
3:24:28
jack_rabbit
Results from a little toy I built in CL: https://www.youtube.com/watch?v=T2ODLTn3ifk&list=PLvoUoqQqEHItOnsGSmiVDp2iMFyU9yUmK
3:27:33
jack_rabbit
loke, Not quite. The process in the second half is similar to the reverse of the first.
3:28:46
loke
Xach_: thanks for merging my zs3 fixes. I'm starting to have some concerns that I might have introduced a small bug, and I need your opinion on this:
3:29:55
loke
Xach_: Specifically, it's the fix to REGION-ENDPOINT. It now returns *S3-ENDPOINT* if it's set. The question is if this will be a problem if *S3-ENDPOINT* is set to a bucket-domain (such as foo.s3.amazonaws.com)
3:31:38
loke
Xach_: Yes, but I'm not sure I know how to test all permutations. The ones I've tested works fine.
3:32:17
loke
I guess my problem is that I'm not sure about the exact purpose of *S3-ENDPOINT*. When would you need to set it to a name of the form bucketname.s3.amazonaws.com?
3:33:14
Xach_
Hmm, I don't see that it is documented anywhere, so I don't know if anyone is using it except you.
3:53:43
loke
It's a very convenient way to use alternative S3 providers though. Google also uses the same API
5:14:20
Xach_
i wrote my own sha stuff for quicklisp's pgp verification. have not done hmac. tempted to spin it into its own library.
5:16:36
drmeister
Clasp struggles mightily to compile ironclad because of terrible scaling in llvm and slowness in the Clasp runtime and Cleavir (working on it).
5:17:00
drmeister
I got so desperate I added C++ header libraries for hashing and hmac and exposed those functions.
5:17:38
Xach_
drmeister: not a bad approach in a pinch. better than having a terribly slow runtime for those too.
5:22:39
loke
drmeister: What is it about clasp that makes is particularly slow for Ironclad? I mean, Irconclad is always slow to compile, since, as I understand it, it generates a lot of code through macros.
5:23:55
drmeister
I haven't drilled into it carefully to figure it out and so I have to be careful where I attribute blame. It takes something like 7 hours to compile full ironclad.
5:24:12
beach
loke: My personal guess is that the Cleavir-based compiler does not yet implement most of the planned optimizations, so the entire native code base is just not good enough.
5:24:31
drmeister
Some of the time is in llvm - we know that it has terrible scaling for large functions.
5:26:08
beach
loke: The theory that the Cleavir-based compiler has some bottlenecks because it is using a lot of generic functions might be somewhat true, but I think it would be counterproductive to look for such bottlenecks before the optimizations are implemented.
5:27:36
beach
loke: But yeah, there is also the LLVM possibility. Many compiler optimization techniques require quadratic time in the size of the code, so if code is generated using macros, then that could very well be a big problem.
5:28:37
loke
I thought that ironclad generated massive functions, but I have to admit that I have never actually confirmed the sizes myself. So some of it could be just assumptions.
5:30:19
loke
drmeister&beach: How fast is ironclad running in Clasp after this 7 hour compile? Is the generated code any good?
5:30:55
drmeister
Yeah - that's fine. I haven't benchmarked it - but I haven't noticed any problems.
5:31:05
beach
loke: Like I said, the code generator of the Cleavir-based compiler is not good enought.
5:32:02
beach
loke: So that affects both the execution time of code that is compiled with it, and, of course, the time to execute the compiler itself, because that code is itself compiled with the compiler.
5:32:07
drmeister
I dunno beach - this looks like some n^m power scaling with the size of the function.
5:33:56
drmeister
I've been using it a lot interactively - the performance is good enough for what I've been doing.
5:44:37
drmeister
Is it typical for compilers to decide NOT to inline code if the resulting function becomes too large?
5:45:59
beach
Usually, inlining is done against some kind of "budget", and size is one consideration. In fact, the cost function typically reflects the cost of further optimizations, so it might take the size squared.
8:05:25
jasom
drmeister: one amazing optimization if you have whole-program information is to inline all functions that are called exactly once. It makes the code smaller and run faster.
8:07:43
jasom
drmeister: llvm normalizes code to SSA form. This can have a quadratic effect on code size.
8:08:30
jasom
code size for the intermediate representation that is; it gets reduced to something sane after optimizations, but the optimizations themselves run on the quadratically larger IR stream.
8:43:00
ym
I got "Invalid SB-MOP:SLOT-DEFINITION initialization: the initialization argument :NAME was constant: :OK." condition.
8:57:01
beach
Slot names are implementation details that should be private to the module in question. By making them keyword symbols, they are automatically exported to the entire world, so that you have no protection against (setf (slot-value obj :OK) ...)
8:59:28
beach
The :name argument is a slot name. An error is signaled if this argument is not a symbol which can be used as a variable name.