<ArneBab>guix environment --ad-hoc --pure guile guile-wisp mercurial wget bash coreutils grep findutils -- bash -c 'mkdir -p /tmp/eval-r7rs/; cd /tmp/eval-r7rs/; wget https://ecraven.github.io/r7rs-benchmarks/all.csv; hg clone --insecure http://hg.sr.ht/~arnebab/wisp; cd wisp/examples; for i in $(cat ../../all.csv | cut -d , -f 1 | grep \- | sort -u) s7; do ./evaluate-r7rs-benchmark.w ../../all.csv $i 2>/dev/null | tail -n 1 | xargs -i echo {} : $i <ArneBab>Selected results (@wingo): geometric mean of the slowdown compared no the fastest: <ArneBab>2.0422404109744514 (55 / 55) : chez-9.5.5-m64 <ArneBab>2.5547753475864643 (54 / 54) : gambitc-v4.9.3 <ArneBab>3.5151544897906812 (54 / 54) : racket-8.1/r7rs <ArneBab>7.337436782525677 (53 / 53) : guile-3.0.5 <ArneBab>18.215092108261047 (53 / 53) : guile-2.2.7 <ArneBab>43.26455011006094 (45 / 45) : kawa-3.1.1 ***chris2 is now known as Guest6084
<RhodiumToad>you want to find all toplevel names which are referenced but never defined or set? <RhodiumToad>is the expression likely to be large or small, or is that not known? <iskarian>I would expect a few hundred lines at most; it's intended to be used on Guix package definitions <iskarian>I don't expect there to be all that many unique toplevel refs, though ***chris2 is now known as Guest3926
***ecraven- is now known as ecraven
***Guest3926 is now known as chrislck
<iskarian>ah, thanks RhodiumToad! Yeah, I considered the latter but I wanted to avoid picking through with car and cdr <iskarian>I didn't realize there was a way to use tree-il-fold with multiple values, I think that'll do <RhodiumToad>(lambda (_ defs refs) (values defs refs)) <-- names are backwards there, harmless error but should be fixed <RhodiumToad>which uses match-lambda* to eliminate most of the cars/cdrs from the non-multiple-values version <avp>Hello Guilers! Is there any ORM for GNU Guile? <avp>(ORM stands for "Object–relational mapping") <avp> There's Guile-PG that has nice API and I even tried it some time ago, but it doesn't work with Guile 2.2/3.0. <avp>And Guile-PG is not an ORM. <cwebber>avp: I don't think there's a full ORM, there was another project called guile-dbi <cwebber>I remember having some trouble with it though <cwebber>avp: there's also the sqlite ffi thing <cwebber>not packaged for guix yet for some reason <cwebber>and it inspired me to work on guile-squee all the way back when I started the package (I don't actively work on it right now) <cwebber>cbaines has been maintiaining mostly <avp>I see, but SQLite does not work well in multi-threaded applications. <avp>Oh. My bad, looks like my SQLite knowledge is outdated a bit: 'serialized' mode seems to allow safe concurent access to a database. <avp>I read some time ago that SQLite turns into a performance bottleneck if accessed from several threads in an applciation as it blocks other threads when a single thread works with a DB. <leoprikler>I doubt sqlite writes in parallel, which other SQLs can do <avp>So seems that both I and cwebber were right. ;-) ***davii is now known as daviid
<vijaymarupudi>and I was wondering if there was a way to tell if a variable <vijaymarupudi>is undefined in a macro? Currently I'm using `syntax-local-binding` (thank goodness this api exists!), but it seems to default to outputting 'global for undefined variables. Is there a way to avoid a runtime check with `defined?`? <avp>I'll probably go with Guile-SQLite3 for now, but it would be nice to have Guile-ORM somewhere in the near future. ;-) <avp>I think it's important for a language to have well-written and easy-to-install libraries for common tasks, if the language is going to be popular. *cwebber wonders if postgres really *itself* does multiple writes in parallel <cwebber>or if it's because there's an external parallel set of connections <civodul>avp: "guix install guile-sqlite3" :-) <civodul>seems to me there's no universal consensus that ORMs are "a good thing" <cwebber>and was like "huh I guess it got unpackaged" <civodul>cwebber: it's even a dependency of Guix :-) <civodul>vijaymarupudi: did you look at Skribilo? you could become a maintainer ;-) <avp>civodul: I must admit that I'm not very familiar with "are ORMs are good thing" debates and would love to read something on the topic. I just think that they are pretty convenient in some other languages. <leoprikler>I think ORMs are somewhat non-functional, inherently. <avp>leoprikler: Oh, in that sense ORMs don't go well with purely functional programs indeed. <leoprikler>That said, I think you can build your own ORM on top of guile-sqlite3 (or any other database bindings) in two ways: <leoprikler>1. have "handles" simply be the restrictions to get you to where you want and never keep local data in records <leoprikler>2. make records, that (with syntactic sugar) update the database whenever you set! them from the outside (with an additional invalidate! method when your caches go ouch) <leoprikler>if you're very fancy you could try using GOOPS' virtual fields <leoprikler>for a reference where something similar is done, guile-json has json mappings, which translate to scheme records IIUC, but they aren't database-backed obviously <civodul>vijaymarupudi: there are several frontends ("readers") and it wouldn't be hard to add one with a Texinfo/Scribble kind of syntax <vijaymarupudi>When defining a custom reader, is there a way to pass in more options? <vijaymarupudi>I want the paragraph breaking algorithm to be customizable, for the entire document and per element <civodul>vijaymarupudi: paragraph breaking is left to the backend <civodul>for HTML, the browser takes care of it <civodul>otherwise Lout or LaTeX takes care of it <civodul>it's not something that's part of Skribilo proper <vijaymarupudi>I see. I feel like the AST might be a bit different from what I was thinking of, I was envisioning definitions of custom elements in the file itself, and the ability to define new indentation sensitive syntax. <vijaymarupudi>What seems very cool to me is that I can use Skribilo like a library, specifically the engines, after all the processing has been done