summaryrefslogtreecommitdiff
path: root/manuals/sly/Introduction.html
blob: c4eabcc1934bfd0a993d5b7c7fe9357ec37bf9a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 2013, 2014  David Thompson davet@gnu.org

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".

A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.


The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
 -->
<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Sly: Introduction</title>

<meta name="description" content="Sly: Introduction">
<meta name="keywords" content="Sly: Introduction">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta charset="UTF-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="index.html#Top" rel="up" title="Top">
<link href="Installation.html#Installation" rel="next" title="Installation">
<link href="index.html#Top" rel="prev" title="Top">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space: nowrap}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: serif; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="Introduction"></a>
<div class="header">
<p>
Next: <a href="Installation.html#Installation" accesskey="n" rel="next">Installation</a>, Previous: <a href="index.html#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Introduction-1"></a>
<h2 class="chapter">1 Introduction</h2>

<p>Sly is a 2D/3D game engine written in the GNU Guile dialect of the
Scheme programming language.  With the help of Guile, Sly provides all
of the essential building blocks for making video games, such as:
window management, input even handling, rendering, linear algebra, and
powerful scripting capabilities.  Sly differentiates itself from
traditional game engines by providing a dynamic live codinng
environment and a functional API.
</p>
<p>For those unfamiliar with the term, &ldquo;live coding&rdquo; is the practice of
improvised interactive programming.  Sly provides a suitable
environment for live coding by leveraging Guile&rsquo;s cooperative REPL
server.  When used with a powerful editing tool such as Emacs (with
the fantastic Geiser extension), programmers may evaluate arbitrary
code and see the effects of their modifications in real time.  This
tight feedback loop allows for faster prototyping, greater
productivity, and most importantly, more fun.
</p>
<p>Functional reactive programming (FRP) is a technique used to model
time-varying values with pure functions.  A pure function is a
function whose return value depends solely upon its arguments.  They
also produce no side-effects, such as calling &rsquo;set!&rsquo; on a variable or
writing to a file on disk.  Sly encapsulates time-varying values in
&ldquo;signals&rdquo;, a high-level data structure for controlling the flow of
events.  Unlike imperative event callbacks, signals can easily be
composed to form new signals.  By modeling game state with pure
functions and immutable data, a game can be seen as a function of
time.  To play the game is to &ldquo;fold&rdquo; (accumulate a result) over
time.  Constructing a game this way allows for deterministic behavior
that is easier to reason about and test than the accumulation of
side-effects seen in traditional game engines.  The signal interface
is also declarative, meaning that the programmer describes <em>what</em>
the state of the world should be like at any given time, rather than
<em>how</em> to get there.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Installation.html#Installation" accesskey="n" rel="next">Installation</a>, Previous: <a href="index.html#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>