1
0
Fork 0
cl-sites/guile.html_node/Guile-and-Scheme.html
2024-12-17 12:49:28 +01:00

116 lines
5.6 KiB
HTML

<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>Guile and Scheme (Guile Reference Manual)</title>
<meta name="description" content="Guile and Scheme (Guile Reference Manual)">
<meta name="keywords" content="Guile and Scheme (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Introduction.html" rel="up" title="Introduction">
<link href="Combining-with-C.html" rel="next" title="Combining with C">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="section-level-extent" id="Guile-and-Scheme">
<div class="nav-panel">
<p>
Next: <a href="Combining-with-C.html" accesskey="n" rel="next">Combining with C Code</a>, Up: <a href="Introduction.html" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h3 class="section" id="Guile-and-Scheme-1"><span>1.1 Guile and Scheme<a class="copiable-link" href="#Guile-and-Scheme-1"> &para;</a></span></h3>
<p>Guile implements Scheme as described in the
Revised^5
Report on the Algorithmic Language Scheme (usually known as
<abbr class="acronym">R5RS</abbr>), providing clean and general data and control
structures. Guile goes beyond the rather austere language presented
in <abbr class="acronym">R5RS</abbr>, extending it with a module system, full access to
<abbr class="acronym">POSIX</abbr> system calls, networking support, multiple threads,
dynamic linking, a foreign function call interface, powerful string
processing, and many other features needed for programming in the real
world.
</p>
<p>In 2007, the Scheme community agreed upon and published R6RS, a
significant installment in the RnRS series. R6RS expands the core
Scheme language, and standardises many non-core functions that
implementations&mdash;including Guile&mdash;have previously done in different
ways. Over time, Guile has been updated to incorporate almost all of
the features of R6RS, and to adjust some existing features to conform to
the R6RS specification. See <a class="xref" href="R6RS-Support.html">R6RS Support</a>, for full details.
</p>
<p>In parallel to official standardization efforts, the SRFI process
(<a class="url" href="http://srfi.schemers.org/">http://srfi.schemers.org/</a>) standardises interfaces for many
practical needs, such as multithreaded programming and multidimensional
arrays. Guile supports many SRFIs, as documented in detail in <a class="ref" href="SRFI-Support.html">SRFI Support Modules</a>.
</p>
<p>The process that led to the R6RS standard brought a split in the Scheme
community to the surface. The implementors that wrote R6RS considered
that it was impossible to write useful, portable programs in R5RS, and
that only an ambitious standard could solve this problem. However, part
of the Scheme world saw the R6RS effort as too broad, and as having
included some components that would never be adopted by more
minimalistic Scheme implementations. This second group succeeded in
taking control of the official Scheme standardization track and in 2013
released a more limited R7RS, essentially consisting of R5RS, plus a
module system. Guile supports R7RS also. See <a class="xref" href="R7RS-Support.html">R7RS Support</a>.
</p>
<p>With R6RS and R7RS, the unified Scheme standardization process appears
to have more or less run its course. There will continue to be more
code written in terms of both systems, and modules defined using the
SRFI process, and Guile will support both. However for future
directions, Guile takes inspiration from other related language
communities: Racket, Clojure, Concurrent ML, and so on.
</p>
<p>In summary, Guile supports writing and running code written to the R5RS,
R6RS, and R7RS Scheme standards, and also supports a number of SRFI
modules. However for most users, until a need for cross-implementation
portability has been identified, we recommend using the parts of Guile
that are useful in solving the problem at hand, regardless of whether
they proceed from a standard or whether they are Guile-specific.
</p>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Combining-with-C.html">Combining with C Code</a>, Up: <a href="Introduction.html">Introduction</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>