jackdaniel changed the topic of #lisp to: Common Lisp, the #1=(programmable . #1#) programming language<http://cliki.net/> logs:<https://irclog.whitequark.org/lisp,http://ccl.clozure.com/irc-logs/lisp/> | SBCL 1.4.5, CMUCL 21b, ECL 16.1.3, CCL 1.11.5, ABCL 1.5.0
<fiddlerwoaroof> How does CCL catch objective-c errors?
<fiddlerwoaroof> The biggest pain-point of my objective-c FFI is that everything crashes when I accidentally send the wrong selector to an objective-c object
didi has quit [Ping timeout: 252 seconds]
fikka has quit [Ping timeout: 246 seconds]
makomo has quit [Ping timeout: 252 seconds]
dkmueller has quit [Quit: Lost terminal]
shifty has joined #lisp
makomo has joined #lisp
elderK has joined #lisp
<elderK> Hey all
<elderK> makomo: I was dream-working on the backquote stuff. :) I have been walking through this, testing it in the REPL at different points: https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node367.html
<makomo> hey \o
<elderK> o/ :)
<makomo> elderK: that's the cltl2 reference i was talking about :-)
<makomo> very nice!
<elderK> I'm thinking of writing my own version of this today.
<makomo> although, this is just the appendix. the actual section of the book goes into more detail
fikka has joined #lisp
<elderK> I've got CLHS open beside it, the actual "rules"
<elderK> I've basically been trying to figure out which parts of his code, applies which rules.
<makomo> mhm
<elderK> I've also been feeding his code some stuff, but also "doing the backquote thing" by hand, following the rules. Then comparing his output against my own.
<elderK> I actually found a minor bug in his "expander"?
<makomo> oh? what is it?
<elderK> In bt-process, where he handles *comma*
<elderK> Before he enters the do.
<elderK> He basically allows this: (unquote a b c ....)
<elderK> I have tested his code and it always acts like that is (unquote a)
<elderK> He has a more precise check later.
<makomo> "later" being?
<makomo> are you referring to the fact that he just takes the CADR of the thing (ignoring any other values)?
<elderK> Yeah
<elderK> In the do-loop, he verifies that the form is (unquote something) rather than (unquote something something something)
<elderK> Of course, that's because it's implementing this `(a b ,form)
<elderK> er, `(a b . ,form)
fikka has quit [Ping timeout: 252 seconds]
<elderK> AFAIU, "unquote" only takes a single parameter.
<elderK> Off topic, my eyes are really starting to frustrate me. Most of the time, I don't really... the deficit so much. But right now, I am. I have a vertical split - one side, code. The other side, REPL.
<elderK> So I can read the code and see the REPL side by side.
<elderK> Problem is, I'm blind in my left eye.
<elderK> And my monitor is wide enough that I can't really see each split at the same time. So, when I look at the REPL, I can't see the code.
<elderK> And my right eye, the one that works, is shit enough that when I see the code, the REPL is blurry.
* elderK shrugs
<elderK> Still :) I think I have got the rules memorized almost.
<elderK> I do wonder what frob means in the context of his code :D
<makomo> elderK: hah yeah, it really does ignore the CDDR in the above case, while checking it in the case below, interesting
anamorphic has joined #lisp
jello_pudding has joined #lisp
<makomo> probably an omission or something
Kaisyu has joined #lisp
<makomo> however, you would only ever hit the error if you intentionally went and malformed the input to backquote. using the reader macros $, %, %@, etc. you're sure that the invariants will hold and no error will occur
<makomo> to the backquote macro*
<makomo> elderK: sorry to hear that, but the struggle will play off :-)
fikka has joined #lisp
<makomo> tbh i never actually took a close look at his implementation of backquote, but i've been meaning to do it for some time
<makomo> i had a general feel of how it works, but that was that
<makomo> s/of/for/
<makomo> i only looked at the formal rules in detail
<makomo> (which are embodied in his code as well after all, but yeah...)
<makomo> a thing that would be fun to make is a backquote expander but for humands -- it would produce a step-by-step expansion of the backquote, telling you which rule it applied at every step :-)
<makomo> humans*
<makomo> basically automate what we're doing by hand
<elderK> makomo: Yeah, that's what I'm thinking. Like, I want to make something, to continue "applying / practicing" CL. But I also want to nail these rules. So, maybe writing an "expander" isn't a bad exercise. :)
fikka has quit [Ping timeout: 244 seconds]
<makomo> elderK: i can see you've become addicted to backquote as well! ;-)
<elderK> I mean, it would just end up being my own spin of what he made. I'd write it from scratch, doing it based on the rules. But in the end, it'll just be what he's done. Still, I think there's something to be said for doing it yourself, your way, to really... nail something.
<makomo> elderK: yet another interesting thing is the "Meta Unquote Protocol (MUP)" which fare talks about in his fare-quasiquote. take a look if you're interested
<elderK> Heh :) I guess. It's just, I really want to understand it, so that I can apply it.
<makomo> it's just an idea though, hasn't been implemented yet
<elderK> I want to get to the point where I can at least /read/ and understand nested backquotery. Like, once-only.
<elderK> :D So I hope that implementing the thing will help me reach taht point.
<makomo> you can reach that point without implementing your own expander imo
<elderK> Aye. But I also want to learn about tree walking and stuff, too. So, this seems like a two-for-one kinda deal :D
<makomo> the problem with that particular implementation of once-only is that it's hard to follow the different tiers of evaluation, even when you know what the backquote conceptually does
<makomo> especially since the macro has to be doubly-hygienic
<elderK> Aye :) I'd like to verify my... "conceptual solution" to the once only problem. Just to make sure I'm on the right path. I couldn't implement it, because I couldn't figure out the BQ nesting. But, I'm pretty sure I know exactly what needs to be done.
<makomo> mhm
<makomo> in practice, you'll only ever see double backquotes. anything above that is overkill or is for pedagogical purposes only :-)
<makomo> i have yet to see a triply+ nested backquote template
<makomo> (in the wild)
<elderK> In a nutshell, we need to create some "names for the evaluated things." This is the first level. So, we "bind" the result of evaluating whatever forms we were passed. The next step, is creating names for those bindings. You can't just say (,symbol ,gensymed) because the "symbol" may not be a symbol - it may be a value or an expression - so you have to gensym to create placeholder names, so that you can have (gensymed-name-for-symbol
<elderK> gensymed-storage-for-the-value). Then finally, you need to make it so that "symbol" means "gensymed-name-for-symbol" wherever ,symbol appears in the body of the thing we're wrapping. If that makes sense :P
<elderK> I.e. Cache the results of evaluating the thing. Then create a binding of NAME -> CACHED. Then have some way of having ORIGINAL_NAME -> NAME
<elderK> At least, that's my guess so far :)
nirved has quit [Ping timeout: 260 seconds]
<elderK> makomo: BTW, the paste you sent me yesterday - it was extremely useful.
<makomo> elderK: not quite. the first tier of gensyms is so that ONCE-ONLY is hygienic, i.e. so that the macro using ONCE-ONLY doesn't end up unintentionally capturing some symbols. the stuff that's bound (within the user macro) to these tier-1-gensyms are tier-2-gensyms (generated within the user macro, every time the macro is called)
<makomo> the tier-2-gensyms are the ones used in the expansion of the user macro. finally, the provided variables are rebound to the value of the tier-1-gensym (i.e. the tier-2-gensym used for that particular variable) within the user macro (so that when you use it somewhere, you're actually using the tier-2-gensym instead of the original expression)
<makomo> once the user macro is defined, the tier-1-gensyms are set in stone and done -- they're generated once (assuming compilation), when your macro is defined and when ONCE-ONLY is expanded
<makomo> the tier-2-gensyms however are generated upon every expansion of the user macro
<makomo> this is so that nested usage of the user macro doesn't accidentally end up doing variable capture/shadowing
<makomo> elderK: glad i could help!
<makomo> (defmacro hi (x)
<makomo> (alexandria:once-only (x)
<makomo> `(* ,x ,x)))
<makomo> (defmacro hi (x)
<makomo> (LET ((#:ONCE-ONLY848 (GENSYM "X")))
<makomo> `(LET (,`(,#:ONCE-ONLY848 ,X))
<makomo> ,(LET ((X #:ONCE-ONLY848))
<makomo> `(* ,X ,X)))))
<makomo> (hi (format t "hi!"))
<makomo> (LET ((#:X852 (FORMAT T "hi!")))
<makomo> (* #:X852 #:X852))
<makomo> #:ONCE-ONLY848 is a tier-1-gensym, and you can see how it's "set in stone" ("hardcoded") within the definition of HI
<elderK> One thing I'd like to have, and I had trouble with, was gettin ga feel for what stuff was going on.
<elderK> Like, I was macroexpanding a lot.
<elderK> But, that didn't really give me a complete feel for what the macro was doing - just the "expansion"
<makomo> the user macro HI generates the tier-2-gensym #:X852 and makes that the new value of the user macro argument X, so that you can transparently refer to it
<makomo> you can see that the tier-1-gensyms never appear in the expansion, only the tier-2-gensyms do
<makomo> the expansion of ONCE-ONLY might be a bit hard to read... until you learn the backquotes rules! :-)
<elderK> makomo: When you were figuring out once-only, did you do it all yourself, or did you like, study other implementations and figure it out that way?
<makomo> note that in this case, there are no nested backquotes within the expansion (it might look like it though)
<makomo> elderK: it was mentioned in ONCE-ONLY which gave me a vague idea, and from that point i studied it myself
<makomo> in PCL*, lol
<makomo> well, not really "vague", it was a good explanation iirc
<makomo> the thing that's mysterious is the 2nd argument that can appear for every symbol in ONCE-ONLY
<makomo> i.e. (once-only ((a a) (b b) ...) ...)
<elderK> I found PCLs explanation of once-only's intent clear. But it's explanation of backquote, etc, nonexistent.
<elderK> Well, nested.
<makomo> yeah :/
<elderK> Yeah :) I think I'll write a little "backquote expander." I'm not sure if that's the right name for it.
<elderK> :D I'll make it display the rules that are being applied and stuff too.
<elderK> Who knows, maybe it will help someone else learn.
terpri has joined #lisp
<elderK> And it seems like it would be fun to do
<makomo> basically, ONCE-ONLY abstracts this pattern:
<makomo> (defmacro hi (a b c)
<makomo> (let ((a-sym (gensym "A"))
<makomo> (b-sym (gensym "B"))
<makomo> (c-sym (gensym "C")))
<makomo> `(let ((,a-sym ,a)
phadthai has quit [Ping timeout: 272 seconds]
<makomo> (,b-sym ,b)
<makomo> (,c-sym ,c))
<makomo> ,(let ((a a-sym)
<makomo> (b b-sym)
<makomo> (c c-sym))
<makomo> `(something ,a ,b ,c)))))
<makomo> except that ONCE-ONLY can't know that "a-sym", etc. are safe names to use, so it has to use gensyms (tier-1-gensyms)
<elderK> The unquote of ,(let seems weird.
<elderK> But I get it, it's just not splicing it
<makomo> yeah, it does a bit, that was another part that confused me when i started :-)
<elderK> I'm used to seeing ,name
<elderK> but not ,(.....)
<makomo> but once you understand the rules, you can see how the upper backquote and the lower backquote are "at the same level" and are conceptually "merged"
fitzsim has quit [Ping timeout: 245 seconds]
<makomo> elderK: think of it as ,<form>, where <form> can be *any* form
phadthai has joined #lisp
<elderK> Yup, and it's evaluated and placed into the output, right?
<makomo> (provided that <form> doesn't start with @, in which case you have comma-at instead of comma (this is the caveat mentioned in the CLHS btw!))
<elderK> Where as ,@form, form is evaluated (to a list) and spliced.
<makomo> elderK: yep
<elderK> So, if for instance, you had a weird symbol, @foobar
<elderK> ,@foobar would obviously give issues. So, ,@@foobar, ah, yes, I see.
<makomo> exactly! :-)
<makomo> it took me a while to understand what that freaking caveat was all about
<elderK> The ,@ just says "Yeah, patch it into the output, directly." Which is what ,<form> would do in this case.
<makomo> then i remembered we can name our symbols all sorts of crazy stuff in lisp
<makomo> so it's just a safeguard in the explanation
<elderK> Where as ,@,@something would say "patch ,@something into the output", then ,@something would be expanded at the next .... level?
<makomo> ,@,@something would (after 1 evaluation) produce ,@<value-of-something-1> ... ,@<value-of-something-n>
<elderK> Interesting.
<makomo> these elements of the list given by something now have to be forms that will be evaluated as part of the 2nd evaluation!
<elderK> So the right-most ,@ is expanded first?
<makomo> yep, always the same rules
<makomo> evaluated* :-)
<elderK> THis is where I get a bit confused with terminology. The left-most , applies to the innermost backquote.
<elderK> The wording of that rule still screws me up a bit
<makomo> i won't spoil the fun of figuring out what the 2nd argument in a ONCE-ONLY spec does :-)
<makomo> usually you do (once-only (a b c) ...), but that's just a shorthand for (once-only ((a a) (b b) (c c)) ...)
<elderK> If I write ,@,@something as (unquote-splice (unquote-splice something)), it's clear that the right-most ,@ is evaluated first
<elderK> It's just... the CLHS wording :(
<makomo> yeah, it's important to be consistent. whenever you use (outer/inner)most, you're referring to the backquote/comma pair
<makomo> so the outermost backquote is the leftmost one, but the outermost comma is the rightmost one
<elderK> That's what gets me, you see. If I had ``,@,@s I'd expect the left-most ,@ to be done first, because "innermost BQ is expanded first."
<elderK> I'm going to treat "expanded' as meaning "Rewriting into longhand"
<makomo> that's because "expanded" != "evaluated", as we discussed
<elderK> So, ``,@,@s "expands innermost first" into `(backquote (unquote-splice (unquote-splice s))
<makomo> yeah, that's exactly what expansion does -- reads it in into an actual form ("longhand")
<elderK> Ah, good.
<elderK> Okay, so expansion -> longform. Evaluation -> actually processing that longform
<makomo> precisely
<elderK> That clears up a lot.
<makomo> yeah... :-)
<elderK> So then, a macro, it "expands." And that makes sense, because it's generating a "longer form", which is later eavluated.
<elderK> :) Man, if I could buy you a coffee as thanks, I would :)
<makomo> indeed, although the two expansions happen at different levels. the backquote expansion happens at read-time, while macroexpansion happens at compile-time (macroexpansion-time)
<makomo> at compile-time or run-time (depending on the implementation)*
<makomo> elderK: i'm glad to be spreading the backquote knowledge!
<elderK> Ah, I see. For some reason, I thought macro-expansion happened at... I guess, read time. I didn't realize read was split from compile
<elderK> But it is obvious :D
NoNumber has joined #lisp
<makomo> yup. many other languages don't have the concept of a "reader" -- their compilers operate directly on the textual input (internally it is "read" into an AST, but the user doesn't see this difference)
<makomo> in lisp, we do
FreeBirdLjj has joined #lisp
<makomo> both compile and eval operate on lists, i.e. literal in-memory data structures
<NoNumber> Is there a way to see all the objects a symbol points to? For example, I have "x" as a global variable but I also have it inside a closure which has x as a different value, AND I have x as a function. This may be useless but I'm curious. Sorry if this is a dumb question
<makomo> that's the whole "code is data" thing
<makomo> by the time EVAL/COMPILE are called, you're literally giving them lists (as the reader already read the text into actual in-memory objects)
<elderK> NoNumber: They are all different bindings.
Guest24308 has joined #lisp
<elderK> makomo: If ,@ is unquote-splice, I wonder what name ,. would have.
<makomo> elderK: ,@ is usually called comma-at from what i've seen
<elderK> unquote-splice-destructive :P
<elderK> Interesting :)
<makomo> quasiquote/unquote are the scheme counterparts :D
<elderK> I come from Scheme, so I guess I'm used to their terms.
<makomo> we use backquote/comma, but it's really arbitrary
<makomo> NoNumber: if you're using SLIME, you can use slime-describe-symbol to see the various bindings (in the global environment) that have that symbol as their name
<makomo> for example, after (defvar hi) and (defmacro hi ...), slime-describe-symbol gives me "HI names a special variable: ... HI names a macro: ..."
<elderK> makomo: Does Scheme even have ,.?
<makomo> hm, i have no idea
<makomo> but i've never ever seen someone using ,. anyway hah
<elderK> I've never ever seen ,. used :D
<makomo> yeah :D
FreeBirdLjj has quit [Remote host closed the connection]
<makomo> wow, it's already 2:45 AM
<makomo> it's time to get going
<NoNumber> makomo: Thanks, this might be useful in aiding my understanding of closures and bindings, and whatnot
smokeink has joined #lisp
<equwal> elderk: About your screen. If you are on emacs there is a package for rotating the windows with a hotkey, which you can use to make them vertical instead (assuming you are viewing the ctl1 from within emacs with w3m or something, which is how I would do it).
esper0s has joined #lisp
<makomo> night
afterK has joined #lisp
<equwal> it is named "rotate"
<equwal> s/vertical/horizontal
igemnace has joined #lisp
igemnace has quit [Client Quit]
igemnace has joined #lisp
elfmacs has joined #lisp
pierpal has quit [Quit: Poof]
pierpal has joined #lisp
dale has joined #lisp
matzy_ has quit [Read error: Connection reset by peer]
matzy_ has joined #lisp
xkapastel has quit [Quit: Connection closed for inactivity]
fitzsim has joined #lisp
matzy_ has quit [Read error: Connection reset by peer]
matzy_ has joined #lisp
dddddd has quit [Remote host closed the connection]
perplexity has joined #lisp
perplexity has left #lisp [#lisp]
buffergn0me has joined #lisp
robotoad has quit [Quit: robotoad]
esrse has joined #lisp
robotoad has joined #lisp
makomo has quit [Ping timeout: 240 seconds]
bitmapper has quit [Ping timeout: 252 seconds]
jello_pudding has quit [Quit: Leaving]
rumbler31 has quit [Remote host closed the connection]
themsay has quit [Read error: Connection reset by peer]
themsay has joined #lisp
anamorphic has quit [Ping timeout: 245 seconds]
fikka has joined #lisp
smokeink has quit [Remote host closed the connection]
smokeink has joined #lisp
fikka has quit [Ping timeout: 245 seconds]
NoNumber has left #lisp ["Gone."]
anamorphic has joined #lisp
equwal has quit [Remote host closed the connection]
elderK has quit [Quit: Connection closed for inactivity]
elfmacs has quit [Ping timeout: 240 seconds]
equwal has joined #lisp
equwal has quit [Remote host closed the connection]
smokeink has quit [Remote host closed the connection]
smokeink has joined #lisp
<beach> Good morning everyone!
<holycow> hallo
<afterK> Moin beach
arescorpio has joined #lisp
matzy_ has quit [Remote host closed the connection]
<LdBeth> evening
Kundry_Wag has joined #lisp
arescorpio has quit [Quit: Leaving.]
Kundry_Wag has quit [Ping timeout: 246 seconds]
equwal has joined #lisp
dale has quit [Quit: dale]
<equwal> Good morning vietnaaam
anewuser has quit [Ping timeout: 276 seconds]
pyx has joined #lisp
anewuser has joined #lisp
pyx has quit [Client Quit]
<afterK> equwal: :P
<afterK> I actually heard that in Robin William's voice.
<afterK> :P
Roy_Fokker has quit [Read error: Connection reset by peer]
<equwal> Great movie.
potatonomicon has joined #lisp
holycow has quit [Quit: Lost terminal]
k-hos has quit [Ping timeout: 272 seconds]
Kundry_Wag has joined #lisp
maximjaffe has quit [Ping timeout: 272 seconds]
Kundry_Wag has quit [Ping timeout: 244 seconds]
gabot has quit [Ping timeout: 240 seconds]
gabot has joined #lisp
ku has joined #lisp
<afterK> YEAH! I PASSED MATH!
* afterK dances
afterK is now known as elderK
anamorphic has quit [Ping timeout: 244 seconds]
<esper0s> good job mate :)
potatonomicon has quit [Ping timeout: 245 seconds]
rumbler31 has joined #lisp
<elderK> Thanks :D
<elderK> I got a B+ :D
<elderK> Abstract Algebra. I got a lot out of it. More philosophical than I thought it would be.
<elderK> Lots of stuff about vector spaces and such
<elderK> And the spectral theorem.
rumbler31 has quit [Ping timeout: 268 seconds]
<esper0s> tired just by reading about it hahah
<equwal> I am in Calc II for the second time and going to get a C.
<elderK> equwal: Well, keep at it. You'll get it man :D
<elderK> :) Right. Back to studying expansion rules and things :D
<equwal> night
<elderK> Goodnight equwal?
<equwal> Goddnight elderK?
<equwal> What did you think about the Bawden article?
<elderK> I am yet to read it :
<elderK> Maybe I'll do that now. :)
<equwal> Guy was a backquote wizard.
shifty has quit [Ping timeout: 244 seconds]
lagagain has joined #lisp
Guest24308 has quit [Ping timeout: 252 seconds]
vlatkoB has joined #lisp
fikka has joined #lisp
shrdlu68 has joined #lisp
fikka has quit [Ping timeout: 268 seconds]
DGASAU has joined #lisp
graftin has joined #lisp
Inline has quit [Quit: Leaving]
<graftin> Is it better to get packages from Quicklisp or Guix? If I get a package from Guix, I can include it in my config.scm, but IDK how often they're updated compared to Quicklisp.
jello_pudding has joined #lisp
jello_pudding has quit [Client Quit]
jello_pudding has joined #lisp
robotoad has quit [Quit: robotoad]
DGASAU has quit [Read error: Connection reset by peer]
varjag has joined #lisp
elfmacs has joined #lisp
DGASAU has joined #lisp
robotoad has joined #lisp
<aeth> I would use Quicklisp for packages.
<aeth> Xach runs tests and it's guaranteed to build, afaik.
varjag has quit [Ping timeout: 268 seconds]
buffergn0me has quit [Remote host closed the connection]
kajo has quit [Ping timeout: 252 seconds]
JohnMS_WORK has joined #lisp
dddddd has joined #lisp
potatonomicon has joined #lisp
ku has quit [Ping timeout: 272 seconds]
ryan_vw has quit [Ping timeout: 240 seconds]
<LdBeth> Where I could find something like binary date diff algrithom/impl?
<LdBeth> ^data
<flip214> LdBeth: "xdelta"
razzy has quit [Ping timeout: 252 seconds]
<flip214> LdBeth: https://en.wikipedia.org/wiki/Xdelta has a few links
<LdBeth> flip214: thanks
scymtym has quit [Ping timeout: 252 seconds]
smokeink has quit [Ping timeout: 240 seconds]
space_otter has quit [Remote host closed the connection]
robdog_ has joined #lisp
DGASAU has quit [Ping timeout: 260 seconds]
fikka has joined #lisp
robotoad has quit [Quit: robotoad]
esper0s has quit [Remote host closed the connection]
nirved has joined #lisp
dacoda has joined #lisp
Zaab1t has joined #lisp
dacoda has quit [Client Quit]
dacoda has joined #lisp
phadthai has quit [Ping timeout: 268 seconds]
scymtym has joined #lisp
Lycurgus has joined #lisp
Zaab1t has quit [Ping timeout: 246 seconds]
astalla has joined #lisp
DGASAU has joined #lisp
shka_ has joined #lisp
<shka_> good morning
<beach> Hello shka_.
astalla has quit [Ping timeout: 252 seconds]
makomo has joined #lisp
makomo_ has joined #lisp
makomo has quit [Read error: Connection reset by peer]
makomo_ is now known as makomo
<makomo> morning
<beach> Hello makomo.
<makomo> hi
DGASAU has quit [Ping timeout: 276 seconds]
DGASAU has joined #lisp
xkapastel has joined #lisp
phadthai has joined #lisp
<robdog_> happy morning
shifty has joined #lisp
Guest54457 has quit [Read error: Connection reset by peer]
jochens has joined #lisp
Zaab1t has joined #lisp
figurelisp has joined #lisp
graftin has left #lisp ["ERC (IRC client for Emacs 25.1.1)"]
themsay has quit [Ping timeout: 240 seconds]
dacoda has quit [Ping timeout: 250 seconds]
Zaab1t has quit [Ping timeout: 264 seconds]
<robdog_> how do you type C-M-q in Hemlock/Emacs?
<robdog_> Hold Control-ESC , release then q?
<robdog_> opps..sorry, thought i was in #clschool
themsay has joined #lisp
smokeink has joined #lisp
<LdBeth> robdog_: press ESC first, release, then chord Control Q
<LdBeth> At least it should work on Emacs
jello_pudding has quit [Quit: Leaving]
themsay has quit [Read error: Connection reset by peer]
themsay has joined #lisp
Zaab1t has joined #lisp
yvy has joined #lisp
themsay has quit [Ping timeout: 246 seconds]
Zaab1t has quit [Ping timeout: 252 seconds]
themsay has joined #lisp
themsay has quit [Ping timeout: 244 seconds]
Zaab1t has joined #lisp
<mfiano> Hello
<svillemot> I get an internal server error when trying to submit an issue on gitlab.common-lisp.net ; is there a maintenance going on?
Guest24308 has joined #lisp
<mfiano> Is there any workaround to be able to use DESTRUCTURING-BIND to destructure the car/cdr of a possibly NIL value? (destructuring-bind (foo . bar) value) fails on nil
kajo has joined #lisp
varjag has joined #lisp
<shka_> mfiano: not really
<trittweiler> mfiano: nope, use (let ((a (car value))) (b (cdr value)) ...) instead
<shka_> check if nil before you are trying to do anything more
<mfiano> Fair enough, thanks
<beach> mfiano: Something like (destructuring-bind (&optional foo &rest bar) ...)?
<mfiano> Ah yes, thanks
DGASAU has quit [Ping timeout: 264 seconds]
<mfiano> It's been a while since I used CL. I almost forgot destructuring lambda lists were almost identical to macro lambda lists. Thanks!
<beach> Anytime.
DGASAU has joined #lisp
<jackdaniel> svillemot: ask on #common-lisp.net
anewuser has quit [Ping timeout: 240 seconds]
<svillemot> jackdaniel: ok, thanks
schweers has joined #lisp
themsay has joined #lisp
<jackdaniel> logs on clozure not found
elfmacs has quit [Ping timeout: 252 seconds]
<jackdaniel> nvm, I've copied link verbatim and that are two link
<jackdaniel> links
Lycurgus has quit [Quit: Exeunt]
jackdaniel changed the topic of #lisp to: Common Lisp, the #1=(programmable . #1#) programming language | <http://cliki.net/> <https://irclog.whitequark.org/lisp> <http://ccl.clozure.com/irc-logs/lisp/> | SBCL 1.4.5, CMUCL 21b, ECL 16.1.3, CCL 1.11.5, ABCL 1.5.0
hajovonta has joined #lisp
<hajovonta> hi all
<jackdaniel> hi
makomo has quit [Ping timeout: 252 seconds]
Mr-Potter has joined #lisp
makomo has joined #lisp
heisig has joined #lisp
kajo has quit [Ping timeout: 264 seconds]
jochens has quit [Read error: Connection reset by peer]
jochens has joined #lisp
beach has quit [Quit: ERC (IRC client for Emacs 25.2.2)]
kajo has joined #lisp
Zaab1t has quit [Ping timeout: 264 seconds]
mingus has joined #lisp
hajovonta has quit [Ping timeout: 252 seconds]
makomo has quit [Ping timeout: 252 seconds]
pierpal has quit [Quit: Poof]
pierpal has joined #lisp
DGASAU has quit [Ping timeout: 276 seconds]
kajo has quit [Ping timeout: 268 seconds]
esrse has quit [Ping timeout: 272 seconds]
wilfredh has joined #lisp
makomo has joined #lisp
orivej has quit [Ping timeout: 268 seconds]
razzy has joined #lisp
Zaab1t has joined #lisp
themsay has quit [Ping timeout: 240 seconds]
themsay has joined #lisp
figurelisp has quit [Ping timeout: 240 seconds]
megalography has joined #lisp
Mr-Potter has quit [Remote host closed the connection]
megalography has left #lisp [#lisp]
Mr-Potter has joined #lisp
yvy has quit [Read error: Connection reset by peer]
Guest24308 has quit [Remote host closed the connection]
nowhere_man has joined #lisp
froggey has quit [Ping timeout: 260 seconds]
elderK has quit [Quit: WeeChat 1.9]
Zaab1t has quit [Ping timeout: 268 seconds]
froggey has joined #lisp
hajovonta has joined #lisp
<hajovonta> re
rixard has joined #lisp
Kaisyu7 has quit [Ping timeout: 272 seconds]
hajovonta has quit [Ping timeout: 244 seconds]
hajovonta has joined #lisp
<hajovonta> re
figurelisp has joined #lisp
figurelisp has quit [Quit: Lost terminal]
ggole has joined #lisp
orivej has joined #lisp
m00natic has joined #lisp
elfmacs has joined #lisp
Kaisyu7 has joined #lisp
fikka has quit [Ping timeout: 246 seconds]
thinkpad has quit [Quit: lawl]
rumbler31 has joined #lisp
dmiles has quit [Ping timeout: 268 seconds]
thinkpad has joined #lisp
<ogamita> hajovonta: it's useless to "re", since irc already tells us: *** hajovonta (~hajovonta@business-89-135-192-225.business.broadband.hu) has joined channel #lisp
StephanLahl has joined #lisp
Zaab1t has joined #lisp
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
<hajovonta> oh ok
<hajovonta> didn't know that :D
<hajovonta> back in the old days, in the previous millennia, we used to say "re" when reconnected
<hajovonta> just so others know we are available again
<flip214> hajovonta: I know "re" from some card games. "Kontra!" "Re!" "Sub-Re!" etc.
rumbler31 has quit [Remote host closed the connection]
frgo has quit [Ping timeout: 245 seconds]
<shka_> back in the previous millenia RE standed for REmatch for me ;-)
robdog has quit [Ping timeout: 252 seconds]
fikka has joined #lisp
robdog_ has quit [Remote host closed the connection]
dmiles has joined #lisp
khisanth_ has quit [Ping timeout: 240 seconds]
frgo has joined #lisp
Essadon has joined #lisp
Bike has quit [Ping timeout: 272 seconds]
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
Bike has joined #lisp
<jcowan> IRC tells us, but what it tells us can't usually be trusted, what with bouncers and automatically-reconnecting clients. "re" says you're there in person.
<hajovonta> yeah, something like that.
khisanth_ has joined #lisp
nokdoot has joined #lisp
<TMA> or that you have scripted your auto-reconnecting client to send "re" on reconnection
nowhere_man has quit [Ping timeout: 252 seconds]
nowhere_man has joined #lisp
<hajovonta> that would also make sense. I never thought of that personally :)
nowhere_man has quit [Remote host closed the connection]
hiroaki has joined #lisp
kajo has joined #lisp
<jackdaniel> re makes more sense if you dropped the connection during discussion
nicksmaddog has joined #lisp
<jackdaniel> otherwise what's the point of it? 400+ people saying re may get tedious if we follow proactive convention
<jackdaniel> s/400+/300+/
<dim> being polite usually defeats being efficient in the short term
<hajovonta> sometimes connection drop is only momentary but several minutes have to pass for IRC server to timeout your connection
<hajovonta> thus, people are talking to you but nobody listens
<hajovonta> "re" helps others to know that your previous nick is dead already
<jackdaniel> I believe that there is a fine spot between efficiency and politeness and being radical in any direciton leads to an unbearable situation
<hajovonta> back in the old days i used IRCNET and there was no nickserv, so we could be in a channel with multiple nicks especially on modem and other unstable connection types
<hajovonta> I guess nickserv doesn't prevent me from using multiple nicks either, but I'm too lazy to set up alternative nicknames
<hajovonta> but I feel it's less of a problem than 20 years ago
smokeink has quit [Ping timeout: 244 seconds]
<dim> jackdaniel: +1
<dim> (and not just on IRC)
igemnace has quit [Quit: WeeChat 2.3]
maximjaffe has joined #lisp
orivej has quit [Ping timeout: 245 seconds]
LiamH has joined #lisp
orivej has joined #lisp
pierpal has quit [Quit: Poof]
hajovonta has quit []
pierpal has joined #lisp
<jcowan> dim: I disagree: politeness can get someone to listen to you who otherwise would not.
ryan_vw has joined #lisp
rumbler31 has joined #lisp
<dim> politeness isn't the same thing as just not being rude ;-)
<dlowe> as a collegue of mine once said, "there's more to politeness than not yelling at people"
<dim> also about getting someone to listen to you, a quote I like sayth: “I never learnt anything while I was talking”.
ryan_vw has quit [Ping timeout: 244 seconds]
arbv has quit [Ping timeout: 264 seconds]
elfmacs has quit [Ping timeout: 252 seconds]
orivej has quit [Ping timeout: 240 seconds]
sjl_ has joined #lisp
Lycurgus has joined #lisp
jsc has joined #lisp
jsc is now known as status402
warweasle has joined #lisp
_death has joined #lisp
fikka has quit [Ping timeout: 240 seconds]
anamorphic has joined #lisp
FreeBirdLjj has joined #lisp
fikka has joined #lisp
bradfonseca has joined #lisp
rippa has joined #lisp
fikka has quit [Ping timeout: 268 seconds]
razzy has quit [Ping timeout: 245 seconds]
pjb has quit [Ping timeout: 252 seconds]
dale_ has joined #lisp
rumbler31 has quit [Remote host closed the connection]
dale_ is now known as dale
orivej has joined #lisp
nicksmaddog has quit [Ping timeout: 264 seconds]
fikka has joined #lisp
frgo has quit [Remote host closed the connection]
Zaab1t has quit [Quit: bye bye friends]
frgo has joined #lisp
JohnMS_WORK has quit [Quit: KVIrc 4.2.0 Equilibrium http://www.kvirc.net/]
razzy has joined #lisp
shrdlu68 has quit [Ping timeout: 240 seconds]
Roy_Fokker has joined #lisp
fikka has quit [Ping timeout: 245 seconds]
Inline has joined #lisp
orivej has quit [Ping timeout: 260 seconds]
fikka has joined #lisp
beach has joined #lisp
fikka has quit [Ping timeout: 246 seconds]
orivej has joined #lisp
otwieracz has quit [Ping timeout: 264 seconds]
otwieracz has joined #lisp
Lycurgus has quit [Quit: Exeunt]
status402 has quit [Ping timeout: 272 seconds]
jmercouris has joined #lisp
<jmercouris> is there a way to evaluate a form as part of a defclass?
<jmercouris> e.g. when an defclass is evaluated, an arbitrary form also getting evaluated
<beach> jmercouris: You might need to do some MOP stuff.
<shka_> jmercouris: metaclass and initialize-instance of it
<jmercouris> damnit, things are starting to get real :D
<beach> defclass results in a call to ensure-class, which calls ensure-class-using-class.
status402 has joined #lisp
<makomo> jmercouris: what do you want to do though?
<jmercouris> I want to make it so that when someone defines a mode, they can execute a form that sets default keybindings for that mode
<jmercouris> the keybindings are stored in a global hashmap with the same name as the class, just surrounded by earmuffs
<jmercouris> why global hashmap? so that when you change a keybinding in that hashmap, it'll change in all running modes on all buffers
<makomo> can't you write a macro that expands into (progn (defclass ...) <keybind-registration-forms>)?
<jmercouris> makomo: I could, I thought about that, was just wondering maybe there is something better than that
<jmercouris> maybe I should actually have something like (defmode ...) could be nice at any rate
<makomo> well, define "better", of course :-)
<makomo> i would say that would be a neater option as you're relying on standardized stuff (standardized meaning "in the CLHS")
<jmercouris> yeah, that is definitely true
<makomo> + you'll end up writing a macro for defining modes anyway
<jmercouris> what makes you think I'll write such a macro?
<jmercouris> currently modes are just classes that inherit from mode (another class)
puchacz has quit [Quit: Konversation terminated!]
<makomo> well i was just thinking that it would be nice to abstract away the fact that modes are classes underneath
<makomo> and provide a "define-mode" macro
<jmercouris> I just wanted to make sure we wre on the same page
<jmercouris> lots of times there are things I don't think about
<jmercouris> so maybe you had caught some detail that I missed, but I agree fully
<shka_> jmercouris: :allocation :class ?
<makomo> but, even if you do abstract away the fact that a mode is just a class, you don't have to turn it into a "black box" thing
themsay has quit [Ping timeout: 244 seconds]
<jmercouris> well, it certainly isn't blackbox, all the source code is open :D
<makomo> i.e. the modes would still be "transparently specified" -- you would say "modes are indeed CLOS classes and have X as their superclass"
<makomo> "btw here's DEFINE-MODE which makes it a bit more convenient"
<makomo> rather than "use *ONLY* DEFINE-MODE as i might change the representation of modes later on"
status402 has quit [Quit: status402]
<jmercouris> right, I see
<makomo> now, i don't think there's a general way of deciding whether or not one should define something transparently or not. it's mostly about creativity/gut feeling i would say :-)
<makomo> i.e. it's just standard API design
<ogamita> jmercouris: notice since defclass is a macro, you can play tricks with *macroexpand-hook*.
<shka_> jmercouris: i think that you are better of using :allocation :class for your shorcuts
solyd has joined #lisp
<ogamita> jmercouris: but in your case, you should not let your users use defclass to define modes! Provide them with a define-mode macro, and do whatever you want!
<makomo> both of these ^^^ :-)
<ogamita> jmercouris: note also another example: CLIM defines its own defclass and defmethod macros, shadowing CL's ones, and when you want to use CLIM, you (:use "CLIM-CL") instead of (:use "CL").
<jackdaniel> use clim-lisp, not clim-cl
<ogamita> jmercouris: but since you're just defining modes, not generic classes in a GUI environment or something, define-mode is better.
<ogamita> Right.
fikka has joined #lisp
<makomo> jackdaniel: did you get a chance to look at double ,@,@ trouble? :-)
<jackdaniel> as I said, I want to deal with things I'm working on currently first
<jackdaniel> i.e some people are interested in seeing kerning included in McCLIM master branch
<jmercouris> thanks everyone for the advice
<jmercouris> I'll think about it
<jmercouris> right now I'm strongly leaning towards define-mode
<makomo> jackdaniel: ah ok
dlowe has quit [Read error: Connection reset by peer]
<ogamita> makomo: just showing a derivation of the rules to expand ,@,@ would be enough proof.
<makomo> ogamita: that's pretty much what i provided
robotoad has joined #lisp
dlowe has joined #lisp
matzy_ has joined #lisp
<jmercouris> here's the macro I came up with: https://gist.github.com/jmercouris/c8f5738ac6ac9ea3c4132edba73527f6
<jmercouris> thoughts?
<shka_> jmercouris: actually, you may not even need a macro
skeuomorf has joined #lisp
<jmercouris> shka_: are you referring to what you said earlier about :allocation?
skeuomorf has left #lisp [#lisp]
<shka_> jmercouris: simply add base class for all nodes, add slot for this map, and during set default-initarg for it to your *map*
<shka_> jmercouris: that as well
<shka_> then you can do everything you want during initialize-instance of mode
<jmercouris> hmmm
<shka_> but this whole thing is not exactly clear to me
<jmercouris> I see a few problems with t his
<shka_> i don't have good grasp of this at all
<jmercouris> if you can't see anything hugely egregious with my macro, I think I will use it instead
<jmercouris> as I can also put the form that declares the global map within that body
<jmercouris> which could be quite cool to have it all in one centralized place
<dlowe> why nest the progns?
<dlowe> the second one does nothing
<jmercouris> I was thinking about putting it in another body for deferred execution until run time or something
<jmercouris> and registering it with some system to eval only during runtime
<jmercouris> but since I'm not going to do that this moment, you're right, it is pointless
galdor has quit [Read error: Network is unreachable]
<ogamita> Yes, if it's so generic, you don't need a macro.
<makomo> jmercouris: then you can wrap the body within a lambda, store the lambda somewhere and call it later
<ogamita> Can't you generate the body code automatically from the mode parametres?
<ogamita> Also, the slots, the direct superclasses, etc?
<ogamita> You should provide some abstraction.
<jmercouris> makomo: I'll wrap it within a lambda, register it in a list, and then execute on startup, that makes the most sense
<shka_> hmm, ok
<makomo> jmercouris: yeah, as ogamita says, the macro is pretty bare-bones right now, providing almost no abstraction over defclass
kuwze has joined #lisp
nokdoot has quit [Quit: Leaving]
<makomo> still though, using it anyway just to give a name to a concept ("defining a mode") is ok imo, even if the macro is trivial
<shka_> i still think that managing shared setting for all instances of modes should be somehow placed into the class itself
<kuwze> hey does anyone know what mocl is based on? I thought it was ecl but it can't be considering ecl is lgpl and won't allow for distributing bundled binaries (which is what I believe mocl offers)
<jmercouris> shka_: maybe it will in the future
<shka_> for easier development
<jmercouris> nothing is written in stone here
shka_ has quit [Quit: WeeChat 1.9.1]
hhdave has joined #lisp
<ogamita> kuwze: it felt like mocl could have been based on clicc, but I haven't seen its sources (they're available for $). It's possible it was written from scratch.
<ogamita> kuwze: architecturally, it's more like clicc than ecl.
<ogamita> Ie. you have a (large) static subset of CL that is translated to C, with a small runtime library.
maximjaffe has quit [Ping timeout: 260 seconds]
<kuwze> ogamita: thank you!
<ogamita> It would be worth it to take clicc and modernize it to make a free competitor to mocl (which is has a lot of bugs and is not much maintained).
Zaab1t has joined #lisp
wusticality has joined #lisp
ealfonso has quit [Read error: Network is unreachable]
q-u-a-n has quit [Ping timeout: 246 seconds]
solyd has quit [Ping timeout: 264 seconds]
sjotten has quit [Quit: WeeChat 2.0.1]
jmercouris has quit [Remote host closed the connection]
nowhere_man has joined #lisp
<luis> Is there some documentation package that outputs a markdown file from docstrings?
heisig has quit [Ping timeout: 268 seconds]
cage_ has joined #lisp
rumbler31 has joined #lisp
lagagain has quit [Quit: Connection closed for inactivity]
rumbler31 has quit [Ping timeout: 268 seconds]
galdor has joined #lisp
frgo has quit [Remote host closed the connection]
<jasom> ogamita: IIRC someone working on mocl did confirm it was clicc based
frgo has joined #lisp
<jasom> luis: I know there are ones that generate html, and markdown is a superset of html, so technically, yes...
jkordani has joined #lisp
frgo has quit [Remote host closed the connection]
Kaisyu has quit [Quit: Connection closed for inactivity]
kajo has quit [Ping timeout: 264 seconds]
malice has joined #lisp
varjag has quit [Quit: ERC (IRC client for Emacs 25.2.2)]
jochens has quit [Remote host closed the connection]
jochens has joined #lisp
<luis> jasom: single-page, non-javadoc-ish, html?
shifty has quit [Ping timeout: 272 seconds]
<jasom> luis: maybe? There are so many document generators that it's hard to keep track; sabra did a comparison of them a couple years ago, and he notes that it's already out-of-date.
<luis> I know there's a lot of them. It's why I'm asking. :-)
pierpal has quit [Quit: Poof]
pierpal has joined #lisp
jochens has quit [Ping timeout: 268 seconds]
maximjaffe has joined #lisp
mathrick has quit [Ping timeout: 250 seconds]
hhdave has quit [Ping timeout: 244 seconds]
shka_ has joined #lisp
igemnace has joined #lisp
<shka_> good evening
dkmueller has joined #lisp
<cage_> shka_, hi!
wusticality has quit [Remote host closed the connection]
wusticality has joined #lisp
kajo has joined #lisp
mathrick has joined #lisp
anamorphic has quit [Quit: anamorphic]
schweers has quit [Ping timeout: 276 seconds]
pjb has joined #lisp
<luis> jasom: thanks
<makomo> jasom: thanks for the link, sabra has quite a few comparisons i see. i appreciate the effort
hhdave has joined #lisp
meepdeew has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
mejja has joined #lisp
kajo has quit [Quit: From my rotting body, flowers shall grow and I am in them and that is eternity. -- E. M.]
<makomo> ogamita: how did you perform the conversion of CLICC's package name when you first imported the project?
kajo has joined #lisp
<makomo> was it just a basic search-and-replace and you had to eyeball every replacement to make sure you didn't break something, or did you use something more sophisticated?
<makomo> s/perform the conversion of CLISS's package name/rename CLICC's packages/
hhdave has quit [Quit: hhdave]
anamorphic has joined #lisp
varjag has joined #lisp
m00natic has quit [Remote host closed the connection]
another-user has joined #lisp
frodef has joined #lisp
<another-user> hi, i would like to define a method which will be called when object has changed, like :after method for setf of spicific :accessor but for whole object
<another-user> how can i do that?
<anamorphic> luis: one more recent one is Staple. I think it's one page per system
<Bike> another-user: you could define a metaclass and then a method on (setf slot-value-using-class). reinitialize-instance might result in it running more than once, though.
kuwze has quit [Quit: Page closed]
stacksmith has joined #lisp
<stacksmith> Good morning
stacksmith has quit [Quit: stacksmith]
<another-user> Bike: thank you!
stacksmith has joined #lisp
stacksmith has quit [Client Quit]
ym has quit [Remote host closed the connection]
buffergn0me has joined #lisp
stacksmith has joined #lisp
stacksmith has quit [Client Quit]
stacksmith1 has joined #lisp
stacksmith1 has left #lisp [#lisp]
<pjb> makomo: I don't remember exactly, but probably quite manually.
wusticality has quit [Ping timeout: 260 seconds]
<pjb> makomo: (eql pjb ogamita)
<makomo> pjb: i'm aware :-)
<makomo> pjb: ah :^(, thought there might be some better solution
stacksmith has joined #lisp
pierpal has quit [Remote host closed the connection]
* jcowan is reading the CL0+CLOS0 document with an eye to how it might be rewritten to describe ANSI CL.
<jcowan> (Being a standardizer is good for something.)
orivej has quit [Ping timeout: 252 seconds]
<another-user> how would you solve followin problem: i have class with tons of different slots and i would like to serialize and save data from slots to file on every change made to instance of such class
<another-user> there is an option mentioned by Bike but i'm not sure it's a proper way of doing it
sauvin has quit [Read error: Connection reset by peer]
<another-user> i could define "update" wrapper function which will pass its args to corresponding setfs and save data to file afterwards but that doesn't seem good
<shka_> i think that Bike had a good idea
<shka_> perhaps change how writers/accessors are auto-generated
<shka_> using metaclass
anamorphic has quit [Quit: anamorphic]
<another-user> shka_: will changing how writers/accessors are auto-generated cause same problem with reinitialize-instance?
<shka_> i am not sure, but i would say: no
emerson has quit [Quit: WeeChat 2.3]
<shka_> because reinitialize-instance should use slot-value, not accessor
<shka_> at least that's how i think
<stacksmith> Good morning. Does anyone know why SBCL's logcount compiles a conditional? I get TEST BYTE PTR [#x5010010B], 1 with a JEQ to a call and POPCNT on NE...
anamorphic has joined #lisp
<another-user> shka_: that's great! could you please tell me where can i find documentation on how to change how writers/accessors are auto-generated?
<shka_> another-user: AMOP is the best source i know
<shka_> everybody should own a copy
<Bike> stacksmith: might have to check for bignums?
<shka_> stacksmith: bignums
malice has quit [Ping timeout: 256 seconds]
<shka_> or a type check in general
<jcowan> Makes sense. Try calling it on (the fixnum 20) and see if that helps.
<shka_> do you have something that looks like condition raising?
<stacksmith> I have it optimising to the max, and (truly-the as an unsigned byte, etc. I was hoping to eliminate a conditional and a memory access if possible...
<shka_> oh
<shka_> let me check that here
<Bike> unsigned-byte still includes bignums.
<stacksmith> (unsigned-byte 30)
<Bike> ah.
<stacksmith> jcowan: SBCL is too smart - it compiles 1 for constant 20...
<stacksmith> I thought it may be testing to see if the instruction is available - but that should not be a runtime check...
Zaab1t has quit [Quit: bye bye friends]
<stacksmith> jcowan: sorry, I msiread your message. and mistyped this one.
<shka_> stacksmith: it behaves the same for me
<stacksmith> weird, eh?
<shka_> yeah
<shka_> there must be something
<stacksmith> I wish there was an easy way to find out what that bit is...
<shka_> sjl_: ah! thank you!
<sjl_> there's a comment that starts with FIXME above -- might be a good place to start
<shka_> yeah
<shka_> i remember know
<shka_> it is a bug!
<shka_> here is the explanation
<stacksmith> Well, pvk inserts a xor to fix it. This actually tests a bit...
<stacksmith> in '*cpuid-fn-ecx*'... Shouldn't do it once? It is very unlikely that my CPU will upgrade itself to a new model while running a tight loop....
<shka_> well, save-lisp-and-die is a thing i am afraid
<shka_> you can redistribute binary on other machines
anamorphic has quit [Quit: anamorphic]
<shka_> and i have no idea how this is handled in sbcl
anamorphic has joined #lisp
<stacksmith> That is just wrong... There has to be a way to set things like that to not check, locally...
<shka_> i can't tell, sorry
<stacksmith> And by wrong, I mean - in my highly-esteemed opinion...
<stacksmith> But thank you.
<sjl_> If you've got some profiling that shows a significant portion of your time is being spent on that TEST instruction, maybe #sbcl could help figure out an alternative approach you could take.
<sjl_> I'd be surprised if a single instruction that always branches the same way ends up being a performance bottleneck. Even *I* can make a branch predictor that does a good job when only one branch is ever taken, and I'm not all that smart.
<stacksmith> sjl_: I will get to that at some point... It seems that there is a whole class of session-local constants like this... I am surprised I haven't come across it before.
another-user has quit [Remote host closed the connection]
<stacksmith> sjl_: True, the branch prediction should take care of that, but there is an entire cache line of code here instead of a 5-byte instruction.
<sjl_> Sure. Profile and make sure it's actually a bottleneck, then feel free to worry about it.
frgo has joined #lisp
<stacksmith> sjl_: If I were a betting man, I would bet it is not a bottleneck... It's just one of those things that bug me and irritates my obsessive-compulsive disorder. I really should stop looking at disassembly.
razzy has quit [Ping timeout: 268 seconds]
ggole has quit [Ping timeout: 264 seconds]
frgo has quit [Ping timeout: 272 seconds]
<makomo> stacksmith: i was going to ask what kind of an application you're writing when such stuff is so important
<makomo> but then you said you didn't profile yet, so i was wondering "who checks the disassembly for 'no reason'?" :P
ggole has joined #lisp
ggole has quit [Client Quit]
wusticality has joined #lisp
<stacksmith> makomo: I did not profile this particular version because it would require quite a bit of work to change all the other parts of the code. And my loop is assembled with a bunch of macros, so profiling to localize problematic instructions would take a little effort...
<makomo> stacksmith: ah i see. interesting issue nonetheless. may i ask what the program is for?
<sjl_> SBCL will annotate the disassembly with instruction-level counts, you just have to use profile-call-counts with the function.
<stacksmith> sjl_: thanks, I forgot to look into that the last time around...
<sjl_> actually you don't even need profile-call-counts
hiroaki has quit [Ping timeout: 252 seconds]
<stacksmith> makomo: The particular loop is for walking a transaction log and updating the state of a data structure, which gets slow for long stretches. Basically I need dispatch for a few really fast cases (that occur often ) inline, and am always looking for branch-free ways of doing things.
wusticality has quit [Ping timeout: 268 seconds]
wusticality has joined #lisp
vlatkoB has quit [Remote host closed the connection]
anamorphic has quit [Quit: anamorphic]
anamorphic has joined #lisp
matzy_ has quit [Quit: Page closed]
shka_ has quit [Ping timeout: 245 seconds]
<LdBeth> good morning
<no-defun-allowed> Morning LdBeth
nowhere_man has quit [Ping timeout: 252 seconds]
<fiddlerwoaroof> .
scymtym has quit [Ping timeout: 276 seconds]
dkmueller has quit [Quit: Lost terminal]
warweasle has quit [Quit: rcirc on GNU Emacs 24.4.1]
bradfonseca has quit [Quit: Konversation terminated!]
wusticality has quit [Ping timeout: 246 seconds]
cage_ has quit [Quit: Leaving]
jello_pudding has joined #lisp
scymtym has joined #lisp
rippa has quit [Quit: {#`%${%&`+'${`%&NO CARRIER]
<jackdaniel> makomo: so here you have my analysis: http://ix.io/1sZ7
<jackdaniel> please let me know when you read it
<jackdaniel> (I didn't proofread it whatsoever, sorry about that, but it is late, g'night)
<LdBeth> `(x1 x2 x3 ... xn) may be ... same as the backquoted form
<LdBeth> ^ Is this a typo?
wusticality has joined #lisp
<Bike> i don't think so?
<pjb> jackdaniel: if you say that ,@form is not a form, then you won't be able to process ,,,x either.
<pjb> - [,form] is interpreted as (list form). how would [,,,,x] be interpretd?
<jackdaniel> See rule 9: If the backquote syntax is nested, the innermost backquoted form should be expanded first. This means that if several commas occur in a row, the leftmost one belongs to the innermost backquote.
<jackdaniel> and a matching made up rule 11.
<pjb> jackdaniel: so don't be silly, accept that in that rule, form can be prefixed by one or more , or ,@ .
<LdBeth> Three comma
<jackdaniel> pjb: now you refer to your preference, not the standard
<pjb> Indeed, this is consitent with saying that in ,@,@foo form = ,@foo
<pjb> (rule 9)
<jackdaniel> No, rule is talking about commas occuring in a row.
<jackdaniel> I'm out to sleep, I'll read the backlog tomorrow.
<pjb> again, , and ,@
<pjb> You're taking it overly formally.
<pjb> Good night!
<LdBeth> GN
themsay has joined #lisp
<no-defun-allowed> night
nowhere_man has joined #lisp
nowhere_man has quit [Ping timeout: 252 seconds]
Inline has quit [Read error: Connection reset by peer]
wusticality has quit [Ping timeout: 268 seconds]
ym has joined #lisp
<makomo> jackdaniel: thanks. the earliest i'll be able to get to it is wednesday afternoon. i'll let you know in any case when i'm done (but it might take a while as i'm in the middle of my midterms).
warweasle has joined #lisp
moei has quit [Quit: Leaving...]
jello_pudding has quit [Quit: Leaving]
jello_pudding has joined #lisp
jello_pudding has quit [Ping timeout: 252 seconds]
sjl_ has quit [Ping timeout: 244 seconds]
jello_pudding has joined #lisp
orivej has joined #lisp
aeth has quit [Ping timeout: 268 seconds]
minion has quit [Disconnected by services]
minion has joined #lisp
terpri_ has joined #lisp
quipa_ has joined #lisp
jellopudding has joined #lisp
jkordani_ has joined #lisp
ku has joined #lisp
slyrus2 has joined #lisp
aeth has joined #lisp
anamorphic_ has joined #lisp
jellopudding has quit [Read error: Connection reset by peer]
angavrilov_ has joined #lisp
anamorphic_ has quit [Client Quit]
LiamH has quit [Quit: Leaving.]
froggey_ has joined #lisp
funnel_ has joined #lisp
slyrus1 has quit [Ping timeout: 268 seconds]
ravndal has quit [Ping timeout: 268 seconds]
anamorphic has quit [Ping timeout: 268 seconds]
frodef has quit [Ping timeout: 268 seconds]
maximjaffe has quit [Ping timeout: 268 seconds]
jello_pudding has quit [Ping timeout: 268 seconds]
froggey has quit [Ping timeout: 268 seconds]
dddddd has quit [Ping timeout: 268 seconds]
terpri has quit [Ping timeout: 268 seconds]
crsc has quit [Ping timeout: 268 seconds]
troydm has quit [Ping timeout: 268 seconds]
flazh has quit [Ping timeout: 268 seconds]
ramus has quit [Ping timeout: 268 seconds]
jkordani has quit [Ping timeout: 268 seconds]
potatonomicon has quit [Ping timeout: 268 seconds]
specbot has quit [Ping timeout: 268 seconds]
movl has quit [Ping timeout: 268 seconds]
angavrilov has quit [Ping timeout: 268 seconds]
lnostdal has quit [Ping timeout: 268 seconds]
funnel has quit [Ping timeout: 268 seconds]
Tristam has quit [Ping timeout: 268 seconds]
Colleen has quit [Ping timeout: 268 seconds]
slyrus has quit [Ping timeout: 268 seconds]
omtrent has joined #lisp
funnel_ is now known as funnel
Tristam has joined #lisp
specbot has joined #lisp
jkordani has joined #lisp
dddddd has joined #lisp
slyrus2 is now known as slyrus
flazh has joined #lisp
anamorphic_ has joined #lisp
Colleen has joined #lisp
lnostdal has joined #lisp
troydm has joined #lisp
ramus has joined #lisp
jkordani_ has quit [Ping timeout: 240 seconds]
crsc has joined #lisp
debsan has quit [Ping timeout: 272 seconds]
debsan has joined #lisp
frodef has joined #lisp
rpg has joined #lisp
elderK has joined #lisp
<elderK> Moin all :)
anamorphic_ has quit [Quit: anamorphic_]
varjag has quit [Ping timeout: 240 seconds]
Kaisyu has joined #lisp
slyrus has quit [Quit: slyrus]
wanz has joined #lisp
frgo has joined #lisp
frgo has quit [Ping timeout: 252 seconds]
makomo has quit [Ping timeout: 276 seconds]
slyrus has joined #lisp
<jcowan> I'm kind of surprised that (subtypep '(simple-vector 10) '(simple-vector 5)) doesn't return true.
quipa_ has quit [Ping timeout: 240 seconds]
wusticality has joined #lisp
<jcowan> Well, no, the LSP is not really satisfied because of things like array-dims
<sjl> ?
<sjl> (simple-vector 10) can't be a subtype of (simple-vector 5) because the set of all 10-element simple-vectors isn't a subset of the set of all 5-element simple-vectors