IRC channel logs
2026-09-26.log
back to list of logs
<old>eh I can't find anywehre in the documentation nor where in the code that calling into a primitive routine (C) is a continuation barrier <JohnCowan>mwette: I didn't write the implementation, but it's surely an error, fortunately harmless <janneke>ice-9/boot-9.scm:1685:16: In procedure raise-exception: <janneke>unknown location: unexpected syntax in form () <ArneBab>old: regarding #:declarative? I wish that had stayed #f by default, because it breaks every interactive REPL by default, and it breaks cross-version compatibility. If your code has to run on Guile 2 and Guile 3, you cannot use #:declarative? #f (else Guile 2 breaks), so you’re stuck with separate releases (only setting #:declarative? #f in Guile 3) or having to set the (user-modules-declarative? #f) in ~/.guile behind a version gate ( <ArneBab>old: I would have much preferred to have all guile modules explicitly marked as #:declarative #t and to have the default as #f. <ArneBab>I have some systems where I can only get Guile 2 (I have several One Laptop Per Child systems that they could no longer pass on because there was a newer version), but I want to work on my programs on these, too. <JohnCowan>The nature of changes to the major version number is that compatibility can be broken <ArneBab>Yes, it can, but it should still be avoided if possible. Because communicated breakage is still breakage. <ArneBab>And this change costed me many hours. I’d have much preferred to spend those hours adding #:declarative #t to most internal guile modules. <ArneBab>That the live REPL no longer works out of the box is an actual detriment (and a trap I walked into at least three times: "why don’t set! and define change the update procedures in chickadee anymore? What am I doing wrong?" <ArneBab>Any module where you want to do live hacking in the REPL must not be declarative, otherwise the chance is high that your changes won’t propagate. <JohnCowan>The downside of defaulting to the old version is that as changes accumulate you have to keep adding more flags to the start of your program just to di normal things. Perl, Elisp, and Haskell sre ecamples of this <ArneBab>Yes, but in this case it’s the change that forces me to add more flags to the program to do normal things like REPL-based development. I understand that that’s for performance, but we could have gotten those improvements by making modules declarative explicitly that are part of Guile (so they are always shipped together). <ArneBab>Also I remember how much "implicit none" annoyed me in Fortran, but having been bitten by the breakage that explicit flags would have prevented, I’ve grown to prefer the explicit flag over broken compatibility. <mwette>JohnCowan: Thanks. The github repo for that has no issues tab for some reason. <old>ArneBab: wrt to declarative. I guess that when designin a PL, you have to make some choices. Having declarative modules by default unlock lots of performance for most users. If it was not the default, lots of project would miss from it because their author did not knew about the option <old>Also (user-modules-declarative? #f) should be set when running REPL I suppose <old>i'm sure there was a rationale behind this decision <mwette>I guess it could have been to generate good metrics for throughput. <JohnCowan>ArneBab: I'm not really an Elisp programmer, but enabling lexical scope is one such flag <ArneBab>old: I think unlocking the optimization options was the rationale. <ArneBab>old: does user-modules-declarative? have to be set #f before the auto-compile? If yes: it’s a setting that doesn’t work when the cooperative-repl is started, because that happens after the compile. <ArneBab>old: I also didn’t object at the time, because I didn’t see all the problems that would cause down the line. <dsmith>IIRC, wingo was doing compiler work about that time, and it opened up many more opportunities for inlining. <dsmith>Also, aren't r6rs (and r7rs?) libraries immutable? <ArneBab>ACTION actually doesn’t want to complain that much about that, it’s just an example of stumbling points due to changes <ArneBab>Though I’d wish we could go back on that decision and just mark every module guile ships as declarative (people aren’t expected to do runtime modification of these) – to get most of the performance but have easier hacking in small projects. <ArneBab>One of the goals of declarative modules was to enable cross-module inlining, AFAIK.