summaryrefslogtreecommitdiffstats
path: root/articles/index.xml
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2016-11-28 11:50:18 +0100
committerLoïc Hoguin <[email protected]>2016-11-28 11:50:18 +0100
commit6f02af0c65ad23226faeefad6f9879537ca1caac (patch)
tree292840fb54e7cd8a8eeb35486824563da0ae91a8 /articles/index.xml
parent9c80a8810759c9ed19606547c5aaa47aa1699be4 (diff)
downloadninenines.eu-6f02af0c65ad23226faeefad6f9879537ca1caac.tar.gz
ninenines.eu-6f02af0c65ad23226faeefad6f9879537ca1caac.tar.bz2
ninenines.eu-6f02af0c65ad23226faeefad6f9879537ca1caac.zip
Announce Ranch 1.3
Diffstat (limited to 'articles/index.xml')
-rw-r--r--articles/index.xml249
1 files changed, 92 insertions, 157 deletions
diff --git a/articles/index.xml b/articles/index.xml
index 794de53c..0e8c3dea 100644
--- a/articles/index.xml
+++ b/articles/index.xml
@@ -6,10 +6,101 @@
<description>Recent content in Articles-rsses on Nine Nines</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
- <lastBuildDate>Mon, 29 Aug 2016 00:00:00 +0100</lastBuildDate>
+ <lastBuildDate>Mon, 28 Nov 2016 00:00:00 +0100</lastBuildDate>
<atom:link href="https://ninenines.eu/articles/index.xml" rel="self" type="application/rss+xml" />
<item>
+ <title>Ranch 1.3</title>
+ <link>https://ninenines.eu/articles/ranch-1.3/</link>
+ <pubDate>Mon, 28 Nov 2016 00:00:00 +0100</pubDate>
+
+ <guid>https://ninenines.eu/articles/ranch-1.3/</guid>
+ <description>&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Ranch &lt;code&gt;1.3.0&lt;/code&gt; has been released!&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;This release fixes a number of long standing issues and adds
+a small number of features:&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The &lt;code&gt;ssl&lt;/code&gt; application has been added to the list of dependencies.
+If you don&amp;#8217;t need it, you can remove it automatically when fetching
+Ranch or when building the release. If you do need it, you will no
+longer have issues shutting down a node because of Ranch.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The &lt;code&gt;ranch:info/0&lt;/code&gt; and &lt;code&gt;ranch:procs/2&lt;/code&gt; can be used to retrieve
+information about Ranch&amp;#8217;s state. Use it for diagnostic and
+discovery purposes.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;SSL listeners can now be configured without a certificate, for setups
+that make use of the SNI extension.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Transport options are now a blacklist, meaning all unknown options
+will be accepted. However Dialyzer will warn if said option is not
+defined in Ranch&amp;#8217;s type specifications. Please send a patch when that
+happens!&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Various bugs have been fixed, including the bug where the
+number of active connections could become negative. Common
+errors at listener startup should be easier to read (for
+example when the port is already in use).&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;See the &lt;a href=&#34;https://git.ninenines.eu/ranch.git/plain/CHANGELOG.asciidoc&#34;&gt;CHANGELOG&lt;/a&gt;
+for more details.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Ranch is now tested and supported with Erlang/OTP R16B or above
+on Arch Linux, FreeBSD, OSX, Ubuntu and Windows 7. Contact me
+if you can provide permanent access to another platform for the
+purposes of testing.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Ranch is now available from four locations:&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;ulist&#34;&gt;&lt;ul&gt;
+&lt;li&gt;
+&lt;p&gt;
+&lt;a href=&#34;https://git.ninenines.eu/ranch.git&#34;&gt;https://git.ninenines.eu/ranch.git&lt;/a&gt;
+&lt;/p&gt;
+&lt;/li&gt;
+&lt;li&gt;
+&lt;p&gt;
+&lt;a href=&#34;https://github.com/ninenines/ranch.git&#34;&gt;https://github.com/ninenines/ranch.git&lt;/a&gt;
+&lt;/p&gt;
+&lt;/li&gt;
+&lt;li&gt;
+&lt;p&gt;
+&lt;a href=&#34;https://bitbucket.org/ninenines/ranch.git&#34;&gt;https://bitbucket.org/ninenines/ranch.git&lt;/a&gt;
+&lt;/p&gt;
+&lt;/li&gt;
+&lt;li&gt;
+&lt;p&gt;
+&lt;a href=&#34;https://gitlab.com/ninenines/ranch.git&#34;&gt;https://gitlab.com/ninenines/ranch.git&lt;/a&gt;
+&lt;/p&gt;
+&lt;/li&gt;
+&lt;/ul&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;They are updated at the same time so there is no real difference.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The most recent Ranch commit is now always signed. You can import the
+&lt;a href=&#34;https://pgp.mit.edu/pks/lookup?op=vindex&amp;amp;fingerprint=on&amp;amp;exact=on&amp;amp;search=0xF19F189CECC7439699CEDD7A6EF7A77066CCCC8A&#34;&gt;signing key for Loïc Hoguin&lt;/a&gt; with:&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;listingblock&#34;&gt;
+&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite --&gt;
+&lt;pre&gt;&lt;tt&gt;$ gpg --keyserver hkp&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;//keys&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;gnupg&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;net --recv-key 66CCCC8A&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The primary key fingerprint is &lt;code&gt;F19F 189C ECC7 4396 99CE DD7A 6EF7 A770 66CC CC8A&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;When verifying signatures in git, the following should appear:&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;listingblock&#34;&gt;
+&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite --&gt;
+&lt;pre&gt;&lt;tt&gt;gpg&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; Signature made Sat &lt;span style=&#34;color: #993399&#34;&gt;26&lt;/span&gt; Nov &lt;span style=&#34;color: #993399&#34;&gt;2016&lt;/span&gt; &lt;span style=&#34;color: #993399&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color: #993399&#34;&gt;58&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color: #993399&#34;&gt;35&lt;/span&gt; PM CET
+gpg&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; using RSA key 71366FF21851DF03
+gpg&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; Good signature from &lt;span style=&#34;color: #FF0000&#34;&gt;&#34;Loïc Hoguin &amp;lt;[email protected]&amp;gt;&#34;&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;[&lt;/span&gt;unknown&lt;span style=&#34;color: #990000&#34;&gt;]&lt;/span&gt;
+gpg&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; WARNING&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; This key is not certified with a trusted signature&lt;span style=&#34;color: #990000&#34;&gt;!&lt;/span&gt;
+gpg&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; There is no indication that the signature belongs to the owner&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;
+Primary key fingerprint&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; F19F 189C ECC7 &lt;span style=&#34;color: #993399&#34;&gt;4396&lt;/span&gt; 99CE DD7A 6EF7 A770 66CC CC8A
+ Subkey fingerprint&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; FEDA &lt;span style=&#34;color: #993399&#34;&gt;6E41&lt;/span&gt; B390 F745 A385 5CDC &lt;span style=&#34;color: #993399&#34;&gt;7136&lt;/span&gt; 6FF2 &lt;span style=&#34;color: #993399&#34;&gt;1851&lt;/span&gt; DF03&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;You can safely ignore the warning if you don&amp;#8217;t know what it
+means, as long as everything else is correct.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Mirrors and signature verification will soon be implemented
+directly in Erlang.mk. In the meantime, you will need to
+set them up manually.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Most of this work was done to fix issues in RabbitMQ. Paid
+customers get priority; contact me if you have some issues
+that need fixing sooner rather than later.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Expect future releases to be announced in this space.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Thanks for reading!&lt;/p&gt;&lt;/div&gt;
+</description>
+ </item>
+
+ <item>
<title>Mailing list archived</title>
<link>https://ninenines.eu/articles/ml-archives/</link>
<pubDate>Mon, 29 Aug 2016 00:00:00 +0100</pubDate>
@@ -1521,161 +1612,5 @@ concurrently.&lt;/p&gt;&lt;/div&gt;
</description>
</item>
- <item>
- <title>Xerl: atomic expressions</title>
- <link>https://ninenines.eu/articles/xerl-0.3-atomic-expressions/</link>
- <pubDate>Mon, 18 Feb 2013 00:00:00 +0100</pubDate>
-
- <guid>https://ninenines.eu/articles/xerl-0.3-atomic-expressions/</guid>
- <description>&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We will be adding atomic integer expressions to our language.
-These look as follow in Erlang:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;And the result of this expression is of course 42.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We will be running this expression at compile time, since we
-don&amp;#8217;t have the means to run code at runtime yet. This will of
-course result in no module being compiled, but that&amp;#8217;s OK, it will
-allow us to discuss a few important things we&amp;#8217;ll have to plan for
-later on.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;First, we must of course accept integers in the tokenizer.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;{&lt;span style=&#34;color: #009900&#34;&gt;D&lt;/span&gt;}&lt;span style=&#34;color: #990000&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; {&lt;span style=&#34;color: #FF6600&#34;&gt;token&lt;/span&gt;, {&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;TokenLine&lt;/span&gt;, &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;list_to_integer&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;TokenChars&lt;/span&gt;)}}&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We must then accept atomic integer expressions in the parser.
-This is a simple change. The integer token is terminal so we need
-to add it to the list of terminals, and then we only need to add
-it as a possible expression.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;expr&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;integer&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$1&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;A file containing only the number 42 (with no terminating dot)
-will give the following result when parsing it. This is incidentally
-the same result as when tokenizing.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;[{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt;}]&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We must then evaluate it. We&amp;#8217;re going to interpret it for now.
-Since the result of this expression is not stored in a variable,
-we are going to simply print it on the screen and discard it.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;execute&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Filename&lt;/span&gt;, [{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;, &lt;span style=&#34;color: #990000&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;Int&lt;/span&gt;}|&lt;span style=&#34;color: #009900&#34;&gt;Tail&lt;/span&gt;], &lt;span style=&#34;color: #009900&#34;&gt;Modules&lt;/span&gt;) &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt;
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;io:format&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #FF0000&#34;&gt;&#34;integer ~p~n&#34;&lt;/span&gt;, [&lt;span style=&#34;color: #009900&#34;&gt;Int&lt;/span&gt;]),
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;execute&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Filename&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;Tail&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;Modules&lt;/span&gt;)&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;You might think by now that what we&amp;#8217;ve done so far this time
-is useless. It brings up many interesting questions though.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;ulist&#34;&gt;&lt;ul&gt;
-&lt;li&gt;
-&lt;p&gt;
-What happens if a file contains two integers?
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;li&gt;
-&lt;p&gt;
-Can we live without expression separators?
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;li&gt;
-&lt;p&gt;
-Do we need an interpreter for the compile step?
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;/ul&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;This is what happens when we create a file that contains two
-integers on two separate lines:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;[{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt;},{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;43&lt;/span&gt;}]&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;And on the same lines:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;[{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt;},{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;integer&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;43&lt;/span&gt;}]&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Does this mean we do not need separators between expressions?
-Not quite. The &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt; operators are an
-example of why we can&amp;#8217;t have nice things. They are ambiguous. They
-have two different meanings: make an atomic integer positive or
-negative, or perform an addition or a substraction between two
-integers. Without a separator you won&amp;#8217;t be able to know if the
-following snippet is one or two expressions:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color: #993399&#34;&gt;12&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Can we use the line ending as an expression separator then?
-Some languages make whitespace important, often the line
-separator becomes the expression separator. I do not think this
-is the best idea, it can lead to errors. For example the following
-snippet would be two expressions:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #009900&#34;&gt;Var&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;some_module:some_function&lt;/span&gt;&lt;/span&gt;() &lt;span style=&#34;color: #990000&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;some_module:other_function&lt;/span&gt;&lt;/span&gt;()
- &lt;span style=&#34;color: #990000&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;another_module:another_function&lt;/span&gt;&lt;/span&gt;()&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;It is not obvious what would happen unless you are a veteran
-of the language, and so we will not go down that road. We will use
-an expression separator just like in Erlang: the comma. We will
-however allow a trailing comma to make copy pasting code easier,
-even if this means some old academics guy will go nuts about it
-later on. This trailing comma will be optional and simply discarded
-by the parser when encountered. We will implement this next.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The question as to how we will handle running expressions
-remains. We have two choices here: we can write an interpreter,
-or we can compile the code and run it. Writing an interpreter
-would require us to do twice the work, and we are lazy, so we will
-not do that.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;You might already know that Erlang does not use the same code
-for compiling and for evaluating commands in the shell. The main
-reason for this is that in Erlang everything isn&amp;#8217;t an expression.
-Indeed, the compiler compiles forms which contain expressions,
-but you can&amp;#8217;t have forms in the shell.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;How are we going to compile the code that isn&amp;#8217;t part of a module
-then? What do we need to run at compile-time, anyway? The body of
-the file itself, of course. The body of module declarations. That&amp;#8217;s
-about it.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;For the file itself, we can simply compile it as a big function
-that will be executed. Then, everytime we encounter a module
-declaration, we will run the compiler on its body, making its body
-essentially a big function that will be executed. The same mechanism
-will be applied when we encounter a module declaration at runtime.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;At runtime there&amp;#8217;s nothing else for us to do, the result of this
-operation will load all the compiled modules. At compile time we
-will also want to save them to a file. We&amp;#8217;ll see later how we can
-do that.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;ulist&#34;&gt;&lt;ul&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;https://github.com/extend/xerl/blob/0.3/&#34;&gt;View the source&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;/ul&gt;&lt;/div&gt;
-</description>
- </item>
-
</channel>
</rss> \ No newline at end of file