list.texi 92 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041
  1. \input texinfo @c -*- texinfo -*-
  2. @c %**start of header
  3. @setfilename list.info
  4. @settitle Guile Awesome List
  5. @documentencoding UTF-8
  6. @documentlanguage English
  7. @c %**end of header
  8. @finalout
  9. @titlepage
  10. @title Guile Awesome List
  11. @author Zelphir Kaltstahl (help & input from Guile community)
  12. @end titlepage
  13. @contents
  14. @ifnottex
  15. @node Top
  16. @top Guile Awesome List
  17. @end ifnottex
  18. @menu
  19. * Manuals::
  20. * Tutorials / Guides / Books::
  21. * Libraries::
  22. * Projects::
  23. * Programming paradigm::
  24. * Programming language concepts::
  25. * Programs::
  26. * Tools::
  27. * Blogs::
  28. * Other: Other (7).
  29. * Other lists of Guile software::
  30. * Videos / Talks / Presentations::
  31. @detailmenu
  32. --- The Detailed Node Listing ---
  33. Tutorials / Guides / Books
  34. * General GNU Guile / Scheme::
  35. * Macros::
  36. * Monads::
  37. * FFI - Foreign Function Interface::
  38. * GUI development::
  39. Macros
  40. * CK macros::
  41. Libraries
  42. * Async::
  43. * Audio::
  44. * Browser::
  45. * Bots::
  46. * Chat::
  47. * Compression::
  48. * Computer vision::
  49. * Configuration::
  50. * Cryptography::
  51. * Databases::
  52. * Data structures::
  53. * Debugging::
  54. * Decentralization::
  55. * Development environments::
  56. * Device management::
  57. * Distributed computing::
  58. * E-Mail::
  59. * Encodings::
  60. * Event loop::
  61. * FFI - Foreign Function Interface: FFI - Foreign Function Interface (1).
  62. * File formats::
  63. * File system::
  64. * Game development::
  65. * Games::
  66. * Generators::
  67. * Genomics::
  68. * Graphics::
  69. * GUI development: GUI development (1).
  70. * Language::
  71. * Logging::
  72. * Machine Learning::
  73. * Macros: Macros (1).
  74. * Message Queues::
  75. * Network programming::
  76. * Parallelism::
  77. * Parsing::
  78. * Plotting::
  79. * Protocols::
  80. * Serialization::
  81. * SRFI (Scheme Request For Implementation) implementations::
  82. * Strings::
  83. * Syntax::
  84. * Regular expressions::
  85. * REPL (Read Eval Print Loop)::
  86. * RPC (Remote Procedure Call)::
  87. * Scientific computing and mathematics::
  88. * Search engine::
  89. * Shell::
  90. * TUI development::
  91. * Testing::
  92. * Types::
  93. * Version control systems::
  94. * Web Development::
  95. * Window manager::
  96. * Working with code::
  97. * Other::
  98. * Unsorted::
  99. Chat
  100. * Chat clients::
  101. * Chat bots::
  102. * Protocols: Protocols (1).
  103. Databases
  104. * Generic::
  105. * Postgres::
  106. * Sqlite::
  107. * MySQL::
  108. * Redis::
  109. * CouchDB::
  110. * Other: Other (1).
  111. Data structures
  112. * Purely functional data structures (PFDs)::
  113. * RDF::
  114. * Lenses::
  115. * Trees::
  116. * Other: Other (2).
  117. File formats
  118. * JSON::
  119. * YAML::
  120. * CSV::
  121. * XML::
  122. * Markdown::
  123. * Texinfo::
  124. * JPEG::
  125. * PNG::
  126. * ICS::
  127. * torrent::
  128. * Shapefile::
  129. * CBOR::
  130. * TAR::
  131. * INI::
  132. * Other: Other (3).
  133. Graphics
  134. * Image processing::
  135. * Design and CAD::
  136. Parsing
  137. * Parser Combinators::
  138. * Parser Generator::
  139. * Other: Other (4).
  140. * XML parser::
  141. Scientific computing and mathematics
  142. * Interaction with the Jupyter ecosystem::
  143. Testing
  144. * Integration testing::
  145. * Unit testing::
  146. * Other: Other (5).
  147. Types
  148. * Static typing::
  149. Web Development
  150. * Web servers::
  151. * Web clients::
  152. * Web frameworks::
  153. * Protocols: Protocols (2).
  154. * Tooling / Additional libraries::
  155. * Static website generators::
  156. * Template engine::
  157. * Interaction with services::
  158. * Web application examples::
  159. * Web drivers / Selenium::
  160. Programming paradigm
  161. * "Object-oriented programming"::
  162. * Relational programming::
  163. * Functional programming::
  164. "Object-oriented programming"
  165. * Prototype based::
  166. Programming language concepts
  167. * Pipeline / pipe / chain / threading::
  168. * State Machines::
  169. Programs
  170. * Finances::
  171. * Window manager: Window manager (1).
  172. * Other: Other (6).
  173. Tools
  174. * Notes::
  175. * Editor support::
  176. * Project management::
  177. * Build tools::
  178. Project management
  179. * Package managers::
  180. * Time tracking::
  181. @end detailmenu
  182. @end menu
  183. @node Manuals
  184. @chapter Manuals
  185. @itemize
  186. @item
  187. There is a huge reference manual for GNU Guile on the GNU website: @uref{https://www.gnu.org/software/guile/manual/}.
  188. @end itemize
  189. @node Tutorials / Guides / Books
  190. @chapter Tutorials / Guides / Books
  191. @menu
  192. * General GNU Guile / Scheme::
  193. * Macros::
  194. * Monads::
  195. * FFI - Foreign Function Interface::
  196. * GUI development::
  197. @end menu
  198. @node General GNU Guile / Scheme
  199. @section General GNU Guile / Scheme
  200. @itemize
  201. @item
  202. Guile reference manual
  203. @itemize
  204. @item
  205. website: @uref{https://www.gnu.org/software/guile/manual/}
  206. @end itemize
  207. @item
  208. official Guile tutorial
  209. @itemize
  210. @item
  211. website: @uref{https://www.gnu.org/software/guile/docs/guile-tut/tutorial.html}
  212. @end itemize
  213. @item
  214. Structure and Interpretation of Computer Programs (SICP)
  215. @itemize
  216. @item
  217. website: @uref{https://mitpress.mit.edu/sites/default/files/sicp/index.html}
  218. @item
  219. PDF version: @uref{https://github.com/sarabander/sicp-pdf}
  220. @end itemize
  221. @item
  222. The Little Schemer
  223. @itemize
  224. @item
  225. website: @uref{https://mitpress.mit.edu/books/little-schemer-fourth-edition}
  226. @end itemize
  227. @item
  228. "Learn Scheme in 15 minutes"
  229. @itemize
  230. @item
  231. website: @uref{https://web-artanis.com/scheme.html}
  232. @end itemize
  233. @item
  234. guile-tutorial
  235. @itemize
  236. @item
  237. git repo: @uref{https://notabug.org/cwebber/guile-tutorial}
  238. @end itemize
  239. @item
  240. Guile Hacker Handbook
  241. @itemize
  242. @item
  243. website: @uref{https://jeko.frama.io/en/index.html}
  244. @item
  245. git repo: @uref{https://framagit.org/Jeko/jeko.frama.io}
  246. @end itemize
  247. @item
  248. The Scheme Programming Language
  249. @itemize
  250. @item
  251. web version: @uref{https://scheme.com/tspl4/}
  252. @end itemize
  253. @item
  254. A Pamphlet Against R
  255. @itemize
  256. @item
  257. PDF version: @uref{https://github.com/panicz/pamphlet/raw/master/pamphlet.pdf}
  258. @item
  259. source codes: @uref{https://github.com/panicz/pamphlet}
  260. @end itemize
  261. @item
  262. Concrete Abstractions - An Introduction to Computer Science Using Scheme
  263. @itemize
  264. @item
  265. web: @uref{https://gustavus.edu/mcs/max/concrete-abstractions-pdfs/index.html}
  266. @end itemize
  267. @end itemize
  268. @node Macros
  269. @section Macros
  270. @itemize
  271. @item
  272. Macros in the GNU Guile reference manual
  273. @itemize
  274. @item
  275. website: @uref{https://www.gnu.org/software/guile/manual/html_node/Macros.html}
  276. @end itemize
  277. @item
  278. Writing Hygienic Macros in Scheme with Syntax-Case
  279. @itemize
  280. @item
  281. article: @uref{https://doc.lagout.org/programmation/Lisp/Scheme/Programming%20With%20Hygienic%20Macros%20-%20R%20K%20Dybvig.pdf}
  282. @end itemize
  283. @item
  284. Community Scheme Wiki about macros
  285. @itemize
  286. @item
  287. scheme-faq-macros
  288. @itemize
  289. @item
  290. website: @uref{http://community.schemewiki.org/?scheme-faq-macros}
  291. @end itemize
  292. @item
  293. syntax-case
  294. @itemize
  295. @item
  296. website: @uref{http://community.schemewiki.org/?syntax-case}
  297. @end itemize
  298. @end itemize
  299. @item
  300. A Scheme Syntax-Rules Primer
  301. @itemize
  302. @item
  303. website: @uref{http://www.willdonnelly.net/blog/scheme-syntax-rules/}
  304. @end itemize
  305. @item
  306. Macro-by-Example: Deriving Syntactic Transformations from their Specifications
  307. @itemize
  308. @item
  309. paper: @uref{https://legacy.cs.indiana.edu/ftp/techreports/TR206.pdf}
  310. @end itemize
  311. @item
  312. wikibooks.org about macros
  313. @itemize
  314. @item
  315. website: @uref{https://en.wikibooks.org/wiki/Scheme_Programming/Macros}
  316. @end itemize
  317. @item
  318. Advanced Scheme Techniques - Some Naughty Bits
  319. @itemize
  320. @item
  321. slides: @uref{http://people.csail.mit.edu/jhbrown/scheme/macroslides04.pdf}
  322. @end itemize
  323. @item
  324. C2 Wiki Scheme Macro Examples
  325. @itemize
  326. @item
  327. website: @uref{http://wiki.c2.com/?SchemeMacroExamples}
  328. @end itemize
  329. @item
  330. JRM's Syntax-rules Primer for the Merely Eccentric
  331. @itemize
  332. @item
  333. website: @uref{https://hipster.home.xs4all.nl/lib/scheme/gauche/define-syntax-primer.txt}
  334. @itemize
  335. @item
  336. another location: @uref{http://www.phyast.pitt.edu/~micheles/syntax-rules.pdf}
  337. @end itemize
  338. @end itemize
  339. @item
  340. Scheme Macros I: Modules
  341. @itemize
  342. @item
  343. website: @uref{https://blog.veitheller.de/Scheme_Macros_I:_Modules.html}
  344. @end itemize
  345. @item
  346. Writing Macros in Continuation-Passing Style
  347. @itemize
  348. @item
  349. paper: @uref{https://www.semanticscholar.org/paper/Writing-Macros-in-Continuation-Passing-Style-Hilsdale-Friedman/752575dc24b2bb6e74ee6146df71860e10e3aee9#citing-papers} (TODO: find a more permanent looking link)
  350. @end itemize
  351. @item
  352. Low- and high-level macro programming in Scheme
  353. @itemize
  354. @item
  355. website: @uref{http://okmij.org/ftp/Scheme/macros.html}
  356. @end itemize
  357. @end itemize
  358. @menu
  359. * CK macros::
  360. @end menu
  361. @node CK macros
  362. @subsection CK macros
  363. @itemize
  364. @item
  365. Applicative syntax-rules: macros that compose better
  366. @itemize
  367. @item
  368. website: @uref{http://okmij.org/ftp/Scheme/macros.html#ck-macros}
  369. @end itemize
  370. @item
  371. Chicken Scheme Wiki about ck-macros
  372. @itemize
  373. @item
  374. website: @uref{http://wiki.call-cc.org/eggref/5/ck-macros}
  375. @end itemize
  376. @end itemize
  377. @node Monads
  378. @section Monads
  379. @itemize
  380. @item
  381. A Schemer's Introduction to Monads
  382. @itemize
  383. @item
  384. website: @uref{http://www.ccs.neu.edu/home/dherman/research/tutorials/monads-for-schemers.txt}
  385. @end itemize
  386. @item
  387. A Schemer’s View of Monads - Partial Draft
  388. @itemize
  389. @item
  390. website: @uref{https://cgi.sice.indiana.edu/~c311/lib/exe/fetch.php?media=manymonads.pdf}
  391. @end itemize
  392. @item
  393. Monadic Programming in Scheme
  394. @itemize
  395. @item
  396. website: @uref{http://okmij.org/ftp/Scheme/monad-in-Scheme.html}
  397. @end itemize
  398. @item
  399. Panicz Godek's answer to How would you explain a concept of monads to a non-CS person?
  400. @itemize
  401. @item
  402. website @uref{https://www.quora.com/How-would-you-explain-a-concept-of-monads-to-a-non-CS-person/answer/Panicz-Godek}
  403. @end itemize
  404. @item
  405. Panicz Godek's answer to @uref{https://www.quora.com/Why-do-so-many-programmers-not-understand-the-theory-of-monads/answer/Panicz-Godek}
  406. @itemize
  407. @item
  408. website @uref{https://www.quora.com/Why-do-so-many-programmers-not-understand-the-theory-of-monads/answer/Panicz-Godek}
  409. @end itemize
  410. @end itemize
  411. @node FFI - Foreign Function Interface
  412. @section FFI - Foreign Function Interface
  413. @itemize
  414. @item
  415. GNU Guile standard library FFI
  416. @itemize
  417. @item
  418. GNU software reference manual: @uref{https://www.gnu.org/software/guile/manual/html_node/Foreign-Function-Interface.html}
  419. @end itemize
  420. @end itemize
  421. @node GUI development
  422. @section GUI development
  423. @itemize
  424. @item
  425. @code{gtk-tutorial-using-guile-gnome}
  426. @itemize
  427. @item
  428. git repo: @uref{https://github.com/yang-qu/gtk-tutorial-using-guile-gnome}
  429. @item
  430. description: @emph{"This project converts C code in gtk tutorial @uref{http://www.zetcode.com/tutorials/gtktutorial}} to scheme code using guile-gnome."/ (@uref{https://github.com/yang-qu/gtk-tutorial-using-guile-gnome/blob/ec4e9ce9c670b923fc3cc973c1e85fc7934ff4d8/README})
  431. @end itemize
  432. @end itemize
  433. @node Libraries
  434. @chapter Libraries
  435. @menu
  436. * Async::
  437. * Audio::
  438. * Browser::
  439. * Bots::
  440. * Chat::
  441. * Compression::
  442. * Computer vision::
  443. * Configuration::
  444. * Cryptography::
  445. * Databases::
  446. * Data structures::
  447. * Debugging::
  448. * Decentralization::
  449. * Development environments::
  450. * Device management::
  451. * Distributed computing::
  452. * E-Mail::
  453. * Encodings::
  454. * Event loop::
  455. * FFI - Foreign Function Interface: FFI - Foreign Function Interface (1).
  456. * File formats::
  457. * File system::
  458. * Game development::
  459. * Games::
  460. * Generators::
  461. * Genomics::
  462. * Graphics::
  463. * GUI development: GUI development (1).
  464. * Language::
  465. * Logging::
  466. * Machine Learning::
  467. * Macros: Macros (1).
  468. * Message Queues::
  469. * Network programming::
  470. * Parallelism::
  471. * Parsing::
  472. * Plotting::
  473. * Protocols::
  474. * Serialization::
  475. * SRFI (Scheme Request For Implementation) implementations::
  476. * Strings::
  477. * Syntax::
  478. * Regular expressions::
  479. * REPL (Read Eval Print Loop)::
  480. * RPC (Remote Procedure Call)::
  481. * Scientific computing and mathematics::
  482. * Search engine::
  483. * Shell::
  484. * TUI development::
  485. * Testing::
  486. * Types::
  487. * Version control systems::
  488. * Web Development::
  489. * Window manager::
  490. * Working with code::
  491. * Other::
  492. * Unsorted::
  493. @end menu
  494. @node Async
  495. @section Async
  496. @itemize
  497. @item
  498. 8sync
  499. @itemize
  500. @item
  501. git repository at Savannah: @uref{https://savannah.gnu.org/projects/8sync}
  502. @item
  503. manual / GNU software manual: @uref{https://www.gnu.org/software/8sync/manual/html_node/index.html#Top}
  504. @item
  505. website / GNU software page: @uref{https://www.gnu.org/software/8sync/}
  506. @item
  507. tutorial: @uref{https://www.gnu.org/software/8sync/manual/html_node/Tutorial.html#Tutorial}
  508. @end itemize
  509. @end itemize
  510. @node Audio
  511. @section Audio
  512. @itemize
  513. @item
  514. @code{gapd}
  515. @itemize
  516. @item
  517. git repo: @uref{https://github.com/rashack/gapd}
  518. @item
  519. description: @emph{"Guile Audio Player Daemon"} (@uref{https://github.com/rashack/gapd})
  520. @end itemize
  521. @item
  522. @code{xmms2-guile}
  523. @itemize
  524. @item
  525. git repository: @uref{https://gitlab.com/ft/xmms2-guile}
  526. @item
  527. description: @emph{"Native XMMS2 client library for GNU Guile."} -- @uref{https://gitlab.com/ft/xmms2-guile} @@ @samp{b26d67cd2cb8100c17244c7bcf50b496e90c98ae}
  528. @end itemize
  529. @end itemize
  530. @node Browser
  531. @section Browser
  532. @itemize
  533. @item
  534. Nomad
  535. @itemize
  536. @item
  537. git repository at non-GNU Savannah: @uref{https://savannah.nongnu.org/projects/nomad/}
  538. @item
  539. website: @uref{https://www.nongnu.org/nomad/}
  540. @end itemize
  541. @end itemize
  542. @node Bots
  543. @section Bots
  544. @itemize
  545. @item
  546. @code{chatter}
  547. @itemize
  548. @item
  549. git repo: @uref{https://github.com/apg/chatter}
  550. @item
  551. description: @emph{"Chatter Bot framework, inspired by Elizabot, for Guile"} (@uref{https://github.com/apg/chatter/blob/e407b09e9aedb214e75ffaecbcc86ed105f154aa/README})
  552. @end itemize
  553. @end itemize
  554. @node Chat
  555. @section Chat
  556. @menu
  557. * Chat clients::
  558. * Chat bots::
  559. * Protocols: Protocols (1).
  560. @end menu
  561. @node Chat clients
  562. @subsection Chat clients
  563. @enumerate
  564. @item
  565. @anchor{IRC}IRC
  566. @itemize
  567. @item
  568. @code{guile-irc}
  569. @itemize
  570. @item
  571. git repository at GitHub: @uref{https://github.com/rekado/guile-irc}
  572. @item
  573. description: @emph{"An irc library for GNU guile."} (@uref{https://github.com/rekado/guile-irc/blob/master/README})
  574. @item
  575. API reference manual: @uref{http://fbs.github.io/guile-irc/}
  576. @end itemize
  577. @end itemize
  578. @end enumerate
  579. @node Chat bots
  580. @subsection Chat bots
  581. @enumerate
  582. @item
  583. @anchor{IRC (1)}IRC
  584. @itemize
  585. @item
  586. Cunning Bot
  587. @itemize
  588. @item
  589. git repo: @uref{https://github.com/cadrspace/cunning-bot}
  590. @item
  591. description:
  592. @quotation
  593. Cunning Bot is a command-oriented IRC bot written in Guile Scheme.
  594. (@uref{https://github.com/cadrspace/cunning-bot/blob/cadrobot/README})
  595. @end quotation
  596. @end itemize
  597. @item
  598. @code{eliug}
  599. @itemize
  600. @item
  601. git repo: @uref{https://github.com/szdiy/eliug}
  602. @item
  603. description: @emph{"the smart irc bot written with GNU Guile-scheme"} (@uref{https://github.com/szdiy/eliug/blob/030bf891a4007e9c40f8fdacd306c77e71146334/README.md})
  604. @end itemize
  605. @end itemize
  606. @end enumerate
  607. @node Protocols (1)
  608. @subsection Protocols
  609. @enumerate
  610. @item
  611. @anchor{Matrix}Matrix
  612. @itemize
  613. @item
  614. @code{guile-deck}
  615. @itemize
  616. @item
  617. repository: @uref{https://github.com/artyom-poptsov/guile-deck}
  618. @item
  619. description: @emph{"GNU Guile SDK for the Matrix network (@uref{https://matrix.org})"} -- @uref{https://github.com/artyom-poptsov/guile-deck/blob/7df7512501fb9a6fe879fb95857dc172b5a8fc22/README, README file}
  620. @end itemize
  621. @end itemize
  622. @end enumerate
  623. @node Compression
  624. @section Compression
  625. @itemize
  626. @item
  627. @code{guile-zlib}
  628. @itemize
  629. @item
  630. git repository at GitHub: @uref{https://github.com/davexunit/guile-zlib}
  631. @end itemize
  632. @item
  633. @code{guile-zstd}
  634. @itemize
  635. @item
  636. git repository at notabug.org: @uref{https://notabug.org/guile-zstd/guile-zstd}
  637. @item
  638. description: @emph{"GNU Guile bindings to the zstd compression library."} (@uref{https://notabug.org/guile-zstd/guile-zstd})
  639. @end itemize
  640. @end itemize
  641. @node Computer vision
  642. @section Computer vision
  643. @itemize
  644. @item
  645. GNU Guile-CV
  646. @itemize
  647. @item
  648. website: @uref{https://www.gnu.org/software/guile-cv/}
  649. @item
  650. GNU software reference manual: @uref{https://www.gnu.org/software/guile-cv/manual/html_node/index.html}
  651. @item
  652. description:
  653. @quotation
  654. Guile-CV - Image Processing and Analysis in Guile - is a Computer Vision functional programming library for the Guile Scheme language.
  655. 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@.
  656. 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.
  657. (@uref{https://www.gnu.org/software/guile-cv/index.html})
  658. @end quotation
  659. @end itemize
  660. @end itemize
  661. @node Configuration
  662. @section Configuration
  663. @itemize
  664. @item
  665. @code{guile-config}
  666. @itemize
  667. @item
  668. git repository at GitLab: @uref{https://gitlab.com/a-sassmannshausen/guile-config}
  669. @end itemize
  670. @end itemize
  671. @node Cryptography
  672. @section Cryptography
  673. @itemize
  674. @item
  675. @code{guile-gcrypt}
  676. @itemize
  677. @item
  678. git repo: @uref{https://notabug.org/cwebber/guile-gcrypt}
  679. @item
  680. description:
  681. @quotation
  682. Guile-Gcrypt provides a Guile 3.x/2.x interface to a subset of the GNU
  683. Libgcrypt crytographic library, which is itself used by the GNU Privacy Guard
  684. (GPG).
  685. Guile-Gcrypt provides modules for cryptographic hash functions, message
  686. authentication codes (MAC), public-key cryptography, strong randomness, and
  687. more. It is implemented using the foreign function interface (FFI) of Guile.
  688. @end quotation
  689. @end itemize
  690. @item
  691. @code{gcrypt-guile}
  692. @itemize
  693. @item
  694. git repo: @uref{https://github.com/fbs/gcrypt-guile} (archived, read only)
  695. @item
  696. description: @emph{"Wrappers to get some libgcrypt functionality into guile."} (@uref{https://github.com/fbs/gcrypt-guile/blob/0add93e2486044ca48f3de130a070fba21bf0b2d/README})
  697. @end itemize
  698. @end itemize
  699. @node Databases
  700. @section Databases
  701. @menu
  702. * Generic::
  703. * Postgres::
  704. * Sqlite::
  705. * MySQL::
  706. * Redis::
  707. * CouchDB::
  708. * Other: Other (1).
  709. @end menu
  710. @node Generic
  711. @subsection Generic
  712. @itemize
  713. @item
  714. Generic
  715. @itemize
  716. @item
  717. @code{guile-dbi}
  718. @itemize
  719. @item
  720. git repository at GitHub: @uref{https://github.com/opencog/guile-dbi}
  721. @item
  722. documentation: @uref{https://htmlpreview.github.io/?https://github.com/opencog/guile-dbi/blob/master/website/guile-dbi.html}
  723. @item
  724. offers MySQL, Postgresql and SQLite3 interfaces
  725. @end itemize
  726. @end itemize
  727. @end itemize
  728. @node Postgres
  729. @subsection Postgres
  730. @itemize
  731. @item
  732. @code{guile-squee}
  733. @itemize
  734. @item
  735. git repository at notabug.org: @uref{https://notabug.org/cwebber/guile-squee}
  736. @item
  737. documentation at: ???
  738. @end itemize
  739. @item
  740. @code{guile-dbd-postgresql}
  741. @itemize
  742. @item
  743. git repository: @uref{https://github.com/opencog/guile-dbi/tree/master/guile-dbd-postgresql}
  744. @item
  745. documentation: @uref{https://github.com/opencog/guile-dbi/blob/master/guile-dbd-postgresql/README}
  746. @item
  747. description: This is a sub-repository of @code{guile-dbi} which is used for dealing with the Postgres side of things.
  748. @end itemize
  749. @item
  750. Guile-PG
  751. @itemize
  752. @item
  753. git repository: @uref{https://git.savannah.nongnu.org/cgit/guile-pg.git}
  754. @item
  755. documentation: ???
  756. @item
  757. project page: @uref{https://www.nongnu.org/guile-pg/}
  758. @item
  759. description: @emph{"Guile-PG is a collection of modules for Guile allowing access to the PostgreSQL RDBMS from Scheme programs."} (@uref{https://www.nongnu.org/guile-pg/})
  760. @end itemize
  761. @end itemize
  762. @node Sqlite
  763. @subsection Sqlite
  764. @itemize
  765. @item
  766. @code{guile-sqlite3}
  767. @itemize
  768. @item
  769. git repository at notabug.org: @uref{https://notabug.org/guile-sqlite3/guile-sqlite3.git}
  770. @item
  771. documentation at: ???
  772. @end itemize
  773. @item
  774. @code{guile-dbd-sqlite3}
  775. @itemize
  776. @item
  777. git repository at GitHub: @uref{https://github.com/opencog/guile-dbi/tree/master/guile-dbd-sqlite3}
  778. @item
  779. documentation: @uref{https://github.com/opencog/guile-dbi/blob/master/guile-dbd-sqlite3/README}
  780. @item
  781. description: This is a sub-repository of @code{guile-dbi} which is used for dealing with the Sqlite3 side of things.
  782. @end itemize
  783. @end itemize
  784. @node MySQL
  785. @subsection MySQL
  786. @itemize
  787. @item
  788. @code{guile-dbd-mysql}
  789. @itemize
  790. @item
  791. git repository at GitHub: @uref{https://github.com/opencog/guile-dbi/tree/master/guile-dbd-mysql}
  792. @item
  793. documentation: @uref{https://github.com/opencog/guile-dbi/blob/master/guile-dbd-mysql/README}
  794. @item
  795. description: This is a sub-repository of @code{guile-dbi} which is used for dealing with the MySQL side of things.
  796. @end itemize
  797. @end itemize
  798. @node Redis
  799. @subsection Redis
  800. @itemize
  801. @item
  802. @code{guile-redis}
  803. @itemize
  804. @item
  805. git repository at GitHub: @uref{https://github.com/aconchillo/guile-redis}
  806. @end itemize
  807. @end itemize
  808. @node CouchDB
  809. @subsection CouchDB
  810. @itemize
  811. @item
  812. CouchDB
  813. @itemize
  814. @item
  815. @code{guile-couchdb}
  816. @item
  817. git repo: @uref{https://github.com/ukulanne/guile-couchdb}
  818. @item
  819. description: CouchDB bindings for Guile
  820. @end itemize
  821. @end itemize
  822. @node Other (1)
  823. @subsection Other
  824. @itemize
  825. @item
  826. WiredTiger (@uref{http://www.wiredtiger.com/}
  827. @itemize
  828. @item
  829. @code{guile-wiredtiger}
  830. @itemize
  831. @item
  832. blog post: @uref{https://hyper.dev/blog/getting-started-with-guile-wiredtiger.html}
  833. @item
  834. git repository at: ??? (framagit requires login?)
  835. @end itemize
  836. @end itemize
  837. @item
  838. @code{guile-sparql}: @uref{https://github.com/roelj/guile-sparql}
  839. @item
  840. @code{sparqling-genomics}: @uref{https://github.com/UMCUGenetics/sparqling-genomics}
  841. @item
  842. @code{nomunofu}
  843. @itemize
  844. @item
  845. mentioned on: @uref{https://hyper.dev/blog/nomunofu.html}
  846. @item
  847. git repo: ???
  848. @end itemize
  849. @item
  850. @code{gsparql}
  851. @itemize
  852. @item
  853. git repo: @uref{https://github.com/cordawyn/gsparql}
  854. @item
  855. description: @emph{"SPARQL client written in Guile"} (@uref{https://github.com/cordawyn/gsparql/blob/4076e435cc852a5c91922be5ffc7e201bb35d935/README.md})
  856. @end itemize
  857. @end itemize
  858. @node Data structures
  859. @section Data structures
  860. @menu
  861. * Purely functional data structures (PFDs)::
  862. * RDF::
  863. * Lenses::
  864. * Trees::
  865. * Other: Other (2).
  866. @end menu
  867. @node Purely functional data structures (PFDs)
  868. @subsection Purely functional data structures (PFDs)
  869. @itemize
  870. @item
  871. @code{pfds}
  872. @itemize
  873. @item
  874. git repository at GitHub: @uref{https://github.com/ijp/pfds}
  875. @item
  876. description: @emph{"pfds is a set of purely functional data structures written in R6RS Scheme. It has been tested with Racket, Guile 2, Vicare Scheme and IronScheme."} (@uref{https://github.com/ijp/pfds/blob/454033f82dac7c0b0ea9e84eed1e8ed316487c78/README.org})
  877. @item
  878. documentation: @uref{https://github.com/ijp/pfds/blob/master/README.org}
  879. @end itemize
  880. @item
  881. @code{fectors}
  882. @itemize
  883. @item
  884. git repository at GitHub: @uref{https://github.com/ijp/fectors}
  885. @itemize
  886. @item
  887. perhaps fork or original or another library: @uref{https://hg.sr.ht/~bjoli/guile-fector}
  888. @end itemize
  889. @end itemize
  890. @item
  891. @code{guile-fash}
  892. @itemize
  893. @item
  894. mercurial repo: @uref{https://hg.sr.ht/~bjoli/guile-fash}
  895. @item
  896. description: @emph{"guile-fash implements functional hashes using Hash array mapped tries (HAMTs)."} (@uref{https://hg.sr.ht/~bjoli/guile-fash/browse/readme.md?rev=tip})
  897. @item
  898. guix package: none
  899. @end itemize
  900. @end itemize
  901. @node RDF
  902. @subsection RDF
  903. @itemize
  904. @item
  905. @code{guile-rdf}
  906. @itemize
  907. @item
  908. git repository at framagit: @uref{https://framagit.org/tyreunom/guile-rdf}
  909. @end itemize
  910. @end itemize
  911. @node Lenses
  912. @subsection Lenses
  913. @itemize
  914. @item
  915. @code{guile-lens}
  916. @itemize
  917. @item
  918. git repository at GitLab: @uref{https://gitlab.com/a-sassmannshausen/guile-lens}
  919. @end itemize
  920. @end itemize
  921. @node Trees
  922. @subsection Trees
  923. @itemize
  924. @item
  925. Guile AA Tree
  926. @itemize
  927. @item
  928. project page: @uref{https://savannah.nongnu.org/projects/guile-aa-tree}
  929. @item
  930. git repo: @uref{https://git.savannah.nongnu.org/cgit/guile-aa-tree.git}
  931. @item
  932. description: @emph{"An AA tree implementation for scheme. AA trees are self-balancing binary trees, which ensure O(log n) worst case performance for core operations. The module provides non-mutating insert, delete, and search operations, with support for convenient nested tree operations."} (@uref{https://savannah.nongnu.org/projects/guile-aa-tree})
  933. @end itemize
  934. @end itemize
  935. @node Other (2)
  936. @subsection Other
  937. @itemize
  938. @item
  939. @code{copernic}
  940. @itemize
  941. @item
  942. git repository at GitHub: @uref{https://github.com/amirouche/copernic}
  943. @end itemize
  944. @item
  945. @code{scheme-bytestructures}
  946. @itemize
  947. @item
  948. git repo: @uref{https://github.com/TaylanUB/scheme-bytestructures}
  949. @item
  950. description:
  951. @quotation
  952. [@dots{}] 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.
  953. @end quotation
  954. @end itemize
  955. @item
  956. @code{guile-newra}
  957. @itemize
  958. @item
  959. git repo: @uref{https://github.com/lloda/guile-newra}
  960. @item
  961. description: "A Scheme replacement for Guile's array system" (@uref{https://github.com/lloda/guile-newra})
  962. @end itemize
  963. @item
  964. Treaps
  965. @itemize
  966. @item
  967. website: @uref{http://okmij.org/ftp/Scheme/#treaps}
  968. @item
  969. description:
  970. @quotation
  971. 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.
  972. (@uref{http://okmij.org/ftp/Scheme/#treaps})
  973. @end quotation
  974. @end itemize
  975. @item
  976. @code{array-list}
  977. @itemize
  978. @item
  979. repository: @uref{https://git.dthompson.us/chickadee.git/tree/chickadee/array-list.scm}
  980. @item
  981. description: an implementation of a dynamic array (@uref{https://en.wikipedia.org/wiki/Dynamic_array})
  982. @end itemize
  983. @end itemize
  984. @node Debugging
  985. @section Debugging
  986. @itemize
  987. @item
  988. @code{guile-jtd}
  989. @itemize
  990. @item
  991. repository: @uref{https://github.com/mwette/guile-jtd}
  992. @item
  993. description:
  994. @quotation
  995. jump-to-debugger: like Python's pdb.set@math{_trace}(), but for Guile
  996. The `(jtd)` module for Guile provides a procedure (jump-to-debugger)
  997. for escaping to the Guile REPL for the purpose of debugging code.
  998. It should be considered beta code, still under development.
  999. -- @uref{https://raw.githubusercontent.com/mwette/guile-jtd/cb40b0e0f2fa2a1825a5f1f273b6970be2fe1401/README.md}
  1000. @end quotation
  1001. @item
  1002. documentation: @uref{https://github.com/mwette/guile-jtd/blob/main/README.md}
  1003. @end itemize
  1004. @end itemize
  1005. @node Decentralization
  1006. @section Decentralization
  1007. @itemize
  1008. @item
  1009. @code{wispwot}
  1010. @itemize
  1011. @item
  1012. repository: @uref{https://hg.sr.ht/~arnebab/wispwot/browse}
  1013. @item
  1014. description:
  1015. @quotation
  1016. This implements the defense from the Freenet project against disruption of
  1017. communication. It is created to experiment with ways to improve the scaling
  1018. and performance.
  1019. -- @uref{https://hg.sr.ht/~arnebab/wispwot}
  1020. @end quotation
  1021. @end itemize
  1022. @end itemize
  1023. @node Development environments
  1024. @section Development environments
  1025. @itemize
  1026. @item
  1027. @code{guile-studio}
  1028. @itemize
  1029. @item
  1030. git repo: @uref{https://git.elephly.net/gitweb.cgi?p=software/guile-studio.git;a=tree}
  1031. @item
  1032. description:
  1033. @quotation
  1034. Racket has Dr Racket. Guile has @dots{} Emacs? This is Emacs with a few
  1035. settings that make working with Guile easier for people new to Emacs.
  1036. Features include: CUA mode, Geiser, tool bar icons to evaluate Guile
  1037. buffers, support for Guile's very own picture language, code completion, a
  1038. simple mode line, etc. [@dots{}]
  1039. @end quotation
  1040. (@uref{https://git.elephly.net/gitweb.cgi?p=software/guile-studio.git;a=blob;f=README.org;hb=HEAD})
  1041. @end itemize
  1042. @end itemize
  1043. @node Device management
  1044. @section Device management
  1045. @itemize
  1046. @item
  1047. @code{guile-udev}:
  1048. @itemize
  1049. @item
  1050. description: @emph{"Guile-Udev is a GNU Guile bindings to libudev."} (@uref{https://github.com/artyom-poptsov/guile-udev/blob/master/README})
  1051. @item
  1052. git repo: @uref{https://github.com/artyom-poptsov/guile-udev}
  1053. @item
  1054. documentation: (inside the git repo: @uref{https://github.com/artyom-poptsov/guile-udev/blob/master/doc/guile-udev.texi})
  1055. @item
  1056. examples: (inside the git repo: @uref{https://github.com/artyom-poptsov/guile-udev/tree/master/examples})
  1057. @end itemize
  1058. @end itemize
  1059. @node Distributed computing
  1060. @section Distributed computing
  1061. @itemize
  1062. @item
  1063. @code{metabash}
  1064. @itemize
  1065. @item
  1066. git repository: @uref{https://github.com/artyom-poptsov/metabash}
  1067. @item
  1068. description: @emph{"GNU Guile module for running distributed shell pipelines."} -- @uref{https://github.com/artyom-poptsov/metabash/blob/master/README.org}
  1069. @end itemize
  1070. @end itemize
  1071. @node E-Mail
  1072. @section E-Mail
  1073. @itemize
  1074. @item
  1075. GNU Mailutils ??? (@uref{https://mailutils.org/})
  1076. @item
  1077. @code{guile-email}: @uref{https://guile-email.systemreboot.net/}
  1078. @end itemize
  1079. @node Encodings
  1080. @section Encodings
  1081. @itemize
  1082. @item
  1083. ERIS - Encoding for Robust Immutable Storage
  1084. @itemize
  1085. @item
  1086. website: @uref{http://purl.org/eris}
  1087. @item
  1088. git repository: @uref{https://gitlab.com/openengiadina/eris/-/tree/main}
  1089. @item
  1090. description: @emph{"ERIS is an encoding for arbitrary content into uniformly sized encrypted blocks that can be reassembled only in possession of a short read capability."} -- @uref{https://gitlab.com/openengiadina/eris/-/blob/88c54329c1f7357941ae3a4bac49847c022c9803/README.org}
  1091. @end itemize
  1092. @end itemize
  1093. @node Event loop
  1094. @section Event loop
  1095. @itemize
  1096. @item
  1097. @code{guile-a-sync}
  1098. @itemize
  1099. @item
  1100. git repository at GitHub: @uref{https://github.com/ChrisVine/guile-a-sync}
  1101. @item
  1102. documentation: ?
  1103. @end itemize
  1104. @end itemize
  1105. @node FFI - Foreign Function Interface (1)
  1106. @section FFI - Foreign Function Interface
  1107. @itemize
  1108. @item
  1109. GNU Guile standard library FFI
  1110. @itemize
  1111. @item
  1112. GNU software reference manual: @uref{https://www.gnu.org/software/guile/manual/html_node/Foreign-Function-Interface.html}
  1113. @end itemize
  1114. @item
  1115. @code{ffi-helper} from NYACC
  1116. @itemize
  1117. @item
  1118. documentation: @uref{https://www.nongnu.org/nyacc/ffi-help.html}
  1119. @end itemize
  1120. @end itemize
  1121. @node File formats
  1122. @section File formats
  1123. @menu
  1124. * JSON::
  1125. * YAML::
  1126. * CSV::
  1127. * XML::
  1128. * Markdown::
  1129. * Texinfo::
  1130. * JPEG::
  1131. * PNG::
  1132. * ICS::
  1133. * torrent::
  1134. * Shapefile::
  1135. * CBOR::
  1136. * TAR::
  1137. * INI::
  1138. * Other: Other (3).
  1139. @end menu
  1140. @node JSON
  1141. @subsection JSON
  1142. @itemize
  1143. @item
  1144. @code{guile-json}
  1145. @itemize
  1146. @item
  1147. on GitHub: @uref{https://github.com/aconchillo/guile-json}
  1148. @item
  1149. on savannah: @uref{http://savannah.nongnu.org/projects/guile-json/}
  1150. @end itemize
  1151. @item
  1152. @code{guile-json} (another one)
  1153. @itemize
  1154. @item
  1155. git repo: @uref{https://github.com/cthom06/guile-json}
  1156. @item
  1157. description: @emph{"A basic JSON parser for Guile"} (@uref{https://github.com/cthom06/guile-json/blob/1b2f77c4242fa52d6f8624806ec0c47e0d2ca08a/README})
  1158. @end itemize
  1159. @end itemize
  1160. @node YAML
  1161. @subsection YAML
  1162. @itemize
  1163. @item
  1164. @code{guile-libyaml}
  1165. @itemize
  1166. @item
  1167. git repo: @uref{https://github.com/mwette/guile-libyaml}
  1168. @item
  1169. description: @emph{"simple yaml module using ffi-helper from www.nongnu.org/nyacc"} (@uref{https://github.com/mwette/guile-libyaml/blob/f5d33a6880e96571d3cb079ed7755ffc156cac46/README.md})
  1170. @end itemize
  1171. @end itemize
  1172. @node CSV
  1173. @subsection CSV
  1174. @itemize
  1175. @item
  1176. @code{guile-csv}
  1177. @itemize
  1178. @item
  1179. git repository at GitLab: @uref{https://gitlab.com/NalaGinrut/guile-csv}
  1180. @end itemize
  1181. @item
  1182. @code{guile-dsv}
  1183. @itemize
  1184. @item
  1185. This is more general, but can work with CSV as well.
  1186. @item
  1187. git repository at GitHub: @uref{https://github.com/artyom-poptsov/guile-dsv}
  1188. @end itemize
  1189. @end itemize
  1190. @node XML
  1191. @subsection XML
  1192. @itemize
  1193. @item
  1194. Guile's standard library SXML implementation
  1195. @itemize
  1196. @item
  1197. GNU software manual: @uref{https://www.gnu.org/software/guile/manual/html_node/SXML.html}
  1198. @item
  1199. Basically your templates become functions or macros.
  1200. @item
  1201. The structure of your document is kept as Scheme data structures.
  1202. @itemize
  1203. @item
  1204. This avoids having parse the document as a long string into an internal data structure to perform semantic transformations.
  1205. @item
  1206. It enables pattern matching without resorting to things like regular expressions and similar shenanigans.
  1207. @end itemize
  1208. @end itemize
  1209. @end itemize
  1210. @node Markdown
  1211. @subsection Markdown
  1212. @itemize
  1213. @item
  1214. @code{guile-commonmark}
  1215. @itemize
  1216. @item
  1217. git repository at GitHub: @uref{https://github.com/OrangeShark/guile-commonmark}
  1218. @item
  1219. documentation: ???
  1220. @end itemize
  1221. @end itemize
  1222. @node Texinfo
  1223. @subsection Texinfo
  1224. @itemize
  1225. @item
  1226. Guile standard library texinfo functionality
  1227. @itemize
  1228. @item
  1229. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/texinfo.html}
  1230. @end itemize
  1231. @end itemize
  1232. @node JPEG
  1233. @subsection JPEG
  1234. @itemize
  1235. @item
  1236. @code{guile-jpeg}: a library for parsing JPEG files
  1237. @itemize
  1238. @item
  1239. git repo: @uref{https://github.com/guildhall/guile-jpeg} (archived)
  1240. @end itemize
  1241. @end itemize
  1242. @node PNG
  1243. @subsection PNG
  1244. @itemize
  1245. @item
  1246. @samp{guile-PNG}
  1247. @itemize
  1248. @item
  1249. git repo: @uref{https://github.com/artyom-poptsov/guile-png}
  1250. @item
  1251. description: "Portable Network Graphics (PNG, RFC 2083) library for GNU Guile." -- @uref{https://github.com/artyom-poptsov/guile-png/blob/06bb2c734c3007346f970be6f6a00407ac5d76f0/README.org}
  1252. @end itemize
  1253. @end itemize
  1254. @node ICS
  1255. @subsection ICS
  1256. @itemize
  1257. @item
  1258. @code{guile-ics}
  1259. @itemize
  1260. @item
  1261. git repository at GitHub: @uref{https://github.com/artyom-poptsov/guile-ics}
  1262. @end itemize
  1263. @end itemize
  1264. @node torrent
  1265. @subsection torrent
  1266. @itemize
  1267. @item
  1268. @code{torrent}
  1269. @itemize
  1270. @item
  1271. git repository at GitHub: @uref{https://github.com/o-nly/torrent}
  1272. @item
  1273. documentation at: ???
  1274. @end itemize
  1275. @end itemize
  1276. @node Shapefile
  1277. @subsection Shapefile
  1278. @itemize
  1279. @item
  1280. @code{guile-shapefile}
  1281. @itemize
  1282. @item
  1283. git repository: @uref{https://github.com/HugoNikanor/guile-shapefile}
  1284. @item
  1285. description: @emph{"Guile Shapefile is a Guile library for reading shapefiles."} (@uref{https://github.com/HugoNikanor/guile-shapefile/blob/37fd219d3dc3d944e8f29b1bad6baf9e59372275/README.md})
  1286. @item
  1287. documentation: @uref{https://hugonikanor.github.io/guile-shapefile/}
  1288. @end itemize
  1289. @end itemize
  1290. @node CBOR
  1291. @subsection CBOR
  1292. @itemize
  1293. @item
  1294. @code{guile-cbor}
  1295. @itemize
  1296. @item
  1297. git repo: @uref{https://inqlab.net/git/guile-cbor.git/}
  1298. @item
  1299. description:
  1300. @quotation
  1301. The Concise Binary Object Representation (CBOR), as specified by RFC 8949,
  1302. is a binary data serialization format. CBOR is similar to JSON but
  1303. serializes to binary which is smaller and faster to generate and parse.
  1304. @end quotation
  1305. @end itemize
  1306. @end itemize
  1307. @node TAR
  1308. @subsection TAR
  1309. There is no standalone library for TAR files yet (2021-11-15), but there is code dealing with TAR files, which might be separatable into its own library:
  1310. @itemize
  1311. @item
  1312. Implementation of Ustar in Gash:
  1313. @itemize
  1314. @item
  1315. @uref{https://git.savannah.nongnu.org/cgit/gash/gash-utils.git/tree/gash/commands/tar.scm}
  1316. @item
  1317. @uref{https://git.savannah.nongnu.org/cgit/gash/gash-utils.git/tree/gash/ustar.scm}
  1318. @end itemize
  1319. @item
  1320. GNU Tar stuff:
  1321. @itemize
  1322. @item
  1323. @uref{https://git.savannah.gnu.org/cgit/tar.git/tree/src/tar.h}
  1324. @item
  1325. @uref{https://savannah.gnu.org/git/?group=tar}
  1326. @item
  1327. @uref{https://www.gnu.org/software/tar/}
  1328. @end itemize
  1329. @end itemize
  1330. @node INI
  1331. @subsection INI
  1332. @itemize
  1333. @item
  1334. @code{Guile-INI}
  1335. @itemize
  1336. @item
  1337. git repository: @uref{https://github.com/artyom-poptsov/guile-ini}
  1338. @item
  1339. description: @emph{"A GNU Guile library for working with INI format."} (@uref{https://github.com/artyom-poptsov/guile-ini/blob/6764a8a23d8d5911c08ee2bc996cb776e6b0ae5e/README.org})
  1340. @item
  1341. documentation: @uref{https://github.com/artyom-poptsov/guile-ini/tree/master/doc}
  1342. @end itemize
  1343. @end itemize
  1344. @node Other (3)
  1345. @subsection Other
  1346. @itemize
  1347. @item
  1348. @code{guile-mime}
  1349. @itemize
  1350. @item
  1351. git repo: @uref{https://mikegerwitz.com/projects/guile-mime/tree/}
  1352. @item
  1353. description: A library, that helps figuring out the MIME type of a file.
  1354. @end itemize
  1355. @item
  1356. 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.
  1357. @end itemize
  1358. @node File system
  1359. @section File system
  1360. @itemize
  1361. @item
  1362. @code{sdupes}
  1363. @itemize
  1364. @item
  1365. description: duplicate file detection
  1366. @item
  1367. git repository at GitHub: @uref{https://github.com/sph-mn/sdupes}
  1368. @end itemize
  1369. @item
  1370. @code{duplicates}
  1371. @itemize
  1372. @item
  1373. git repo: @uref{https://github.com/rashack/duplicates}
  1374. @item
  1375. description: @emph{"Find duplicate files - in Guile Scheme"} (@uref{https://github.com/rashack/duplicates})
  1376. @end itemize
  1377. @item
  1378. @code{guile-filesystem}
  1379. @itemize
  1380. @item
  1381. git repo: @uref{https://gitlab.com/lilyp/guile-filesystem}
  1382. @item
  1383. description: "[@dots{}] provides a set of utilities to deal with the filesystem beyond what POSIX mandates, from manipulating file names to actually creating files and directories." -- @uref{https://gitlab.com/lilyp/guile-filesystem/-/blob/f1f7f45c23a8662abdecc4b054b4da64f3cc868f/README.org}
  1384. @end itemize
  1385. @item
  1386. @code{guile-fslib}
  1387. @itemize
  1388. @item
  1389. git repo: @uref{https://notabug.org/ZelphirKaltstahl/guile-fslib}
  1390. @item
  1391. description: "guile-fslib is a library, which contains procedures for working with filenames. It simplifies common tasks like splitting, joining and getting the file extension of a filename." -- @uref{https://notabug.org/ZelphirKaltstahl/guile-fslib/src/67266331dc9be54cc4c7bf2a6b814815c21e44e1/README.org}
  1392. @end itemize
  1393. @end itemize
  1394. @node Game development
  1395. @section Game development
  1396. @itemize
  1397. @item
  1398. Chickadee
  1399. @itemize
  1400. @item
  1401. describes itself as "game development toolkit"
  1402. @item
  1403. OpenGL based
  1404. @item
  1405. website: @uref{https://dthompson.us/projects/chickadee.html}
  1406. @item
  1407. manual: @uref{https://dthompson.us/manuals/chickadee/index.html}
  1408. @end itemize
  1409. @item
  1410. @code{guile-allegro5}
  1411. @itemize
  1412. @item
  1413. git repo: @uref{https://github.com/davexunit/guile-allegro5}
  1414. @item
  1415. description: @emph{"Allegro 5 is a cross-platform, open source, game programming library written in C@. Guile-allegro5 is a collection of modules that provides bindings for Guile."} (@uref{https://github.com/davexunit/guile-allegro5/blob/614ecc978e034f7b7ba5bd23e27111c8fef81b56/README.md})
  1416. @end itemize
  1417. @item
  1418. @code{gzochi}
  1419. @itemize
  1420. @item
  1421. git repo: @uref{https://git.savannah.gnu.org/cgit/gzochi.git}
  1422. @item
  1423. project page: @uref{https://www.nongnu.org/gzochi/}
  1424. @item
  1425. documentation: @uref{https://www.nongnu.org/gzochi/gzochid.html}
  1426. @item
  1427. description:
  1428. @quotation
  1429. gzochi (@emph{zoʊ-tʃiː}) is a programming framework for developing online games
  1430. in GNU Guile, and a distributed middleware container that hosts your games
  1431. for thousands of connected players. gzochi takes care of the hard parts of
  1432. online game development - concurrency, data persistence, and network
  1433. communications - so you can focus on the stuff that matters!
  1434. @end quotation
  1435. (@uref{https://www.nongnu.org/gzochi/})
  1436. @end itemize
  1437. @end itemize
  1438. @node Games
  1439. @section Games
  1440. @itemize
  1441. @item
  1442. StayAlive
  1443. @itemize
  1444. @item
  1445. git repo: @uref{https://github.com/mwitmer/StayAlive}
  1446. @end itemize
  1447. @item
  1448. dryads-wake
  1449. @itemize
  1450. @item
  1451. git repo: @uref{https://hg.sr.ht/~arnebab/dryads-wake}
  1452. @item
  1453. description:
  1454. @quotation
  1455. Dryads Wake is a game of dialogue and choices.
  1456. (@uref{https://hg.sr.ht/~arnebab/dryads-wake})
  1457. @end quotation
  1458. @end itemize
  1459. @item
  1460. @code{guile-mud}
  1461. @itemize
  1462. @item
  1463. git repo: @uref{https://github.com/NalaGinrut/guile-mud}
  1464. @item
  1465. description: ???
  1466. @end itemize
  1467. @item
  1468. @code{game_of_life}
  1469. @itemize
  1470. @item
  1471. git repo: @uref{https://github.com/deathgrindfreak/game_of_life}
  1472. @item
  1473. description: @emph{"An implementation of Conway's Game of Life in Guile Scheme."} (@uref{https://github.com/deathgrindfreak/game_of_life/blob/501f7d3c0dc50a3cbac8df3620f8e507f32d5aa5/README.md})
  1474. @end itemize
  1475. @end itemize
  1476. @node Generators
  1477. @section Generators
  1478. @itemize
  1479. @item
  1480. C-Ast
  1481. @itemize
  1482. @item
  1483. git repo: @uref{https://github.com/zenhack/c-ast}
  1484. @item
  1485. description: @emph{"C-Ast is a GNU Guile library for generating C code."} (@uref{https://github.com/zenhack/c-ast/blob/5af5758ccae5e468587cda837e1fd9e685205bef/README.md})
  1486. @end itemize
  1487. @end itemize
  1488. @node Genomics
  1489. @section Genomics
  1490. @itemize
  1491. @item
  1492. @code{sparqling-genomics}
  1493. @itemize
  1494. @item
  1495. git repo: @uref{https://github.com/UMCUGenetics/sparqling-genomics}
  1496. @item
  1497. description:
  1498. @quotation
  1499. 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.
  1500. (@uref{https://github.com/UMCUGenetics/sparqling-genomics})
  1501. @end quotation
  1502. @item
  1503. usage example: @uref{https://github.com/UMCUGenetics/sparqling-genomics/blob/dc5fea515c30aa26ff60b77911438689473d125b/web/ldap/authenticate.scm.in#L148}
  1504. @end itemize
  1505. @end itemize
  1506. @node Graphics
  1507. @section Graphics
  1508. @itemize
  1509. @item
  1510. @code{guile-sdl}
  1511. @itemize
  1512. @item
  1513. GNU software page: @uref{https://www.gnu.org/software/guile-sdl/}
  1514. @item
  1515. gnuvola page of examples: @uref{http://www.gnuvola.org/software/guile-sdl-demos/}
  1516. @item
  1517. gnuvola software page: @uref{http://www.gnuvola.org/software/guile-sdl-demos/}
  1518. @end itemize
  1519. @item
  1520. @code{guile-sdl2}
  1521. @itemize
  1522. @item
  1523. project website: @uref{https://dthompson.us/projects/guile-sdl2.html}
  1524. @end itemize
  1525. @item
  1526. @code{guile-opengl}
  1527. @itemize
  1528. @item
  1529. GNU software page: @uref{https://www.gnu.org/software/guile-opengl/}
  1530. @item
  1531. GNU software manual page: @uref{https://www.gnu.org/software/guile-opengl/manual/guile-opengl.html}
  1532. @item
  1533. git repository at Savannah: @uref{http://savannah.gnu.org/projects/guile-opengl}
  1534. @end itemize
  1535. @item
  1536. @code{guile-cairo}
  1537. @itemize
  1538. @item
  1539. git repository at Savannah: @uref{http://savannah.nongnu.org/projects/guile-cairo}
  1540. @end itemize
  1541. @item
  1542. @code{guile-jpeg}: a library for parsing JPEG files
  1543. @itemize
  1544. @item
  1545. git repository at GitHub: @uref{https://github.com/guildhall/guile-jpeg}
  1546. @end itemize
  1547. @end itemize
  1548. @menu
  1549. * Image processing::
  1550. * Design and CAD::
  1551. @end menu
  1552. @node Image processing
  1553. @subsection Image processing
  1554. @itemize
  1555. @item
  1556. @code{guile-cv}
  1557. @itemize
  1558. @item
  1559. GNU software page: @uref{https://www.gnu.org/software/guile-cv/}
  1560. @item
  1561. git repository at Savannah: @uref{http://git.savannah.gnu.org/cgit/guile-cv.git}
  1562. @end itemize
  1563. @item
  1564. @code{guile-picture-language}
  1565. @itemize
  1566. @item
  1567. website: @uref{https://elephly.net/guile-picture-language/}
  1568. @item
  1569. repository: @uref{https://git.elephly.net/gitweb.cgi?p=software/guile-picture-language.git}
  1570. @item
  1571. manual: @uref{https://elephly.net/guile-picture-language/manual.html}
  1572. @end itemize
  1573. @end itemize
  1574. @node Design and CAD
  1575. @subsection Design and CAD
  1576. @itemize
  1577. @item
  1578. @code{libfive}
  1579. @itemize
  1580. @item
  1581. website: @uref{https://libfive.com/}
  1582. @item
  1583. git repository: @uref{https://github.com/libfive/libfive}
  1584. @item
  1585. description:
  1586. @quotation
  1587. "libfive is a software library and set of tools for solid modeling, especially suited for parametric and procedural design. It is infrastructure for generative design, mass customization, and domain-specific CAD tools."
  1588. -- @uref{https://libfive.com/} (2021-05-13)
  1589. @end quotation
  1590. libfive itself is not written in GNU Guile, but interaction with it include
  1591. using GNU Guile as a modelling language.
  1592. @end itemize
  1593. @end itemize
  1594. @node GUI development (1)
  1595. @section GUI development
  1596. @itemize
  1597. @item
  1598. @code{guile-gi}
  1599. @itemize
  1600. @item
  1601. git repository at GitHub: @uref{https://github.com/spk121/guile-gi}
  1602. @item
  1603. documentation at: @uref{https://spk121.github.io/guile-gi/}
  1604. @item
  1605. description:
  1606. @quotation
  1607. This is a library for GNU Guile to create language bindings via GObject Introspection.
  1608. GNU Guile is an implementation of Scheme, which is a Lisp-like language. This library allows Guile to use GObject-based libraries -- such as GTK+3, GLib, and WebKit2 -- by generating a Scheme API from the GObject Introspection information provided by those libraries.
  1609. [@dots{}]
  1610. -- @uref{https://raw.githubusercontent.com/spk121/guile-gi/c4a9b8d11debe9a633a4be936f1bbf4b7098fe66/README.md}
  1611. @end quotation
  1612. @end itemize
  1613. @item
  1614. @code{guile-gnome}
  1615. @itemize
  1616. @item
  1617. GNU software page: @uref{https://www.gnu.org/software/guile-gnome/}
  1618. @item
  1619. git repository at Savannah: @uref{http://git.savannah.gnu.org/cgit/guile-gnome.git}
  1620. @end itemize
  1621. @item
  1622. @code{guile-gtk}
  1623. @itemize
  1624. @item
  1625. website: @uref{https://www.gnu.org/software/guile-gtk/}
  1626. @item
  1627. CVS repository at non-GNU Savannah: @uref{http://savannah.nongnu.org/projects/guile-gtk/}
  1628. @end itemize
  1629. @item
  1630. @code{g-golf}: @uref{https://www.gnu.org/software/g-golf/}
  1631. @item
  1632. @samp{guile-webview}
  1633. @itemize
  1634. @item
  1635. git repository: @uref{https://github.com/KikyTokamuro/guile-webview}
  1636. @item
  1637. description: @emph{"Wrapper for using libwebview from GNU Guile"} -- @uref{https://github.com/KikyTokamuro/guile-webview/blob/a2af7bc339e777b05e304158bcfae23815d8bcef/README.md}
  1638. @item
  1639. documentation: @uref{https://github.com/KikyTokamuro/guile-webview/tree/main/examples}
  1640. @end itemize
  1641. @end itemize
  1642. @node Language
  1643. @section Language
  1644. @itemize
  1645. @item
  1646. @code{guile-aspell}
  1647. @itemize
  1648. @item
  1649. git repository at GitHub: @uref{https://github.com/spk121/guile-aspell}
  1650. @item
  1651. website: @uref{http://lonelycactus.com/guile-aspell.html}
  1652. @end itemize
  1653. @end itemize
  1654. @node Logging
  1655. @section Logging
  1656. @itemize
  1657. @item
  1658. @code{guile-logging}
  1659. @itemize
  1660. @item
  1661. git repository at GitHub: @uref{https://github.com/shanecelis/guile-logging}
  1662. @end itemize
  1663. @item
  1664. SysLog proposal
  1665. @itemize
  1666. @item
  1667. git repo: @uref{https://bitbucket.org/cowan/r7rs-wg1-infra/src/default/SyslogCowan.md}
  1668. @item
  1669. description: This is a specification for an implementation of syslog.
  1670. @end itemize
  1671. @item
  1672. logging module of @code{sparqling-genomics}
  1673. @itemize
  1674. @item
  1675. git repo: @uref{https://github.com/UMCUGenetics/sparqling-genomics/blob/master/web/logger.scm}
  1676. @item
  1677. description: This is what @code{sparqling-genomics} uses internally.
  1678. @end itemize
  1679. @end itemize
  1680. @node Machine Learning
  1681. @section Machine Learning
  1682. @itemize
  1683. @item
  1684. decision tree
  1685. @itemize
  1686. @item
  1687. @code{guile-ml}
  1688. @itemize
  1689. @item
  1690. repository at notabug.org: @uref{https://notabug.org/ZelphirKaltstahl/guile-ml}
  1691. @end itemize
  1692. @end itemize
  1693. @item
  1694. @code{guile-snowball-stemmer}
  1695. @itemize
  1696. @item
  1697. mentioned on: @uref{https://snowballstem.org/projects.html}
  1698. @item
  1699. mentioned on: @uref{https://github.com/snowballstem/snowball/issues/34#issuecomment-491056371}
  1700. @item
  1701. git repo: unfortunately the link to the repository is broken
  1702. @end itemize
  1703. @item
  1704. AIscm
  1705. @itemize
  1706. @item
  1707. website: @uref{http://wedesoft.github.io/aiscm/}
  1708. @item
  1709. description:
  1710. @quotation
  1711. AIscm is a Guile extension for numerical arrays and tensors. Performance is achieved by using the LLVM JIT compiler.
  1712. (@uref{http://wedesoft.github.io/aiscm/})
  1713. @end quotation
  1714. @end itemize
  1715. @end itemize
  1716. @node Macros (1)
  1717. @section Macros
  1718. @itemize
  1719. @item
  1720. @code{guile-for-loops}
  1721. @itemize
  1722. @item
  1723. mercurial repo: @uref{https://hg.sr.ht/~bjoli/guile-for-loops}
  1724. @item
  1725. description:
  1726. @quotation
  1727. 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.
  1728. [@dots{}]
  1729. (@uref{https://hg.sr.ht/~bjoli/guile-for-loops/browse/README.md?rev=580d3fb365ea2734b037ad3ca7f2ab1e4aa5116d})
  1730. @end quotation
  1731. @end itemize
  1732. @item
  1733. @code{goof-loop}
  1734. @itemize
  1735. @item
  1736. repository: @uref{https://git.sr.ht/~bjoli/goof-loop/}
  1737. @item
  1738. description:
  1739. @quotation
  1740. goof-loop - a scheme looping facility
  1741. goof-loops aims to be an amalgamation of the racket for loops and Alex Shinn's (chibi-loop). We are many that found racket's for loops a breeze of fresh air, but in the end their most general forms (for/fold and for/foldr) are kinda odd to work with. If you choose not to use those general for loops, you cannot express arbitrary transformations, like say a fibonacci sequence, since for clauses cannot reference eachother. goof-loop tries to fix this [@dots{}]
  1742. -- @uref{https://git.sr.ht/~bjoli/goof-loop/tree/cccc324ecd14325d9f2fe4c7eabd8bc217823d32/item/README.md}
  1743. @end quotation
  1744. @end itemize
  1745. @item
  1746. @code{megacut} macro:
  1747. @itemize
  1748. @item
  1749. mercurial repo: @uref{https://hg.sr.ht/~bjoli/megacut}
  1750. @item
  1751. description:
  1752. @quotation
  1753. 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).
  1754. (@uref{https://hg.sr.ht/~bjoli/megacut/browse/readme.txt?rev=75caf96aa4a9282d489230fe56fff4f1aa5e2564})
  1755. @end quotation
  1756. @end itemize
  1757. @item
  1758. GNU Thales
  1759. @itemize
  1760. @item
  1761. project page: @uref{https://savannah.gnu.org/projects/thales}
  1762. @item
  1763. git repo: @uref{https://git.savannah.gnu.org/cgit/thales.git}
  1764. @item
  1765. description: @emph{"GNU Thales is set of GNU Guile macroses to perform doctests."} (@uref{https://savannah.gnu.org/projects/thales})
  1766. @end itemize
  1767. @item
  1768. Documentation for Scheme Syntax Extension Packages in SLIB
  1769. @itemize
  1770. @item
  1771. website: @uref{https://people.csail.mit.edu/jaffer/slib/Scheme-Syntax-Extension-Packages.html#Scheme-Syntax-Extension-Packages}
  1772. @end itemize
  1773. @item
  1774. Implementation of function contracts: @uref{https://notabug.org/ZelphirKaltstahl/guile-examples/src/master/macros/contract.scm}
  1775. @end itemize
  1776. @node Message Queues
  1777. @section Message Queues
  1778. @itemize
  1779. @item
  1780. Zero MQ
  1781. @itemize
  1782. @item
  1783. @code{guile-zmq}
  1784. @itemize
  1785. @item
  1786. git repository at GitLab: @uref{https://gitlab.com/NalaGinrut/guile-zmq}
  1787. @end itemize
  1788. @item
  1789. @code{guile-simple-zmq}
  1790. @itemize
  1791. @item
  1792. git repository at GitHub: @uref{https://github.com/jerry40/guile-simple-zmq}
  1793. @end itemize
  1794. @end itemize
  1795. @end itemize
  1796. @node Network programming
  1797. @section Network programming
  1798. @itemize
  1799. @item
  1800. Guile's standard library networking module
  1801. @itemize
  1802. @item
  1803. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/Networking.html}
  1804. @end itemize
  1805. @item
  1806. @code{guile-curl}
  1807. @itemize
  1808. @item
  1809. git repository at GitHub: @uref{https://github.com/spk121/guile-curl}
  1810. @end itemize
  1811. @item
  1812. @code{guile-ssh}
  1813. @itemize
  1814. @item
  1815. git repository at GitHub: @uref{https://github.com/artyom-poptsov/guile-ssh}
  1816. @end itemize
  1817. @item
  1818. GNU Serveez
  1819. @itemize
  1820. @item
  1821. GNU software page: @uref{https://www.gnu.org/software/serveez/}
  1822. @item
  1823. manual: @uref{https://www.gnu.org/software/serveez/manual/}
  1824. @item
  1825. git repository at Savannah: @uref{http://savannah.gnu.org/projects/serveez/}
  1826. @end itemize
  1827. @item
  1828. @code{serveez-mg}
  1829. @itemize
  1830. @item
  1831. git repository at GitHub @uref{https://github.com/spk121/serveez-mg}
  1832. @item
  1833. based on GNU Serveez
  1834. @end itemize
  1835. @item
  1836. @code{stis-engine}
  1837. @itemize
  1838. @item
  1839. git repository at: @uref{https://gitlab.com/tampe/stis-engine}
  1840. @item
  1841. description: @emph{"Communication layer ontop of guile fibers"} -- @uref{https://gitlab.com/tampe/stis-engine}
  1842. @end itemize
  1843. @item
  1844. @samp{Scheme-GNUnet}
  1845. @itemize
  1846. @item
  1847. git repository: @uref{https://git.gnunet.org/gnunet-scheme.git/}
  1848. @item
  1849. description:
  1850. @quotation
  1851. Scheme-GNUnet is a WIP (Guile) Scheme port of the GNUnet client libraries.
  1852. Unlike gnunet-guile, it is not a binding for the C libraries. It can be
  1853. used in multi-threaded applications, e.g. with guile-fibers.
  1854. It is not to be confused with @uref{https://git.gnunet.org/gnunet-guile2.git}
  1855. and @uref{https://git.savannah.gnu.org/cgit/guix/gnunet.git}, which implement
  1856. bindings for the C libraries and support a different set of services.
  1857. -- Guile user mailing list
  1858. @end quotation
  1859. @item
  1860. documentation: @uref{https://git.gnunet.org/gnunet-scheme.git/tree/doc}
  1861. @end itemize
  1862. @end itemize
  1863. @node Parallelism
  1864. @section Parallelism
  1865. @itemize
  1866. @item
  1867. standard library futures
  1868. @itemize
  1869. @item
  1870. GNU software manual page: @uref{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?)
  1871. @item
  1872. description:
  1873. @quotation
  1874. [@dots{}] 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 [@dots{}]
  1875. @end quotation
  1876. @end itemize
  1877. @item
  1878. @code{guile-fibers}
  1879. @itemize
  1880. @item
  1881. git repo: @uref{https://github.com/wingo/fibers}
  1882. @item
  1883. description:
  1884. @quotation
  1885. Concurrent ML-like concurrency for Guile
  1886. @end quotation
  1887. @end itemize
  1888. @item
  1889. standard library parallel forms
  1890. @itemize
  1891. @item
  1892. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/Parallel-Forms.html}
  1893. @item
  1894. note: Sometimes the parallel forms might cause errors, see @uref{https://lists.gnu.org/archive/html/guile-user/2020-01/msg00092.html}, I recommend to use futures or if suitable @code{guile-fibers} instead.
  1895. @end itemize
  1896. @item
  1897. @samp{guile-parallel}
  1898. @itemize
  1899. @item
  1900. git repo: @uref{https://git.sr.ht/~old/guile-parallel}
  1901. @item
  1902. description: "High level structures and procedures for parallelism." -- @uref{https://git.sr.ht/~old/guile-parallel/tree/dc1a55ea2499b6ca4355e9aae1d7256effd14355/item/README.md}
  1903. @end itemize
  1904. @end itemize
  1905. @node Parsing
  1906. @section Parsing
  1907. @menu
  1908. * Parser Combinators::
  1909. * Parser Generator::
  1910. * Other: Other (4).
  1911. * XML parser::
  1912. @end menu
  1913. @node Parser Combinators
  1914. @subsection Parser Combinators
  1915. @itemize
  1916. @item
  1917. @code{stis-parser}
  1918. @itemize
  1919. @item
  1920. git repository at GitLab: @uref{https://gitlab.com/tampe/stis-parser}
  1921. @end itemize
  1922. @end itemize
  1923. @node Parser Generator
  1924. @subsection Parser Generator
  1925. @itemize
  1926. @item
  1927. @code{nyacc}: Not Yet Another Compiler Compiler
  1928. @itemize
  1929. @item
  1930. git repository at Savannah: @uref{https://savannah.nongnu.org/projects/nyacc}
  1931. @item
  1932. documentation: @uref{https://www.nongnu.org/nyacc/nyacc-ug.html}
  1933. @end itemize
  1934. @end itemize
  1935. @node Other (4)
  1936. @subsection Other
  1937. @itemize
  1938. @item
  1939. standard library PEG parsing
  1940. @itemize
  1941. @item
  1942. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/PEG-Parsing.html}
  1943. @item
  1944. description:
  1945. @quotation
  1946. Parsing Expression Grammars (PEGs) are a way of specifying formal languages for text processing.
  1947. (@uref{https://www.gnu.org/software/guile/manual/html_node/PEG-Parsing.html})
  1948. @end quotation
  1949. @end itemize
  1950. @end itemize
  1951. @node XML parser
  1952. @subsection XML parser
  1953. @itemize
  1954. @item
  1955. Mixp:
  1956. @itemize
  1957. @item
  1958. git repository: @uref{https://git.savannah.nongnu.org/cgit/mixp.git}
  1959. @item
  1960. website: @uref{https://www.nongnu.org/mixp/}
  1961. @item
  1962. description: @emph{"Mixp is a set of modules for Guile that wrap libexpat and provide higher-level utilities. [@dots{}]"} (@uref{https://savannah.nongnu.org/projects/mixp})
  1963. @item
  1964. documentation: ???
  1965. @end itemize
  1966. @end itemize
  1967. @node Plotting
  1968. @section Plotting
  1969. @itemize
  1970. @item
  1971. @code{guile-plotutils}
  1972. @itemize
  1973. @item
  1974. git repository at GitHub: @uref{https://github.com/spk121/guile-plotutils}
  1975. @item
  1976. website: @uref{https://www.gnu.org/software/plotutils/plotutils.html}
  1977. @end itemize
  1978. @end itemize
  1979. @node Protocols
  1980. @section Protocols
  1981. @itemize
  1982. @item
  1983. X protocol
  1984. @itemize
  1985. @item
  1986. @code{guile-xcb}
  1987. @itemize
  1988. @item
  1989. git repo: @uref{https://github.com/mwitmer/guile-xcb}
  1990. @end itemize
  1991. @end itemize
  1992. @end itemize
  1993. @node Serialization
  1994. @section Serialization
  1995. @itemize
  1996. @item
  1997. @code{guile-msgpack}
  1998. @itemize
  1999. @item
  2000. git repo: @uref{https://gitlab.com/HiPhish/guile-msgpack}
  2001. @item
  2002. description:
  2003. @quotation
  2004. 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.
  2005. (@uref{https://gitlab.com/HiPhish/guile-msgpack/-/blob/master/README.rst})
  2006. @end quotation
  2007. @end itemize
  2008. @item
  2009. @code{stis-data}
  2010. @itemize
  2011. @item
  2012. git repo: @uref{https://gitlab.com/tampe/stis-data}
  2013. @item
  2014. description: @emph{"Serializing guile datastructures into binary format"} -- @uref{https://gitlab.com/tampe/stis-data/-/blob/08d2de0ceef22f87083221b1b59c91de76836bd9/README.md}
  2015. @end itemize
  2016. @end itemize
  2017. @node SRFI (Scheme Request For Implementation) implementations
  2018. @section SRFI (Scheme Request For Implementation) implementations
  2019. @itemize
  2020. @item
  2021. @code{TaylanUB/scheme-srfis}
  2022. @itemize
  2023. @item
  2024. git repo: @uref{https://github.com/TaylanUB/scheme-srfis}
  2025. @item
  2026. description: This repository contains implementations for some SRFIs.
  2027. @end itemize
  2028. @item
  2029. @code{srfi-78-guile}
  2030. @itemize
  2031. @item
  2032. git repo: @uref{https://github.com/sunjoong/srfi-78-guile}
  2033. @item
  2034. description: @emph{"SRFI 78: Lightweight testing by Sebastian Egner"} (@uref{https://github.com/sunjoong/srfi-78-guile})
  2035. @end itemize
  2036. @item
  2037. @code{guile-srfi89}
  2038. @itemize
  2039. @item
  2040. git repo: @uref{https://gitlab.com/mjbecze/guile-srfi-89}
  2041. @item
  2042. description: @emph{"This is a hygienic implemention of SRFI 89 (Optional positional and named parameters) for Guile Scheme."} (@uref{https://gitlab.com/mjbecze/guile-srfi-89/-/blob/0c907086e809c69faaac75ce2feeb3ba1694f037/README.md})
  2043. @end itemize
  2044. @item
  2045. @code{srfi-151}
  2046. @itemize
  2047. @item
  2048. git repo: @uref{https://github.com/ft/srfi-151}
  2049. @item
  2050. description: @emph{"SRFI-151 — Bitwise Operations — Implementation for GNU Guile"} (@uref{https://github.com/ft/srfi-151/blob/486ee152c826ad07eaf4e8765e8c20842dba0915/README})
  2051. @item
  2052. license: @uref{https://github.com/ft/srfi-151/blob/486ee152c826ad07eaf4e8765e8c20842dba0915/LICENCE}
  2053. @item
  2054. documentation: @uref{https://srfi.schemers.org/srfi-151/srfi-151.html}
  2055. @end itemize
  2056. @item
  2057. @code{scheme-libraries}
  2058. @itemize
  2059. @item
  2060. repository: @uref{https://launchpad.net/scheme-libraries}
  2061. @end itemize
  2062. @item
  2063. @code{wisp}
  2064. @itemize
  2065. @item
  2066. mercurial repo: @uref{https://hg.sr.ht/~arnebab/wisp}
  2067. @item
  2068. website: @uref{http://draketo.de/english/wisp}, @uref{https://srfi.schemers.org/srfi-119/srfi-119.html}
  2069. @item
  2070. GNU Guix package: @code{guile-wisp}
  2071. @item
  2072. description: @emph{"wisp: simpler indentation-sensitive scheme"} (@uref{https://srfi.schemers.org/srfi-119/srfi-119.html})
  2073. @end itemize
  2074. @item
  2075. @code{awesome-coroutine-generators}
  2076. @itemize
  2077. @item
  2078. git repository: @uref{https://git.sr.ht/~bjoli/awesome-coroutine-generators/tree}
  2079. @item
  2080. description: an implementation of SRFI-158
  2081. @end itemize
  2082. @item
  2083. double ended queue
  2084. @itemize
  2085. @item
  2086. website: @uref{https://srfi.schemers.org/srfi-134/srfi-134.html}
  2087. @item
  2088. repository: @uref{https://github.com/scheme-requests-for-implementation/srfi-134/}
  2089. @end itemize
  2090. @end itemize
  2091. @node Strings
  2092. @section Strings
  2093. @itemize
  2094. @item
  2095. @code{guile-raw-strings}
  2096. @itemize
  2097. @item
  2098. git repo: @uref{https://github.com/lloda/guile-raw-strings}
  2099. @end itemize
  2100. @end itemize
  2101. @node Syntax
  2102. @section Syntax
  2103. @itemize
  2104. @item
  2105. (grand scheme) glossary
  2106. @itemize
  2107. @item
  2108. git repo: @uref{https://github.com/plande/grand-scheme}
  2109. @end itemize
  2110. @end itemize
  2111. @node Regular expressions
  2112. @section Regular expressions
  2113. @itemize
  2114. @item
  2115. IrRegular Expressions (Scheme, R[4567]RS)
  2116. @itemize
  2117. @item
  2118. website: @uref{http://synthcode.com/scheme/irregex}
  2119. @end itemize
  2120. @end itemize
  2121. @node REPL (Read Eval Print Loop)
  2122. @section REPL (Read Eval Print Loop)
  2123. @itemize
  2124. @item
  2125. @code{guile-colorized}
  2126. @itemize
  2127. @item
  2128. git repository at GitLab: @uref{https://gitlab.com/NalaGinrut/guile-colorized}
  2129. @end itemize
  2130. @end itemize
  2131. @node RPC (Remote Procedure Call)
  2132. @section RPC (Remote Procedure Call)
  2133. @itemize
  2134. @item
  2135. GNU Guile-RPC
  2136. @itemize
  2137. @item
  2138. website: @uref{https://www.gnu.org/software/guile-rpc/}
  2139. @item
  2140. documentation: @uref{https://www.gnu.org/software/guile-rpc/manual/}
  2141. @item
  2142. git repo: @uref{http://git.savannah.gnu.org/gitweb/?p=guile-rpc.git}
  2143. @end itemize
  2144. @item
  2145. @code{guile-xmlrpc}:
  2146. @itemize
  2147. @item
  2148. description:
  2149. @quotation
  2150. 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.
  2151. (@uref{https://github.com/aconchillo/guile-xmlrpc/blob/master/README.org})
  2152. @end quotation
  2153. @item
  2154. git repo: @uref{https://github.com/aconchillo/guile-xmlrpc}
  2155. @item
  2156. manual: (readme file in git repo)
  2157. @end itemize
  2158. @end itemize
  2159. @node Scientific computing and mathematics
  2160. @section Scientific computing and mathematics
  2161. @itemize
  2162. @item
  2163. GNU Scientific Library (GSL)
  2164. @itemize
  2165. @item
  2166. GNU software page @uref{https://www.gnu.org/software/gsl/}
  2167. @item
  2168. git repository at Savannah: @uref{http://savannah.gnu.org/projects/gsl/}
  2169. @item
  2170. wikipedia page: @uref{https://en.wikipedia.org/wiki/GNU_Scientific_Library}
  2171. @item
  2172. Guile bindings: @uref{http://community.schemewiki.org/?gee-guile-gsl}
  2173. @end itemize
  2174. @item
  2175. Matrix multiplication
  2176. @itemize
  2177. @item
  2178. @code{guile-ffi-cblas}
  2179. @itemize
  2180. @item
  2181. git repository at GitHub: @uref{https://github.com/lloda/guile-ffi-cblas}
  2182. @end itemize
  2183. @end itemize
  2184. @item
  2185. Fast Fourier Transformation
  2186. @itemize
  2187. @item
  2188. @code{guile-ffi-fftw} by lloda
  2189. @itemize
  2190. @item
  2191. git repo: @uref{https://github.com/lloda/guile-ffi-fftw}
  2192. @item
  2193. description: @emph{"A simple wrapper for FFTW, using Guile's FFI"} (@uref{https://github.com/lloda/guile-ffi-fftw})
  2194. @end itemize
  2195. @item
  2196. @code{guile-ffi-fftw} by Mikael Djurfeldt
  2197. @itemize
  2198. @item
  2199. git repo at Savannah: @uref{https://savannah.nongnu.org/projects/guile-fftw}
  2200. @item
  2201. description:
  2202. @end itemize
  2203. @end itemize
  2204. @item
  2205. Symbolic mathematics
  2206. @itemize
  2207. @item
  2208. @code{guile-scmutils}
  2209. @itemize
  2210. @item
  2211. website: @uref{https://www.cs.rochester.edu/~gildea/guile-scmutils/}
  2212. @item
  2213. download: @uref{https://www.cs.rochester.edu/~gildea/guile-scmutils/guile-scmutils-v1.0.tgz}
  2214. @item
  2215. description:
  2216. @quotation
  2217. 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.
  2218. (@uref{https://www.cs.rochester.edu/~gildea/guile-scmutils/})
  2219. @end quotation
  2220. @end itemize
  2221. @end itemize
  2222. @item
  2223. Guile implementation of symbolic mathematics shown in SICP
  2224. @itemize
  2225. @item
  2226. Does this exist?
  2227. @end itemize
  2228. @end itemize
  2229. @menu
  2230. * Interaction with the Jupyter ecosystem::
  2231. @end menu
  2232. @node Interaction with the Jupyter ecosystem
  2233. @subsection Interaction with the Jupyter ecosystem
  2234. @itemize
  2235. @item
  2236. @code{guix-kernel}
  2237. @itemize
  2238. @item
  2239. git repository at gitlab.inria.fr: @uref{https://gitlab.inria.fr/guix-hpc/guix-kernel}
  2240. @item
  2241. blog post: @uref{https://hpc.guix.info/blog/2019/10/towards-reproducible-jupyter-notebooks/}
  2242. @end itemize
  2243. @item
  2244. @code{guile-kernel}
  2245. @itemize
  2246. @item
  2247. git repository at GitHub: @uref{https://github.com/jerry40/guile-kernel}
  2248. @end itemize
  2249. @end itemize
  2250. @node Search engine
  2251. @section Search engine
  2252. @itemize
  2253. @item
  2254. @code{babelia}
  2255. @itemize
  2256. @item
  2257. git repo: @uref{https://github.com/amirouche/babelia}
  2258. @item
  2259. description:
  2260. @quotation
  2261. Wanna be search engine with federation support
  2262. (@uref{https://github.com/amirouche/babelia})
  2263. @end quotation
  2264. @end itemize
  2265. @end itemize
  2266. @node Shell
  2267. @section Shell
  2268. @itemize
  2269. @item
  2270. @code{gash}
  2271. @itemize
  2272. @item
  2273. git repo: @uref{https://git.savannah.nongnu.org/cgit/gash.git}
  2274. @item
  2275. description:
  2276. @quotation
  2277. Gash is a POSIX-compatible shell written in Guile Scheme. It provides both
  2278. the shell interface, as well as a Guile library for parsing shell scripts.
  2279. Gash is designed to bootstrap Bash as part of the Guix bootstrap process.
  2280. We are planning to develop Gash into a general-purpose shell and tool for
  2281. building interfaces between Scheme and the shell.
  2282. @end quotation
  2283. (@uref{https://git.savannah.nongnu.org/cgit/gash.git/tree/README?id=8f9b973264cc799df27795df6230839e96dc00eb})
  2284. @end itemize
  2285. @end itemize
  2286. @node TUI development
  2287. @section TUI development
  2288. @itemize
  2289. @item
  2290. @code{guile-ncurses}
  2291. @itemize
  2292. @item
  2293. GNU software page: @uref{https://www.gnu.org/software/guile-ncurses/}
  2294. @item
  2295. git repository at GitHub: @uref{https://github.com/guildhall/guile-ncurses}
  2296. @end itemize
  2297. @item
  2298. @code{guile-termios}
  2299. @itemize
  2300. @item
  2301. git repository: @uref{https://gitlab.com/ft/guile-termios}
  2302. @item
  2303. description:
  2304. @quotation
  2305. POSIX termios interface for GNU Guile
  2306. To query and change settings of serial devices on POSIX systems, the termios
  2307. API is used. GNU Guile doesn't have an interface for that built in. This module
  2308. implements this interface by use of Guile's dynamic FFI@.
  2309. [@dots{}]
  2310. -- @uref{https://gitlab.com/ft/guile-termios/-/blob/29dfd68bdc64d6cea0cd4a50757439b77523e9f5/README}
  2311. @end quotation
  2312. @item
  2313. license: @uref{https://gitlab.com/ft/guile-termios/-/blob/29dfd68bdc64d6cea0cd4a50757439b77523e9f5/LICENCE}
  2314. @end itemize
  2315. @end itemize
  2316. @node Testing
  2317. @section Testing
  2318. @menu
  2319. * Integration testing::
  2320. * Unit testing::
  2321. * Other: Other (5).
  2322. @end menu
  2323. @node Integration testing
  2324. @subsection Integration testing
  2325. @itemize
  2326. @item
  2327. @code{guix-cuirass}
  2328. @itemize
  2329. @item
  2330. git repo: @uref{https://gitlab.com/mothacehe/guix-cuirass}
  2331. @item
  2332. website: ???
  2333. @end itemize
  2334. @end itemize
  2335. @node Unit testing
  2336. @subsection Unit testing
  2337. @itemize
  2338. @item
  2339. srfi-64 (@uref{https://srfi.schemers.org/srfi-64/srfi-64.html})
  2340. @itemize
  2341. @item
  2342. GNU software Guile manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/SRFI_002d64.html}
  2343. @end itemize
  2344. @item
  2345. @code{srfi-64-driver}
  2346. @itemize
  2347. @item
  2348. git repository at: ???
  2349. @item
  2350. website: @uref{https://ngyro.com/software/srfi-64-driver.html}
  2351. @end itemize
  2352. @item
  2353. @code{guile-testing}
  2354. @itemize
  2355. @item
  2356. git repository at: @uref{https://github.com/wedesoft/guile-testing}
  2357. @item
  2358. description: @emph{"This is an example on how to do unit-testing using GNU Guile, Automake Test Anything Protocol (TAP), and SRFI-64."} (@uref{https://github.com/wedesoft/guile-testing/blob/598768b04fe9ef13e07401f1bd715f5fb3bb964e/README.md})
  2359. @end itemize
  2360. @item
  2361. @code{guile-unit}
  2362. @itemize
  2363. @item
  2364. git repository: ??? (was at @uref{https://github.com/sirius94/guile-unit})
  2365. @item
  2366. description: ???
  2367. @end itemize
  2368. @item
  2369. @code{ggspec}
  2370. @itemize
  2371. @item
  2372. git repo: @uref{https://github.com/yawaramin/ggspec}
  2373. @item
  2374. description: @emph{"lightweight unit testing library for Guile"} (@uref{https://github.com/yawaramin/ggspec/blob/97dab55962f63d9692475b171fd6fbd76ac64731/README.md})
  2375. @end itemize
  2376. @end itemize
  2377. @enumerate
  2378. @item
  2379. @anchor{TAP output}TAP output
  2380. @itemize
  2381. @item
  2382. @code{guile-tap}
  2383. @itemize
  2384. @item
  2385. git repo: @uref{https://github.com/xevz/guile-tap}
  2386. @item
  2387. description: @emph{"Simple Guile module which provides TAP compilant output."} (@uref{https://github.com/xevz/guile-tap})
  2388. @end itemize
  2389. @item
  2390. @code{guile-tap}
  2391. @itemize
  2392. @item
  2393. Yes there are 2!
  2394. @item
  2395. git repo: @uref{https://gitlab.com/ft/guile-tap}
  2396. @item
  2397. description: @emph{"This is a library for GNU Guile that implements a framework for specifying test cases that emit output that adheres to the Test Anything Protocol (TAP)¹."} (@uref{https://gitlab.com/ft/guile-tap/-/blob/87edc4b74bfe0774af0211c06a30366a44c1371a/README})
  2398. @item
  2399. license: @uref{https://gitlab.com/ft/guile-tap/-/blob/87edc4b74bfe0774af0211c06a30366a44c1371a/LICENCE}
  2400. @item
  2401. @code{scm-test-tap}
  2402. @itemize
  2403. @item
  2404. git repo: @uref{https://github.com/ft/scm-test-tap}
  2405. @item
  2406. description: @emph{"TAP emitting test-framework for GNU Guile"} (@uref{https://github.com/ft/scm-test-tap})
  2407. @end itemize
  2408. @end itemize
  2409. @end itemize
  2410. @end enumerate
  2411. @node Other (5)
  2412. @subsection Other
  2413. @itemize
  2414. @item
  2415. @code{guile-quickcheck}
  2416. @itemize
  2417. @item
  2418. git repo: @uref{https://git.ngyro.com/guile-quickcheck}
  2419. @item
  2420. website: @uref{https://ngyro.com/software/guile-quickcheck.html}
  2421. @item
  2422. description:
  2423. @quotation
  2424. This Guile library provides tools for randomized, property-based testing. It
  2425. follows closely the QuickCheck library written in Haskell, with inspiration
  2426. from the Racket version. You can use it to define a property (a predicate
  2427. with specifications for its inputs) and test it by generating many random
  2428. inputs and seeing if it holds.
  2429. -- @uref{https://ngyro.com/software/guile-quickcheck.html}
  2430. @end quotation
  2431. @end itemize
  2432. @item
  2433. @samp{guile-proba}
  2434. @itemize
  2435. @item
  2436. git repo: @uref{https://codeberg.org/luis-felipe/guile-proba}
  2437. @item
  2438. description:
  2439. @quotation
  2440. Guile Probá is a set of testing tools for GNU Guile projects with
  2441. SRFI 64-based test suites. It comes with a command-line interface
  2442. that allows you to autodiscover tests and run them, and a library
  2443. that includes a test runner and helpers for writing tests.
  2444. -- @uref{https://codeberg.org/luis-felipe/guile-proba/src/commit/f6b235072ec0f41dcdee8631d454c517e5637dbd/README.org}
  2445. @end quotation
  2446. @end itemize
  2447. @end itemize
  2448. @node Types
  2449. @section Types
  2450. @menu
  2451. * Static typing::
  2452. @end menu
  2453. @node Static typing
  2454. @subsection Static typing
  2455. @itemize
  2456. @item
  2457. @code{Theme-D}
  2458. @itemize
  2459. @item
  2460. source code: on website at: @uref{https://www.tohoyn.fi/theme-d/download.html}
  2461. @item
  2462. description:
  2463. @quotation
  2464. Programming language Theme-D extends Scheme with static typing. The current
  2465. Scheme platform is guile 3.0 but the software works for guile 2.2,
  2466. too. Theme-D resembles Jaap Weel's Theme but Theme-D is more dynamic and
  2467. the objects in Theme-D need to have type tags. See Theme-D-Golf for GNOME
  2468. bindings to Theme-D@.
  2469. -- @uref{https://www.tohoyn.fi/theme-d/index.html}
  2470. @end quotation
  2471. @item
  2472. license: parts as: LGPL-3, GFDL-1.3, GPL-3
  2473. @item
  2474. documentation:
  2475. @itemize
  2476. @item
  2477. examples: @uref{https://www.tohoyn.fi/theme-d/examples.html}
  2478. @item
  2479. docs: @uref{https://www.tohoyn.fi/theme-d/documentation.html}
  2480. @end itemize
  2481. @end itemize
  2482. @end itemize
  2483. @node Version control systems
  2484. @section Version control systems
  2485. @itemize
  2486. @item
  2487. @code{guile-git}
  2488. @itemize
  2489. @item
  2490. git repository at GitLab: @uref{https://gitlab.com/guile-git/guile-git}
  2491. @end itemize
  2492. @item
  2493. @code{guile-semver}
  2494. @itemize
  2495. @item
  2496. git repository at ngyro: @uref{https://git.ngyro.com/guile-semver}
  2497. @item
  2498. website at: @uref{https://ngyro.com/software/guile-semver.html}
  2499. @end itemize
  2500. @end itemize
  2501. @node Web Development
  2502. @section Web Development
  2503. @menu
  2504. * Web servers::
  2505. * Web clients::
  2506. * Web frameworks::
  2507. * Protocols: Protocols (2).
  2508. * Tooling / Additional libraries::
  2509. * Static website generators::
  2510. * Template engine::
  2511. * Interaction with services::
  2512. * Web application examples::
  2513. * Web drivers / Selenium::
  2514. @end menu
  2515. @node Web servers
  2516. @subsection Web servers
  2517. @itemize
  2518. @item
  2519. Guile's standard library's web server:
  2520. @itemize
  2521. @item
  2522. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/Web-Server.html}
  2523. @item
  2524. blog post about the performance of Guile's web server: @uref{http://wingolog.org/archives/2012/03/08/an-in-depth-look-at-the-performance-of-guiles-web-server}
  2525. @item
  2526. documentation as generic interface for web server implementations: @uref{https://www.gnu.org/software/guile/manual/html_node/Web-Server.html}
  2527. @item
  2528. examples for usage for creating a web app: @uref{https://www.gnu.org/software/guile/manual/html_node/Web-Examples.html#Web-Examples}
  2529. @end itemize
  2530. @item
  2531. @code{gappserver}
  2532. @itemize
  2533. @item
  2534. git repo: @uref{https://github.com/uberblah/gappserver}
  2535. @item
  2536. description: @emph{"a really tiny guile webserver"} (@uref{https://github.com/uberblah/gappserver})
  2537. @end itemize
  2538. @end itemize
  2539. @node Web clients
  2540. @subsection Web clients
  2541. @itemize
  2542. @item
  2543. @code{web-client-with-cache}
  2544. @itemize
  2545. @item
  2546. repository: @uref{https://labo.planete-kraus.eu/web-client-with-cache.git/}
  2547. @item
  2548. manual: @uref{https://web-client-with-cache.planete-kraus.eu/index.html}
  2549. @item
  2550. description: a caching web client
  2551. @end itemize
  2552. @end itemize
  2553. @node Web frameworks
  2554. @subsection Web frameworks
  2555. @itemize
  2556. @item
  2557. guile's-standard-library's web module for dealing with web stuff:
  2558. @itemize
  2559. @item
  2560. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/Web.html}
  2561. @end itemize
  2562. @item
  2563. GNU Artanis web application frameweork
  2564. @itemize
  2565. @item
  2566. GNU software page: @uref{https://www.gnu.org/software/artanis/}
  2567. @item
  2568. git repository at GitLab: @uref{https://gitlab.com/NalaGinrut/artanis}
  2569. @item
  2570. official website of the GNU Artanis project: @uref{https://web-artanis.com/}
  2571. @item
  2572. blog post about GNU Artanis: @uref{https://dev.to/heroku/an-ode-to-gnu-artanis-2gn3}
  2573. @item
  2574. manual:
  2575. @itemize
  2576. @item
  2577. @uref{https://www.gnu.org/software/artanis/manual/manual.html}
  2578. @item
  2579. @uref{https://www.gnu.org/software/artanis/manual/html_node/}
  2580. @end itemize
  2581. @item
  2582. blog post about using GNU Artanis in a docker container: @uref{https://nalaginrut.com/archives/2019/09/18/install%20gnu%20artanis%20with%20docker}
  2583. @end itemize
  2584. @item
  2585. SPH web app
  2586. @itemize
  2587. @item
  2588. git repository at GitHub: @uref{https://github.com/sph-mn/sph-web-app}
  2589. @end itemize
  2590. @item
  2591. Tekuti
  2592. @itemize
  2593. @item
  2594. git repository at GutHub: @uref{https://github.com/wingo/tekuti}
  2595. @item
  2596. blog post about tekuti: @uref{https://wingolog.org/projects/tekuti/}
  2597. @item
  2598. description: @emph{"Server-side blog engine written in Scheme"} (see repository), web blog using Git as its persistent store
  2599. @end itemize
  2600. @end itemize
  2601. @node Protocols (2)
  2602. @subsection Protocols
  2603. @enumerate
  2604. @item
  2605. @anchor{Web sockets}Web sockets
  2606. @itemize
  2607. @item
  2608. @code{guile-websocket}
  2609. @itemize
  2610. @item
  2611. git repo: @uref{https://git.dthompson.us/guile-websocket.git}
  2612. @item
  2613. description: @emph{"Guile-WebSocket is an implementation of the WebSocket protocol as defined by @uref{https://tools.ietf.org/html/rfc6455, RFC 6455}."} (@uref{https://git.dthompson.us/guile-websocket.git/tree/README?id=c854e0f84a40d972cbd532bbb89c97ca0126a7cf})
  2614. @end itemize
  2615. @end itemize
  2616. @end enumerate
  2617. @node Tooling / Additional libraries
  2618. @subsection Tooling / Additional libraries
  2619. @itemize
  2620. @item
  2621. JSON
  2622. @itemize
  2623. @item
  2624. @code{guile-json}
  2625. @itemize
  2626. @item
  2627. on GitHub: @uref{https://github.com/aconchillo/guile-json}
  2628. @item
  2629. on savannah: @uref{http://savannah.nongnu.org/projects/guile-json/}
  2630. @end itemize
  2631. @end itemize
  2632. @item
  2633. @code{guile-www}
  2634. @itemize
  2635. @item
  2636. git repository at savannah non-gnu: @uref{http://savannah.nongnu.org/projects/guile-www/}
  2637. @item
  2638. git repository at: @uref{https://github.com/guildhall/guile-www}
  2639. @item
  2640. description: @emph{"This is the Guile WWW library, a set of Guile Scheme modules to facilitate HTTP, URL and CGI programming."} (@uref{https://github.com/guildhall/guile-www/tree/263e9632bab062f0ec360c2d54b3bf7d1a4e9ba7})
  2641. @end itemize
  2642. @item
  2643. @code{guile-webutils}
  2644. @itemize
  2645. @item
  2646. git repository at notabug.org: @uref{https://notabug.org/cwebber/guile-webutils}
  2647. @end itemize
  2648. @item
  2649. @code{guile-html}
  2650. @itemize
  2651. @item
  2652. git repo: @uref{https://github.com/TaylanUB/guile-html}
  2653. @item
  2654. description:
  2655. @quotation
  2656. A tiny module to make it less annoying to make and write HTML files using SXML@. Read the code!
  2657. @end quotation
  2658. @end itemize
  2659. @end itemize
  2660. @enumerate
  2661. @item
  2662. @anchor{Authorization and authentication}Authorization and authentication
  2663. @itemize
  2664. @item
  2665. @code{guile-oauth}
  2666. @itemize
  2667. @item
  2668. git repository at GitHub: @uref{https://github.com/aconchillo/guile-oauth}
  2669. @end itemize
  2670. @item
  2671. @code{guile-jwt}
  2672. @itemize
  2673. @item
  2674. git repository on GitHub: @uref{https://github.com/aconchillo/guile-jwt}
  2675. @end itemize
  2676. @end itemize
  2677. @end enumerate
  2678. @node Static website generators
  2679. @subsection Static website generators
  2680. @itemize
  2681. @item
  2682. @code{guile-haunt}
  2683. @itemize
  2684. @item
  2685. git repository at GitHub: @uref{https://github.com/guildhall/guile-haunt}
  2686. @end itemize
  2687. @item
  2688. SPH static website generator
  2689. @itemize
  2690. @item
  2691. git repository at GitHub: @uref{https://github.com/sph-mn/sph-web-publish}
  2692. @end itemize
  2693. @end itemize
  2694. @node Template engine
  2695. @subsection Template engine
  2696. @itemize
  2697. @item
  2698. Guile's standard library SXML implementation
  2699. @itemize
  2700. @item
  2701. GNU software manual: @uref{https://www.gnu.org/software/guile/manual/html_node/SXML.html}
  2702. @item
  2703. Basically your templates become functions or macros.
  2704. @item
  2705. The structure of your document is kept as Scheme data structures.
  2706. @itemize
  2707. @item
  2708. This avoids having parse the document as a long string into an internal data structure to perform semantic transformations.
  2709. @item
  2710. It enables pattern matching without resorting to things like regular expressions and similar shenanigans.
  2711. @end itemize
  2712. @end itemize
  2713. @end itemize
  2714. @node Interaction with services
  2715. @subsection Interaction with services
  2716. @itemize
  2717. @item
  2718. @code{guile-mastodon}
  2719. @itemize
  2720. @item
  2721. git repository at framagit: @uref{https://framagit.org/prouby/guile-mastodon}
  2722. @item
  2723. documentation at: @uref{https://framagit.org/prouby/guile-mastodon/-/blob/master/doc/guile-mastodon.org}
  2724. @end itemize
  2725. @end itemize
  2726. @node Web application examples
  2727. @subsection Web application examples
  2728. @itemize
  2729. @item
  2730. @code{scheme-todomvc}:
  2731. @itemize
  2732. @item
  2733. git repo: @uref{https://github.com/amirouche/scheme-todomvc}
  2734. @item
  2735. demo: @uref{https://amirouche.github.io/scheme-todomvc/}
  2736. @end itemize
  2737. @end itemize
  2738. @node Web drivers / Selenium
  2739. @subsection Web drivers / Selenium
  2740. @itemize
  2741. @item
  2742. @code{guile-web-driver}
  2743. @itemize
  2744. @item
  2745. git repo: @uref{https://github.com/her01n/guile-web-driver}
  2746. @item
  2747. description: "web driver (selenium) client for guile" (@uref{https://github.com/her01n/guile-web-driver})
  2748. @end itemize
  2749. @end itemize
  2750. @node Window manager
  2751. @section Window manager
  2752. @itemize
  2753. @item
  2754. @code{guile-wm}
  2755. @itemize
  2756. @item
  2757. git repo: @uref{https://github.com/mwitmer/guile-wm}
  2758. @end itemize
  2759. @end itemize
  2760. @node Working with code
  2761. @section Working with code
  2762. @itemize
  2763. @item
  2764. @code{guile-syntax-highlight}
  2765. @itemize
  2766. @item
  2767. website: @uref{https://dthompson.us/projects/guile-syntax-highlight.html}
  2768. @item
  2769. git repository: @uref{https://git.dthompson.us/guile-syntax-highlight.git}
  2770. @end itemize
  2771. @item
  2772. @code{guile-syntax-parse}
  2773. @itemize
  2774. @item
  2775. git repo: @uref{https://gitlab.com/guile-syntax-parse/guile-syntax-parse}
  2776. @item
  2777. description: port of Racket's syntax parse to GNU Guile
  2778. @item
  2779. documentation: see @uref{https://docs.racket-lang.org/syntax-parse-example/index.html?q=syntax%20parse#%28part._.A_syntax-parse_.Crash_.Course%29}
  2780. @end itemize
  2781. @item
  2782. @samp{scheme-lsp-server}
  2783. @itemize
  2784. @item
  2785. git repository: @uref{https://codeberg.org/rgherdt/scheme-lsp-server}
  2786. @item
  2787. description:
  2788. @quotation
  2789. A LSP (Language Server Protocol) server for Scheme.
  2790. This software aims to support several Scheme implementations. To achieve this, the code is designed to contain as much logic as possible in R7RS Scheme, separating implementation-specific code in different directories.
  2791. Note: this code is still in an early development stage and the API may change. Change suggestions are welcome.
  2792. -- @uref{https://codeberg.org/rgherdt/scheme-lsp-server/src/commit/f9492cdf89c0680aeddb58478c0371d7d738d1b1/README.md}
  2793. @end quotation
  2794. @item
  2795. documentation: @uref{https://codeberg.org/rgherdt/scheme-lsp-server/src/branch/master/README.md}
  2796. @end itemize
  2797. @end itemize
  2798. @node Other
  2799. @section Other
  2800. @itemize
  2801. @item
  2802. @code{guile-lib}
  2803. @itemize
  2804. @item
  2805. git repository at non-GNU Savannah: @uref{http://git.savannah.nongnu.org/cgit/guile-lib.git}
  2806. @item
  2807. website at: @uref{https://www.nongnu.org/guile-lib/}
  2808. @item
  2809. description:
  2810. @quotation
  2811. 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". [@dots{}]
  2812. (@uref{https://www.nongnu.org/guile-lib/})
  2813. @end quotation
  2814. @end itemize
  2815. @item
  2816. Spells
  2817. @itemize
  2818. @item
  2819. git repo: @uref{https://github.com/rotty/spells}
  2820. @item
  2821. description:
  2822. @quotation
  2823. Spells is a collection of R6RS libraries providing features beyond R6RS in a uniform way across supported implementations.
  2824. (@uref{https://github.com/rotty/spells/blob/master/README})
  2825. @end quotation
  2826. @item
  2827. documentation: @uref{http://rotty.xx.vu/software/spells/} (unfortunately 404 currently)
  2828. @end itemize
  2829. @item
  2830. SPH website:
  2831. @itemize
  2832. @item
  2833. It has some Guile library and project descriptions and links.
  2834. @item
  2835. @uref{http://sph.mn/}
  2836. @end itemize
  2837. @item
  2838. Grip
  2839. @itemize
  2840. @item
  2841. website: @uref{http://www.nongnu.org/grip/index.html}
  2842. @item
  2843. project page: @uref{https://savannah.nongnu.org/projects/grip}
  2844. @item
  2845. git repo: @uref{https://git.savannah.nongnu.org/cgit/grip.git}
  2846. @item
  2847. description:
  2848. @quotation
  2849. The idea is similar to the one expressed in Guile-Lib, that is, a place for
  2850. people to collaborate to the development of a common library, though less
  2851. intimidating maybe and, unlike Guile-Lib, Grip will tolerate, under strict
  2852. conditions, some C code: this is notably to support and boost Guile-CV
  2853. floating point operations, at least till Guile has an AOT compiler, able to
  2854. offer similar performance results for fixed size floating points and integer
  2855. operations.
  2856. @end quotation
  2857. (@uref{https://www.nongnu.org/grip/index.html})
  2858. @end itemize
  2859. @end itemize
  2860. @node Unsorted
  2861. @section Unsorted
  2862. @itemize
  2863. @item
  2864. CMOD-PLAY:
  2865. @itemize
  2866. @item
  2867. website: @uref{https://www.gnuvola.org/software/cmod-play/}
  2868. @item
  2869. description: ???
  2870. @end itemize
  2871. @item
  2872. @code{guile-mpd}: @uref{https://github.com/steveerhart/guile-mpd}
  2873. @item
  2874. @code{alias-generator}: @uref{https://gitlab.com/Formbi/alias-generator}
  2875. @item
  2876. @code{bloom-filter}: @uref{https://github.com/ijp/bloom-filter}
  2877. @item
  2878. @code{codejam practices}: @uref{https://github.com/jcca/codejam_practices}
  2879. @item
  2880. @code{guile-agentx}: @uref{https://github.com/securactive/guile-agentx}
  2881. @item
  2882. @code{guile-lfsr}:
  2883. @itemize
  2884. @item
  2885. git repo: @uref{https://gitlab.com/ft/guile-lfsr}
  2886. @item
  2887. description:
  2888. @quotation
  2889. This library contains three scheme modules targetted at GNU Guile. The
  2890. (communication lfsr) module implements linear feedback shift registers as
  2891. infinite streams of bits. LFSRs are used, for example, to generate chip
  2892. sequences in CDMA systems, for synchronising preambles or as pseudo random
  2893. number generators. The module implements LFSRs in both Fibonacci and Galois
  2894. configurations.
  2895. -- @uref{https://gitlab.com/ft/guile-lfsr/-/blob/47724179fc3c0f6f4dddd20d189422b1ac9d3cdd/README}
  2896. @end quotation
  2897. @item
  2898. license: @uref{https://gitlab.com/ft/guile-lfsr/-/blob/47724179fc3c0f6f4dddd20d189422b1ac9d3cdd/LICENCE}
  2899. @end itemize
  2900. @item
  2901. @code{guile-e-series}
  2902. @itemize
  2903. @item
  2904. git repository: @uref{https://gitlab.com/ft/guile-e-series}
  2905. @item
  2906. description:
  2907. @quotation
  2908. E-Series Tools for GNU Guile
  2909. The E-Series are series of preferred numbers, commonly used to specify electro-
  2910. nic parts; mostly resistors, inductors and capacitors. This library implements
  2911. two kinds of lookups: a) Given a value, look up that value in all E-series and
  2912. return the values surrounding the desired value; and b) Given an integer that
  2913. identifies an E-Series and a desired value, return combinations of two parts,
  2914. that approximate the desired value as closely as possible.
  2915. [@dots{}]
  2916. -- @uref{https://gitlab.com/ft/guile-e-series/-/blob/7244035d25fc85898bacb76deacc89568aeff44f/README}
  2917. @end quotation
  2918. @item
  2919. license: @uref{https://gitlab.com/ft/guile-e-series/-/blob/7244035d25fc85898bacb76deacc89568aeff44f/LICENCE}
  2920. @end itemize
  2921. @end itemize
  2922. @node Projects
  2923. @chapter Projects
  2924. @itemize
  2925. @item
  2926. Guile 100
  2927. @itemize
  2928. @item
  2929. description:
  2930. @quotation
  2931. 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.
  2932. (@uref{https://github.com/spk121/guile100/blob/master/README.md})
  2933. @end quotation
  2934. @item
  2935. git repo: @uref{https://github.com/spk121/guile100/}
  2936. @item
  2937. website: @uref{http://www.lonelycactus.com/guile100/html/index.html}
  2938. @end itemize
  2939. @end itemize
  2940. @node Programming paradigm
  2941. @chapter Programming paradigm
  2942. @menu
  2943. * "Object-oriented programming"::
  2944. * Relational programming::
  2945. * Functional programming::
  2946. @end menu
  2947. @node "Object-oriented programming"
  2948. @section "Object-oriented programming"
  2949. @itemize
  2950. @item
  2951. GOOPS
  2952. @itemize
  2953. @item
  2954. GNU software manual page: @uref{https://www.gnu.org/software/guile/manual/html_node/GOOPS.html}
  2955. @end itemize
  2956. @end itemize
  2957. @menu
  2958. * Prototype based::
  2959. @end menu
  2960. @node Prototype based
  2961. @subsection Prototype based
  2962. @itemize
  2963. @item
  2964. Shelf
  2965. @itemize
  2966. @item
  2967. git repo: @uref{https://github.com/mwitmer/Shelf}
  2968. @end itemize
  2969. @end itemize
  2970. @node Relational programming
  2971. @section Relational programming
  2972. @itemize
  2973. @item
  2974. @code{minikanren}
  2975. @itemize
  2976. @item
  2977. git repository at GitHub: @uref{https://github.com/ijp/minikanren}
  2978. @item
  2979. miniKanren uncourse by William Byrd: @uref{https://duckduckgo.com/?q=minikanren+uncourse&t=h_&iax=videos&ia=videos&iai=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiCuVTGWNU3s}
  2980. @end itemize
  2981. @end itemize
  2982. @node Functional programming
  2983. @section Functional programming
  2984. @itemize
  2985. @item
  2986. Monad implementations
  2987. @itemize
  2988. @item
  2989. git repository at GitHub: @uref{https://github.com/ijp/monad}
  2990. @end itemize
  2991. @item
  2992. Genshou: Extensible effects
  2993. @itemize
  2994. @item
  2995. website: @uref{https://git.sr.ht/~wklew/genshou}
  2996. @item
  2997. description: Implementation of a way to encapsulate side effects based on
  2998. @uref{http://okmij.org/ftp/Haskell/extensible/}. It helps dealing with side effects in a
  2999. functional way.
  3000. @end itemize
  3001. @end itemize
  3002. @node Programming language concepts
  3003. @chapter Programming language concepts
  3004. @menu
  3005. * Pipeline / pipe / chain / threading::
  3006. * State Machines::
  3007. @end menu
  3008. @node Pipeline / pipe / chain / threading
  3009. @section Pipeline / pipe / chain / threading
  3010. @itemize
  3011. @item
  3012. SRFI-197:
  3013. @itemize
  3014. @item
  3015. website: @uref{https://srfi.schemers.org/srfi-197/srfi-197.html}
  3016. @item
  3017. git repository: @uref{https://github.com/ar-nelson/srfi-197}
  3018. @end itemize
  3019. @item
  3020. macro examples:
  3021. @itemize
  3022. @item
  3023. git repository: @uref{https://notabug.org/ZelphirKaltstahl/guile-macros/src/master/threading-pipe-macro/macro-hygienic-syntax-rules.scm}
  3024. @item
  3025. description: simple pipeline macro implementation
  3026. @end itemize
  3027. @item
  3028. @code{guile-threading-macro.scm}
  3029. @itemize
  3030. @item
  3031. gist: @uref{https://gist.github.com/emanon-was/ed12f6023e2d6328334a}
  3032. @item
  3033. description: simple pipeline macro implementation
  3034. @end itemize
  3035. @item
  3036. @code{guile-threading-macros}
  3037. @itemize
  3038. @item
  3039. repository: @uref{https://hg.sr.ht/~bjoli/guile-threading-macros}
  3040. @item
  3041. description: Implements threading macros, which let you choose the position of the threaded argument at each step in the pipeline. Using SRFI-197 is recommended, once it is available in GNU Guile.
  3042. @end itemize
  3043. @end itemize
  3044. @node State Machines
  3045. @section State Machines
  3046. @itemize
  3047. @item
  3048. @samp{Guile-SMC}
  3049. @itemize
  3050. @item
  3051. git repository: @uref{https://github.com/artyom-poptsov/guile-smc}
  3052. @item
  3053. description: @emph{"GNU Guile state machine compiler."} -- @uref{https://github.com/artyom-poptsov/guile-smc/blob/d3a1dda50a64f1ac293d02ece1258006a0219e78/README.org}
  3054. @item
  3055. documentation: @uref{https://github.com/artyom-poptsov/guile-smc/tree/master/doc}
  3056. @end itemize
  3057. @end itemize
  3058. @node Programs
  3059. @chapter Programs
  3060. @menu
  3061. * Finances::
  3062. * Window manager: Window manager (1).
  3063. * Other: Other (6).
  3064. @end menu
  3065. @node Finances
  3066. @section Finances
  3067. @itemize
  3068. @item
  3069. ETRACK
  3070. @itemize
  3071. @item
  3072. git repository: @uref{https://gitlab.com/restio-al-restio/etrack/}
  3073. @item
  3074. description: @emph{"[@dots{}] a simple package to track expenses: query, add, delete, update. You can use ETRACK from Emacs or from the command-line."} (@uref{https://gitlab.com/restio-al-restio/etrack/-/blob/fe360a7f6acdb855046c99b888c9f8a11084051c/README})
  3075. @end itemize
  3076. @end itemize
  3077. @node Window manager (1)
  3078. @section Window manager
  3079. @itemize
  3080. @item
  3081. @code{RPX}
  3082. @itemize
  3083. @item
  3084. repository: @uref{https://www.gnuvola.org/software/rpx/}
  3085. @item
  3086. description: @emph{"This is rpx, a port of ratpoison to Guile Scheme. [@dots{}]"} (@uref{https://www.gnuvola.org/software/rpx/})
  3087. @item
  3088. on nongnu: @uref{https://www.nongnu.org/ratpoison/}
  3089. @end itemize
  3090. @end itemize
  3091. @node Other (6)
  3092. @section Other
  3093. @itemize
  3094. @item
  3095. Starlet
  3096. @itemize
  3097. @item
  3098. repository: @uref{https://github.com/taw10/starlet}
  3099. @item
  3100. description:
  3101. @quotation
  3102. Starlet is an experimental Lisp-based domain-specific language (DSL) for theatrical lighting control. It's based on Guile and sends its DMX output via OLA to almost any type of lighting control interface - DMX, sACN, Art-Net etc.
  3103. -- @uref{https://github.com/taw10/starlet/blob/79df0f8c3289189387a4e07e24e507445ab85a4d/README.md}
  3104. @end quotation
  3105. @end itemize
  3106. @end itemize
  3107. @node Tools
  3108. @chapter Tools
  3109. @menu
  3110. * Notes::
  3111. * Editor support::
  3112. * Project management::
  3113. * Build tools::
  3114. @end menu
  3115. @node Notes
  3116. @section Notes
  3117. @itemize
  3118. @item
  3119. @code{guile-notes}
  3120. @itemize
  3121. @item
  3122. git repo: @uref{https://github.com/Halfwake/guile-notes}
  3123. @item
  3124. description: @emph{"A tool for saving a list of notes."} (@uref{https://github.com/Halfwake/guile-notes})
  3125. @end itemize
  3126. @end itemize
  3127. @node Editor support
  3128. @section Editor support
  3129. @itemize
  3130. @item
  3131. @code{guile.vim}
  3132. @itemize
  3133. @item
  3134. git repo: @uref{https://gitlab.com/HiPhish/guile.vim}
  3135. @item
  3136. description:
  3137. @quotation
  3138. 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.
  3139. (@uref{https://gitlab.com/HiPhish/guile.vim/-/blob/master/README.rst})
  3140. @end quotation
  3141. @end itemize
  3142. @item
  3143. @code{repl.nvim}
  3144. @itemize
  3145. @item
  3146. git repo: @uref{https://gitlab.com/HiPhish/repl.nvim/}
  3147. @item
  3148. description:
  3149. @quotation
  3150. 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.
  3151. (@uref{https://gitlab.com/HiPhish/repl.nvim/-/blob/master/README.rst})
  3152. @end quotation
  3153. @end itemize
  3154. @item
  3155. conjure
  3156. @itemize
  3157. @item
  3158. git repo: @uref{https://github.com/Olical/conjure}
  3159. @item
  3160. description: @emph{"Conjure is an interactive environment for evaluating code within your running program. [@dots{}]"} (@uref{https://github.com/Olical/conjure/blob/4dc7c745618a24799af44797c51af7cc308e42a4/README.adoc})
  3161. @end itemize
  3162. @item
  3163. Emacs Guile support
  3164. @itemize
  3165. @item
  3166. @code{guile-ide}
  3167. @itemize
  3168. @item
  3169. repository: @uref{https://framagit.org/Jeko/guile-ide}
  3170. @item
  3171. description: Emacs configuration file focusing on Guile development
  3172. @end itemize
  3173. @item
  3174. @code{flycheck-guile}
  3175. @item
  3176. @code{geiser-guile}
  3177. @end itemize
  3178. @item
  3179. TODO: other editors support
  3180. @end itemize
  3181. @node Project management
  3182. @section Project management
  3183. @itemize
  3184. @item
  3185. @code{guile-hall}
  3186. @itemize
  3187. @item
  3188. git repository at GitLab: @uref{https://gitlab.com/a-sassmannshausen/guile-hall}
  3189. @end itemize
  3190. @item
  3191. @code{homebrew-guile}: @uref{https://github.com/aconchillo/}
  3192. @item
  3193. @code{guile-debbugs}
  3194. @itemize
  3195. @item
  3196. git repo: @uref{http://savannah.gnu.org/git/?group=guile-debbugs}
  3197. @item
  3198. description: see @uref{http://git.savannah.nongnu.org/cgit/guile-debbugs.git/tree/README.org}
  3199. @end itemize
  3200. @end itemize
  3201. @menu
  3202. * Package managers::
  3203. * Time tracking::
  3204. @end menu
  3205. @node Package managers
  3206. @subsection Package managers
  3207. @itemize
  3208. @item
  3209. GUIX package search
  3210. @itemize
  3211. @item
  3212. website: @uref{https://hpc.guix.info/browse}
  3213. @item
  3214. Search for example for @code{^guile-} to find many Guile libraries and projects.
  3215. @end itemize
  3216. @item
  3217. @code{guildhall}
  3218. @itemize
  3219. @item
  3220. git repository at GitHub: @uref{https://github.com/ijp/guildhall}
  3221. @end itemize
  3222. @item
  3223. Akku
  3224. @itemize
  3225. @item
  3226. website: @uref{https://akkuscm.org/}
  3227. @item
  3228. description:
  3229. @quotation
  3230. Akku.scm is a language package manager for Scheme. It grabs hold of code and vigorously shakes it until it behaves properly.
  3231. (@uref{https://akkuscm.org/})
  3232. @end quotation
  3233. @end itemize
  3234. @end itemize
  3235. @node Time tracking
  3236. @subsection Time tracking
  3237. @itemize
  3238. @item
  3239. GNU Foliot
  3240. @itemize
  3241. @item
  3242. website: @uref{https://www.gnu.org/software/foliot/index.html}
  3243. @item
  3244. git repo: @uref{https://git.savannah.gnu.org/cgit/foliot.git}
  3245. @item
  3246. description:
  3247. @quotation
  3248. GNU Foliot is a small and easy to use time keeping application.
  3249. It can be used in a single user mode or by small organizations. Starting
  3250. with version 0.9.4, it can import other user's database, an essential
  3251. feature for remote collaborators.
  3252. The fields it handles are: a date, who, for whom, what, a duration, whether
  3253. or not to be charged and a description.
  3254. It includes, on the main application screen, a powerful dynamic filters
  3255. criteria mechanism, which lets you visualize, work on and print a subset of
  3256. your time keeping entries.
  3257. A printing templates system allows you to (pre)define, reuse and hence
  3258. quickly generate the pdf files and/or printed reports of your needs.
  3259. A version which will let users export an active filter based subset of their
  3260. time keeping entries is under work.
  3261. @end quotation
  3262. (@uref{https://www.gnu.org/software/foliot/index.html})
  3263. @end itemize
  3264. @end itemize
  3265. @node Build tools
  3266. @section Build tools
  3267. @itemize
  3268. @item
  3269. @code{potato-make}
  3270. @itemize
  3271. @item
  3272. repository: @uref{https://github.com/spk121/potato-make}
  3273. @item
  3274. description:
  3275. @quotation
  3276. Potato Make is a scheme library that aims to simplify the task of
  3277. maintaining, updating, and regenerating programs. It is inspired by the make
  3278. utility in POSIX@. With this library, you can write a build script in Guile
  3279. Scheme.
  3280. -- @uref{https://github.com/spk121/potato-make/blob/5e823c5f5a9a51f9f89681684e77636b32cb5669/README.md}
  3281. @end quotation
  3282. @end itemize
  3283. @end itemize
  3284. @node Blogs
  3285. @chapter Blogs
  3286. @itemize
  3287. @item
  3288. @uref{https://hyper.dev/}
  3289. @item
  3290. @uref{http://wingolog.org/}
  3291. @item
  3292. @uref{http://okmij.org/ftp/Scheme/}
  3293. @item
  3294. blog post about singletons in GNU Guile
  3295. @itemize
  3296. @item
  3297. website: @uref{http://hiphish.github.io/blog/2019/05/24/singleton-objects-in-guile-scheme/}
  3298. @end itemize
  3299. @end itemize
  3300. @node Other (7)
  3301. @chapter Other
  3302. @itemize
  3303. @item
  3304. SPH lib, collection of Guile libraries
  3305. @itemize
  3306. @item
  3307. website: @uref{http://sph.mn/computer/software/sph-lib.html}
  3308. @end itemize
  3309. @item
  3310. C2 Wiki Category Scheme
  3311. @itemize
  3312. @item
  3313. website: @uref{https://proxy.c2.com/cgi/wiki?CategoryScheme}
  3314. @end itemize
  3315. @item
  3316. C2 Wiki Guile Scheme
  3317. @itemize
  3318. @item
  3319. website: @uref{https://proxy.c2.com/cgi/wiki?GuileScheme}
  3320. @end itemize
  3321. @item
  3322. C2 Wiki Scheme Language
  3323. @itemize
  3324. @item
  3325. website: @uref{https://proxy.c2.com/cgi/wiki?SchemeLanguage}
  3326. @end itemize
  3327. @item
  3328. Community Scheme Wiki
  3329. @itemize
  3330. @item
  3331. general
  3332. @itemize
  3333. @item
  3334. website: @uref{http://community.schemewiki.org}
  3335. @end itemize
  3336. @item
  3337. Scheme FAQ
  3338. @itemize
  3339. @item
  3340. website: @uref{http://community.schemewiki.org/?scheme-faq-standards}
  3341. @end itemize
  3342. @end itemize
  3343. @item
  3344. SICP solutions
  3345. @itemize
  3346. @item
  3347. git repo: @uref{https://github.com/alpardal/SICP-guile}
  3348. @item
  3349. description:
  3350. @quotation
  3351. A SICP Study Guide With Exercise Solutions in Guile & Emacs Lisp
  3352. (@uref{https://github.com/alpardal/SICP-guile})
  3353. @end quotation
  3354. @end itemize
  3355. @item
  3356. Guile-BAUX
  3357. @itemize
  3358. @item
  3359. git repo: @uref{https://git.savannah.nongnu.org/cgit/guile-baux.git}
  3360. @item
  3361. description: A loose collection Guile modules:
  3362. @quotation
  3363. Guile-BAUX is a collection of scripts and modules intended to be installed in your
  3364. project’s aux dir (i.e., build-aux/, or equivalent dir specified by AC@math{_CONFIG}@math{_AUX}@math{_DIR} in
  3365. configure.ac). There are modules for:
  3366. @itemize
  3367. @item
  3368. extracting documentation / generating texinfo
  3369. @item
  3370. doing (Scheme) source-source scanning / transforming
  3371. @item
  3372. constructing / displaying modules’ dependency graph
  3373. @item
  3374. generating C boilerplate
  3375. @end itemize
  3376. [@dots{}]
  3377. -- @uref{https://www.gnuvola.org/software/guile-baux/guile-baux.pdf}
  3378. @end quotation
  3379. @end itemize
  3380. @item
  3381. @samp{gclip-select}
  3382. @itemize
  3383. @item
  3384. git repo: @uref{https://git.savannah.nongnu.org/cgit/gclip-select.git}
  3385. @item
  3386. description:
  3387. @quotation
  3388. This is gclip@math{_select}, a small program that allows you to re-select from the text
  3389. lines that were selected at one time or another as the X Primary Selection. This
  3390. is useful when, in X Windows, if you have selected something using the left
  3391. mouse button (as in the convention of the X Windows System) and you later
  3392. select something else but want to get back to the earlier selection.
  3393. Thus this program allows you to quickly switch between frequently copied texts
  3394. for pasting. When you select some text you will notice gclip@math{_select} window adds
  3395. the newly selected text to the list. And you can choose any earlier selection in
  3396. the list window to make it the X11 primary selection again; you can then paste it
  3397. using the middle mouse button.
  3398. -- @uref{https://git.savannah.nongnu.org/cgit/gclip-select.git/tree/README?id=b78bc3cd2d46bba590bddbbe0a7d43823635c249}
  3399. @end quotation
  3400. @end itemize
  3401. @end itemize
  3402. @node Other lists of Guile software
  3403. @chapter Other lists of Guile software
  3404. @itemize
  3405. @item
  3406. official GNU Guile website library list: @uref{https://www.gnu.org/software/guile/libraries/}
  3407. @item
  3408. SPH list: @uref{http://sph.mn/foreign/guile-software.html}
  3409. @end itemize
  3410. @node Videos / Talks / Presentations
  3411. @chapter Videos / Talks / Presentations
  3412. @itemize
  3413. @item
  3414. The GNU Guy:
  3415. @itemize
  3416. @item
  3417. @uref{https://video.hardlimit.com/videos/watch/95ddfcce-0be7-4d2c-a1d4-8017deedfdeb, Sending an Email via GNU Guile}
  3418. @item
  3419. @uref{https://video.hardlimit.com/videos/watch/37d822a2-0eed-4dd6-b230-5008d433503e, A tiny and incomplete intro to Scheme Macros}
  3420. @item
  3421. @uref{https://video.hardlimit.com/videos/watch/14e041a7-59dd-458f-aeca-5aa3e8a87a1e, Reporting A Guile Bug}
  3422. @item
  3423. @uref{https://video.hardlimit.com/videos/watch/playlist/da7e41c8-38df-443f-aef1-d14fc7206fcc, Guile Web Development} (playlist)
  3424. @end itemize
  3425. @end itemize
  3426. This category is still fairly empty. Help filling it with interesting GNU Guile related videos, talks or presentations!
  3427. @bye