git.m455.casa

m455.casa

clone url: git://git.m455.casa/m455.casa


html/archive/2020/what-i-like-about-the-scheme-community.html

1 <!DOCTYPE html>
2 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
3 <head>
4 <meta charset="utf-8" />
5 <meta name="generator" content="pandoc" />
6 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
7 <title>What I like about the Scheme community</title>
8 <style>
9 code{white-space: pre-wrap;}
10 span.smallcaps{font-variant: small-caps;}
11 span.underline{text-decoration: underline;}
12 div.column{display: inline-block; vertical-align: top; width: 50%;}
13 div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
14 ul.task-list{list-style: none;}
15 </style>
16 <style>
17 body {
18 line-height: 1.5;
19 font-family: sans-serif;
20 font-size: 18px;
21 margin: 20px auto;
22 max-width: 630px;
23 }
24
25 a {
26 color: blue;
27 }
28
29 code, pre {
30 background-color: #fddee3;
31 font-size: 14px;
32 }
33
34 pre {
35 padding: 25px 25px;
36 overflow: auto;
37 }
38
39 pre code {
40 white-space: pre;
41 }
42
43 img {
44 max-width: 100%;
45 }
46
47 table {
48 border-collapse: collapse;
49 }
50
51 table caption {
52 font-weight: bold;
53 margin: 10px 0px;
54 text-align: left;
55 }
56
57 th, td {
58 border: 1px solid #000;
59 padding: 4px;
60 }
61
62 blockquote {
63 border-left: 3px solid #000;
64 padding-left: 10px;
65 }
66
67 .border {
68 border: 1px solid #000;
69 margin: 25px 0px;
70 padding: 5px 25px;
71 }
72
73 @media only screen and (max-width: 700px) {
74 body {
75 margin: 10px;
76 }
77 }
78
79 @media (prefers-color-scheme: dark) {
80 body {
81 background-color: #111;
82 color: #eee;
83 }
84 a {
85 color: #009fff;
86 }
87 code, pre {
88 background-color: #111;
89 color: #fd6363;
90 }
91 pre {
92 padding: 15px 25px;
93 }
94 blockquote {
95 border-left: 3px solid #666;
96 }
97 .border, th, td {
98 border: 1px solid #666;
99 }
100 }
101 </style>
102 </head>
103 <body>
104 <main>
105 <h2 id="what-i-like-about-the-scheme-community">What I like about the Scheme community</h2>
106 <p>2020-01-13 00:00</p>
107 <p>One thing I really enjoy about the <a href="https://en.wikipedia.org/wiki/Scheme_%28programming_language%29">Scheme</a> programming language is the community that comes along with it. In this blog post, I’m going to do more of an unstructured talk about my understanding of Scheme, its standards, implementations, and its various communities. I might be wrong, but, as I said, this is my understanding of it as someone who has spent time learning about it as a hobby, and as someone without a computer background.</p>
108 <p>If you aren’t familiar with Scheme, it’s an umbrella term for a set of programming language standards and implementations that are built around those standards. Scheme, itself, also falls under an umbrella term for a set of programming language standards and implementations called <a href="https://en.wikipedia.org/wiki/Lisp_(programming_language)">Lisps</a>.</p>
109 <p>When I first started getting into programming, one of the hardest things for me to wrap my head around, as a person without a computer background, was understanding the difference between a standard and an implementation. I’m going to introduce these concepts to you below.</p>
110 <h3 id="scheme-standards">Scheme standards</h3>
111 <p>In the programming world, as far as I know it, standards are kind of like a set of rules that something should follow. To compare, imagine we made a standard for writing a document:</p>
112 <ul>
113 <li>Paragraphs should not be longer than five sentences</li>
114 <li>Each sentence must end with a period</li>
115 <li>Each section in the document should have a heading</li>
116 </ul>
117 <p>... and probably many more rules. After, we would formalize these rules into a document that writers could reference.</p>
118 <p>This is similar to how Scheme standards work. Someone writes a standard, and people build programming languages while following those standards.</p>
119 <p>A few popular Scheme standards include R5RS, R6RS, and R7RS. There are others, but those are the most common nowadays (2020). You can find these standards <a href="https://schemers.org/Documents/Standards/">here</a>. These documented standards are useful to reference when programming in an implementation Scheme that uses one of these standards. Conveniently, I’m going to provide you with a non-exhaustive list of Scheme implementations and the standard(s) they follow below:</p>
120 <ul>
121 <li><a href="https://racket-lang.org/">Racket</a> (Loosely follows R6RS)</li>
122 <li><a href="https://www.call-cc.org/">Chicken</a> (R5RS)</li>
123 <li><a href="https://www.gnu.org/software/guile/">Guile</a> (R5RS and most of R6RS)</li>
124 <li><a href="http://synthcode.com/scheme/chibi/">Chibi</a> (R7RS)</li>
125 </ul>
126 <h3 id="scheme-implementations">Scheme implementations</h3>
127 <p>Implementations are standard-specific, but many of them support the use of other standards, languages, libraries, modules, and SRFIs (Similar to libraries) within the implementation.</p>
128 <p>For example, although Chicken Scheme is an R5RS implementation, but you can use the R7RS standard in it because someone added support for that standard.</p>
129 <h3 id="syntax-modification">Syntax modification</h3>
130 <p>Another cool thing about Scheme is that, due to the nature of Scheme, you can modify its syntax to your liking. Scheme’s macros and syntax-changing features allow you to do this. This is something I’m still learning how to do myself.</p>
131 <p>People use these macros and syntax-changing features to alter the language, and then save it as another language so others can use it. This is how the Chicken Scheme implementation, mentioned above, is able to have different standards to pick from.</p>
132 <p>Note: Other Lisps, such as such as Common Lisp, Clojure, Fennel, Carp, Hy, and many more, can also use macros and other features to alter the language.</p>
133 <h3 id="back-to-community">Back to community</h3>
134 <p>Now that you have a background on Scheme, let’s go back to the community aspect of it that I like so much.</p>
135 <p>I’m often socializing on the <a href="https://fediverse.party/en/fediverse">Fediverse</a> or <a href="https://scuttlebutt.nz/">Scuttlebutt</a>, and a big enough Scheme and Lisp community exist there.</p>
136 <p>The Scheme community is broken down into sub communities based on different implementations most of the time. So community-specific hashtags, such as #chicken, #racket, #guile, #chibi, etc. exist, and people from these sub communities will follow these hashtags, as well as a general #scheme hashtag, depending on what they are interested in.</p>
137 <p>Because of this, when I’m asking for advice, I will post a message with a #scheme hashtag, and more often than not, I will get a reply from one of the members of the sub communities, because we’re all just using Scheme in the end!</p>
138 <p>I find it very cool to be able to socialize with people from different programming communities. I feel like it’s a great way to make friends and bond over similar hobbies.</p>
139 </main>
140 </body>
141 </html>