IRC channel logs

2022-12-31.log

back to list of logs

<old>graywolf: https://paste.sr.ht/~old/c8030c6787bc13b968b4e10adef4e0700d138a47
<old>This or use fold
<old>(fold (lambda (elem i) (proc elem) (1+ i)) 0 elements)
<graywolf>old: Since I need this just once, I'll us the fold, thank you :)
<graywolf>The syntax rule is nice as well, going into a notes.
<mfiano>Morning, guilers.
<mfiano>Hmm. I ran across some syntax I never saw before.
<mfiano> https://notabug.org/Ambrevar/dotfiles/src/master/.guile#L14
<mfiano>Not sure what "=>" is here.
<daviid>mfiano: it's in the manual (ofc)
<mfiano>Yeah, I have been searching. Hard as it blends in with the usual return comment
<mfiano>Ah I see. Yeah, I should wake up first :)
<daviid>yntax: cond clause1 clause2 … ... (test => expression) ...
<daviid>where expression must evaluate to a procedure ...
<mfiano>Yes I saw. Just being dumb
<old>basically a way to test for true and get the result
<mfiano>Thank you
<old>similar to (and=>)
<stis>tjenixen guilers!
<lloda>do cries in a corner ;p
<stis>Nice initaticv to have a meeting regarding guile ...
<stis>anyway any schemy predictions regading next year! Will we have ephermions and a brand new GC ?
<stis>will we have a santient AI that starts to take over and enslaves the humans?
<stis>I decided to take the blue pill and enjoy ignorance and hack on this little program aboat a Matrix solver B-)
<count3rmeasure>I just realized that that paste isn't even the code I've been using, its single word change I haven't even tested yet but its still extremely close
<count3rmeasure>and checking the irc logs I see that because I wasn't logged in no one probably even saw my first message
<count3rmeasure>I'm working on a command for gdb written in guile, taking a native gdb command and parsing the output into a string (for now) which can be turned into another data structure, but I keep hitting errors, errors which GDB is not especially helpful in reporting. My question is: is there a way to get more verbose error messages out of the guile interpreter itself when it hits an error? I've got GDB logging enabled but that is only logging what I'm
<count3rmeasure>already seeing to a text file.
<count3rmeasure>this is a paste of a command, as a work in progress https://dpaste.com/DF82VKYLR
<count3rmeasure>this has the offending word removed and is an example of my problem so far
<old>I'm not familiar with GDB extensions in Guile, but you could wrap a procedure with with-exception-handler and display the exception?
<old>GDB is not printing any backtrace when there's an exceptin in Guile?
<count3rmeasure>old:thank you for the response!
<count3rmeasure>I could indeed wrap a procedure that way and hadn't thought of it. also, I just realized that I had missed the error a line of the error message, which means I was entirely wrong with this question, GDB is in fact giving me very specific information about the error I was simply reading too fast to see it
<count3rmeasure>in this case the error message is this Error occurred in Scheme-implemented GDB command.
<count3rmeasure> 456 /home/daniel/gdb-data-directory/guile/commands.scm:19:58: Wrong type to apply:
<old>I see :p. How is the experience of extending GDB with guile btwÉ
<old>s/É/?
<old>IIRC, extending in Python is much easier since you have access to more primitives
<count3rmeasure>I'm enjoying it, it can be fun even if frustrating digging into an area where there aren't a thousand stackoverflow questions
<old>But if it's doable in Guile, I might do it for my projects then. It would such a breeze to write more Guile to be able to traversed linked list in C
<count3rmeasure>indeed, I'm explicitly choosing to use scheme here
<old>Right. That's always the double edge of Guile. You don't get much hit on SO and others
<old>You have to ask question here ^^
<count3rmeasure>which is fine, I've been helped here many times, indeed this project has moved along precisely when I've humbled myself and asked a question here :)
<old>Fortunately, there's a good community to answer most of the questions
<count3rmeasure>I look forward to publishing my code and several blog posts on my experience and such, to help others get up to speed should they decide to use the code or follow along with guile->GDB
<count3rmeasure>I've changed parts of the architecture multiple times or I would have put it out by now, also despite my love of lisp I'm still very much a novice in terms of practical experience which has slowed me down
<count3rmeasure>thank you for your time :old
<old>count3rmeasure: What are you waiting for? We crave for blog post here :-p
<count3rmeasure>haha I imagine
<count3rmeasure>quite soon, I had planned on publishing one today actually but I refuse to publish a post without working code, so I'll need to get my commands in order first :p
<count3rmeasure>but I should have it out in a matter of days, I'm making good progress
<count3rmeasure>I will be grateful for whatever feedback anyone is willing to give as well
<old>You have a link for me?
<old>I like having some blogs on my favorites bar
<lloda>happy new year Guilers
<haugh>Is it possible to write foo such that it has access to both these values?
<haugh>((foo) (values 'bar 'baz))
<dthompson>haugh: (call-with-values (lambda () (values 'bar 'baz)) foo)
<haugh>dthompson, I'm familiar with call-with-values and receive; what I want is to hijack the continuation that's dropping 'baz on the floor.
<haugh>This is poorly articulated and likely not possible but I'd like to understand why before I dismiss the idea.
<haugh>lloda, happy new year :)
<daviid>haugh: you can't, either you refer to one of the 'receive' syntax/mechanism or the interpreter/compiler drops all but the (1st) returned value, as expected i would say but ...
<haugh>Okay, thank you
<dthompson>haugh: there's no way to make the expression you have work. (values 'bar 'baz) produces 2 return values, however it's used in a place where only the first value will be used.
<daviid>haugh: it usd to raise an exception in earlier guile implementations, but now it just drops, which is much better i think
<rekado>you can pass multiple values on with “compose”, but not in the way you’re expecting
<rekado>(define (produce) (values 'bar 'baz)) ((compose foo produce))
<haugh>rekado yeah, that's what led me down this hole. I'm screwing around with compose and srfis 26/197
<mfiano>I'm having trouble deciding if I should start this first project idea using records or goops classes.
<mfiano>I noticed dthompson uses records in haunt at least.
<cow_2001>mfiano: echo -e "records\ngoops" | shuf | head -n 1
<cow_2001>or... i don't really know how to do random stuff in guile
<mfiano>Heh
<cow_2001>i have no idea what is the shape of your problem, but it's easier to find once you actually try to solve it
<cow_2001>so pick one and change later
<dthompson>mfiano: most of the time I use records, but occasionally I use classes. I have a game enginey thing that uses goops.
<mfiano>Is the choice the same as it is with CL?
<mfiano>Basically: performance vs convenience.
<dthompson>that can be a factor, but usually it's more about choice of paradigm. if I'm using a functional style, I use records.
<mfiano>I see.
<cow_2001>oh here is something: (if (< (random:uniform) 0.5) 'records 'goops)
<cow_2001>>_>
<cow_2001>oh oops. (if (= 0 (random 2)) etc
<cow_2001>blah sorry
<old>goops make sens when types could be extended or by allowing users to redefine methods.
<old>I personnaly use records for internal module data structure and anything that is read-only structure
<old>At one exception. If I want someone to be able to extend a procedure,then I use goops for its generics
<old>mfiano: I would start with record since it's very trivial. If you find yoursel hitting a wall, move on to goops. Really it's a matter of few minutes refactoring it
<old>Happy new year to everyone btw
<mfiano>old: Thanks, and happy new year!
<cow_2001>old: hurrah! i now sort of maybe getting collectors!
<cow_2001>:D https://paste.debian.net/1265857/
<festerdam>Hi, all.
<festerdam>The guile repl often seems to be reporting warnings at <unknown location>. Is there a way to make the repl actually give a position where the warning occured?
<lilyp>the location knowledge depends on your optimization flags
<count3rmeasure>good morning and happy new year Guile folk!
<stis>Tjaba guilers!
<old>sneek: later tell count3rmeasure can you provide a link to your blog?
<sneek>Will do.
<count3rmeasure>I'll definitely do that, I'll be very happy to post a link when its time, thank you for the interest old
<sneek>count3rmeasure, you have 1 message!
<sneek>count3rmeasure, old says: can you provide a link to your blog?
<old>ty
<count3rmeasure>for sure! I'm glad for the interest
<atuin>hi
<stis>o/
<sneek>nckx: wb :)
<spk121>.
<akirakyle>daviid around? Good news that I've got guile-gi building and running on Guix!
<akirakyle>*sorry I meant I got the latest g-golf commit building and running on Guix
<daviid>sneek: later tell akirakyle great! glad for you and g-golf future guix users, tx
<sneek>Okay.
<akirakyle>daviid the issue I found where I could build g-golf, but guix couldn't is due to some issue in the makefiles where make -j4 failed but make -j1 didn't. I suspect that the callable.scm doesn't have ccc.scm as a dependency so make tries to build both in parallel
<sneek>akirakyle, you have 1 message!
<sneek>akirakyle, daviid says: great! glad for you and g-golf future guix users, tx
<akirakyle>daviid: also the "ERROR: In procedure %resolve-variable: Unbound variable: g-irepository-require" I was seeing when trying to run the examples was due to the libg-golf.so not being present, which was because I hadn't run make install, which is apparently necessary for the so files to be generated (is this standard? I'm used to being able to run
<akirakyle>some software without needing to run the make install step)
<daviid>akirakyle: hum, let me try here
<daviid>akirakyle: i did left an earlier msg with our bot, did you get it?
<akirakyle>daviid: yup I got it!
<daviid>fyi, g-irepository-require is not in libg-golf by the way, but i'l try something
<daviid>akirakyle: ok, so here [debian testing], i don't get this problem
<daviid>make uninstall; cd xamples/gtk-4; ../../pre-inst-env ./peg-solitaire.scm works fine
<akirakyle>daviid: since building g-golf with guix works fine with only one make job (guix build -c 1 <appropriate-g-golf-guix-package-name-here>), encountering this bug will depend on one's hardware details as it's a parallelism bug
<akirakyle>Also on one's architecture, I'm building this on aarch64, so it might not even show up on x86-64, or rather only show up at another level of parallelism
<daviid>akirakyle: also, based on your experience, i will patch the configure stage, so it fails if it finds g-golf - this is not a g-golf problem 'per se', but due to the fact that, if the user installed g-golf using/in the guile site, then at make time, guile ends-up picking the wrong module for the (few but inevitable) inter module dependencies
<akirakyle>daviid: this isn't an issue with some other existing instillation since when guix builds this, there cannot be an existing installation present in the build environment
<daviid>akirakyle: sorry, that doesn't make sense for me - if it builds fine, you should be able to run any example prior installation, especially using guix i would say, but on any distro and independent of any architacture
<daviid>akirakyle: i suggest you try to solve this in #guix, as i am unable to help
<akirakyle>Once it builds I can run the examples just fine, this <callable> issue is due to some error in the makefile and thus introduces a non-deterministic build failure depending on the level of parallelism in make. Perhaps try building with make -j <number of cores on your machine>
<akirakyle>If it builds fine for you in that case, then I'm afraid you likely won't be able to reproduce this issue on your given hardware
<daviid>there are no erros in the makefile
<akirakyle>that's the only explanation I can think of that's possible for this bug though...
<daviid>akirakyle: you need help from guix experts - g-golf has not been built/run 'normally' in guix for years
<akirakyle>daviid: that's because the way typelib files operate seems to make assumptions that guix breaks (which is what that issue about grafts on the guile-gi issue tracker discusses)
<daviid>right, that is to run g-golf, but the erro you faced is because you tried to build g-golf when guile finds an installed g-golf, and that can not work, on any paltform
<akirakyle>in any case I've isolated the bug reproduction to a difference in make -j1 versus make -j4 which rules out the bug being in the build environment and isolates it to the build steps itself
<akirakyle>but g-golf was not installed anywhere when I encountered this error in <callable>
<daviid>hum, never tried make -j [i > 1] - but you can't indeed, for those modules - not sure i can disable that
<daviid>anyway, you should be able to run the examples in the build tree
<akirakyle>the makefile rules are incorrect then, since they don't encode the dependencies of the files themselves. I'm not a makefile expert, but this should be somwhere in the manual
<akirakyle>Like I said, I can successfully run the examples now
<daviid>akirakyle: without installing? you tld here earlier you couldn't
<akirakyle>I just let you know about the previous error I was seeing when trying to compile g-golf "manually" in a guix shell and not via guix build was due to me not running the make install step, which seems to be required in order for the *.so files to be build, which I also think should be changed since I ususally expect something to be runnable after
<akirakyle>just make, with the appropriate paths
<akirakyle>Oh yes, make itself doesn't build the *so files for me
<daviid>akirakyle: again, please talk to guix experts
<akirakyle>Ok... well I hope you'll look into the issue with make -jn since g-golf will fail to build on guix by default without manual user intervention until that's fixed
<daviid>it must compile fine [without // - and you must be able to run the examples prior to install
<daviid>i won't, don't use -j [i > 1] to compile g-golf
<akirakyle>Ok, good to know, I can try to debug the run prior to make install if I feel so motivaed sometime
<festerdam>lilyp: I'm sorry. My internet connect seems a bit unstable since I only saw your message through the log. Passing -O0 to guile simply displays the help text with all the possible command line arguments, since I'm not compiling anything. Do you by optimization flags the -O option? Or am I supposed to do something else to get the location displayed in place of <unknown location> in the warnings?
<festerdam>*connection
<akirakyle>but many package managers use make -j <n cpus> to build their packages so this bug will affect them as well
<festerdam>in other words, what do you mean by optimization flags
<festerdam>I also have another question: If guile segfaults, is it my fault or guile's? (ie. am I supposed to be worrying about memory management)
<akirakyle>daviid: I'm now trying to implement a custom gtk widget and when defining the "snapshot" vfunc for it similar to the peg-solitare example I get the following error: https://paste.debian.net/1265907/
<daviid>akirakyle: i'd need to see the code of course ...
<akirakyle>daviid: trying to send but debian pastbin is refusing for some reason
<daviid>akirakyle: yes, it happens, use this
<daviid>i.e. https://paste.centos.org/
<akirakyle>daviid: thanks, here's the code: https://paste.centos.org/view/18199d23
<daviid>debian has a few false 'spam' positive ... in a few hours you may use it again, or tomorow ...
<akirakyle>festerdam: I'm not a guile expert at all, but if guile segfaults on only guile code, it's definitely a bug in guile. If you're using the ffi or starting guile from c-code, then of course the segfault may be your fault (or guile's)
<akirakyle>daviid: fyi with grafts, the error that I see in guix is what flatwhatson encountered previously here: http://logs.guix.gnu.org/guile/2021-06-14.log
<festerdam>akirakyle: I'm writing pure guile (ie. I'm not extending a program with it). Using v. 3.0.8.
<akirakyle>festerdam: I would probably try to make a minimal example and report it to bug-guile@gnu.org
<daviid>akirakyle: your snapshot vfunc signature is incorrect, but this example would never work, you'd need to learn quite a bit more about gtk/gdk/gsk and i don't have time to help with 'all that', sorry - also, i would suggest you start with something way easier, a simple app, no widget customization, until you understand way better the upstream lib and doc, my 2c
<spk121>there was kind of an interesting question about symbols in the mailing list
<akirakyle>daviid: yes I'm pretty new to gobject and stuff, but can you say briefly why this wouldn't work or maybe even better an example that does "custom drawing" like in this https://blog.gtk.org/2020/04/24/custom-widgets-in-gtk-4-drawing/
<spk121>I don't have the motivation to boot up a different machine that can handle plain-text e-mail so I can respond, but, the answer is '#{#444}#
<akirakyle>daviid: I really don't understand why what I'm doing won't work since the signatures of the snapshot vfunc on gtkwidget and gdkpaintable are idential except for the extra height and width arguments in gdkpaintable
<festerdam>akirakyle: Unfortunately, I don't know what exactly is going wrong in my code (37 lines long), so I'm not sure how I could make a minimal example. Seems like it fails trying to handle some error (since according to gdb's backtrace after scm_to_uint64 is called scm_error is called and then further to the end scm_throw. That probably means there's something wrong with my code that guile fails tring to
<akirakyle>or is this because gdkpaintable actually also implements snapshot whereas gtkwidget does not?
<festerdam>report, I imagine. I don't know how can I figure out at what sexp the problem lies.
<festerdam>)
<akirakyle>festerdam: if it's only 37 lines long, that's already pretty minimal (assuming it's not calling into other libraries or modules)
<akirakyle>*rather other /external/ libraries or modules
<festerdam>Is there a certain way my email should be formatted, besides what is said in Contribute § Reporting bugs? Max line length, position of quotations relative to answers, etc?
<akirakyle>festerdam: I think so long as it's plaintext, clearly states the guile version and the code, and you include a gdb backtrace of the segfault, then it should be reasonable for one of the guile maintainers to respond to
<festerdam>Thanks!
<daviid>akirakyle: i don't have the time to teach you, sorry and actually, not even very good at all this myself (yet - do you have a complete and working C code available?
<daviid>*(yet) - do you ...
<spk121>festerdam: if it is a standalone program, if you put it in a paste, I can try it. I happen to have gdb of guile open right now anyway
<akirakyle>daviid: no worries, I'm not expecting you to teach me or anything. I don't have a c version of what I'm trying to in guile currently. I suppose I should maybe do that, but was hoping to avoid having to do so.
<festerdam>spk121: https://pastebin.com/WEZPhtn9
<akirakyle>I haven't come across other language bindings doing custom drawing using gsk so it may indeed be that this simply isn't feasible, but the peg-solatiare example gave me hope I might be able to
<daviid>you can do anything the upstream lib do, using g-golf
<daviid>*the upstream lib does
<akirakyle>Alright, I'll keep trying, and any insights you might have I'd appreciate about trying to do this sort of "custom drawing"
<daviid>the peg-solitaire example is a drag-and-drop example, it drags a snapshot (you could also drag a widget instead, but that would be another example) - it is not a 'drawing example'
<whereiseveryone>hi, if I wanted to build a GUI similar to this one, called guix-gui, what guile lib do you recommend? https://github.com/nix-gui/nix-gui
<whereiseveryone>g-golf? ⛳️
<akirakyle>daviid: yes, but it does do some amount of "custom drawing" using gdkpaintable, just not gtkwidget as I was hoping to try to do
<akirakyle>whereiseveryone: the options for writing a gui in guile, as far as I'm aware are g-golf, guile-gi, and guile-sdl
<akirakyle>which on that node, daviid, might be worthwile to try to get this webpage updated at some point to reflect your efforts on g-golf: https://www.gtk.org/docs/language-bindings/scheme
<akirakyle>*on that note
<daviid>akirakyle: try to grab a you really need to study a bit more, even the terminology you use gives me some difficulties - a gdkpaintable is
<spk121>festerdam: it is choking on line 4, (string-ref str (- (- (string-length str) 1) n)
<daviid>C sorry i did hit but i wantd to change my setnence - try to study a bit more, and try to find a complete working example in C, then it's easer for me to look at and help you 'copy' it in g-golf ...
<spk121>the string length and n are both 7, so string-ref is seeking position -1
<whereiseveryone>Thanks, what's the tldr on why I should use g-golf versus guile-gi?
<spk121>maintenance on g-golf is more active, but, is is only newly reached being reasonably functional. guile-gi was more functional out of the gate but hasn't changed much over the last few months while a maintainer wastes his life chasing Guile on MinGW bugs
<spk121>;-)
<akirakyle>whereiseveryone: well the authors of each are currently here so maybe they'd like to chime in, but my impression is that each takes a fairly different implementation approach to making guile understand gobject-introspection. g-golf is primarily implemented in guile, while guile-gi contains more code in c
<akirakyle>spk121 beat me in a response :)
<daviid>akirakyle: about the https://www.gtk.org/docs/language-bindings/scheme page, there a still pending patch sent by lilyp [i think], then it would need another patch/issue ... i don't even have a gitlab account at gnome ...
<akirakyle>daviid: you're right in that I should probably implement an example in c, so that I understand what I'm trying to do. I have studied some portions of gtk's and gobject's code over the years, but it's a really massive code base and project so there's always more to understand
<daviid>akirakyle: i meant to write to pick a complete example written in C, not for you to write in C ...
<akirakyle>daviid: sounds good, just wanted to make sure you were aware of that page,
<akirakyle>I'm not sure there's an existing example written in C along the lines of what I'm interested in doing so I figure I'll have to write that myself. It shouldn't be much anyways
<festerdam>spk121: So I guess I can reduce the code to one line, (string-ref "my string" -1). Thanks!
<daviid>writing a complete example i C from scratch and nearly no GLib/GObject/Gtk4 knowledge is ... next to impossible i think :)
<spk121>whereiseveryone: There is a lot of good work in guile-gi, but, my problem with guile-gi (and I say this as someone who wrote a lot of it) is that it is too hard to figure out what causes errors
<spk121>It is cryptic
<spk121>That led me to try to write a proper guile debugger (another incomplete project called Guidance)
<spk121>And then somehow I got distracted from that because I was helping someone with MinGW
<spk121>meh, you know how it goes with hobbies
<daviid>sneek: later tell akirakyle i'll try to find sometime tomorow to look at this specific example - meanwhile, you could grab an example from the gtk4-demo suite, full C code is provided ... pick an easy one to start with, and read the manuals in // get your self a gobject intro/tutorial as well - you need to study while trying, imo ...
<sneek>Okay.
<whereiseveryone>What are the development steps for running the g-golf examples in a guix shell?
<akirakyle>.
<sneek>akirakyle, you have 1 message!
<sneek>akirakyle, daviid says: i'll try to find sometime tomorow to look at this specific example - meanwhile, you could grab an example from the gtk4-demo suite, full C code is provided ... pick an easy one to start with, and read the manuals in // get your self a gobject intro/tutorial as well - you need to study while trying, imo ...
<daviid>spk121: though to your defense, so to speak, it is notoriosuly difficult to debug GLib/GObject/ + GI + the app you are working on ...
<festerdam>spk121: Ah. Seems like someone already reported it (bug=59874). Unfortunately I already sent the bug report.
<daviid>festerdam: np, you can cloe, explaning that it's a 'duplicate of' bug id ...
<akirakyle>daviid: ah now I see what you mean, I thought you were saying to write some C to implement what I want to implement in guile rather than just pick some existing gtk C to translate into guile with g-golf as practice
<whereiseveryone>I tried running the hello word example like this
<whereiseveryone>g-golf/examples/gtk-4/./hello-world.scm failed:
<whereiseveryone>should I be using pre-inst-env?
<whereiseveryone>or a Makefile target?
<daviid>akirakyle: right, pick an easy example and study in // of the 'copying'
<akirakyle>spk121: better debugging would be wonderful!
<festerdam>daviid: How do I close it? Do I simply reply to my own email saying it should be closed?
<daviid>whereiseveryone: are you using gix as well? (i don't, for info)
<daviid>ACTION thinks that g-golf needs a specific guix g-golf maintainer
<whereiseveryone>I did this: guix shell guile -D guile-g-golf
<daviid>whereiseveryone: plese ask in #guix then
<daviid>i can't help you, i don't use guix
<whereiseveryone>how do you run the examples without guix?
<akirakyle>whereiseveryone you will need to disable grafts with --no-grafts
<whereiseveryone>the hello-world.scm example that is
<daviid>whereiseveryone: i wrote it here above
<whereiseveryone>akirakyle: why do I need to disable grafts?
<akirakyle>oh wait, whereiseveryone are you trying to build g-golf on guix or used the already packaged (old 0.1.0) version?
<daviid>cd examples/gtk-4;../../pre-inst-env ./peg-solitaire.scm
<daviid>whereiseveryone: ^^
<akirakyle>whereiseveryone: it's a long story that I only partially understand but the discussion about it is here: https://github.com/spk121/guile-gi/pull/90
<whereiseveryone>daviid: thnx
<whereiseveryone>I just need to figure out the guix shell part now
<whereiseveryone> https://paste.sr.ht/~whereiseveryone/097ddbf9ad2b8adcc3b98dd8c314b00813a9c820
<akirakyle>daviid: is that guix's pre-inst-env?
<whereiseveryone>because I get some unbound variables even in a guix shell
<whereiseveryone>akirakyle: when you go through the steps of running make for g-golf it generates that pre-inst-env script
<akirakyle>whereiseveryone: it sounds like you're trying to build g-golf from a git checkout in a guix shell?
<daviid>akirakyle: it is what you'd do using a 'none guix' distro, which i thoyght was the question
<daviid>folks, please move this talks to #guix
<daviid>all ths has nothing to do with guile, and little with g-golf, but i can follow the #guix talks as well
<akirakyle>whereiseveryone I can meet you over on #guix if you want help there since I just went through this process myself
<whereiseveryone>akirakyle: ok thnx
<whereiseveryone>just posted there
<spk121>FWIW, My victory today was that I ran the guile-ncurses, guile-gi, and guile-curl examples on a threaded 64-bit Guile on Win 11. So proof of concept. Now I need to circle back and make an updated patchset for Guile wip-mingw branch. Found quite a few bugs in the new dlopen w.r.t. DLLs as guile extensions.
<daviid>spk121: wow, fantastic! is this enabling jit as well?
<akirakyle>spk121: that's awesome!
<spk121>No JIT. No LTO. Yes threads. Using mini gmp.
<daviid>ok, tx
<mfiano>I'm still learning Scheme...haven't touched it at all before. A lot is quite different from CL. Anyway, even without knowing much more than the core functions and not much of the syntactical extensions of r5/r6, I just caught myself today using the Guile scheme REPL for basic math calculations (I usually always had a CL REPL open for that). I find guile's REPL more responsive, and lightning quick to
<mfiano>startup, even with some extensions loaded in my ~/.guile. Much faster than CL, even if only some millis, especially if rendering output from the CL server in Emacs. Moreso though, I'm coming to really appreciate the expressive power that comes from being a lisp-1 and being able to apply a function just by putting in in operator position of a list. That is something CL just cannot do, except for
<mfiano>trivial lambda expressions, definitely not variables, and it makes programming certain algorithms very, very natural. Anyway, "my 1 week of exploring guile so far" rant. Feel free to ignore :)
<mfiano>s/"my/my "/
<mfiano>Hmm, in re-reading that, I guess that doesn't say anything specific about Guile. I don't really have anything besides the obvious of being very stable, having great POSIX support, array abstraction, GOOPS, an author that actually knows what they are doing, and a ton more. The other Schemes to me don't even compare, especially when it comes to features out of the box, GOOPS in particular, or any of
<mfiano>R5-R7 support (with a few minor diversions where needed).
<mfiano>wingo: Don't know if you ever come around here, but thanks for all your work! :)
<drakonis>mfiano: it is always good to hear those things
<drakonis>goops and the editing experience could be a bit better though
<drakonis>slime and clos are quite nice.
<drakonis>mfiano: chez is the other chunky scheme
<drakonis>and racket, if you can still call it a scheme these days
<drakonis>that and maybe loko scheme
<mfiano>I think racket is too opinionated style wise, and has _too_ much. I like the simplicity of the unix philosophy.
<mfiano>One example of opinionated is the whole eifel contract-based programming paradigm convention.
<drakonis>ah yes, that one
<drakonis>its a cool thing tbh
<drakonis>that said, rhombus is kind of neat
<drakonis>reminds me a fair bit of raku in its flexibility
<mfiano>I can do that myself trivially if/when needed. I don't need a language construct or a community to encourage me to use it. Might as well start enforcing type declarations while you're at it.
<drakonis>ha, yes.
<drakonis>though racket does not deal in continuations anymore
<mfiano>I'm only just learning about continuations, to be honest. So I can't comment much on that.
<drakonis>fair enough
<old>Don't you want hundreds of PEP--- like Python to tell you how to do your computation???!!!
<drakonis>ha
<drakonis>isnt that just srfis?
<drakonis> https://plt.cs.northwestern.edu/pkg-build/doc/rhombus/index.html
<old>At least SRFI don't impose any strong opinion
<drakonis>neat thing though
<drakonis>now if only racket didnt need giant binaries
<mfiano>I think Raku is neat, but too little and definitely too late. For the things it solves best I would almost definitely use a lisp, probably a scheme, and maybe even racket, though.
<mfiano>Mostly because I'm old and Lisp is simple. Raku and APL have too many symbols and strange rules to remember for me :)
<drakonis>there are too many rules and it can become whatever you want it to be
<drakonis>including footguns
<mfiano>I was one of the fortunate ones to not get into any serious programming before I discovered Lisp. It's what made me want to program.
<drakonis>heh
<mfiano>Before that was years of Python or shell scripts and such tools for mundane system tasks.
<drakonis>i guess i'm on the same boat, in a manner of speaking
<drakonis>okay, that's the same boat.
<drakonis>that said, i like gauche scheme a fair bit
<mfiano>Therefor Lisp is simple to me. I cannot convince a non-Lisper of that though.
<drakonis> https://practical-scheme.net/gauche/man/gauche-refe/index.html its incredibly consistent
<drakonis>widest range of srfis while still providing a layer on top of them to make it consistent
<drakonis> https://practical-scheme.net/gauche/man/gauche-refe-draft/index.html
<drakonis>refer to the gauche extensions section for that
<mfiano>I did look into that Scheme. I wanted to settle a single implementation that performed good for what I needed it for, had good documentation, had a good multi-method implementation, and seemed like it was headed somewhere, among a few other criteria. Guile just stuck out much more to me.
<drakonis>fair enough
<drakonis>but it has its own positive things worth copying
<mfiano>I'm sure it is a good Scheme, and reading about it more now it does look interesting. I'll check it out more some other time surely.
<drakonis>the one scheme to bind them all
<mfiano>What really sold me on Guile was its documentation, how large and descriptive it was, on top of how featureful the language is.
<mfiano>and I really like that it conforms to any of r5/r6/r7. r6 has a lot of interesting stuff to me, a lot of people don't like the added complexity of.
<drakonis>good docs are always nice.
<mfiano>Actually, I am interested in finding another Scheme if you want to help.
<mfiano>Let me know if you find a Scheme that has OpenGL bindings that are of this decade. Gauche is the best I saw, but still outside of this decade (http://practical-scheme.net/gauche/packages.html seems to indicate up to 4.1 which is from 2010 and lacking any of the good stuff)
<drakonis>to be fair
<mfiano>Actually don't. I don't need any reason to stop using Guile. It's awesome.
<drakonis>maybe its easier to bring guile up to speed
<drakonis>that's exactly what i was going to say
<mfiano>If I found one, I might use two Schemes, and neglect one of them :(
<drakonis>one ring, innit?
<mfiano>yep
<drakonis>i highly enjoy the presence of things like goblins in guile
<drakonis>kinda hard to want to try other schemes when you got this hotbed of cool stuff going on right now
<mfiano>Yeah, it seems to have momentum
<drakonis>plus writing a guile replacement for the last c++ piece on the guix stack is nice
<drakonis>at least attempt to do that
<drakonis>it'd open doors
<mfiano>and, I can't believe I didn't mention that. That was my biggest reason even above documentation. It's where the libraries and users are (unless you want to be a outcast^Wracketeer)
<drakonis>oh yes.
<drakonis>the community being on irc is nice too
<mfiano>I don't have anything against racket at all. I think it's documentation is better than any programming language, for example. I just think it is too pedagogical and less practical for my uses.
<drakonis>hmm, less practical?
<drakonis>you mean not enough examples?
<mfiano>I recall watching some video where wingo talked about exploring the possibility of adding a top of file language defining definer, which is, what really distinguishes Racket from other Lisps the most.
<drakonis>oh yeah, that.
<drakonis>you can evaluate code from any language in the tower anywhere in it
<drakonis>its pretty great tbh
<drakonis>i recall seeing something like that in the r7rs-large ballots?
<mfiano>Less practical as in...
<drakonis>kind of silly to have though, since it requires a lot of dedicated machinery
<drakonis>i think i'll just do some scheme on the side, get my shit together so i can write some of the things i've been meaning to do
<drakonis>like a tiny kernel lang implementation
<drakonis>and nuke the c++ nix daemon from orbit
<mfiano>Well, it's mostly used for teaching. Library quality SNR is pretty low for example, and its main selling point is not something I would really care to use.
<drakonis>fun fact: there was an attempt at making a guix-like piece of software in racket a while back
<drakonis>it has greatly diverged from that
<mfiano>huh
<drakonis>the author might be scope creeping it a bit too hard
<drakonis> https://github.com/zyrolasting/denxi
<mfiano>That goal seems too...abstract
<drakonis>perhaps
<drakonis>let me see if i can track the latest state
<drakonis>aha, blossoms
<drakonis> https://racket.discourse.group/t/self-hosting-racket-base-programs-with-blossoms/980
<mfiano>There is one language that takes the cake when it comes to scope creep though
<drakonis>CL?
<drakonis>i can name many of them
<mfiano>No, it's a language I will never use again.
<drakonis>rust, cl, raku, c++
<drakonis>julia
<drakonis>clearly.
<mfiano>Nim
<drakonis>oh, yes.
<drakonis>nim 2.0 and cyo nee nimskull
<drakonis>cant believe they're adding continuations to the nim fork
<mfiano>The author just pushed experimental features to master and breaks APIs. For example, it has (had?) 7 different user-selectable garbage collectors. Yes, 7. Also, the author released 1.0 solely as an attempt to get users (he said this) and then complained when some core developers left.
<spk121>kinda OT, but, I'm excited to see modula-2 in gcc 13
<drakonis>ah yeah, the author.
<drakonis>nimskull exists because of the author
<mfiano>I dont know what that is
<drakonis> https://github.com/nim-works/nimskull
<mfiano>Wait it was renamed again, and is going to be renamed yet again?
<mfiano>Someone just wants attention.
<drakonis>its going to become a language called cyo
<drakonis>spk121: modula-2 seems cool
<drakonis>but oberon when
<mfiano>It used to be called nimrod or something.
<mfiano>then nim
<mfiano>now nimskull
<mfiano>and then cyo?
<drakonis>actually that's a fork of nim
<drakonis>all hail the proliferation of forks
<mfiano>This is a clear sign to stay away from whoever's at the center of that graph
<drakonis>dont touch nim
<drakonis>nimskull/cyo has cps and structured concurrency in the works
<drakonis>so its neat, but then, at this point i might just use scheme or something
<mfiano>and Guile had fibers in the works for how long, and still isn't implemented in tree for a reason :)
<drakonis>ha
<drakonis>the internal machinery for fibers is already in the tree iirc
<mfiano>Sure, but making the a public protocol is an entirely different story. A lot of different architectures have to be supported unless you just want to accept that loss.
<drakonis>incredible stuff though
<drakonis>either way, what enables this setup is that guix exists now
<drakonis>dont have to put everything in the mainline tree unless it is essential
<drakonis>aconchillo owns the guilescript repository
<mfiano>True
<drakonis>still cant believe that i can do guile in the browser now
<drakonis>in the exact same way as clojure
<drakonis>speaking of clojure, upstreaming lokke bits into guile would sure be great
<drakonis>its one of those projects that i might not be using directly but would still benefit from the internal improvements it brings with it
<drakonis>gotta ask you though
<drakonis>do you miss the whole nil being equivalent to an empty list?
<drakonis>that and self evaluating empty lists or something
<mfiano>No.
<mfiano>I don't miss anything. I can still use CL if I need it.
<mfiano>But...I was just trying to convince myself not to talk bad about Clojure when I realized I'm falling asleep. Night! :)
<drakonis>haha, my bad.
<drakonis>good night!
<drakonis>i'll just play around with guile again
<mfiano>That CL quirk always bothered me, but it ties the whole language into a cohesive whole. I think I might have always been a Schemer, and I just needed Julia to show me that.
<mfiano>But see ya!
<drakonis>alright!
<drakonis>well, i guess its time to brush my skills up
<drakonis>oh and its very funny that both haskell and ocaml have support for delimited continuations now
<drakonis>something something lisps have leaked into every proglang
<mwette>mfiano: I have used openGL in gtkglext1, this is probably GL4 but maybe you could try nyacc's FFI Helper for GL5 somehow. This is the demo: https://git.savannah.nongnu.org/cgit/nyacc.git/tree/examples/nyacc/lang/ffi-help/gtkgl-01.scm
<whereiseveryone>daviid: <gtk-application-window>, <gtk-header-bar>, and <gtk-button> along with their respective slots are all generated by a macro?
<whereiseveryone>I was looking at the example on this page: https://www.gnu.org/software/g-golf/index.html
<daviid>whereiseveryone: by the g-golf 'engine', which nearly never use macros
<whereiseveryone>What code are you referring to as the g-golf 'engine'?
<daviid>whereiseveryone: as a user, you should only read (carefully) the introduction and II. Using G-Golf, the examples and upstream doc you plan to use
<daviid>whereiseveryone: the III. G-Golf Core Reference is for myself and contributors
<whereiseveryone>I'm interested in reading as a dev currently. Just trying to understand and read some of the core code for leisure
<whereiseveryone>the examples don't explain what connect and other library code is though, for example, and just have a link to the source code of the example's implementation which then naturally leads me back to reading the source code of g-golf itself
<whereiseveryone>in order to understand what the connect define-method does etc.
<daviid>whereiseveryone: i am trying to work on the manual, Using G-Golf, in needs quite a lot more 'entries', but even as it is, there should be no 'need' for a user to red the source - which is fine to do, but a totally other objective imo
<daviid>whereiseveryone: you'll need to have a (very) good knowledge of GLib, GObject, the GI system of course, and last but not least, very good goops knowledge - i'd rather start by using it, and grow a user goops knowledge, in // with building the knowled of the basics of glib/gobject and of the gnome libs, reading their upsteean doc and examples, then it will be easier to dig ... my 2c
<whereiseveryone>yup, I'm interested in garnering the domain knowledge to understand the g-golf code itself better
<whereiseveryone>thanks for the 2c
<whereiseveryone>daviid: Did you first interact with all these gnome libs by using them directly from C to build examples and small projects?
<whereiseveryone>When you were learning, that is
<daviid>whereiseveryone: have a quick then deeper look at the libadwaita manual - https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/, the https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/widget-gallery.html, install and run their demo adwaita-1-demo, do the same using the gtk4-demo, look at their source code in C, not 'you code in then design a simple app and start
<daviid>*not you coding in C, reading so you can see how it is made, then deign a simple simple app, and start to write it using g-golf, and to do so, start by copying an example 'template'
<stis>Hello guilers!
<daviid>going afk for a bit, bbl
<Kolev>I finally understand quasiquote!
<whereiseveryone>daviid: thanks! much appreciated
<whereiseveryone>Kolev: congrats!
<Kolev>whereiseveryone: And my rde config builds, but I cannot get email to work yet.
<whereiseveryone>Kolev: Try testing your email config with msmtp without rde maybe to see if it works
<whereiseveryone>Kolev: Let's continue at #tropin
<sneek>Yey! dsmith is back!!
<dsmith>Happy New Year, Guilers
<sneek>dsmith, you have 1 message!
<sneek>dsmith, daviid says: hny! i missed your brief appearance here today :), but wanted to ask you, would you agree to add our bot to ... also receive botsnacks from the #spritely channel?
<dsmith>Hmmm.. What's #spritely ?
<dsmith>ACTION looks
<dsmith>daviid, Sure
<dsmith>!channels
<dsmith>!join #spritely
<dsmith>!reconnect
<dsmith>sneek, botsnack
<sneek>:)
<dsmith>!channels
<dsmith>btw, the logs stopped for 2023
<dsmith>rekado, ^^
<dsmith>sneek, later tell daviid Done
<sneek>Got it.
<dsmith>!uptime
<sneek>I've been running for 3 minutes and 58 seconds
<sneek>This system has been up 9 weeks, 5 days, 18 hours, 32 minutes
<sneek>dsmith: wb!!
<dsmith>sneek, botsnack
<sneek>:)
<daviid>.
<sneek>Welcome back daviid, you have 1 message!
<sneek>daviid, dsmith says: Done
<daviid>sneek: lter tell dsmith great, thanks!
<sneek>dsmith, daviid says: great, thanks!
<Kolev>sneek: Show me your source code, baby.
<daviid>the invisible dsmith :)
<daviid>dsmith, are you waring the harry Potter cap of invisibility?
<festerdam>What does this error mean? : Compilation of /path/to/my/file.scm failed: not found 74
<mwette>that looks like error in cps/intmap.scm : the cps compiler : send code to bugs-guile@gnu.org
<mwette>ls
<rekado>sneek: later tell dsmith same bug as before; it fails to reliably close teh old port and open a new file.
<sneek>Got it.
<rekado>sneek: botsnack
<sneek>:)