freenode/#lisp - IRC Chatlog
Search
12:04:42
thijso
So, something like (ql:quickload :bla-system) then (asdf:system-source-directory :bla-system)
12:11:48
Shinmera
you can retrieve the source directory even if it's not loaded, as long as the ASD can be found.
13:35:32
Shinmera
I prefer to calculate the path myself via compile-file-pathname/load-pathname to avoid the ASDF dependency inside the project.
14:49:27
luis
Shinmera: I just did (ql:quickload :qtools-opengl) then (qtools-opengl:main) on Windows and it... worked. Nice job. :)
14:59:03
jackdaniel
build once profit for a lifetime! (https://blog.0patch.com/2017/11/did-microsoft-just-manually-patch-their.html :)
15:09:38
p_l
equation editor being 17 years old binary at the time of writing that article wasn't as crazy ;)
18:20:29
asarch
My question was: how did Lisp do the low-level coding for its Lisp machines? With opcodes or directly with S-Expressions?
20:17:11
ricman
hello, Im a newbie with both irc and lisp, I was wondering. Is there a way in common lisp to get help about the standard library? something like (help "list")
20:21:14
ricman
Josh_2: I guess, I meant something integrated in the REPL itself but i guess that'll do
20:23:35
ricman
thanks, god that HyperSpec page is hideous. C-c C-d C-h is a repl command or some emacs shortcut?
20:25:23
_death
ricman: set your browser to eww or w3m-emacs instead of using browsers that have hideous defaults
21:45:36
fiddlerwoaroof
There's also this: https://phoe.tymoon.eu/clus/doku.php?id=cl:functions:digit-char
22:38:11
LdBeth
seok: basically a package is a data structure maps string to interned symbol objects
22:39:46
LdBeth
in such a sense shadowing is just get the same string to another different symbol so the old one cannot be accessed with the package
22:40:36
housel
http://www.gigamonkeys.com/book/programming-in-the-large-packages-and-symbols.html might be helpful
23:00:10
fiddlerwoaroof
You can use symbol-macros, I guess, but it'd be nice to be able to resolve conflicts between imports by renaming one of them inside a package
23:04:42
no-defun-allowed
Then symbol names would change between packages, which would be a bit odd.
23:05:12
no-defun-allowed
(Well, that's the point, but if you look at symbols as interned strings, then you have to wonder what string you're interning.)
23:07:27
aeth
no-defun-allowed: Depends on how you see it. The way I'd do "renaming" is to simply introduce a new concept or something, so the symbol foo:bar "refers to" baz:quux in some sense. I guess care would have to be taken because it would probably just inherit references so macros expecting the symbol baz:quux must get the symbol baz:quux instead of the "renamed" bar (i.e. foo:bar)
23:08:24
aeth
no-defun-allowed: but essentially, the object being referred to by baz:quux would now also be referred to by foo:bar, for all types of objects (functions, variables, etc.)
23:08:29
White_Flame
readtables support SET-SYNTAX-FROM-CHAR which lets you map 1 character's functionality in an "imported" readtable to a different character in your readtable, so there's some precedent for that sort of functionality
23:09:34
White_Flame
likely, the name of my-package::foo (imported from other-package:bar) would be "BAR"
23:09:55
no-defun-allowed
LdBeth: It could, but currently a symbol name is just held in the slot %name, which probably doesn't have multiple values.
23:10:14
White_Flame
the printer would probably be able to show the local name, if you're in my-package
23:10:25
aeth
White_Flame: Imo, it should have the new symbol name, and you just have to be aware that it won't work with some macros. If it's a foo it's "foo". What's inherited is the references to e.g. the functions or macros, so it's a zero-cost alias (instead of e.g. making a trivial function that just calls the old function)
23:10:34
no-defun-allowed
And I have to wonder how the printer would handle it too. Would it favour the renamed -- hey, don't read my mind please.
23:10:45
LdBeth
no-defun-allowed: cl lexicon solve this problem by implement another layer of modules system
23:11:20
White_Flame
aeth: then you're not actually importing the symbol itself, but making a new one, whose value in any namespace needs to map to the other symbol
23:11:28
fiddlerwoaroof
I wouldn't want to rename the referenced symbol, just have the reader map a certain name in the current package to the imported symbol
23:12:14
aeth
White_Flame: Right. So if new-package::foo refers to old-package:bar, then it's still the symbol new-package::foo with the symbol-name "FOO" instead of "BAR" it's just that it inherits any object referred to by old-package:bar. Ideally, keeping things in sync so a redefinition of #'old-package:bar updates #'new-package::foo
23:12:47
fiddlerwoaroof
I wouldn't want that because I don't want the new package to be "in control"
23:13:39
fiddlerwoaroof
this handles the case where I want to have both cl:+ and matrix-math:+ in my current package without package prefixes
23:15:21
aeth
I don't see what you mean. With my proposal, you'd just alias matrix-math:+ to m+ or whatever, and (m+ m1 m2) will work as expected. If symbol-name of e.g. m= is "=" instead of "M=" for matrix-math:= then you could do this: (loop with x m= 1 ...) and that's absurd
23:17:01
fiddlerwoaroof
I don't want aliasing to mess with the symbol-name because that makes the symbol-name of a symbol depend on the current set of loaded packages
23:17:48
fiddlerwoaroof
As far as your case goes, we'd either have to respecify the behavior of loop or say "don't do stupid things"
23:18:49
fiddlerwoaroof
The way loop handles its keywords is already a bit weird, I'd be fine with either requireing (loop with x := 1) or requiring that the keywords be in the cl package
23:20:49
no-defun-allowed
So, I'm using split-sequence to split a string with 100,000 lines, and Clozure is about 4x slower at splitting and I believe that's the slowest part of my program now. Is there anything I can do to split faster?
23:23:06
aeth
If e.g. split-sequence does bounds checking, then making a function with a type declaration with your exact string type (including the length) could speed things up. Or doing a length check and then turning safety off locally around the iteration (assuming that you can do that in your implementation)
23:23:39
aeth
Oh, also inlining the string-splitting function (even if it's large) would have a similar effect of removing the bounds check if done right
23:24:27
aeth
You could also just not split strings, working with :start and :end, which nearly every string/sequence function takes in, if your specific problem permits that.
23:26:16
aeth
If you're reading the string from a file or the network, you could try working in it as bytes instead of as characters, too.