IRC channel logs

2020-11-06.log

back to list of logs

<daviid>I did ask, here is what they answered:
<daviid> The website is a static site: https://gitlab.gnome.org/Infrastructure/gtk-web/, You can open a merge request for it, you can edit this page https://gitlab.gnome.org/Infrastructure/gtk-web/-/blob/master/_docs/language-bindings/index.md
<daviid>but i don't even have an account, nor a third party account (it seems you can't register anymore), and i'd be happy to clone and send an sxml patch to a ML, but ... they don1 thave ML anymore and don't use sxml :):) so, if anyone here has the knowledge, time, an account ... it'd be nice, let me know
***chrislck_ is now known as chrislck
<leoprikler>It appears you can convert boring old Github/Gitlab accounts to GNOME Gitlab accounts, so that works out for me.
<leoprikler>Okay, I've managed to get a local checkout, but I'll have to stop here and continue later
<ArneBab>manumanumanu: cool! Thank you for the info!
***sneek_ is now known as sneek
***apteryx_ is now known as apteryx
<daviid>leoprikler: cool, whenever you can of course, here is the commented code snipset I posted for inclusion - https://paste.gnome.org/pxegc8rak
<leoprikler>daviid: https://gitlab.gnome.org/leoprikler/gtk-web/-/blob/master/_docs/language-bindings/scheme.md
<leoprikler>Let me know if there's something I should add.
<daviid>leoprikler: nice! for the 'About' subsection, I would copy the one on the g-golf website, or the guix synopsis - otherwise, it's seems good to me, tx again
<daviid>going afk to rest, bbl ...
<leoprikler>hmm, I think that neither are quite fitting for the context of Gtk-Web.
<leoprikler>That it's GI-based is already clear from its inclusion in language-bindings.
<leoprikler>And that it uses GOOPS does not differentiate it from the other GI bindings for Guile, that are out there ;)
<daviid>leoprikler: please, take the g-golf about text, or the guix synopsis
<daviid>tx
<leoprikler>daviid: https://leoprikler.pages.gitlab.gnome.org/-/gtk-web/-/jobs/974042/artifacts/public/docs/language-bindings/scheme.html
<daviid>leoprikler: perfect, many thanks
<leoprikler>daviid: For the sake of completeness I also mention Guile-GI and include a Guile version compatibility table: https://leoprikler.pages.gitlab.gnome.org/-/gtk-web/-/jobs/974182/artifacts/public/docs/language-bindings/scheme.html
<leoprikler>How far away is G-Golf from Guile 3.0 compatibility?
<spk121>hi
<leoprikler>Hi
<RhodiumToad>mornin'
<elliotpotts>evening folks
<civodul>hey spk121
<elliotpotts>anybody managed to replace setjmp/longjmp with c++ exceptions before?
<elliotpotts>I suppose being able to do it myself is the whole point of the GPL :D
<RhodiumToad>hm, guile uses setjmp in an illegal fashion
<RhodiumToad>the setjmp call in vm.c is undefined behavior
<elliotpotts>well that's no good
<elliotpotts>even in C, you mean?
<RhodiumToad>C allows setjmp to appear only in very specific contexts.
<elliotpotts>gosh
<elliotpotts>how is it acceptable that guile has UB? maybe gnu c has an exception or something?
<RhodiumToad>setjmp(...); can be a statement by itself (with optional (void) cast), or you can have setjmp(...) with an optional comparison to an integer constant or an optional ! operator as the expression in a conditional statement or switch()
<RhodiumToad>all other uses of setjmp, including the resume = setjmp (registers); in vm.c, are undefined
<elliotpotts>that's disappointing
<elliotpotts>it looks like I can't use guile
<RhodiumToad>why not?
<RhodiumToad>if you're going to modify it to use exceptions, then you'd be changing that anyway
<elliotpotts>I mean, I'm not sure I can be bothered to put the effort in to change it to exceptions, though :P
<elliotpotts>I'm not familiar at all with setjmp/longjmp
<RhodiumToad>setjmp returns 0 when called normally, but longjmp makes the corresponding setjmp call return again with a value other than 0
<RhodiumToad>so if (!setjmp(&x)) { /* this part happens normally */ } else { /* this can only happen if something in the normal part did longjmp(&x) */ }
***terpri_ is now known as terpri
<RhodiumToad>if you don't mind limiting yourself to gcc or llvm, then you could do what luajit does and use libunwind-based exception logic
<RhodiumToad>that's probably more of a project, though
<elliotpotts>yeah, sounds like a bit of a project ...
<elliotpotts>really all I wanted scheme for was to eval some sexprs with quoting
<elliotpotts>I was thinking of using quoting to replace what is essentially JSX-esque stuff
<elliotpotts>I want to define my UI with sexpr
<elliotpotts>`(label (:text ,(get-name)))
<elliotpotts>^this sorta thing. So any lisp will do really, I just thought it'd be nice to use gnu guile
<elliotpotts>brb, installed a new kernel
<chrislck>very ominous: "brb, installed a new kernel"
<RhodiumToad>the longjmp thing is only likely to be a problem if you call into c++ code from guile and throw exceptions
<mwette>while on the setjmp issue, is setcontext more typical than setjmp these days?
<spk121>mwette: setcontext hasn't made it into the WG14 standard for C2X. I don't have a feel for how popular it is out in the real world
<spk121>of course the actual C2X standard is pretty weird: thousands of obscure math functions but no way to list the files in a directory
<RhodiumToad>I wouldn't say it's more typical
<elliotpotts>the problem is if I call guile from c++, destructors will be skipped over if the guile code throws
<RhodiumToad>so catch anything thrown by guile at that point
<dsmith-work>Happy Friday, Guilers!!
<civodul>yay, happy Friday!
<spk121>a happy friday indeed
<mwette>thx all
<mwette>enjoying RDO Friday today
<chrislck>\O FRIDAY
<chrislck>(dance)
<spk121>RDO?
<dsmith-work>So if you call guile code from C++, you need to wrap the call in a catch handler to get controll back.
<dsmith-work>elliott_: ^^ (if you are elliotpotts)
<dsmith-work>Yes. It's tedious.
<leoprikler>FWIW I wrote a wrapper once, that catches Guile exceptions and stores them in GErrors, with the code only being a rather short switch case
<leoprikler>converting them to std::exception should not be a big deal
<leoprikler>RhodiumToad: is the return value of setjmp after longjmp not defined as "the argument that was passed, or 1 if it's 0"?
<RhodiumToad>yes, that's how it's defined
<RhodiumToad>why?
***jonsger1 is now known as jonsger
<mwette>RDO = regular day off : work 9 days every two weeks
<dsmith-work>So is that 5+4 or 9 straight?
*dsmith-work wants a RDO
<dsmith-work>Today would be perfect!
<mwette>wk1: 4x9hr + 1x8hr; wk2: 4x9hr
<spk121>three day weekends would be nice
<mwette>You get used to it.
<rlb>Does guile allow us to assume anything wrt set! and threads, i.e. maybe that all threads will eventually see the change, and that the underlying word change will be atomic? (I suspect that's true, but wondered if we're allowed to depend on it.)
<justin_smith>rlb: I'm not sure of the details here, but a pattern I have learned that simplifies this a lot is using an immutable data structure, plus a mutable box - it's much easier to ensure that the one mutation (changing the box) never puts the data in an invalid state
<justin_smith>guile has immutable sets and hashes, and and it's easy to pretend lists are immutable and just not use the mutation function on them
<rlb>Oh, certainly - I just have a special case in some testing code where it'd be easier to rely on mutating the let vars.
<rlb>I can easily rewrite it to use atomic boxes or something similar (the code is actually testing some race conditions, so rewriting it more functionally would invalidate the test :) ).
<spk121>it would be cool if there were a procedure like 'eval-string' that processed a line of text as if you were typing it into the REPL
<leoprikler>you mean completely with meta commands like ,L?
<leoprikler>there is (run-repl* repl prompting-meta-read)
<leoprikler>[unexported, of course]
<leoprikler>similarly start-repl*, which is used by coop-server even though it's not exported
<emys>so, I am implementing my own language using the guile compiler tower.
<emys>now I have a weird issue, in the spec I set the #:make-default-environment parameter to a custom function so that I start from a clean-slate environment (and not use the scheme environment).
<emys>If run a script using `guile --language=my-lang my-file' everything works as expected (my test is the `write' procedure which isn't present in my lang).
<emys>I mean `guile --language=my-lang -s my-file'
<emys>If I run the repl via `guile --language=my-lang' the `write' procedure seems to still be in the namespace
<emys>so I am fairly confident that in the repl, the environment-generating thunk is not called
<mwette>You are setting #:make-default-environment in your lang/spec.scm file to something appropriate?
<emys>mwette, think so, I had a look at make-fresh-user-module and went from there, its a thunk in which I use (make-module) to create a new module and `module-define!' for adding the builtins
<emys>if I ad an `(error "test")` call, `guile -s` doesn't work anymore because an error is raised but I can still use the repl with my language
<emys>also I have verified that in the repl it indeed uses my compile-tree-il code because the forms I implemented there are correctly treated.
<mwette>What if you run guile and use ,L my-lang ?
<emys>same as guile --language=my-lang
<emys>maybe its something about the "#:evaluator" keyword?
<emys>Its not documented in the docs so I didn't use it
<emys>but I don't thats the reason
<mwette>I use '#:evaluator (lambda (exp mod) (primitive-eval exp))
<mwette>but I'm including the scheme env in my lang's
<emys>yeah, adding this doesn't change anything.
<emys>,L ecmascript also features scheme stuff on the repl
<mwette>maybe try '#:evaluator (lambda (exp mod) (eval exp mod))
<emys>I guess REPL is using (current-module) or something
<emys>mwette, will try
<mwette>Your compile routine is returning the env it was passed? (values tree env cenv)
<mwette>It's been a while since I worked on this stuff.
*mwette afk for a bit
<emys>mwette, it does
<emys>in the REPL, (current-module) is $1 = #<directory (guile-user) 7fe216f1ef00>
<emys>outside the REPL its #<module (#{ g160}#) 7ff481996780>
<mwette>check this: (use-modules (system base compile))
<mwette>sorry: (decompile (compile '(write 1) #:from 'scheme #:to 'tree-il #:env (make-module)) #:from 'tree-il #:to 'scheme)
<mwette>maybe that is not good because scheme will pull in it's default. But you may be able to decopile inside your compile-tree-il to see what's going on
<mwette>or try the (deompile (comile #:from my-lang #:to tree-il) #:to 'scheme) with use of write in my-lang
<mwette>maybe this: in (system repl repl) meta-reader is called with (current-module)
***ftknox is now known as ayeaye