#guile — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #guile, aggregated by home.social.
-
I am starting to become very annoyed with #Guile Scheme because they are so far behind in providing some very important modern SRFIs.
Of course I could implement these myself and submit a patch, but in the mean time I would have to wait for my patch to be accepted and distributed in the next Guile version. And while I waited I would have to just implement these SRFIs in my own source code for myself. I don’t have time, so I always end up just implementing the APIs that I need for my own project, usually as a wrapper around some other Guile API that does provide that functionality but in a non-standard way.
For the past two years or so I have kept on running into issues caused by the fact that Guile does not provide SRFI-125 (hash tables) and SRFI-128 (comparators). Guile provides SRFI-69 (the old hash tables) but it doesn’t use comparators, and so the semantics for things like
make-hash-tableandalist->hash-tablein Guile are not compatible with most other R7RS-compliant Scheme implementations. I keep having to go back and update variouscond-expandstatements to get around this. Some data structures are so fundamental to modern software that you just can’t do without them. Providing these SRFIs should really be a priority.Also the following would be really nice to have in Guile, like really soon:
- SRFI-160: homogeneous numerical vectors, Guile only provides the older version of it, SRFI-4.
- SRFI-170: POSIX API: Guile provides all of these APIs but not always in a way that follows SRFI-170.
- SRFI-180: JSON, Guile provides all of these APIs but not fully compatible with SRFI-180.
- SRFI-181: Custom ports, Guile provides similar features built-in but not in a way that follows SRFI-181.
#tech #software #Lisp #SchemeLang #Scheme #R7RS #GuileScheme #FunctionalProgramming
-
@momo cool!
Well then, please have a listen to the episodes of the #LispyGopherClimate podcast that me, @kentpitman and @screwlisp did these past few weeks:
- Kent Pitman presents his lisp condition system implemented for python
- Kent Pitman, Scott Zimmermann, Ramin Honary, Screwlisp: Lisp Conditions in Python
- Common Lisp condition handling lore
- Common Lisp condition system, code review of my programming example
- Common Lisp condition handling w/ Kent Pitman, Ramin Honary
#tech #software #Lisp #CommonLisp #Scheme #SchemeLang #R7RS #MITScheme #Guile #GuileScheme
-
@screwlisp @kentpitman I’m just reading up on the MIT-Scheme condition system. Recent efforts to standardize this are defined in SRFI-255: “Restarting conditions”.
An older standards condition systems in Scheme was defined in SRFI-35: “Conditions”. And #Guile users can use the Guile implementation of SRFI-35 to make use of it.
I wish I had known about this two weeks ago when we first started talking about it on the #LispyGopherClimate show, but better late than never, I guess.
#tech #software #Lisp #CommonLisp #Scheme #SchemeLang #R7RS #MITScheme #Guile #GuileScheme
-
Ouch, #Guile #Scheme has betrayed meI am using Guile-GI the GObject Introspection framework for Guile, and discovered that the
eq?predicate sometimes returns#tfor two different symbols. Does #GOOPS allow overloadingeq?on symbols such that it can return#ton different symbols? If so this seems like a huge problem to me, it completely violates the Scheme language specification. (Or should I ask, is this a “GOOPS oopsie?”)Anyway, what happens is this: you can capture a Gtk keyboard event in an event handler, and extract the list of modifier keys pressed on that key event. It looks something like this:
(lambda (event) (let*-values (((state-ok modifiers) (event:get-state event)) ((mod-bits) (modifier-type->number modifiers)) ((first-mod) (car mod-bits))) (display "first modifier: ") (write first-mod) (newline) (display "is symbol? ") (write (symbol? first-mod)) (newline) (display "eq? to 'mod1-mask: ") (write (eq? 'mod1-mask first-mod)) (newline) #t ))And the output of the above event handler, when I press a key with a CJK input method enabled (on latest Linux Mint) is this:
first modifier: modifier-reserved-25-mask is symbol? #t eq? to 'mod1-mask: #tThe fact that
(eq? 'mod1-mask 'modifier-reserved-25-mask)when the'modifier-reserved-25-maskhas been obtained from a C-language FFI callback is a pretty bad thing to happen in a Scheme implementation, in my humble opinion. -
I wrote a post about an annoying flag of the GNU Guile `guile` command.
https://kaka.farm/posts/2025/12/17/the-great-gnu-guile-conspiracy-or-why-fresh-auto-compile-instead-of-force-auto-compile-like-everybody-else.html
#6b480ced9c31be3106e675b51afb2dfa4245bd03
#charlieday
#conspiracy
#forcecompile
#freshautocompile
#gnuguile
#guile
#itsalwayssunnyinphiladelphia
#pepesylvia
#scheme
#whoispepesylvia -
The official steering committee of the Scheme programming language is calling a vote to replace themselvesQuoting the memo:
The outgoing Steering Committee was elected in 2009 and successfully oversaw the production and ratification of the R7RS small language report until 2013. Unfortunately, during the protracted initial development of the R7RS large language after that, it fell dormant.
The current Scheme Working Group resolved in September 2025 to ask the Steering Commitee for a new election because it felt that after such long dormancy the outgoing Steering Committee was no longer able, as a group, to make and implement decisions effectively.
The Scheme standardization process charter says, ‘The Steering Committee itself shall establish procedures for replacing its members.’ The outgoing Steering Committee unanimously decided to delegate this task to the current Working Group. The Working Group has very closely modelled the procedure to be used this time on the procedure used last time.
The Working Group has written a statement to candidates and voters explaining what it hopes for in a new steering committee.
#tech #software #Scheme #SchemeLang #ProgrammingLanguage #R7RS #R7RSLarge #Lisp #FunctionalProgramming #Guile #GuileScheme #ChezScheme #ChickenScheme #GambitScheme #RacketLang #Racket
-
I wrote a GNU Guile script that converts Mozilla Firefox JSON bookmarks archive to an org-mode format.
https://codeberg.org/kakafarm-guile-modules/guile-firefox-json-bookmarks-archive-to-org-mode-format/
Just:
guile firefox-json-bookmarks-archive-to-org-mode-format.scm < bookmarks.json > bookmarks.orgIf you have any comments and/or improvements in mind, please write a message here or on the Balkanised Activitypub Federation to @[email protected]. I haven't left the house in days and am very lonely. Thank you!
#emacs #freesoftware #gnuemacs #gnuguile #guile #hailignucius #orgmode #scheme
-
Today I cleaned up some previous #Scheme code I wrote towards the end of last year. But gave an attempt at using #R7RS style libraries in #Guile.
One big helps for me was finding in the emailing list that you'd need to use the
.sldfile ending rather than.scm. (todo with library resolution).So I have something that works now. Though I'm not sure it's portable. Tomorrow I'll checkout Chicken Scheme and see if it works.
-
I'm in a pickle. I'm in a jam. A lisp game pickle jam.
I compiled the thing, but when I run it in the browser, it yields this error:
Uncaught (in promise) CompileError: wasm validation error: at offset 4: failed to match magic number instantiate_streaming http://localhost:8080/reflect.js:148 reflect http://localhost:8080/reflect.js:231 reflect http://localhost:8080/reflect.js:1006 load_main http://localhost:8080/reflect.js:284 async* http://localhost:8080/game.js:3 EventListener.handleEvent* http://localhost:8080/game.js:1#gnuguile #guile #guilehoot #hoot #lisp #lispgamejam #scheme #spritely #spritelyhoot #wasm #web #webassembly
-
Progress on my clone of the Emacs Lisp interpreterThis took me three months (a month longer than I had hoped), but I finally have merged it into the main branch!
This patch rewrites the Emacs Lisp lexer and parser in Scheme using Scheme code that is 100% compliant with the #R7RS standard, so it should now work across all compliant Scheme implementations. Previously the old parser relied on #Guile -specific regular expressions.
This patch also implements a new feature where a stack trace is printed when an error occurs. This of course makes debugging much, much easier. Previously the old parser did not keep track of where code evaluation was happening, it simply produced lists without source location information. The new parser constructs an abstract syntax tree (AST) and source locations are attached to the branches of the tree which can be used in error reporting and stack traces.
Next I will make whatever minor tweaks might be necessary to get my Emacs Lisp interpreter run on other Scheme implementations, in particular MIT Scheme, Gambit, Stklos, and Gauche. I would also like to try to get it running on Chicken and Chez, although these are going to be a bit more tricky.
Then I will continue with the task of implementing a new declarative GUI library.
#tech #software #FOSS #FunctionalProgramming #Lisp #Scheme #SchemeLang #EmacsLisp #Emacs #Schemacs #GuileScheme
-
In GNU Guile,
cond-expandknows of supported features that are not built into GNU Guile only once I have already imported the libraries in which the features are implemented, wherecond-expand-provideis being used to define acond-expandfeature.Why bother using
cond-expand-provideif it will run only after you already have imported something?It is the chicken and the egg problem, or something.
AH JUS DUN GAE ET.
-
(first on https://kaka.farm/posts/2025/02/17/an-inquisition-against-meaningless-short-variable-names.html)
I have started an inquisition.
An inquisition against meaningless short variable names.
Putting each of them on the rack and pulling until they make sense and put a skewer up their bum - from
vartomeaningful-many-words-shishlik-style-variable-name. 🍢For example, in guile-bytevector-peg (as of now just a work in progress):
accumis nowaccumulation-type,patispattern, andplenispattern-length.
NO SOURCE FILE SHALL BE LEFT UNTOUCHED.
NO VARIABLE NAME WILL GO UNEXAMINED.
EXPECT US! 💀
-
#Shepherd 1.0.1 has been released (#GNU / #GNUShepherd / #GNUdmd / #GNUDaemon / #Daemon / #DaemonManagingDaemons / #GNUGuile / #Guile / #GNUGuix / #Guix) https://gnu.org/software/shepherd/
-
#Shepherd 1.0.1 has been released (#GNU / #GNUShepherd / #GNUdmd / #GNUDaemon / #Daemon / #DaemonManagingDaemons / #GNUGuile / #Guile / #GNUGuix / #Guix) https://gnu.org/software/shepherd/
-
#Shepherd 1.0.1 has been released (#GNU / #GNUShepherd / #GNUdmd / #GNUDaemon / #Daemon / #DaemonManagingDaemons / #GNUGuile / #Guile / #GNUGuix / #Guix) https://gnu.org/software/shepherd/
-
#Shepherd 1.0.0 has been released (#GNU / #GNUShepherd / #GNUdmd / #GNUDaemon / #Daemon / #DaemonManagingDaemons / #GNUGuile / #Guile / #GNUGuix / #Guix) https://gnu.org/software/shepherd/
-
#Shepherd 1.0.0 has been released (#GNU / #GNUShepherd / #GNUdmd / #GNUDaemon / #Daemon / #DaemonManagingDaemons / #GNUGuile / #Guile / #GNUGuix / #Guix) https://gnu.org/software/shepherd/
-
#Shepherd 1.0.0 has been released (#GNU / #GNUShepherd / #GNUdmd / #GNUDaemon / #Daemon / #DaemonManagingDaemons / #GNUGuile / #Guile / #GNUGuix / #Guix) https://gnu.org/software/shepherd/
-
-
-