Update docs
This commit is contained in:
354
docs/print.html
354
docs/print.html
@@ -36,10 +36,10 @@
|
||||
const path_to_root = "";
|
||||
const default_light_theme = "light";
|
||||
const default_dark_theme = "navy";
|
||||
window.path_to_searchindex_js = "searchindex-c698e2a6.js";
|
||||
window.path_to_searchindex_js = "searchindex-c4fb8585.js";
|
||||
</script>
|
||||
<!-- Start loading toc.js asap -->
|
||||
<script src="toc-cb4e10de.js"></script>
|
||||
<script src="toc-1ef53d19.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="mdbook-help-container">
|
||||
@@ -176,9 +176,238 @@
|
||||
<div id="mdbook-content" class="content">
|
||||
<main>
|
||||
<h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
|
||||
<p>Welcome to the Solstice docs! For now, the documentation is in the format of a specification, which instructs you on how Solstice should behave. In future, a tutorial (similar to the Rust book) will be written which shows you each part of the language, instead of declaring it like the spec.</p>
|
||||
<p>Welcome to the Solstice documentation! Here we have a tutorial (starting <a href="#installation">here</a>) and a specification for the Solstice programming language.</p>
|
||||
<p>If you’re new to Solstice, I’d recommend starting the tutorial, at the <a href="#installation">installation</a> page. If you’ve already installed Solstice, start at the <a href="#basics">Basics</a> page.</p>
|
||||
<p>Docs generated by mdBook.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="installation"><a class="header" href="#installation">Installation</a></h1>
|
||||
<p>Solstice is fully supported and tested on Linux, however should work on most UNIX-like environments. Windows support is theoretically possible, however not all features are avaliable, so use WSL, MSys, or Cygwin instead.</p>
|
||||
<h2 id="which-method-is-for-you"><a class="header" href="#which-method-is-for-you">Which method is for you?</a></h2>
|
||||
<p>Use a <a href="#prebuilt-binaries">prebuilt binary</a> if you’re in a rush, or you can’t get a compiler on your system.</p>
|
||||
<p>Use the <a href="#automated-build-script">automated build script</a> for a full install of Solstice and Ground, with maximum flexibility.</p>
|
||||
<p>Do a <a href="#building-manually">manual build</a> if you intend to contribute to the Solstice source code.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="prebuilt-binaries"><a class="header" href="#prebuilt-binaries">Prebuilt Binaries</a></h1>
|
||||
<p>Solstice binaries statically linked with Ground are avaliable from the <a href="https://chookspace.com/solstice/solstice/releases">Solstice releases page</a>. For now, these are only for Linux x86_64, but more options may be avaliable in future.</p>
|
||||
<p>Download the latest release, copy it into a folder in your path (such as <code>/usr/local/bin</code>) and enjoy!</p>
|
||||
<h2 id="producing-release-binaries"><a class="header" href="#producing-release-binaries">Producing release binaries</a></h2>
|
||||
<p>There is a script <a href="https://chookspace.com/solstice/builder">on Chookspace</a> which builds Solstice and Ground in a container. Use this script for building production releases, and determining whether bugs are setup-specific or affect all people.</p>
|
||||
<p>Use this script to produce prebuilt binaries for the releases page.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="build-dependencies"><a class="header" href="#build-dependencies">Build dependencies</a></h1>
|
||||
<h2 id="macos"><a class="header" href="#macos">macOS</a></h2>
|
||||
<pre><code class="language-sh">xcode-select --install
|
||||
</code></pre>
|
||||
<p>Then, download UTHash <a href="https://github.com/troydhanson/uthash/archive/master.zip">here</a>, and copy the contents of the <code>include</code> folder to <code>/usr/local/include</code>:</p>
|
||||
<pre><code class="language-sh">sudo cp (/path/to/uthash-master)/include/* /usr/local/include
|
||||
</code></pre>
|
||||
<h2 id="ubuntudebian"><a class="header" href="#ubuntudebian">Ubuntu/Debian</a></h2>
|
||||
<pre><code class="language-sh">sudo apt install gcc git make uthash-dev
|
||||
</code></pre>
|
||||
<h2 id="arch-linux"><a class="header" href="#arch-linux">Arch Linux</a></h2>
|
||||
<pre><code class="language-sh">sudo pacman -S --needed gcc git make uthash
|
||||
</code></pre>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="automated-build-script"><a class="header" href="#automated-build-script">Automated Build Script</a></h1>
|
||||
<p>This method requires the following installed:</p>
|
||||
<ul>
|
||||
<li>uthash (in <code>/usr/include</code> or similar)</li>
|
||||
<li>A gcc-compatible C compiler linked to <code>cc</code>
|
||||
<ul>
|
||||
<li>GCC and Clang are both tested and will yield similar results.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Git (to get source code)</li>
|
||||
<li>Make (to organise building the code)</li>
|
||||
</ul>
|
||||
<p>Refer to <a href="#build-dependencies">Build Dependencies</a> for instructions on how to install dependencies.</p>
|
||||
<h2 id="running-the-installer"><a class="header" href="#running-the-installer">Running the installer</a></h2>
|
||||
<p>Run this command in your terminal:</p>
|
||||
<pre><code class="language-sh">bash -c "$(curl -fsSL https://sols.dev/install.sh)"
|
||||
</code></pre>
|
||||
<p>This will:</p>
|
||||
<ul>
|
||||
<li>Download a shell script from <code>https://sols.dev/install.sh</code></li>
|
||||
<li>Run the contents of the shell script in the <code>bash</code> command interpreter</li>
|
||||
</ul>
|
||||
<p>The script does the following:</p>
|
||||
<ul>
|
||||
<li>Checks if Ground and Solstice are installed on your system.</li>
|
||||
<li>If either Ground or Solstice aren’t avaliable, it will download, build, and install the source code.</li>
|
||||
<li>If Ground or Solstice are installed, it will update them to the latest version.</li>
|
||||
</ul>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="building-manually"><a class="header" href="#building-manually">Building Manually</a></h1>
|
||||
<p>Refer to <a href="#build-dependencies">Build Dependencies</a> for instructions on how to install dependencies.</p>
|
||||
<p>Build and install Ground:</p>
|
||||
<pre><code class="language-sh">git clone https://chookspace.com/ground/ground
|
||||
cd ground
|
||||
make
|
||||
sudo make install
|
||||
cd ..
|
||||
</code></pre>
|
||||
<p>After this, build and install Solstice:</p>
|
||||
<pre><code class="language-sh">git clone https://chookspace.com/solstice/solstice
|
||||
cd solstice
|
||||
make
|
||||
sudo make install
|
||||
cd ..
|
||||
</code></pre>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="command-usage"><a class="header" href="#command-usage">Command Usage</a></h1>
|
||||
<pre><code>Solstice programming language
|
||||
Usage: solstice <file> [-h] [--help] [-p] [--print] [-b <file>] [--bytecode <file>] [-c <file>] [--compile <file>]
|
||||
Args:
|
||||
<file>: Solstice source file
|
||||
-h or --help: Prints this help message and exits
|
||||
-p or --print: Prints textual version of Ground bytecode to console
|
||||
-b <file> or --bytecode <file>: Generates Ground bytecode (.grbc) and saves it to the provided filename
|
||||
-c <file> or --compile <file>: Compiles Ground to Linux x86_64 assembly, outputs a binary to the provided filename (experimental)
|
||||
If no extra arguments are provided, the generated Ground bytecode will be executed.
|
||||
</code></pre>
|
||||
<h2 id="arguments"><a class="header" href="#arguments">Arguments:</a></h2>
|
||||
<h3 id="file"><a class="header" href="#file"><code><file></code></a></h3>
|
||||
<p>The Solstice source file to run.</p>
|
||||
<p>There should never be more than one file, as Solstice allows files to import each other, rather than compiling multiple files into one manually.</p>
|
||||
<h3 id="-h-or---help"><a class="header" href="#-h-or---help"><code>-h</code> or <code>--help</code></a></h3>
|
||||
<p>Shows the help message above.</p>
|
||||
<h3 id="-p-or---print"><a class="header" href="#-p-or---print"><code>-p</code> or <code>--print</code></a></h3>
|
||||
<p>Prints the textual version of the generated Ground bytecode to the console.</p>
|
||||
<p>This is useful for debugging the compiler, and ensuring the correct output is produced for the GroundVM.</p>
|
||||
<h3 id="-b-file-or---bytecode-file"><a class="header" href="#-b-file-or---bytecode-file"><code>-b <file></code> or <code>--bytecode <file></code></a></h3>
|
||||
<p>Outputs Ground bytecode (in <code>grbc</code> format) and saves it in the file <code><file></code>.</p>
|
||||
<p>Ground bytecode is useful for distributing software in a format where the target machine does not need Solstice installed, only the Ground VM.</p>
|
||||
<p>Run the compiled bytecode with:</p>
|
||||
<pre><code class="language-sh">ground -b <file>
|
||||
</code></pre>
|
||||
<h3 id="-c-file-or---compile-file"><a class="header" href="#-c-file-or---compile-file"><code>-c <file></code> or <code>--compile <file></code></a></h3>
|
||||
<p>Compiles the Ground bytecode to assembly using the <a href="https://chookspace.com/tram/tram">Tram</a> backend, outputting a binary named <code><file></code>.</p>
|
||||
<p>Requires Ground to be built with Tram support, and Tram to be installed on your system.</p>
|
||||
<p>This backend is experimental and does not support all features.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="basics"><a class="header" href="#basics">Basics</a></h1>
|
||||
<p>This part of the tutorial shows you the basics of using Solstice. Click next to see the “Hello, World!” program!</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="hello-world"><a class="header" href="#hello-world">Hello, World!</a></h1>
|
||||
<p>Create a new file on your computer (preferably in a new folder) named <code>main.sols</code>. In the file, write the following:</p>
|
||||
<pre><code class="language-solstice">puts "Hello, World!"
|
||||
</code></pre>
|
||||
<p>Save the file, then run in your terminal:</p>
|
||||
<pre><code class="language-sh">solstice main.sols
|
||||
</code></pre>
|
||||
<p>Solstice will run the file for you, which should print <code>Hello, World!</code> to the console.</p>
|
||||
<p>Here’s what it does:</p>
|
||||
<ul>
|
||||
<li><code>puts</code>: Stands for “put something”. It’s Solstice’s built in “please print out this thing’s current state” operator.</li>
|
||||
<li><code>"Hello, World!"</code>: A string. A string is a collection of characters. In Solstice, you denote a string by surrounding your text with double quotes (<code>"</code>).</li>
|
||||
</ul>
|
||||
<p>Next up: using variables!</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="variables"><a class="header" href="#variables">Variables</a></h1>
|
||||
<h2 id="creating-variables"><a class="header" href="#creating-variables">Creating Variables</a></h2>
|
||||
<p>In Solstice, you can initialize a variable using the syntax:</p>
|
||||
<pre><code class="language-solstice">name = value
|
||||
</code></pre>
|
||||
<p>where:</p>
|
||||
<ul>
|
||||
<li><code>name</code> is the name of your variable. You can use all letters in variable names, as well as underscores and numbers.
|
||||
<ul>
|
||||
<li>The standard way to name your variables in Solstice is with <code>camelCase</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code>value</code> is some sort of value. This value can be:
|
||||
<ul>
|
||||
<li>an integer (number with no decimal place)</li>
|
||||
<li>a double (number with a decimal place)</li>
|
||||
<li>a string (collection of characters, as seen before)</li>
|
||||
<li>a character (a single letter)</li>
|
||||
<li>a boolean (either <code>true</code> or <code>false</code>)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>We’ll look at types of values in the next part.</p>
|
||||
<h2 id="recalling-variables"><a class="header" href="#recalling-variables">Recalling Variables</a></h2>
|
||||
<p>Recall a variable’s content by using it’s name:</p>
|
||||
<pre><code class="language-solstice">puts name
|
||||
</code></pre>
|
||||
<p>where <code>name</code> is the name of your variable.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="comments"><a class="header" href="#comments">Comments</a></h1>
|
||||
<p>In Solstice, there are 3 ways to do comments:</p>
|
||||
<h2 id="-single-line-comment"><a class="header" href="#-single-line-comment"><code>//</code> (Single-Line Comment)</a></h2>
|
||||
<p>Writing <code>//</code> tells Solstice to ignore the rest of the line.</p>
|
||||
<p>Some examples:</p>
|
||||
<pre><code class="language-solstice">puts 2 + 2 // should be 4
|
||||
|
||||
// This variable holds the status code from checkStatus()
|
||||
statusCode = checkStatus("file.txt")
|
||||
</code></pre>
|
||||
<p>This comment should be used when writing your code’s logic in Solstice.</p>
|
||||
<h2 id="--multiline-comment"><a class="header" href="#--multiline-comment"><code>/* */</code> (Multiline Comment)</a></h2>
|
||||
<p>Any text in between <code>/*</code> and <code>*/</code> will be ignored. These comments should be used to document functions and structs (we’ll get to those later.)</p>
|
||||
<p>Example:</p>
|
||||
<pre><code class="language-solstice">/*
|
||||
Adds two numbers together.
|
||||
*/
|
||||
def add(int a, int b) int {
|
||||
return a + b
|
||||
}
|
||||
</code></pre>
|
||||
<h2 id="-shebang-comment"><a class="header" href="#-shebang-comment"><code>#</code> (Shebang Comment)</a></h2>
|
||||
<p>Use this comment only for using Solstice as a script interpreter in a shebang. Effectively the same as <code>//</code>, but we recommend using <code>//</code> over <code>#</code>.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="values-and-types"><a class="header" href="#values-and-types">Values and Types</a></h1>
|
||||
<p>In Solstice, everything is a value, and every value has a type. Values can be moved around and passed to different functions, however to pass them around their type must be confirmed.</p>
|
||||
<h2 id="int"><a class="header" href="#int"><code>int</code></a></h2>
|
||||
<p>An <code>int</code> is a signed (meaning either positive or negative) 8-byte integer (meaning no decimal place).</p>
|
||||
<p>Using this size, Solstice can accurately process numbers between <code>-9,223,372,036,854,775,807</code> and <code>9,223,372,036,854,775,807</code>.</p>
|
||||
<p>Integers are represented as a collection of digits not seperated by anything, such as:</p>
|
||||
<pre><code class="language-solstice">123
|
||||
7483
|
||||
423843269
|
||||
</code></pre>
|
||||
<h2 id="double"><a class="header" href="#double"><code>double</code></a></h2>
|
||||
<p>A <code>double</code> is a signed 8-byte floating-point (meaning with a decimal place) number.</p>
|
||||
<p>Using this size, Solstice can accurately process numbers between 15 and 17 digits long.</p>
|
||||
<p>Doubles are represented as a collection of digits, with a dot (<code>.</code>) seperating the ones and tenths positions, such as:</p>
|
||||
<pre><code class="language-solstice">3.14
|
||||
432.543
|
||||
5907432.432
|
||||
</code></pre>
|
||||
<h2 id="string"><a class="header" href="#string"><code>string</code></a></h2>
|
||||
<p>A <code>string</code> is a collection of characters which end with a null byte (handled by Solstice).</p>
|
||||
<p>Solstice can accurately process strings of any size, provided your computer has enough memory.</p>
|
||||
<p>Strings are represented as a collection of characters surrounded by double quotes (<code>""</code>), such as:</p>
|
||||
<pre><code class="language-solstice">"Hello, World!"
|
||||
"Solstice is cool"
|
||||
"Rust kinda mid"
|
||||
</code></pre>
|
||||
<h2 id="char"><a class="header" href="#char"><code>char</code></a></h2>
|
||||
<p>A <code>char</code> is a signed 1-byte integer, represented as an ASCII character, however can also be used to represent a single byte in a stream.</p>
|
||||
<p>Solstice can accurately process any ASCII character.</p>
|
||||
<p>Characters are represented as a single character surrounded by single quotes (<code>''</code>), such as:</p>
|
||||
<pre><code class="language-solstice">'a'
|
||||
'b'
|
||||
'c'
|
||||
</code></pre>
|
||||
<h2 id="bool"><a class="header" href="#bool"><code>bool</code></a></h2>
|
||||
<p>A <code>bool</code> is a variable which can either be <code>true</code> or <code>false</code>.</p>
|
||||
<pre><code class="language-solstice">true
|
||||
false
|
||||
</code></pre>
|
||||
<h2 id="other-types"><a class="header" href="#other-types">Other Types</a></h2>
|
||||
<p>Solstice has three other types: <code>fun</code>, <code>template</code>, and <code>object</code>, but we’ll cover these in the <a href="#functions">Functions</a> and <a href="#structures">Structures</a> pages.</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="functions"><a class="header" href="#functions">Functions</a></h1>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="structures"><a class="header" href="#structures">Structures</a></h1>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="naming-conventions"><a class="header" href="#naming-conventions">Naming Conventions</a></h1>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="comment-conventions"><a class="header" href="#comment-conventions">Comment Conventions</a></h1>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="code-layout"><a class="header" href="#code-layout">Code Layout</a></h1>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="reserved-words"><a class="header" href="#reserved-words">Reserved Words</a></h1>
|
||||
<p>This is a list of all reserved words in Solstice, seperated by new lines. These words may not be used as identifiers.</p>
|
||||
<p>After <code>//</code>, notes may be provided which detail exceptions to the reserved word, however, the word should still be treated as reserved regardless.</p>
|
||||
@@ -203,15 +432,15 @@ sizeof
|
||||
pragma
|
||||
</code></pre>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="comments"><a class="header" href="#comments">Comments</a></h1>
|
||||
<h1 id="comments-1"><a class="header" href="#comments-1">Comments</a></h1>
|
||||
<p>Comments in Solstice can be done in 3 ways:</p>
|
||||
<h2 id="-single-line-comment"><a class="header" href="#-single-line-comment"><code>//</code> (Single-Line Comment)</a></h2>
|
||||
<h2 id="-single-line-comment-1"><a class="header" href="#-single-line-comment-1"><code>//</code> (Single-Line Comment)</a></h2>
|
||||
<p>Use <code>//</code> to tell Solstice to ignore text until the end of the line.</p>
|
||||
<p>This kind of comment should be used inside code to explain how parts of code work.</p>
|
||||
<h2 id="--multiline-comment"><a class="header" href="#--multiline-comment"><code>/* */</code> (Multiline Comment)</a></h2>
|
||||
<h2 id="--multiline-comment-1"><a class="header" href="#--multiline-comment-1"><code>/* */</code> (Multiline Comment)</a></h2>
|
||||
<p>Use <code>/*</code> and <code>*/</code> to tell Solstice to ignore text in between the two markers.</p>
|
||||
<p>This kind of comment should be used for explainations of how functions and structs work, placed above the definition.</p>
|
||||
<h2 id="-shebang-comment"><a class="header" href="#-shebang-comment"><code>#</code> (Shebang Comment)</a></h2>
|
||||
<h2 id="-shebang-comment-1"><a class="header" href="#-shebang-comment-1"><code>#</code> (Shebang Comment)</a></h2>
|
||||
<p>Use <code>#</code> to tell Solstice to ignore text until the end of the line.</p>
|
||||
<p>This kind of comment should be used in a shebang (writing <code>#!/usr/bin/env solstice</code> at the top of your entry point source file), not in the middle.</p>
|
||||
<h2 id="example"><a class="header" href="#example">Example</a></h2>
|
||||
@@ -534,17 +763,17 @@ def doSomething(int funnyNumber) int {
|
||||
<p>Solstice is statically typed, meaning all values must have a known type before any code can be executed.</p>
|
||||
<h2 id="core-types"><a class="header" href="#core-types">Core Types</a></h2>
|
||||
<p>These core types are automatically avaliable in Solstice. The words to identify them are reserved and cannot be reassigned.</p>
|
||||
<h3 id="int"><a class="header" href="#int"><code>int</code></a></h3>
|
||||
<h3 id="int-1"><a class="header" href="#int-1"><code>int</code></a></h3>
|
||||
<p>8-byte signed integer, equivalent to C <code>int64_t</code> or Ground <code>-int</code>.</p>
|
||||
<p>Examples: <code>32</code>, <code>121</code>, <code>-5</code></p>
|
||||
<h3 id="double"><a class="header" href="#double"><code>double</code></a></h3>
|
||||
<h3 id="double-1"><a class="header" href="#double-1"><code>double</code></a></h3>
|
||||
<p>8-byte double prescision floating point number, equivalent to C <code>double</code> or Ground <code>-double</code>.</p>
|
||||
<p>Examples: <code>3.14</code>, <code>-2.7</code></p>
|
||||
<h3 id="string"><a class="header" href="#string"><code>string</code></a></h3>
|
||||
<h3 id="string-1"><a class="header" href="#string-1"><code>string</code></a></h3>
|
||||
<p>C-style null-terminated array of characters. Equivalent to C <code>char*</code> or Ground <code>-string</code>.</p>
|
||||
<h3 id="char"><a class="header" href="#char"><code>char</code></a></h3>
|
||||
<h3 id="char-1"><a class="header" href="#char-1"><code>char</code></a></h3>
|
||||
<p>1-byte signed integer, usually used to store a character, however can also be used to store bytes. Equivalent to C <code>char</code> or Ground <code>-char</code>.</p>
|
||||
<h3 id="bool"><a class="header" href="#bool"><code>bool</code></a></h3>
|
||||
<h3 id="bool-1"><a class="header" href="#bool-1"><code>bool</code></a></h3>
|
||||
<p>1-byte unsigned integer, either 1 or 0. Represented by the reserved words <code>true</code> and <code>false</code>. Equivalent to C <code>char</code> (no stdbool.h) or <code>bool</code> (with stdbool.h) or Ground <code>-bool</code>.</p>
|
||||
<h2 id="combined-types"><a class="header" href="#combined-types">Combined Types</a></h2>
|
||||
<p>These types utilise core types to create new combinations. They take type arguments.</p>
|
||||
@@ -593,7 +822,7 @@ def doSomething(int funnyNumber) int {
|
||||
</code></pre>
|
||||
<p>This represents a object which has fields x (with integer) and y (with string).</p>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="variables"><a class="header" href="#variables">Variables</a></h1>
|
||||
<h1 id="variables-1"><a class="header" href="#variables-1">Variables</a></h1>
|
||||
<p>Variables are defined and modified with the syntax:</p>
|
||||
<pre><code class="language-solstice">name = value
|
||||
</code></pre>
|
||||
@@ -752,6 +981,18 @@ ground {
|
||||
puts x
|
||||
</code></pre>
|
||||
<p>so the type checker can know what <code>x</code> is.</p>
|
||||
<h2 id="use"><a class="header" href="#use"><code>use</code></a></h2>
|
||||
<p>The <code>use</code> operator lets you import code from libraries, either from in the local folder or installed in the <code>$SOLSTICE_LIBS</code> directory, which defaults to <code>/usr/lib/solstice</code>.</p>
|
||||
<p>When using <code>use</code>, Solstice will insert the selected file’s contents at that position.</p>
|
||||
<h3 id="local-use"><a class="header" href="#local-use">Local <code>use</code></a></h3>
|
||||
<p>Supply a string after <code>use</code> which is the path to the file to import, without the <code>.sols</code> extension.</p>
|
||||
<pre><code class="language-solstice">use "parser/Node"
|
||||
use "parser/parser"
|
||||
</code></pre>
|
||||
<h3 id="global-use"><a class="header" href="#global-use">Global <code>use</code></a></h3>
|
||||
<p>Supply an identifier after <code>use</code> which is the name of the library to import, without the <code>.sols</code> extension.</p>
|
||||
<pre><code class="language-solstice">use io
|
||||
</code></pre>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="function-definition"><a class="header" href="#function-definition">Function Definition</a></h1>
|
||||
<h2 id="named-functions"><a class="header" href="#named-functions">Named Functions</a></h2>
|
||||
@@ -975,6 +1216,77 @@ puts x
|
||||
<li><code>myobj</code> is an object with an as method which provides a conversion to <code>type</code></li>
|
||||
<li><code>type</code> is the target type</li>
|
||||
</ul>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="vela-0xx"><a class="header" href="#vela-0xx">“Vela” 0.x.x</a></h1>
|
||||
<p>Vela is the codename for the 0.x.x releases of Solstice. It is named after the <a href="https://en.wikipedia.org/wiki/Vela_(constellation)">Vela constellation</a>.</p>
|
||||
<h2 id="changes"><a class="header" href="#changes">Changes</a></h2>
|
||||
<p>Vela is the prerelease version of Solstice, and is the phase where core compiler features are added. Here are some features added in Vela to the compiler:</p>
|
||||
<ul>
|
||||
<li><code>puts</code></li>
|
||||
<li>Variables</li>
|
||||
<li>Values</li>
|
||||
<li>Static type system</li>
|
||||
<li><code>if</code>, <code>while</code> control flow</li>
|
||||
<li>Functions
|
||||
<ul>
|
||||
<li>Lambda/Anonymous Functions</li>
|
||||
<li>Named Functions</li>
|
||||
<li>Closures attached to functions</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Structs
|
||||
<ul>
|
||||
<li>Fields</li>
|
||||
<li>Methods</li>
|
||||
<li><code>private</code> and <code>protected</code></li>
|
||||
<li><code>as</code>-methods</li>
|
||||
<li>Constructors, destructors, duplicators</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Generics (in progress)</li>
|
||||
<li><code>pragma</code> directives (in progress)</li>
|
||||
<li>Libraries with <code>use</code></li>
|
||||
</ul>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="vela-010"><a class="header" href="#vela-010">“Vela” 0.1.0</a></h1>
|
||||
<p>This is the very first release of Solstice! Not much to see here.</p>
|
||||
<p>This release contains:</p>
|
||||
<ul>
|
||||
<li><code>puts</code></li>
|
||||
<li>Variables</li>
|
||||
<li>Values</li>
|
||||
<li>Static type system</li>
|
||||
<li><code>if</code>, <code>while</code> control flow</li>
|
||||
<li>Functions
|
||||
<ul>
|
||||
<li>Lambda/Anonymous Functions</li>
|
||||
<li>Named Functions</li>
|
||||
<li>Closures attached to functions</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Structs
|
||||
<ul>
|
||||
<li>Fields</li>
|
||||
<li>Methods</li>
|
||||
<li><code>private</code> and <code>protected</code></li>
|
||||
<li><code>as</code>-methods</li>
|
||||
<li>Constructors, destructors, duplicators</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Generics (partially, there are many bugs)</li>
|
||||
<li><code>pragma</code> directives in the parser</li>
|
||||
<li>Libraries with <code>use</code></li>
|
||||
</ul>
|
||||
<div style="break-before: page; page-break-before: always;"></div>
|
||||
<h1 id="fornax-1xx"><a class="header" href="#fornax-1xx">“Fornax” 1.x.x</a></h1>
|
||||
<p>Fornax will be the codename for the 1.x.x releases of Solstice. It is named after the <a href="https://en.wikipedia.org/wiki/Fornax">Fornax constellation</a>.</p>
|
||||
<h2 id="release-target"><a class="header" href="#release-target">Release Target</a></h2>
|
||||
<p>Fornax will release when:</p>
|
||||
<ul>
|
||||
<li>The compiler core is stable enough to host moderately sized projects</li>
|
||||
<li>The standard library is capable enough for many programming projects</li>
|
||||
</ul>
|
||||
<p>Fornax is not currently released.</p>
|
||||
|
||||
</main>
|
||||
|
||||
@@ -999,6 +1311,22 @@ puts x
|
||||
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
|
||||
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
|
||||
|
||||
<!-- Livereload script (if served using the cli tool) -->
|
||||
<script>
|
||||
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
|
||||
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
|
||||
const socket = new WebSocket(wsAddress);
|
||||
socket.onmessage = function (event) {
|
||||
if (event.data === "reload") {
|
||||
socket.close();
|
||||
location.reload();
|
||||
}
|
||||
};
|
||||
|
||||
window.onbeforeunload = function() {
|
||||
socket.close();
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
Reference in New Issue
Block a user