#+TITLE: Guile Awesome List
#+AUTHOR: Zelphir Kaltstahl (help & input from Guile community)
#+DATE: <2020-08-22 Sa>
#+KEYWORDS: guile, GNU, list, library, framework, project,
* Manuals
- There is a huge reference manual for GNU Guile on the GNU website: [[https://www.gnu.org/software/guile/manual/]].
* Tutorials / Guides / Books
** General GNU Guile / Scheme
- Guile reference manual
- website: [[https://www.gnu.org/software/guile/manual/]]
- official Guile tutorial
- website: [[https://www.gnu.org/software/guile/docs/guile-tut/tutorial.html]]
- Structure and Interpretation of Computer Programs (SICP)
- website: [[https://mitpress.mit.edu/sites/default/files/sicp/index.html]]
- PDF version: [[https://github.com/sarabander/sicp-pdf]]
- The Little Schemer
- website: [[https://mitpress.mit.edu/books/little-schemer-fourth-edition]]
- "Learn Scheme in 15 minutes"
- website: [[https://web-artanis.com/scheme.html]]
- guile-tutorial
- git repo: [[https://notabug.org/cwebber/guile-tutorial]]
- Guile Hacker Handbook
- website: [[https://jeko.frama.io/en/index.html]]
- git repo: [[https://framagit.org/Jeko/jeko.frama.io]]
- The Scheme Programming Language
- web version: [[https://scheme.com/tspl4/]]
- A Pamphlet Against R
- PDF version: [[https://github.com/panicz/pamphlet/raw/master/pamphlet.pdf]]
- source codes: [[https://github.com/panicz/pamphlet]]
** Macros
- Macros in the GNU Guile reference manual
- website: [[https://www.gnu.org/software/guile/manual/html_node/Macros.html]]
- Writing Hygienic Macros in Scheme with Syntax-Case
- article: [[https://doc.lagout.org/programmation/Lisp/Scheme/Programming%20With%20Hygienic%20Macros%20-%20R%20K%20Dybvig.pdf]]
- Community Scheme Wiki about macros
- scheme-faq-macros
- website: [[http://community.schemewiki.org/?scheme-faq-macros]]
- syntax-case
- website: [[http://community.schemewiki.org/?syntax-case]]
- A Scheme Syntax-Rules Primer
- website: [[http://www.willdonnelly.net/blog/scheme-syntax-rules/]]
- Macro-by-Example: Deriving Syntactic Transformations from their Specifications
- paper: [[https://legacy.cs.indiana.edu/ftp/techreports/TR206.pdf]]
- wikibooks.org about macros
- website: [[https://en.wikibooks.org/wiki/Scheme_Programming/Macros]]
- Advanced Scheme Techniques - Some Naughty Bits
- slides: [[http://people.csail.mit.edu/jhbrown/scheme/macroslides04.pdf]]
- C2 Wiki Scheme Macro Examples
- website: [[http://wiki.c2.com/?SchemeMacroExamples]]
- JRM's Syntax-rules Primer for the Merely Eccentric
- website: [[https://hipster.home.xs4all.nl/lib/scheme/gauche/define-syntax-primer.txt]]
- another location: [[http://www.phyast.pitt.edu/~micheles/syntax-rules.pdf]]
- Scheme Macros I: Modules
- website: [[https://blog.veitheller.de/Scheme_Macros_I:_Modules.html]]
- Writing Macros in Continuation-Passing Style
- paper: [[https://www.semanticscholar.org/paper/Writing-Macros-in-Continuation-Passing-Style-Hilsdale-Friedman/
752575dc24
#citing-papers]] (TODO: find a more permanent looking link)
- Low- and high-level macro programming in Scheme
- website: [[http://okmij.org/ftp/Scheme/macros.html]]
*** CK macros
- Applicative syntax-rules: macros that compose better
- website: [[http://okmij.org/ftp/Scheme/macros.html#ck-macros]]
- Chicken Scheme Wiki about ck-macros
- website: [[http://wiki.call-cc.org/eggref/5/ck-macros]]
** Monads
- A Schemer's Introduction to Monads
- website: [[http://www.ccs.neu.edu/home/dherman/research/tutorials/monads-for-schemers.txt]]
- A Schemer’s View of Monads - Partial Draft
- website: [[https://cgi.sice.indiana.edu/~c311/lib/exe/fetch.php?media=manymonads.pdf]]
- Monadic Programming in Scheme
- website: [[http://okmij.org/ftp/Scheme/monad-in-Scheme.html]]
- Panicz Godek's answer to How would you explain a concept of monads to a non-CS person?
- website [[https://www.quora.com/How-would-you-explain-a-concept-of-monads-to-a-non-CS-person/answer/Panicz-Godek]]
- Panicz Godek's answer to https://www.quora.com/Why-do-so-many-programmers-not-understand-the-theory-of-monads/answer/Panicz-Godek
- website [[https://www.quora.com/Why-do-so-many-programmers-not-understand-the-theory-of-monads/answer/Panicz-Godek]]
** FFI - Foreign Function Interface
- GNU Guile standard library FFI
- GNU software reference manual: [[https://www.gnu.org/software/guile/manual/html_node/Foreign-Function-Interface.html]]
* Libraries
** Async
- 8sync
- git repository at Savannah: [[https://savannah.gnu.org/projects/8sync]]
- manual / GNU software manual: [[https://www.gnu.org/software/8sync/manual/html_node/index.html#Top]]
- website / GNU software page: [[https://www.gnu.org/software/8sync/]]
- tutorial: [[https://www.gnu.org/software/8sync/manual/html_node/Tutorial.html#Tutorial]]
** Browser
- Nomad
- git repository at non-GNU Savannah: [[https://savannah.nongnu.org/projects/nomad/]]
- website: [[https://www.nongnu.org/nomad/]]
** Chat
*** Chat clients
**** IRC
- ~guile-irc~
- git repository at GitHub: [[https://github.com/rekado/guile-irc]]
- description: /"An irc library for GNU guile."/ (https://github.com/rekado/guile-irc/blob/master/README)
- API reference manual: [[http://fbs.github.io/guile-irc/]]
*** Chat bots
**** IRC
- Cunning Bot
- description:
#+begin_quote
Cunning Bot is a command-oriented IRC bot written in Guile Scheme.
(https://github.com/cadrspace/cunning-bot/blob/cadrobot/README)
#+end_quote
- git repo: [[https://github.com/cadrspace/cunning-bot]]
** Compression
- ~guile-zlib~
- git repository at GitHub: [[https://github.com/davexunit/guile-zlib]]
** Computer vision
- GNU Guile-CV
- website: [[https://www.gnu.org/software/guile-cv/]]
- GNU software reference manual: [[https://www.gnu.org/software/guile-cv/manual/html_node/index.html]]
- description:
#+begin_quote
Guile-CV - Image Processing and Analysis in Guile - is a Computer Vision functional programming library for the Guile Scheme language.
Guile-CV is based on Vigra (Vision with Generic Algorithms), enhanced with additional algorithms (Image Textures, Delineate, Reconstruction and many more), all accessible through a nice, clean and easy to use high level API.
Guile-CV is natively multi-threaded, and takes advantage of multiple cores, using high-level and fine grained application-level parallelism constructs available in Guile, based on its support to POSIX threads.
(https://www.gnu.org/software/guile-cv/index.html)
#+end_quote
** Configuration
- ~guile-config~
- git repository at GitLab: [[https://gitlab.com/a-sassmannshausen/guile-config]]
** Cryptography
- ~guile-gcrypt~
- git repo: [[https://notabug.org/cwebber/guile-gcrypt]]
- description:
#+begin_quote
Guile-Gcrypt provides a Guile 3.x/2.x interface to a subset of the GNU
Libgcrypt crytographic library, which is itself used by the GNU Privacy Guard
(GPG).
Guile-Gcrypt provides modules for cryptographic hash functions, message
authentication codes (MAC), public-key cryptography, strong randomness, and
more. It is implemented using the foreign function interface (FFI) of Guile.
#+end_quote
** Databases
*** Generic
- Generic
- ~guile-dbi~
- git repository at GitHub: [[https://github.com/opencog/guile-dbi]]
- documentation: [[https://htmlpreview.github.io/?https://github.com/opencog/guile-dbi/blob/master/website/guile-dbi.html]]
- offers MySQL, Postgresql and SQLite3 interfaces
*** Postgres
- ~guile-squee~
- git repository at notabug.org: [[https://notabug.org/cwebber/guile-squee]]
- documentation at: ???
- ~guile-dbd-postgresql~
- git repository: [[https://github.com/opencog/guile-dbi/tree/master/guile-dbd-postgresql]]
- documentation: [[https://github.com/opencog/guile-dbi/blob/master/guile-dbd-postgresql/README]]
- description: This is a sub-repository of ~guile-dbi~ which is used for dealing with the Postgres side of things.
*** Sqlite
- ~guile-sqlite3~
- git repository at notabug.org: [[https://notabug.org/guile-sqlite3/guile-sqlite3.git]]
- documentation at: ???
- ~guile-dbd-sqlite3~
- git repository at GitHub: [[https://github.com/opencog/guile-dbi/tree/master/guile-dbd-sqlite3]]
- documentation: [[https://github.com/opencog/guile-dbi/blob/master/guile-dbd-sqlite3/README]]
- description: This is a sub-repository of ~guile-dbi~ which is used for dealing with the Sqlite3 side of things.
*** MySQL
- ~guile-dbd-mysql~
- git repository at GitHub: [[https://github.com/opencog/guile-dbi/tree/master/guile-dbd-mysql]]
- documentation: [[https://github.com/opencog/guile-dbi/blob/master/guile-dbd-mysql/README]]
- description: This is a sub-repository of ~guile-dbi~ which is used for dealing with the MySQL side of things.
*** Redis
- ~guile-redis~
- git repository at GitHub: [[https://github.com/aconchillo/guile-redis]]
*** CouchDB
- CouchDB
- ~guile-couchdb~
- git repo: [[https://github.com/ukulanne/guile-couchdb]]
- description: CouchDB bindings for Guile
*** Other
- WiredTiger ([[http://www.wiredtiger.com/]]
- ~guile-wiredtiger~
- blog post: [[https://hyper.dev/blog/getting-started-with-guile-wiredtiger.html]]
- git repository at: ??? (framagit requires login?)
- ~guile-sparql~: [[https://github.com/roelj/guile-sparql]]
- ~sparqling-genomics~: [[https://github.com/UMCUGenetics/sparqling-genomics]]
- ~nomunofu~
- mentioned on: https://hyper.dev/blog/nomunofu.html
- git repo: ???
** Data structures
*** Purely functional data structures (PDFS)
- ~pdfs~
- git repository at GitHub: [[https://github.com/ijp/pfds]]
- documentation: ???
- ~fectors~
- git repository at GitHub: [[https://github.com/ijp/fectors]]
*** RDF
- ~guile-rdf~
- git repository at framagit: [[https://framagit.org/tyreunom/guile-rdf]]
*** Lenses
- ~guile-lens~
- git repository at GitLab: [[https://gitlab.com/a-sassmannshausen/guile-lens]]
*** Other
- ~copernic~
- git repository at GitHub: [[https://github.com/amirouche/copernic]]
- ~scheme-bytestructures~
- git repo: [[https://github.com/TaylanUB/scheme-bytestructures]]
- description:
#+begin_quote
[...] offers a system imitating the type system of the C programming language, to be used on bytevectors. C's type system works on raw memory, and ours works on bytevectors which are an abstraction over raw memory in Scheme. The system is in fact more powerful than the C type system, elevating types to first-class status.
#+end_quote
- ~guile-newra~
- git repo: [[https://github.com/lloda/guile-newra]]
- description: "A Scheme replacement for Guile's array system" ([[https://github.com/lloda/guile-newra]])
- Treaps
- website: [[http://okmij.org/ftp/Scheme/#treaps]]
- description:
#+begin_quote
An ordered dictionary data structure, based on randomized search trees (treaps) by Seidel and Aragon. Compared to red-black trees, treap is simpler and more elegant, and can get by without sentinels.
(http://okmij.org/ftp/Scheme/#treaps)
#+end_quote
** Development environments
- ~guile-studio~
- git repo: [[https://git.elephly.net/gitweb.cgi?p=software/guile-studio.git;a=tree]]
- description:
#+begin_quote
Racket has Dr Racket. Guile has ... Emacs? This is Emacs with a few
settings that make working with Guile easier for people new to Emacs.
Features include: CUA mode, Geiser, tool bar icons to evaluate Guile
buffers, support for Guile's very own picture language, code completion, a
simple mode line, etc. [...]
#+end_quote
([[https://git.elephly.net/gitweb.cgi?p=software/guile-studio.git;a=blob;f=README.org;hb=HEAD]])
** Device management
- ~guile-udev~:
- description: /"Guile-Udev is a GNU Guile bindings to libudev."/ ([[https://github.com/artyom-poptsov/guile-udev/blob/master/README]])
- git repo: [[https://github.com/artyom-poptsov/guile-udev]]
- documentation: (inside the git repo: [[https://github.com/artyom-poptsov/guile-udev/blob/master/doc/guile-udev.texi]])
- examples: (inside the git repo: [[https://github.com/artyom-poptsov/guile-udev/tree/master/examples]])
** Distributed computing
- ~metabash~
- git repository: [[https://github.com/artyom-poptsov/metabash]]
- description: /"GNU Guile module for running distributed shell pipelines."/ -- [[https://github.com/artyom-poptsov/metabash/blob/master/README.org]]
** E-Mail
- GNU Mailutils ??? ([[https://mailutils.org/]])
- ~guile-email~: [[https://guile-email.systemreboot.net/]]
** Event loop
- ~guile-a-sync~
- git repository at GitHub: [[https://github.com/ChrisVine/guile-a-sync]]
- documentation: ?
** FFI - Foreign Function Interface
- GNU Guile standard library FFI
- GNU software reference manual: [[https://www.gnu.org/software/guile/manual/html_node/Foreign-Function-Interface.html]]
- ~ffi-helper~ from NYACC
- documentation: [[https://www.nongnu.org/nyacc/ffi-help.html]]
** File formats
*** JSON
- JSON
- ~guile-json~
- on GitHub: [[https://github.com/aconchillo/guile-json]]
- on savannah: [[http://savannah.nongnu.org/projects/guile-json/]]
*** CSV
- ~guile-csv~
- git repository at GitLab: [[https://gitlab.com/NalaGinrut/guile-csv]]
- ~guile-dsv~
- This is more general, but can work with CSV as well.
- git repository at GitHub: [[https://github.com/artyom-poptsov/guile-dsv]]
*** XML
- Guile's standard library SXML implementation
- GNU software manual: [[https://www.gnu.org/software/guile/manual/html_node/SXML.html]]
- Basically your templates become functions or macros.
- The structure of your document is kept as Scheme data structures.
- This avoids having parse the document as a long string into an internal data structure to perform semantic transformations.
- It enables pattern matching without resorting to things like regular expressions and similar shenanigans.
*** Markdown
- ~guile-commonmark~
- git repository at GitHub: [[https://github.com/OrangeShark/guile-commonmark]]
- documentation: ???
*** Texinfo
- Guile standard library texinfo functionality
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/texinfo.html]]
*** JPEG
- ~guile-jpeg~: a library for parsing JPEG files
- git repository at GitHub: [[https://github.com/guildhall/guile-jpeg]]
***
*** ICS
- ~guile-ics~
- git repository at GitHub: [[https://github.com/artyom-poptsov/guile-ics]]
*** torrent
- ~torrent~
- git repository at GitHub: [[https://github.com/o-nly/torrent]]
- documentation at: ???
*** Other
- If the input is not input from users and is trustworthy, one might be able to leverage read/write of s-expressions instead of using other formats.
** File system
- ~sdupes~, duplicate file detection
- git repository at GitHub: [[https://github.com/sph-mn/sdupes]]
** Game development
- Chickadee
- describes itself as "game development toolkit"
- OpenGL based
- website: [[https://dthompson.us/projects/chickadee.html]]
- manual: [[https://dthompson.us/manuals/chickadee/index.html]]
** Games
- StayAlive
- git repo: [[https://github.com/mwitmer/StayAlive]]
- dryads-wake
- git repo: [[https://hg.sr.ht/~arnebab/dryads-wake]]
- description:
#+begin_quote
Dryads Wake is a game of dialogue and choices.
(https://hg.sr.ht/~arnebab/dryads-wake)
#+end_quote
** Genomics
- ~sparqling-genomics~
- git repo: [[https://github.com/UMCUGenetics/sparqling-genomics]]
- description:
#+begin_quote
This project provides programs to extract RDF triplets from commonly used file formats in genomics. It also provides a web-based environment to explore the RDF triplets once inserted in a triple store.
(https://github.com/UMCUGenetics/sparqling-genomics)
#+end_quote
- usage example: [[https://github.com/UMCUGenetics/sparqling-genomics/blob/
dc5fea515c
/web/ldap/authenticate.scm.in#L148]]
** Graphics
- ~guile-sdl~
- GNU software page: [[https://www.gnu.org/software/guile-sdl/]]
- gnuvola page of examples: [[http://www.gnuvola.org/software/guile-sdl-demos/]]
- gnuvola software page: [[http://www.gnuvola.org/software/guile-sdl-demos/]]
- ~guile-sdl2~
- project website: [[https://dthompson.us/projects/guile-sdl2.html]]
- ~guile-opengl~
- GNU software page: [[https://www.gnu.org/software/guile-opengl/]]
- GNU software manual page: [[https://www.gnu.org/software/guile-opengl/manual/guile-opengl.html]]
- git repository at Savannah: [[http://savannah.gnu.org/projects/guile-opengl]]
- ~guile-cairo~
- git repository at Savannah: [[http://savannah.nongnu.org/projects/guile-cairo]]
- ~guile-jpeg~: a library for parsing JPEG files
- git repository at GitHub: [[https://github.com/guildhall/guile-jpeg]]
*** Image processing
- ~guile-cv~
- GNU software page: [[https://www.gnu.org/software/guile-cv/]]
- git repository at Savannah: [[http://git.savannah.gnu.org/cgit/guile-cv.git]]
** GUI development
- ~guile-gi~
- git repository at GitHub: [[https://github.com/spk121/guile-gi]]
- documentation at: [[https://spk121.github.io/guile-gi/]]
- ~guile-gnome~
- GNU software page: [[https://www.gnu.org/software/guile-gnome/]]
- git repository at Savannah: [[http://git.savannah.gnu.org/cgit/guile-gnome.git]]
- ~guile-gtk~
- website: [[https://www.gnu.org/software/guile-gtk/]]
- CVS repository at non-GNU Savannah: [[http://savannah.nongnu.org/projects/guile-gtk/]]
- ~g-golf~: [[https://www.gnu.org/software/g-golf/]]
** Language
- ~guile-aspell~
- git repository at GitHub: [[https://github.com/spk121/guile-aspell]]
- website: [[http://lonelycactus.com/guile-aspell.html]]
** Logging
- ~guile-logging~
- git repository at GitHub: [[https://github.com/shanecelis/guile-logging]]
- SysLog proposal
- git repo: [[https://bitbucket.org/cowan/r7rs-wg1-infra/src/default/SyslogCowan.md]]
- description: This is a specification for an implementation of syslog.
- logging module of ~sparqling-genomics~
- git repo: [[https://github.com/UMCUGenetics/sparqling-genomics/blob/master/web/logger.scm]]
- description: This is what ~sparqling-genomics~ uses internally.
** Machine Learning
- decision tree
- ~guile-ml~
- repository at notabug.org: [[https://notabug.org/ZelphirKaltstahl/guile-ml]]
- ~guile-snowball-stemmer~
- mentioned on: [[https://snowballstem.org/projects.html]]
- mentioned on: [[https://github.com/snowballstem/snowball/issues/34#issuecomment-491056371]]
- git repo: unfortunately the link to the repository is broken
- AIscm
- website: [[http://wedesoft.github.io/aiscm/]]
- description:
#+begin_quote
AIscm is a Guile extension for numerical arrays and tensors. Performance is achieved by using the LLVM JIT compiler.
(http://wedesoft.github.io/aiscm/)
#+end_quote
** Macros
- ~guile-for-loops~
- mercurial repo: [[https://hg.sr.ht/~bjoli/guile-for-loops]]
- description:
#+begin_quote
A re-implementation of a large-ish chunk of rackets for-macros. It is mostly compatible with racket's macros, with the largest omission being the body-or-break clause and some of the sequence iterators (like in-cycle, which can be covered by circular lists). There are other differences of course, like for/foldr not being on par feature-wise, and all the nicities you get by having a generic sequence interfce.
[...]
(https://hg.sr.ht/~bjoli/guile-for-loops/browse/README.md?rev=
580d3fb365
)
#+end_quote
- ~megacut~ macro:
- mercurial repo: [[https://hg.sr.ht/~bjoli/megacut]]
- description:
#+begin_quote
This is a clojure-like lambda shorthand for guile. The macro is called megacut (which is a bad name, since it is not much like cut).
(https://hg.sr.ht/~bjoli/megacut/browse/readme.txt?rev=
75caf96aa4
)
#+end_quote
- Documentation for Scheme Syntax Extension Packages in SLIB
- website: [[https://people.csail.mit.edu/jaffer/slib/Scheme-Syntax-Extension-Packages.html#Scheme-Syntax-Extension-Packages]]
** Message Queues
- Zero MQ
- ~guile-zmq~
- git repository at GitLab: [[https://gitlab.com/NalaGinrut/guile-zmq]]
- ~guile-simple-zmq~
- git repository at GitHub: [[https://github.com/jerry40/guile-simple-zmq]]
** Network programming
- Guile's standard library networking module
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/Networking.html]]
- ~guile-curl~
- git repository at GitHub: [[https://github.com/spk121/guile-curl]]
- ~guile-ssh~
- git repository at GitHub: [[https://github.com/artyom-poptsov/guile-ssh]]
- GNU Serveez
- GNU software page: [[https://www.gnu.org/software/serveez/]]
- manual: [[https://www.gnu.org/software/serveez/manual/]]
- git repository at Savannah: [[http://savannah.gnu.org/projects/serveez/]]
- ~serveez-mg~
- git repository at GitHub [[https://github.com/spk121/serveez-mg]]
- based on GNU Serveez
** Parallelism
- standard library futures
- GNU software manual page: [[https://www.gnu.org/software/guile/docs/docs-2.2/guile-ref/Futures.html]] (link to Guile 2.2 docs -- Where are the 3.x docs?)
- description:
#+begin_quote
[...] a construct for fine-grain parallelism. A future is a wrapper around an expression whose computation may occur in parallel with the code of the calling thread, and possibly in parallel with other futures. Like promises, futures are essentially proxies that can be queried to obtain the value of the enclosed expression [...]
#+end_quote
- ~guile-fibers~
- git repo: [[https://github.com/wingo/fibers]]
- description:
#+begin_quote
Concurrent ML-like concurrency for Guile
#+end_quote
- standard library parallel forms
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/Parallel-Forms.html]]
- note: Sometimes the parallel forms might cause errors, see [[https://lists.gnu.org/archive/html/guile-user/2020-01/msg00092.html]], I recommend to use futures or if suitable ~guile-fibers~ instead.
** Parsing
*** Parser Combinators
- ~stis-parser~
- git repository at GitLab: [[https://gitlab.com/tampe/stis-parser]]
*** Parser Generator
- ~nyacc~: Not Yet Another Compiler Compiler
- git repository at Savannah: [[https://savannah.nongnu.org/projects/nyacc]]
- documentation: [[https://www.nongnu.org/nyacc/nyacc-ug.html]]
*** Other
- standard library PEG parsing
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/PEG-Parsing.html]]
- description:
#+begin_quote
Parsing Expression Grammars (PEGs) are a way of specifying formal languages for text processing.
(https://www.gnu.org/software/guile/manual/html_node/PEG-Parsing.html)
#+end_quote
** Plotting
- ~guile-plotutils~
- git repository at GitHub: [[https://github.com/spk121/guile-plotutils]]
- website: [[https://www.gnu.org/software/plotutils/plotutils.html]]
** Protocols
- X protocol
- ~guile-xcb~
- git repo: [[https://github.com/mwitmer/guile-xcb]]
** Serialization formats
- ~guile-msgpack~
- git repo: [[https://gitlab.com/HiPhish/guile-msgpack]]
- description:
#+begin_quote
This is a GNU Guile library implementing the MessagePack data serialisation format. It allows you to serialise (pack) and de-serialise (unpack) Scheme objects to and from binary data according to the MessagePack format.
(https://gitlab.com/HiPhish/guile-msgpack/-/blob/master/README.rst)
#+end_quote
** SRFI (Scheme Request For Implementation) implementations
- ~TaylanUB/scheme-srfis~
- git repo: [[https://github.com/TaylanUB/scheme-srfis]]
- description: This repository contains implementations for some SRFIs.
** Strings
- ~guile-raw-strings~
- git repo: [[https://github.com/lloda/guile-raw-strings]]
** Syntax
- (grand scheme) glossary
- git repo: [[https://github.com/plande/grand-scheme]]
** Regular expressions
- IrRegular Expressions (Scheme, R[4567]RS)
- website: [[http://synthcode.com/scheme/irregex]]
** REPL (Read Eval Print Loop)
- ~guile-colorized~
- git repository at GitLab: [[https://gitlab.com/NalaGinrut/guile-colorized]]
** RPC (Remote Procedure Call)
- GNU Guile-RPC
- website: [[https://www.gnu.org/software/guile-rpc/]]
- documentation: [[https://www.gnu.org/software/guile-rpc/manual/]]
- git repo: [[http://git.savannah.gnu.org/gitweb/?p=guile-rpc.git]]
- ~guile-xmlrpc~:
- description:
#+begin_quote
guile-xmlrpc is an XMLRPC module for Guile. Guile already has the wonderful sxml module that allows XML document creation and parsing. guile-xmlrpc goes one step further and combines sxml with some macros and procedures that simplifies even more the creation and parsing of XMLRPC documents.
(https://github.com/aconchillo/guile-xmlrpc/blob/master/README.org)
#+end_quote
- git repo: [[https://github.com/aconchillo/guile-xmlrpc]]
- manual: (readme file in git repo)
** Scientific computing and mathematics
- GNU Scientific Library (GSL)
- GNU software page [[https://www.gnu.org/software/gsl/]]
- git repository at Savannah: [[http://savannah.gnu.org/projects/gsl/]]
- wikipedia page: [[https://en.wikipedia.org/wiki/GNU_Scientific_Library]]
- Guile bindings: [[http://community.schemewiki.org/?gee-guile-gsl]]
- Matrix multiplication
- ~guile-ffi-cblas~
- git repository at GitHub: [[https://github.com/lloda/guile-ffi-cblas]]
- Fast Fourier Transformation
- ~guile-ffi-fftw~ by lloda
- git repo: [[https://github.com/lloda/guile-ffi-fftw]]
- description: /"A simple wrapper for FFTW, using Guile's FFI"/ ([[https://github.com/lloda/guile-ffi-fftw]])
- ~guile-ffi-fftw~ by Mikael Djurfeldt
- git repo at Savannah: [[https://savannah.nongnu.org/projects/guile-fftw]]
- description:
- Symbolic mathematics
- ~guile-scmutils~
- website: [[https://www.cs.rochester.edu/~gildea/guile-scmutils/]]
- download: [[https://www.cs.rochester.edu/~gildea/guile-scmutils/guile-scmutils-v1.0.tgz]]
- description:
#+begin_quote
A port of the scmutils package for symbolic mathematics from mit scheme to guile, in an effort to make scmutils and the examples from the Structure and Interpretation of Classical Mechanics available on a wider variety of architectures/operating systems.
(https://www.cs.rochester.edu/~gildea/guile-scmutils/)
#+end_quote
- Guile implementation of symbolic mathematics shown in SICP
- Does this exist?
*** Interaction with the Jupyter ecosystem
- ~guix-kernel~
- git repository at gitlab.inria.fr: [[https://gitlab.inria.fr/guix-hpc/guix-kernel]]
- blog post: [[https://hpc.guix.info/blog/2019/10/towards-reproducible-jupyter-notebooks/]]
- ~guile-kernel~
- git repository at GitHub: [[https://github.com/jerry40/guile-kernel]]
** Search engine
- ~babelia~
- git repo: https://github.com/amirouche/babelia
- description:
#+begin_quote
Wanna be search engine with federation support
(https://github.com/amirouche/babelia)
#+end_quote
** TUI development
- ~guile-ncurses~
- GNU software page: [[https://www.gnu.org/software/guile-ncurses/]]
- git repository at GitHub: [[https://github.com/guildhall/guile-ncurses]]
** Unit Testing
- SRFI-64 ([[https://srfi.schemers.org/srfi-64/srfi-64.html]])
- GNU software Guile manual page: [[https://www.gnu.org/software/guile/manual/html_node/SRFI_002d64.html]]
- ~srfi-64-driver~
- git repository at: ???
- website: [[https://ngyro.com/software/srfi-64-driver.html]]
- ~guile-testing~
- git repository at: [[https://github.com/wedesoft/guile-testing]]
- description: /"This is an example on how to do unit-testing using GNU Guile, Automake Test Anything Protocol (TAP), and SRFI-64."/ ([[https://github.com/wedesoft/guile-testing/blob/
598768b04f
/README.md]])
*** TAP output
- ~guile-tap~
- git repo: [[https://github.com/xevz/guile-tap]]
- description: /"Simple Guile module which provides TAP compilant output."/ ([[https://github.com/xevz/guile-tap]])
- ~scm-test-tap~
- git repo: [[https://github.com/ft/scm-test-tap]]
- description: /"TAP emitting test-framework for GNU Guile"/ ([[https://github.com/ft/scm-test-tap]])
** Version control systems
- ~guile-git~
- git repository at GitLab: [[https://gitlab.com/guile-git/guile-git]]
- ~guile-semver~
- git repository at ngyro: [[https://git.ngyro.com/guile-semver]]
- website at: [[https://ngyro.com/software/guile-semver.html]]
** Web Development
*** Web frameworks
- Guile's standard library's web module for dealing with web stuff:
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/Web.html]]
- Guile's standard library's web server:
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/Web-Server.html]]
- blog post about the performance of Guile's web server: [[http://wingolog.org/archives/2012/03/08/an-in-depth-look-at-the-performance-of-guiles-web-server]]
- documentation as generic interface for web server implementations: [[https://www.gnu.org/software/guile/manual/html_node/Web-Server.html]]
- examples for usage for creating a web app: [[https://www.gnu.org/software/guile/manual/html_node/Web-Examples.html#Web-Examples]]
- GNU Artanis web application frameweork
- GNU software page: [[https://www.gnu.org/software/artanis/]]
- git repository at GitLab: [[https://gitlab.com/NalaGinrut/artanis]]
- official website of the GNU Artanis project: [[https://web-artanis.com/]]
- blog post about GNU Artanis: [[https://dev.to/heroku/an-ode-to-gnu-artanis-2gn3]]
- manual:
- [[https://www.gnu.org/software/artanis/manual/manual.html]]
- [[https://www.gnu.org/software/artanis/manual/html_node/]]
- blog post about using GNU Artanis in a docker container: [[https://nalaginrut.com/archives/2019/09/18/install%20gnu%20artanis%20with%20docker]]
- SPH web app
- git repository at GitHub: https://github.com/sph-mn/sph-web-app
- tekuti
- The git repository unfortunately seems to be dead, because it was hosted at gitorious, a now disfunct git host. Where can the code be found?
- blog post about tekuti: [[https://wingolog.org/projects/tekuti/]]
*** Tooling / Additional libraries
- JSON
- ~guile-json~
- on GitHub: [[https://github.com/aconchillo/guile-json]]
- on savannah: [[http://savannah.nongnu.org/projects/guile-json/]]
- ~guile-www~
- git repository at savannah non-gnu: [[http://savannah.nongnu.org/projects/guile-www/]]
- ~guile-webutils~
- git repository at notabug.org: [[https://notabug.org/cwebber/guile-webutils]]
- ~guile-html~
- git repo: [[https://github.com/TaylanUB/guile-html]]
- description:
#+begin_quote
A tiny module to make it less annoying to make and write HTML files using SXML. Read the code!
#+end_quote
**** Authorization and authentication
- ~guile-oauth~
- git repository at GitHub: [[https://github.com/aconchillo/guile-oauth]]
- ~guile-jwt~
- git repository on GitHub: [[https://github.com/aconchillo/guile-jwt]]
*** Static website generators
- ~guile-haunt~
- git repository at GitHub: [[https://github.com/guildhall/guile-haunt]]
- SPH static website generator
- git repository at GitHub: [[https://github.com/sph-mn/sph-web-publish]]
*** Template engine
- Guile's standard library SXML implementation
- GNU software manual: [[https://www.gnu.org/software/guile/manual/html_node/SXML.html]]
- Basically your templates become functions or macros.
- The structure of your document is kept as Scheme data structures.
- This avoids having parse the document as a long string into an internal data structure to perform semantic transformations.
- It enables pattern matching without resorting to things like regular expressions and similar shenanigans.
*** Interaction with services
- ~guile-mastodon~
- git repository at framagit: [[https://framagit.org/prouby/guile-mastodon]]
- documentation at: [[https://framagit.org/prouby/guile-mastodon/-/blob/master/doc/guile-mastodon.org]]
*** Web application examples
- ~scheme-todomvc~:
- git repo: [[https://github.com/amirouche/scheme-todomvc]]
- demo: [[https://amirouche.github.io/scheme-todomvc/]]
*** Web drivers / Selenium
- ~guile-web-driver~
- git repo: [[https://github.com/her01n/guile-web-driver]]
- description: "web driver (selenium) client for guile" ([[https://github.com/her01n/guile-web-driver]])
** Window manager
- ~guile-wm~
- git repo: [[https://github.com/mwitmer/guile-wm]]
** Working with code
- ~guile-syntax-highlight~
- website: [[https://dthompson.us/projects/guile-syntax-highlight.html]]
- repository: seems to be missing
** Other
- ~guile-lib~
- git repository at non-GNU Savannah: [[http://git.savannah.nongnu.org/cgit/guile-lib.git]]
- website at: [[https://www.nongnu.org/guile-lib/]]
- description:
#+begin_quote
guile-lib is intended as an accumulation place for pure-scheme Guile modules, allowing for people to cooperate integrating their generic Guile modules into a coherent library. Think "a down-scaled, limited-scope CPAN for Guile". [...]
(https://www.nongnu.org/guile-lib/)
#+end_quote
- Spells
- git repo: [[https://github.com/rotty/spells]]
- description:
#+begin_quote
Spells is a collection of R6RS libraries providing features beyond R6RS in a uniform way across supported implementations.
(https://github.com/rotty/spells/blob/master/README)
#+end_quote
- documentation: [[http://rotty.xx.vu/software/spells/]] (unfortunately 404 currently)
- SPH website:
- It has some Guile library and project descriptions and links.
- [[http://sph.mn/]]
* Projects
- Guile 100
- description:
#+begin_quote
This is the repository for the Guile 100 Programs project. This is a collaborative effort to create a set of examples on how Guile might be used for real-world problems.
(https://github.com/spk121/guile100/blob/master/README.md)
#+end_quote
- git repo: [[https://github.com/spk121/guile100/]]
- website: [[http://www.lonelycactus.com/guile100/html/index.html]]
* Programming paradigm
** "Object-oriented programming"
- GOOPS
- GNU software manual page: [[https://www.gnu.org/software/guile/manual/html_node/GOOPS.html]]
*** Prototype based
- Shelf
- git repo: [[https://github.com/mwitmer/Shelf]]
** Relational programming
- ~minikanren~
- git repository at GitHub: [[https://github.com/ijp/minikanren]]
- miniKanren uncourse by William Byrd: [[https://duckduckgo.com/?q=minikanren+uncourse&t=h_&iax=videos&ia=videos&iai=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiCuVTGWNU3s]]
** Functional programming
- Monad implementations
- git repository at GitHub: [[https://github.com/ijp/monad]]
* Tools
** Editor support
- ~guile.vim~
- git repo: [[https://gitlab.com/HiPhish/guile.vim]]
- description:
#+begin_quote
This plugin extends Vim's Scheme support to include the additions to the language provided by the GNU Guile implementation. The plugin automatically detects whether a Scheme file is a Guile file and adds syntax highlighting for Guile's special forms.
(https://gitlab.com/HiPhish/guile.vim/-/blob/master/README.rst)
#+end_quote
- ~repl.nvim~
- git repo: [[https://gitlab.com/HiPhish/repl.nvim/]]
- description:
#+begin_quote
REPL.nvim bring REPL support to Nvim! Use the built-in REPLs, add your own, or change the existing ones. Change settings in your init.vim or on the fly, make them global or local, use the existing ones or make your own.
(https://gitlab.com/HiPhish/repl.nvim/-/blob/master/README.rst)
#+end_quote
- TODO: Emacs Guile support
- TODO: other editors support
** Project management
- ~guile-hall~
- git repository at GitLab: [[https://gitlab.com/a-sassmannshausen/guile-hall]]
- ~homebrew-guile~: [[https://github.com/aconchillo/]]
- ~guile-debbugs~
- git repo: [[http://savannah.gnu.org/git/?group=guile-debbugs]]
- description: see [[http://git.savannah.nongnu.org/cgit/guile-debbugs.git/tree/README.org]]
*** Package managers
- GUIX package search
- website: [[https://hpc.guix.info/browse]]
- Search for example for ~^guile-~ to find many Guile libraries and projects.
- ~guildhall~
- git repository at GitHub: https://github.com/ijp/guildhall
- Akku
- website: [[https://akkuscm.org/]]
- description:
#+begin_quote
Akku.scm is a language package manager for Scheme. It grabs hold of code and vigorously shakes it until it behaves properly.
(https://akkuscm.org/)
#+end_quote
* Blogs
- [[https://hyper.dev/]]
- [[http://wingolog.org/]]
- [[http://okmij.org/ftp/Scheme/]]
- blog post about singletons in GNU Guile
- website: [[http://hiphish.github.io/blog/2019/05/24/singleton-objects-in-guile-scheme/]]
* Other
- SPH lib, collection of Guile libraries
- website: [[http://sph.mn/computer/software/sph-lib.html]]
- C2 Wiki Category Scheme
- website: [[https://proxy.c2.com/cgi/wiki?CategoryScheme]]
- C2 Wiki Guile Scheme
- website: [[https://proxy.c2.com/cgi/wiki?GuileScheme]]
- C2 Wiki Scheme Language
- website: [[https://proxy.c2.com/cgi/wiki?SchemeLanguage]]
- Community Scheme Wiki
- general
- website: [[http://community.schemewiki.org]]
- Scheme FAQ
- website: [[http://community.schemewiki.org/?scheme-faq-standards]]
- SICP solutions
- git repo: [[https://github.com/alpardal/SICP-guile]]
- description:
#+begin_quote
A SICP Study Guide With Exercise Solutions in Guile & Emacs Lisp
(https://github.com/alpardal/SICP-guile)
#+end_quote
* Other lists of Guile software
- official GNU Guile website library list: [[https://www.gnu.org/software/guile/libraries/]]
- SPH list: [[http://sph.mn/foreign/guile-software.html]]
* Videos / Talks / Presentations
This category is still empty. Help filling it with interesting GNU Guile related videos, talks or presentations!