NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
random-nick has quit [Ping timeout: 246 seconds]
pjb has quit [Ping timeout: 252 seconds]
lottaquestions has joined #commonlisp
chrcav has quit [Ping timeout: 260 seconds]
X-Scale has quit [Quit: Client closed]
chrcav has joined #commonlisp
raemac has joined #commonlisp
nij- has joined #commonlisp
raemac has quit [Client Quit]
akoana has quit [Ping timeout: 246 seconds]
nij- has quit [Quit: Using Circe, the loveliest of all IRC clients]
tyson2 has quit [Remote host closed the connection]
bilegeek has joined #commonlisp
waleee has quit [Ping timeout: 246 seconds]
raemac has joined #commonlisp
robin has quit [Ping timeout: 260 seconds]
azimut has quit [Ping timeout: 240 seconds]
skin has joined #commonlisp
<skin>
The interface around vectors seems relatively complete if a little cumbersome. Is there any reason we don't see it used more often than it is?
<beach>
skin: What do you mean? Vectors are used all the time.
<skin>
Maybe I'm just too new to the craft
<skin>
Perhaps you could provide a link to the library so that I could study its use?
<skin>
I think I'm just used to the other lisps I've used in the past and so I default to the list operations but then I think there's this perfectly good vector sitting here
<beach>
skin: Vectors are used when their characteristics match the desired complexity of the operations.
<skin>
Makes sense
<skin>
But a lot of people think when you use push that vectors are just always better because of locality optimizations in modern processors
<skin>
I wonder how SBCL work deals with that I bet you it does but
<beach>
It is not as easy as that. If you want to insert an element in the middle of a sequence, a vector is usually worse than a list.
<skin>
That's fair
<beach>
... or remove one for that matter.
<skin>
But that doesn't come up very often
<skin>
Here's a link to something I read about it
<edwlan[m]>
Vectors aren't unusual in CL
<edwlan[m]>
But, you're supposed to pick the right data structure for what you're doing
<ixelp>
Introduction - Learning Rust With Entirely Too Many Linked Lists
<hayley>
The performance characteristics depend on your allocator(tm).
<hayley>
In particular, the SBCL GC will happily copy cons cells in order.
<skin>
Interesting
<skin>
Okay so vectors are just fine and people use them but they generally use them when they think vectors will just be better complexity-wise
<skin>
Yeah I figured SBCL probably has tons of optimization specifically around the idea of the cons
<skin>
I'd like to see some concrete evidence of it though that would make me I would think that was interesting
<beach>
skin: No trained programmer would use a list if access to the elements is not sequential.
<skin>
Okay sure fair. But if it is sequential, why not use a vector
<beach>
With the exception of very short sequences perhaps.
<hayley>
Reminds me that I forgot to mention the cost model of parallel GC in general, and not that of my non-moving algorithm in particular. A tracing collector can't extract any parallelism from a linked list.
<skin>
I guess something that got me thinking about all this is how I used to use clojure
<beach>
skin: If your access pattern fits both lists and vectors with the same complexity, then a vector is almost always better, so again a trained programmer would use a vector.
<skin>
That's sort of what I thought yeah
<beach>
skin: I have no reason to believe the contrary. Maybe Rust programmers are not as well trained as Common Lisp programmers.
<skin>
I'm something of a clojure refugee. One question I had was how stuff is passed around. In my former language you could have small lists of small maps. You can have that in common lisp too, but it seems more idiomatic to pass around alists in the small.
<skin>
I'm writing a library that's going to return a bunch of data to the user and I'm wondering if I should give back a hash table nested data structure or an a-list data structure or what should that look like
<hayley>
What kind of data?
<skin>
The library will query the environment and read configuration files and query the command line string and combine that information into one single data structure
<skin>
Representing all the options and subcommands that the user specified
<beach>
skin: I would think you should give back something that the user can then access using your own accessors, so that you hide the implementation.
<skin>
A sort of command line framework
<skin>
Not a bad idea really.
<skin>
But the idea is that it's more of an open world thing
<beach>
skin: But traditional wisdom is that a hash table is better when you have more than a few dozen elements.
<skin>
Like the configuration file would be JSON
<skin>
So say a particular key in that file corresponds to one of the options
<skin>
It can be a nested data structure but my library doesn't know that
<skin>
But it doesn't have to it can just pass it on anyway
<skin>
beach: yeah I'm probably going to do the hash table thing
<skin>
That's what cl-yaml does
<skin>
But I hadn't thought of hiding the implementation that feels like probably a good idea
<beach>
That's software engineering 101.
<skin>
Very true
<skin>
Just a different approach in that language I guess
<hayley>
But this is more about hiding implementation details, than it is about (say) trying to encourage extensibility or other functionality, which I understand YAGNI is usually used toward.
<beach>
skin: Modern Common Lisp code uses CLOS a lot. CLOS is much better than traditional class-oriented languages when it comes to creating abstractions.
<skin>
Hayley: that's what I meant more, yeah
lucasta has quit [Remote host closed the connection]
bilegeek has quit [Quit: Leaving]
<saturn2>
will i regret using #'asdf/session:get-file-stamp to invalidate my own caches?
triffid has quit [Remote host closed the connection]
triffid has joined #commonlisp
<saturn2>
nevermind, i can just use (load-time-value (get-universal-time))
euandreh has quit [Ping timeout: 250 seconds]
euandreh has joined #commonlisp
jealousmonk has quit [Remote host closed the connection]
rgherdt has joined #commonlisp
ahc has joined #commonlisp
pjb has joined #commonlisp
slyrus has quit [Remote host closed the connection]
slyrus has joined #commonlisp
attila_lendvai has joined #commonlisp
pve has joined #commonlisp
euandreh has quit [Ping timeout: 240 seconds]
igemnace has joined #commonlisp
son0p has quit [Ping timeout: 260 seconds]
dcb has quit [Remote host closed the connection]
azimut has joined #commonlisp
White_Flame has quit [Ping timeout: 256 seconds]
Krystof has joined #commonlisp
Cymew has joined #commonlisp
White_Flame has joined #commonlisp
chrcav has quit [Ping timeout: 268 seconds]
chrcav has joined #commonlisp
LW has joined #commonlisp
mgl has joined #commonlisp
rgherdt has quit [Ping timeout: 248 seconds]
rgherdt has joined #commonlisp
david` has joined #commonlisp
karlosz has joined #commonlisp
varjag has joined #commonlisp
attila_lendvai has quit [Read error: Connection reset by peer]
attila_lendvai has joined #commonlisp
czy has joined #commonlisp
karlosz has quit [Ping timeout: 252 seconds]
karlosz has joined #commonlisp
karlosz has quit [Ping timeout: 268 seconds]
karlosz has joined #commonlisp
attila_lendvai has quit [Read error: Connection reset by peer]
attila_lendvai has joined #commonlisp
scymtym has quit [Ping timeout: 240 seconds]
Brucio-61 has quit [Ping timeout: 260 seconds]
ebrasca has joined #commonlisp
karlosz has quit [Quit: karlosz]
rogersm has joined #commonlisp
Brucio-61 has joined #commonlisp
karlosz has joined #commonlisp
euandreh has joined #commonlisp
scymtym has joined #commonlisp
dale has quit [Ping timeout: 260 seconds]
akoana has joined #commonlisp
dale has joined #commonlisp
mgl has quit [Quit: Client closed]
jmdaemon has quit [Ping timeout: 246 seconds]
attila_lendvai has quit [Ping timeout: 250 seconds]
Gleefre has joined #commonlisp
ebrasca` has joined #commonlisp
ebrasca has quit [Ping timeout: 246 seconds]
karlosz has quit [Quit: karlosz]
ebrasca` is now known as ebrasca
dcb has joined #commonlisp
random-nick has joined #commonlisp
SAL9000 has quit [Ping timeout: 248 seconds]
euandreh has quit [Ping timeout: 276 seconds]
euandreh has joined #commonlisp
karlosz has joined #commonlisp
karlosz has quit [Remote host closed the connection]
karlosz has joined #commonlisp
tyson2 has joined #commonlisp
SAL9000 has joined #commonlisp
dcb has quit [Quit: MSN Messenger v2.16.1]
euandreh1 has joined #commonlisp
euandreh has quit [Read error: Connection reset by peer]
euandreh1 is now known as euandreh
rgherdt_ has joined #commonlisp
rgherdt_ has quit [Client Quit]
rgherdt_ has joined #commonlisp
rgherdt has quit [Ping timeout: 265 seconds]
rgherdt_ is now known as rgherdt
Gleefre has quit [Remote host closed the connection]
LW has quit [Quit: WeeChat 3.8]
kevingal has joined #commonlisp
kevingal_ has joined #commonlisp
markb1 has quit [Ping timeout: 265 seconds]
markb1 has joined #commonlisp
splatt990 has joined #commonlisp
euandreh has quit [Ping timeout: 248 seconds]
euandreh has joined #commonlisp
drainpipe has joined #commonlisp
Krystof has quit [Ping timeout: 264 seconds]
drainpipe has quit [Client Quit]
ebrasca has quit [Remote host closed the connection]
tyson2 has quit [Remote host closed the connection]
jonatack1 has joined #commonlisp
jon_atack has quit [Ping timeout: 264 seconds]
White_Flame has quit [Ping timeout: 248 seconds]
White_Flame has joined #commonlisp
Cymew has quit [Ping timeout: 268 seconds]
ahc has quit [Quit: Client closed]
lucasta has joined #commonlisp
NotThatRPG has joined #commonlisp
LW has joined #commonlisp
zxcvz has joined #commonlisp
alejandr` has joined #commonlisp
alejandrozf has quit [Ping timeout: 276 seconds]
kathe has joined #commonlisp
<kathe>
hi all. :)
<beach>
Hello kathe.
<kathe>
heya strandh.
<kathe>
oh, sorry. hello, beach. :)
<contrapunctus>
kathe: long time no see
<kathe>
hey contrapunctus. yes, been a while. been too tied-up with family health issues.
alejandr` has quit [Ping timeout: 250 seconds]
<kathe>
okay, i gotta go now.
zxcvz has quit [Quit: zxcvz]
<kathe>
bye all.
kathe has quit [Quit: Leaving]
varjag has quit [Quit: ERC (IRC client for Emacs 27.1)]
tyson2 has joined #commonlisp
edgar-rft has quit [Quit: Leaving]
skin has left #commonlisp [#commonlisp]
cage has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
raemac has quit [Ping timeout: 260 seconds]
zxcvz has joined #commonlisp
tevo has quit [Ping timeout: 248 seconds]
prxq has quit [Ping timeout: 264 seconds]
prxq has joined #commonlisp
zxcvz has quit [Quit: zxcvz]
drainpipe has joined #commonlisp
slyrus has quit []
skin has joined #commonlisp
dstein64- has joined #commonlisp
slyrus has joined #commonlisp
dstein64 has quit [Ping timeout: 240 seconds]
dstein64- is now known as dstein64
tyson2 has joined #commonlisp
dcb has joined #commonlisp
Gleefre has joined #commonlisp
amoroso has joined #commonlisp
Gleefre has quit [Remote host closed the connection]
raemac has joined #commonlisp
kevingal_ has quit [Ping timeout: 246 seconds]
kevingal has quit [Ping timeout: 246 seconds]
tyson2 has quit [Remote host closed the connection]
drainpipe has quit [Ping timeout: 268 seconds]
johnjaye has quit [Read error: Connection reset by peer]
johnjaye has joined #commonlisp
drainpipe has joined #commonlisp
akoana has quit [Quit: leaving]
pranavats has left #commonlisp [Disconnected: Replaced by new connection]
pranavats has joined #commonlisp
Gleefre has joined #commonlisp
edgar-rft has joined #commonlisp
Lowly_Drainpipe has joined #commonlisp
waleee has joined #commonlisp
drainpipe has quit [Ping timeout: 268 seconds]
Lowly_Drainpipe has quit [Quit: WeeChat 3.8]
ec has quit [Remote host closed the connection]
ec has joined #commonlisp
<phoe>
NotThatRPG: reviewing your MR now
<phoe>
what's your use case for SETF ENSURE-GETHASH that cannot be achieved with SETF GETHASH?
<NotThatRPG>
phoe: Thanks so much! I'd like to get it merged and then fix the remaining malfunctioning gitlab workflows.
<NotThatRPG>
phoe: Can you push onto gethash with a default value?
<NotThatRPG>
I would have thought not, since the default value is not a place, but I could be wrong
<phoe>
that's sort of the standard way of INCFing things
<NotThatRPG>
I was confused by the discussion of evaluating the default but ignoring it. I guess that does not operate here because INCF first retrieves *and then sets* and its only the setting that ignores the optional value.
<phoe>
"evaluating but ignoring" means that all side effects have a chance to manifest
<phoe>
like, try the above with (gethash :foo hash-table (print 0))
<phoe>
and try SETFing that place too
<NotThatRPG>
Seems like the definition of INCF, at least, permits an implementation that would not work with GETHASH: "The delta is added to (in the case of incf) or subtracted from (in the case of decf) THE NUMBER IN PLACE and the result is stored in place."[emphasis added] -- there is no number in the place in the case of GETHASH.
drainpipe has joined #commonlisp
<NotThatRPG>
It doesn't say "the result of evaluating PLACE" it says "the number in place."
<phoe>
"the number in place" (gethash :foo hash-table 0) is 0
<phoe>
(for an empty hash-table, obviously)
amoroso has quit [Quit: Client closed]
<phoe>
you need to consider the place as a whole
<NotThatRPG>
If that were true, then gethash would behave like ensure-hash, wouldn't it? I mean you get NIL for (progn (gethash :foo hash-table 0) (gethash :foo hash-table)) which seems to me to argue that in fact there is not a zero in the place.
<NotThatRPG>
Probably I need to do a deep dive into the definition of PLACE.
<phoe>
yes
<phoe>
GETHASH doesn't set anything
<phoe>
that's the role of SETF GETHASH
<phoe>
GETHASH simply *returns* the default if there is no value for a given key
<phoe>
GETHASH reads the hash table, SETF GETHASH writes the hash table, ENSURE-GETHASH reads the hash table and conditionally writes the hash table if there is no value
<NotThatRPG>
Right: that seems to agree with my understanding that there isn't anything in the place corresponding to (gethash :foo hash-table 0) -- if there were, I would be able to retrieve it. But I don't see a definition of "place" that clarifies this.
<NotThatRPG>
Bike: That seems reasonable; it's just not what the spec states.
<phoe>
it's the first paragraph of 5.1.1 though?
<phoe>
"the value of a place is the object to which the place form evaluates"
<phoe>
"the value of a place can be changed by using setf"
<Bike>
places aren't concrete things. if (gethash key table 0) returns 0, 0 is the value of the place, regardless of what's actually in the table.
<phoe>
when you evaluate (gethash :foo hash-table 0) with an empty hashtable then you get 0, and that is the value of the place
<phoe>
then you (setf (gethash :foo hash-table 0) 42)
<phoe>
and bam, the value of (gethash :foo hash-table 0) is now 42
<NotThatRPG>
Bike: OK, I was confused because it says "value in place" describing INCF, and I interpreted the use of "in" as meaning something distinct from them using "of" in 5.1.1
<phoe>
yeah, that's informal language
<NotThatRPG>
Seems to me there's a good reason they used the term "of" instead of "in" in 5.1.1. And I wish they had used the same term in the definition of INCF!
<jackdani1l>
not according to the spec place is anything the implementation of the setf expansion/function thinks it should be
<phoe>
...or that will be in the future, since fallback stuff like #'(SETF FOO) is allowed to be defined later
<NotThatRPG>
"in" seemed to me to be making an explicit reference to the state of memory (unlike "of"). I see that I was wrong.
<NotThatRPG>
phoe: I think I should remove the SETF method and test, but then make a new MR for the test fixes.
<phoe>
NotThatRPG: I think the same at the moment; maybe you can just do an interactive rebase and remove the commit adding the SETF stuff, and then edit the MR title/description
kg7ski has joined #commonlisp
<NotThatRPG>
phoe: Yes, I will do that.
<phoe>
but yes, now I think the SETF ENSURE-GETHASH is unnecessary because SETF GETHASH seems to do everything you want to get done
<Bike>
well, like came up yesterday, there'd be a difference in that ensure-gethash doesn't evaluate the default form unless nothing is in the table
drainpipe has quit [Ping timeout: 252 seconds]
<phoe>
oh, right
<phoe>
then SETF for ENSURE-GETHASH on an empty table would be equivalent to evaluating DEFAULT and then immediately discarding it anyway; only the case of SETF on ENSURE-GETHASH with a filled table would be different
<phoe>
somewhat confusing from the UX point of view
<jackdani1l>
conceptually defining a setf on ensure-gethash is as if you had defined a setf method on progn
<jackdani1l>
s/method/expansion/
<jackdani1l>
(i.e it does not hold much meaning given the operator purpose)
raemac has quit [Ping timeout: 276 seconds]
<NotThatRPG>
By the way, speaking of tests and Alexandria: can anyone point me at the code for the gitlab action clci? I can't seem to search gitlab.com successfully rn
<NotThatRPG>
Their search seems a little messed up: they can't complete suggestions into the search box, either
<NotThatRPG>
Ah. I thought it was on gitlab.com -- no wonder they couldn't find it1
scymtym_ has joined #commonlisp
lucasta has quit [Read error: Connection reset by peer]
scymtym has quit [Ping timeout: 252 seconds]
lucasta has joined #commonlisp
Brucio-61 has quit [Ping timeout: 260 seconds]
Brucio-61 has joined #commonlisp
<NotThatRPG>
Wow. I don't understand the gitlab-ci documentation *at all*
vassenn has joined #commonlisp
drainpipe has joined #commonlisp
<NotThatRPG>
oh, but I found the variables for turning implementations off and on, which is what I need.
<NotThatRPG>
Anyone know if it's possible to allow some tests to fail? I should be able to have such failing tests run and show up as failures, but not fail the overall action. Is that possible using clci?
Brucio-61 has quit [Ping timeout: 260 seconds]
Brucio-61 has joined #commonlisp
Brucio-61 has quit [Remote host closed the connection]
Brucio-61 has joined #commonlisp
drainpipe has quit [Ping timeout: 276 seconds]
drainpipe has joined #commonlisp
drainpipe has quit [Client Quit]
Brucio-61 has quit [Remote host closed the connection]
Brucio-61 has joined #commonlisp
cage has quit [Quit: rcirc on GNU Emacs 28.2]
scymtym_ has quit [Ping timeout: 240 seconds]
_dcb_ has joined #commonlisp
Brucio-61 has quit [Ping timeout: 260 seconds]
dcb has quit [Remote host closed the connection]
<etimmons>
NotThatRPG: That can get complicated. Pass/fail/warn is reported at the job level for Gitlab CI. And it needs to be specified in the job definition if it should report pass/fail or pass/warn. So if you have a job "run tests on SBCL" and you want the job to warn if some of those tests fail, but fail if some other required tests fail, then you can't do it with a single job definition.
<NotThatRPG>
etimmons: I was just thinking of permitting entire jobs to fail, not fussing about individual tests (that would be a job for an xfail in RT, which is what's used to test Alexandria, and I don't believe RT has that)
<etimmons>
You other need to have a pass/fail job that runs only the required tests and a pass/warn job that runs only the optional tests. Or have a pass/fail job that runs everything and only logs the optional test failures and then a second pass/warn job that parses that log
<etimmons>
then yes, you can add allow_failure: true to the job definition
<NotThatRPG>
So I'd be OK for now if we just allow Allegro, ABCL, and CMUCL to fail and then chip away at them.
azimut has quit [Ping timeout: 240 seconds]
_dcb_ has quit [Quit: MSN Messenger v2.16.1]
<etimmons>
If you're using CLCI, I think: "allegro:test:clci: allow_failure: true" (properly formatted in YAML) would do it then, but it's been a while
<etimmons>
(and abcl:test:clci and cmucl:test:clci)
<NotThatRPG>
etimmons: Thanks! I will try that.
<etimmons>
Hmmm. Now I'm less sure... I'll check later tonight
<ixelp>
GitHub - Shinmera/punycode: A punycode implementation in Common Lisp
waleee has quit [Ping timeout: 268 seconds]
czy has quit [Remote host closed the connection]
johnjaye has quit [Quit: WeeChat 4.0.0-dev]
dcb has joined #commonlisp
waleee has joined #commonlisp
tyson2 has joined #commonlisp
tevo has joined #commonlisp
kevingal has joined #commonlisp
son0p has joined #commonlisp
kevingal_ has joined #commonlisp
Krystof has joined #commonlisp
waleee has quit [Quit: WeeChat 3.8]
m5zs7k has quit [Ping timeout: 250 seconds]
m5zs7k has joined #commonlisp
waleee has joined #commonlisp
waleee has quit [Ping timeout: 268 seconds]
waleee has joined #commonlisp
<jmercouris>
I'll never forget this great conversation I had on IRC where someone tried to convince me that PHP was an amazing language because it supported 'string interpolation'
<jmercouris>
I still think about that individual years later, wonder if they achieved enlightenment.
<phoe>
while all we have here is lisp international police
robin has joined #commonlisp
<jmercouris>
Indeed, indeed.
easye has quit [Remote host closed the connection]
pjb has quit [Remote host closed the connection]
pjb has joined #commonlisp
rgherdt has quit [Ping timeout: 250 seconds]
igemnace has quit [Remote host closed the connection]
rgherdt has joined #commonlisp
rgherdt_ has joined #commonlisp
LW has quit [Quit: WeeChat 3.8]
rgherdt has quit [Ping timeout: 268 seconds]
ahc has joined #commonlisp
rgherdt_ has quit [Remote host closed the connection]
karlosz has quit [Quit: karlosz]
david` has quit [Ping timeout: 250 seconds]
Alfr has quit [Quit: Leaving]
kevingal has quit [Remote host closed the connection]
kevingal_ has quit [Remote host closed the connection]