IRC channel logs

2019-12-12.log

back to list of logs

<zig>hello #guix
<wingo>ArneBab: not sure, unfortunately i don't have any contact from mark since the beginning of november
<wingo>there will always be future releases tho
<zig>hello #guile too :)
<rlb>Is there documentation somewhere regarding the general performance characteristics of goops -- in particular, say the cost of (typical) method dispatch? I assume that's the same as slot access if you use a getter rather than slot-ref, though I'm also curious about slot-ref.
<wingo>rlb: i don't know about documentation, sorry :/ but it's all implemented in scheme so you can poke around
<wingo>basically slot-ref is an interpreter and using a getter is a compiler
<wingo>with associated perf characteristics
<wingo>getters are generic functions that have a dispatch procedure that has fast-paths for the types they have seen
<sneek>So noted.
<wingo>heh
<wingo>for slot access, those dispatch procedures are basically (lambda (x) (struct-ref x n))
<wingo>but, since 2.0 or so, goops has only had "linear" dispatch procedures, which correspond to what e.g. javascript does for polymorphic dispatch
<wingo>but not "hash" dispatch procedures, which is what js does for megamorphic dispatch
<civodul>hey there!
<wingo>heya :)
<wingo>civodul: afaiu you should be able to re-check the guix issues using 2.9.6
<wingo>2.9.7 is just performance improvements
<civodul>wingo: great, i'll give it a spin
<civodul>good that you're still able to get some more performance improvements!
<wingo>indeed :)
<wingo>reminds me to re-do 2.9.6 vs 2.9.7 comparisons...
<wingo>takes a couple hours to collect the data
<d4ryus>is there a built-in way to calculate the checksum (sha1, md5, ...) of a file?
<zig>no, us guile-crypt (available via guix)
<zig>no. I use guile-crypt (available via guix)
<civodul>guile-gcrypt even :-)
<civodul> https://notabug.org/cwebber/guile-gcrypt
<civodul>or: "hashing", by weinholt: https://github.com/weinholt/hashing
<civodul>pure Scheme, so much slower
<civodul>well, i'd like to see how slow it is on Guile 2.9
<civodul>we may get close to libgcrypt performance, who knows!
<civodul>wingo: that's a good benchmark for you ;-)
<wingo>:)
<wingo>seems to use r6rs fx+ et al
<wingo>which are unoptimized in guile
*wingo does not like fx+
<civodul>right, but unboxing may still happen, no?
<wingo>maybe but not as well as with +
<civodul>i don't like that either, because i think type inference should give the same result where it matters
<wingo>because fx+ is effectively opaque to guile's compiler
<civodul>"hashing" brings its own fixnum module though
<wingo>ah that's true
<civodul>oh but that's not for fx+, only for other things
<wingo>right
<civodul>wingo: in (rnrs arithmetic fixnums), why not inline fx+ & co?
<civodul>i guess in hot loops the compiler would be able to get rid of all the assert-fixnum calls etc., no?
<wingo>could be a good option :)
<civodul>the risk of code bloat would be low, i'd guess
<wingo>anyway i think i don't have time to look into that atm :)
<civodul>understood!
<civodul>i can give it a try though no promise on the timeline
<wingo>if you want to inline, it would need to be before 3.0 fwiw
<civodul>yes
<d4ryus>Thank you!
<wingo> https://wingolog.org/pub/guile-2.9.6-vs-2.9.7-microbenchmarks.png
<wingo>some small regressions between 2.9.6 and 2.9.7 due to some benchmarks taking out-of-line paths more often (ray, which uses floating-point ops but the compiler is unable to infer that)
<wingo>but i am ok with that
<wingo>the string benchmark is related to heap size and how many GC's happen; it's not something the compiler can help with
<civodul>wingo: so the difference in the string benchmark is mostly noise?
<wingo>civodul: imo yes
<wingo>as you can see it's in the range of the previous commit
<civodul>ok
***ng0_ is now known as ng0
<roelj>So if I request a large file using ‘http-get’, what's an efficient way of writing to a file on the filesystem?
<sneek>roelj, you have 1 message.
<sneek>roelj, zig` says: is Virtuoso a hardwired requirements? I am asking because my work is directly competiting with that kind of software.
<reepca>the documentation for mkdir seems a bit unclear - "If MODE is omitted then the permissions of the directory are set to '#o777' masked with the current umask. Otherwise they are set to value specified with MODE" would seem to imply that MODE isn't masked with the current umask if it's specified, but it is.
<roelj>sneek: botsnack
<sneek>:)
<roelj>zig: Re: Virtuoso: No, any RDF store with SPARQL 1.1 support would do.
<zig>they are gone.
<zig>I was just going to emacs nomunofu.js
<rlb>wingo: thanks much for the summary.
<rlb>wingo: and to check that I understood, sounds like you're saying that we always have linear cost dispatch now -- i.e. some kind of roughly linear search for the correct method in the generic.
<wingo>rlb: linear in the number of distinct types seen by each getter.
***jao is now known as Guest66072
***jao- is now known as jao
<zig>I think I will to guix fringe event at FOSDEM2020 and then actually go to FOSDEM unlike last year.
<zig>the minimalist language track looks very good https://fosdem.org/2020/schedule/track/minimalistic_experimental_and_emerging_languages/
<zig>here is the link to guix fringe event: https://libreplanet.org/wiki/Group:Guix/FOSDEM2020
<wingo>good evening
<civodul>hey!
<ArneBab>wingo: 3.0 is a chance to get in things with high visibility (because "oh, it has a zero at the end" vibes well with news-folks :-) ), so if there’s something almost done in Marks pipe, he might want to get it in — or ensure that something still gets in which could break things if introduced later.
<ArneBab>civodul: for the string benchmark (and also divrec), have a look at the errorbar. For the purposes of uncertainty, there is no difference between 2.9.6 and 2.9.7 in these two benchmarks :-)
<ArneBab>wingo: all in all that’s awesome work!
<wingo>ArneBab: agreed but i have limited time :) so rather than delay the release i would prefer to make a 3.2 sooner
<civodul>wingo: in 2.9.6 "guile --version >&-" aborts, but differently compared to 2.9.5
<wingo>that's exciting
<wingo>i thought i fixed that :)
<civodul>well, you did! it's no longer a stack overflow, but the wrong-type-arg is still there
<wingo>i think it should print something to stderr and exit with failure tho, right?
<wingo>just that it shouldn't abort() i guess
<civodul>"guile -c 1 >&-" should always succeed, though
<civodul>because it doesn't attempt to write to stdout
<wingo>civodul: it does succeed, right?
<wingo>hah
<wingo>no it doesn't :)
<wingo>exciting
<daviid>wingo: civodul: hello! what about the lloda wip-exception-truncate (two smal patches)? it seems good, 'straight forward' and afaict, 'inofensive', wdyt?
<wingo>probably a good idea! will have to look again
<daviid>wingo: ok, thanks