diff options
-rw-r--r-- | README.html | 59 | ||||
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | docs/00.html | 7 | ||||
-rw-r--r-- | docs/01.html | 4 |
4 files changed, 30 insertions, 50 deletions
diff --git a/README.html b/README.html index ae11187..ca851af 100644 --- a/README.html +++ b/README.html @@ -11,17 +11,17 @@ and there are almost definitely bugs right now.</strong> I would recommend against using it for anything big or important. Many parts of it may change in the future.</p> -<p><code>toc</code> improves on C’s syntax (and semantics) in many ways, +<p><code>toc</code> improves on C's syntax (and semantics) in many ways, To declare <code>x</code> as an integer and set it to 5, you can do:</p> <p><code> -x := 5; // Declare x and set x to 5 (infer type) -x : int = 5; // Explicitly make the type int. -x : int; x = 5; // Declare x as an integer, then set it to 5. +x := 5; // Declare x and set x to 5 (infer type) <br /> +x : int = 5; // Explicitly make the type int. <br /> +x : int; x = 5; // Declare x as an integer, then set it to 5. </code></p> -<p><code>toc</code> is statically typed and has many of C’s features, but +<p><code>toc</code> is statically typed and has many of C's features, but it is nearly as fast in theory.</p> <p>See <code>docs</code> for more information (in progress).</p> @@ -37,12 +37,11 @@ it is nearly as fast in theory.</p> <p><code>toc</code> compiles to C for three reasons:</p> <ul> -<li>Speed. C is one of the most performant programming languages out there. It also has compilers which are very good at optimizing (better than anything I could write).</li> +<li>Speed. C is one of the most performant programming languages out there. It also has compilers which are very good at optimizing (better than anything I could write). </li> <li>Portability. C is probably the most portable language. It has existed for >30 years and can run on practically anything. Furthermore, all major languages nowadays can call functions written in C.</li> -<li>Laziness. I don’t really want to deal with writing something which outputs machine code, and it would certainly be more buggy than something which outputs C.</li> +<li>Laziness. I don't really want to deal with writing something which outputs machine code, and it would certainly be more buggy than something which outputs C.</li> </ul> - <hr /> <h3><code>toc</code> Source Code</h3> @@ -51,15 +50,15 @@ it is nearly as fast in theory.</p> <h4>Build system</h4> -<p><code>toc</code> is set up as a unity build, meaning that there is only one translation unit. So, <code>main.c</code> <code>#include</code>s <code>toc.c</code>, which <code>#include</code>s all of <code>toc</code>’s files.</p> +<p><code>toc</code> is set up as a unity build, meaning that there is only one translation unit. So, <code>main.c</code> <code>#include</code>s <code>toc.c</code>, which <code>#include</code>s all of <code>toc</code>'s files.</p> <h5>Why?</h5> -<p>This improves compilation speeds (especially from scratch), since you don’t have to include headers a bunch of times for each translation unit. This is more of a problem in C++, where, for example, doing <code>#include <map></code> ends up turning into 25,000 lines after preprocessing. All of toc’s source code, which includes most of the C standard library, at the time of this writing (Dec 2019) is only 22,000 lines after preprocessing; imagine including all of that once for each translation unit which includes <code>map</code>. It also obviates the need for fancy build systems like CMake.</p> +<p>This improves compilation speeds (especially from scratch), since you don't have to include headers a bunch of times for each translation unit. This is more of a problem in C++, where, for example, doing <code>#include <map></code> ends up turning into 25,000 lines after preprocessing. All of toc's source code, which includes most of the C standard library, at the time of this writing (Dec 2019) is only 22,000 lines after preprocessing; imagine including all of that once for each translation unit which includes <code>map</code>. It also obviates the need for fancy build systems like CMake.</p> <h4>New features</h4> -<p>Here are all the C99 features which <code>toc</code> depends on (I might have forgotten some…):</p> +<p>Here are all the C99 features which <code>toc</code> depends on (I might have forgotten some...):</p> <ul> <li>Declare anywhere</li> @@ -68,17 +67,15 @@ it is nearly as fast in theory.</p> <li>Flexible array members</li> </ul> - <p>The last three of those could all be removed fairly easily (assuming the system actually has 8-, 16-, 32-, and 64-bit signed and unsigned types).</p> <p>And here are all of its C11 features:</p> <ul> <li>Anonymous structures/unions</li> -<li><code>max_align_t</code> and <code>alignof</code> - It can still compile without these but it won’t technically be standard-compliant</li> +<li><code>max_align_t</code> and <code>alignof</code> - It can still compile without these but it won't technically be standard-compliant</li> </ul> - <h4>More</h4> <p>See <code>main.c</code> for a bit more information.</p> @@ -90,35 +87,19 @@ it is nearly as fast in theory.</p> <p>Here are the major versions of <code>toc</code>.</p> <table> -<thead> -<tr> -<th> Version </th> -<th> Description </th> -<th> Date </th> -</tr> -</thead> -<tbody> -<tr> -<td> 0.0 </td> -<td> Initial version. </td> -<td> 2019 Dec 6 </td> -</tr> -<tr> -<td> 0.1 </td> -<td> Constant parameter inference. </td> -<td> 2019 Dec 15 </td> -</tr> -</tbody> +<tr><th>Version</th><th>Description</th><th>Date</th></tr> +<tr><td>0.0</td><td>Initial version.</td><td>2019 Dec 6</td></tr> +<tr><td>0.1</td><td>Constant parameter inference.</td><td>2019 Dec 15</td></tr> +<tr><td>0.1.1</td><td>Better constant parameter inference.</td><td>2019 Dec 16</td></tr> </table> - <hr /> <h3>Report a bug</h3> -<p>If you find a bug, you can report it through <a href="https://github.com/pommicket/toc/issues">GitHub’s issue tracker</a>, or by emailing pommicket@gmail.com.</p> +<p>If you find a bug, you can report it through <a href="https://github.com/pommicket/toc/issues">GitHub's issue tracker</a>, or by emailing pommicket@gmail.com.</p> -<p>Just send me the <code>toc</code> source code which results in the bug, and I’ll try to fix it.</p> +<p>Just send me the <code>toc</code> source code which results in the bug, and I'll try to fix it. </p> <hr /> @@ -133,8 +114,7 @@ int main() { } </code></pre> - -<p>Is completely fine. <code>x</code> will hold an unspecified value after the jump (but it isn’t used so it doesn’t really matter). Apparently, in C++, this is an ill-formed program. This is a bit ridiculous since</p> +<p>Is completely fine. <code>x</code> will hold an unspecified value after the jump (but it isn't used so it doesn't really matter). Apparently, in C++, this is an ill-formed program. This is a bit ridiculous since</p> <pre><code> int main() { @@ -145,5 +125,4 @@ int main() { } </code></pre> - -<p>is fine. So that’s an interesting little “fun fact”: <code>int x = 5;</code> isn’t always the same as <code>int x; x = 5;</code> in C++.</p> +<p>is fine. So that's an interesting little "fun fact": <code>int x = 5;</code> isn't always the same as <code>int x; x = 5;</code> in C++.</p> @@ -77,10 +77,12 @@ See `main.c` for a bit more information. Here are the major versions of `toc`. -| Version | Description | Date | -| ------- | ----------- | ---- | -| 0.0 | Initial version. | 2019 Dec 6 | -| 0.1 | Constant parameter inference. | 2019 Dec 15 | +<table> +<tr><th>Version</th><th>Description</th><th>Date</th></tr> +<tr><td>0.0</td><td>Initial version.</td><td>2019 Dec 6</td></tr> +<tr><td>0.1</td><td>Constant parameter inference.</td><td>2019 Dec 15</td></tr> +<tr><td>0.1.1</td><td>Better constant parameter inference.</td><td>2019 Dec 16</td></tr> +</table> --- diff --git a/docs/00.html b/docs/00.html index b8c961c..cd0c352 100644 --- a/docs/00.html +++ b/docs/00.html @@ -30,7 +30,7 @@ x := 0.0; when no type is specified, it defaults to an <code>int</code>, whereas <code>0.0</code> defaults to a <code>float</code>.</p> -<p>Here are all of toc’s builtin types and their ranges of values:</p> +<p>Here are all of toc's builtin types and their ranges of values:</p> <ul> <li><code>int</code> - A 64-bit signed integer (always), -9223372036854775808 to 9223372036854775807</li> @@ -49,14 +49,13 @@ defaults to a <code>float</code>.</p> <li><code>char</code> - A character. The specific values are technically platform-dependent, but usually there are 256 of them.</li> </ul> - <p>At the moment, it is not technically guaranteed that <code>f32</code>/<code>float</code> is actually 32-bit and that <code>f64</code> is actually 64-bit; they are platform dependent. Perhaps someday there will be a version of toc which does not compile to C, where that could be guaranteed.</p> <p>To make declarations constant, use <code>::</code> instead of <code>:</code>. e.g.</p> <p><code> -x ::= 5+3; +x ::= 5+3; <br /> y :: float = 5.123; </code></p> -<p>Here, “constant” means constant at compile time, not read-only as it does in C. One interesting thing about toc is that normal functions can run at compile time, so pretty much any expression is a valid initializer for a constant, e.g. doing <code>x ::= some_function();</code> runs <code>some_function</code> at compile time, not at run time.</p> +<p>Here, "constant" means constant at compile time, not read-only as it does in C. One interesting thing about toc is that normal functions can run at compile time, so pretty much any expression is a valid initializer for a constant, e.g. doing <code>x ::= some_function();</code> runs <code>some_function</code> at compile time, not at run time.</p> diff --git a/docs/01.html b/docs/01.html index 6dce358..633295b 100644 --- a/docs/01.html +++ b/docs/01.html @@ -7,7 +7,7 @@ main ::= fn() { }; </code></p> -<p>It declares a constant, <code>main</code>, which is a function with an empty body. Note that the syntax for declaring functions is the same as the syntax for declaring constants (it isn’t something like <code>fn main() { ... }</code>).</p> +<p>It declares a constant, <code>main</code>, which is a function with an empty body. Note that the syntax for declaring functions is the same as the syntax for declaring constants (it isn't something like <code>fn main() { ... }</code>).</p> <p>Assuming you have compiled the compiler (see <code>README.md</code> for instructions about that), you can compile it with</p> @@ -15,4 +15,4 @@ main ::= fn() { toc <your filename> </code></p> -<p>You will get a file called <code>out.c</code>, which you can then put through your C compiler to get an executable file which does nothing. Congratulations! You’ve written your first toc program.</p> +<p>You will get a file called <code>out.c</code>, which you can then put through your C compiler to get an executable file which does nothing. Congratulations! You've written your first toc program.</p> |