From d3defe0d8d84856767c72eba08cf552241aa059c Mon Sep 17 00:00:00 2001 From: fennecdjay Date: Wed, 3 Jul 2019 16:01:59 +0200 Subject: [PATCH] :book: Update docs --- .../00_First_Steps/01_InstallingGwion.mdr | 39 ++++++++ docs/01_Overview/BUILDING.mdr | 38 ++++++++ docs/01_Overview/Make.mdr | 7 ++ docs/01_Overview/Testing.mdr | 28 ++++++ docs/02_Reference/01_Functions/Lambdas.mdr | 37 ++++++++ docs/02_Reference/01_Functions/Variadic.mdr | 18 ++++ docs/02_Reference/01_Functions/function.mdr | 19 ++++ docs/02_Reference/ControlFlow/ControlFlow.mdr | 4 + docs/02_Reference/ControlFlow/Loops.mdr | 1 + docs/02_Reference/ControlFlow/Repeat.mdr | 21 +++++ docs/02_Reference/ControlFlow/forloop.mdr | 63 +++++++++++++ docs/02_Reference/ControlFlow/whileuntil.mdr | 23 +++++ docs/02_Reference/Extending/WIP_Driver.mdr | 9 ++ docs/02_Reference/Extending/WIP_Plugins.mdr | 68 ++++++++++++++ docs/02_Reference/Preprocessor.mdr | 1 + docs/09_Benchmarks.mdr | 86 ++++++++++++++++++ docs/10_BuildindTheDocs.mdr | 7 ++ docs/assets/benchmark/binary-trees.dat | 6 +- docs/assets/benchmark/binary-trees.png | Bin 11627 -> 11330 bytes docs/assets/benchmark/fib-recurs.dat | 6 +- docs/assets/benchmark/fib-recurs.png | Bin 9648 -> 9532 bytes docs/assets/benchmark/fib.dat | 6 +- docs/assets/benchmark/fib.png | Bin 9178 -> 8441 bytes docs/assets/benchmark/method-call.dat | 6 +- docs/assets/benchmark/method-call.png | Bin 10758 -> 10662 bytes 25 files changed, 481 insertions(+), 12 deletions(-) create mode 100644 docs/01_Overview/00_First_Steps/01_InstallingGwion.mdr create mode 100644 docs/01_Overview/BUILDING.mdr create mode 100644 docs/01_Overview/Make.mdr create mode 100644 docs/01_Overview/Testing.mdr create mode 100644 docs/02_Reference/01_Functions/Lambdas.mdr create mode 100644 docs/02_Reference/01_Functions/Variadic.mdr create mode 100644 docs/02_Reference/01_Functions/function.mdr create mode 100644 docs/02_Reference/ControlFlow/ControlFlow.mdr create mode 100644 docs/02_Reference/ControlFlow/Loops.mdr create mode 100644 docs/02_Reference/ControlFlow/Repeat.mdr create mode 100644 docs/02_Reference/ControlFlow/forloop.mdr create mode 100644 docs/02_Reference/ControlFlow/whileuntil.mdr create mode 100644 docs/02_Reference/Extending/WIP_Driver.mdr create mode 100644 docs/02_Reference/Extending/WIP_Plugins.mdr create mode 100644 docs/02_Reference/Preprocessor.mdr create mode 100644 docs/09_Benchmarks.mdr create mode 100644 docs/10_BuildindTheDocs.mdr diff --git a/docs/01_Overview/00_First_Steps/01_InstallingGwion.mdr b/docs/01_Overview/00_First_Steps/01_InstallingGwion.mdr new file mode 100644 index 00000000..06fc544e --- /dev/null +++ b/docs/01_Overview/00_First_Steps/01_InstallingGwion.mdr @@ -0,0 +1,39 @@ +# Installing gwion + +## Get the sources + +The source is accessible on [github](https://github.com). + +Provided you have git installed, you can get it with: + +``` sh +git clone https://github.com/fennecdjay/gwion +``` + +then change to the source directory +``` sh +cd gwion +``` + +### Don't forget submodules + +You'll need the sources for all base module +``` sh +git submodule update --init util ast +``` + +> At this point, you might want to configure the build. + In this case, have a look at the [configuration page](01_Overview/00_First_Steps/Configure.md) + + +## Build the libraries and program +``` sh +make +``` + +## Install the package + +``` sh +make install +``` +> You may need root privilege to do this. diff --git a/docs/01_Overview/BUILDING.mdr b/docs/01_Overview/BUILDING.mdr new file mode 100644 index 00000000..1babfe52 --- /dev/null +++ b/docs/01_Overview/BUILDING.mdr @@ -0,0 +1,38 @@ +# Build / Configure Gwion + +## Configure +### gwion-util + + * `USE_MEMCHECK`: compile with debug flags (`-g`) and enable asserts + * `USE_COVERAGE`: add coverage instrumentation + + +## Make +Basically, all that is left to do is +```sh +make +``` +The only environment variable affecting the operation is `PREFIX` + +Except `--(no-)double`, everything can be set when running make, +using environment variables. + +Drivers can be set on using, e.g. for *alsa* : `ALSA_D=1` or `ALSA_D=on`. +In the same way, then can be disabled with `ALSA_D=0` or `ALSA_D=off` + +### Running tests +```bash +make tests +``` +to run all tests, or +```bash +bash util/test.sh my_file_or_directory (.. other files/dirs ...) +``` +to run specific ones. +look [here](#testing.md) for more. +## Install +*maybe as root* +```sh +make install +``` +The only environment variable affecting the operation is `PREFIX` diff --git a/docs/01_Overview/Make.mdr b/docs/01_Overview/Make.mdr new file mode 100644 index 00000000..45a5452d --- /dev/null +++ b/docs/01_Overview/Make.mdr @@ -0,0 +1,7 @@ +# Makefile + +## Basic operations + +## translations + +## Docs diff --git a/docs/01_Overview/Testing.mdr b/docs/01_Overview/Testing.mdr new file mode 100644 index 00000000..3c3a79dd --- /dev/null +++ b/docs/01_Overview/Testing.mdr @@ -0,0 +1,28 @@ +# Tests +[test.sh](https://github.com/fennecdjay/Gwion/blob/dev/util/test.sh) +requires [valgrind](http://valgrind.org/) +there are two kinds of tests: + * [gwion](#gwion-tests) + * [bash](#bash-tests) + +## Gwion tests +those tests are just gwion (.gw) files, handling special comments: + * `// [skip]` (*optionally* followed by reason to skip) + * `// [todo]` (*optionally* followed by reason to delay testing) + * `// [contains]` followed by string to match + * `// [excludes]` followed by string not to match + +## Shell test +those tests are just bash (.sh) files. +they should start with this snippet +```bash +#!/bin/bash +# [test] #5 +n=0 +[ "$1" ] && n="$1" +[ "$n" -eq 0 ] && n=1 +source tests/sh/common.sh +``` + +## TODO + [ ] `bailout` system for early exit on failure diff --git a/docs/02_Reference/01_Functions/Lambdas.mdr b/docs/02_Reference/01_Functions/Lambdas.mdr new file mode 100644 index 00000000..132fbf32 --- /dev/null +++ b/docs/02_Reference/01_Functions/Lambdas.mdr @@ -0,0 +1,37 @@ +# Lambda + +## Overview + +Simply put, *lambda*s are anonymous functions. + +The syntax to create them is simple: +``` +\ variable0 variable1 ... { your code here } +``` +You can even use it to +### Call a function just once +@``` lambda_call0.gw +\ i { <<<"passed '", i, "'">>>; }(3); +@``` +@exec make -s CONTAINS="passed '3'" lambda_call0.test + + +## Use case + +### Passing to a function pointer +@``` lambda_fptr0.gw +typedef void fptr_t(int); +\ i { <<<"passed '", i, "'">>>; } @=> fptr_t fptr; +fptr(4); +@``` +@exec make -s CONTAINS="passed '4'" lambda_fptr0.test + +### As Argument to Functions +@``` lambda_args0.gw +typedef void fptr_t(int); +fun void test(fptr_t fptr) { + fptr(5); +} +test(\ i { <<<"passed '", i, "'">>>; }); +@``` +@exec make -s CONTAINS="passed '5'" lambda_args0.test diff --git a/docs/02_Reference/01_Functions/Variadic.mdr b/docs/02_Reference/01_Functions/Variadic.mdr new file mode 100644 index 00000000..23a75196 --- /dev/null +++ b/docs/02_Reference/01_Functions/Variadic.mdr @@ -0,0 +1,18 @@ +# Variadic functions + +> A function whoses arity is not fixed. + +Well, a function that takes a fixed number of arguments, and additionnal ones. + +## a simple example +@``` variadic.gw +fun void variadic_test(int i, ...) { + <<< "first argument is ", i >>>; + vararg.start; + <<< "\tadditionnal argument", vararg.i >>>; + vararg.end; +} +variadic_test(1); +variadic_test(1, 2); +variadic_test(1, 2, 3); +@``` diff --git a/docs/02_Reference/01_Functions/function.mdr b/docs/02_Reference/01_Functions/function.mdr new file mode 100644 index 00000000..f92a174f --- /dev/null +++ b/docs/02_Reference/01_Functions/function.mdr @@ -0,0 +1,19 @@ +# Functions + +## a simple (commented example) + +@``` function0.gw +// declare function 'test_function' +// with return type int +// taking an int as argument +fun int test_function(int arg) { + // return the argument + 2 + return arg + 2; +} + +// now call the function (and debug print the result) +<<>>; +// or use alternate syntax +<<<1 => test_function>>>; +@``` +@exec make -s function0.test diff --git a/docs/02_Reference/ControlFlow/ControlFlow.mdr b/docs/02_Reference/ControlFlow/ControlFlow.mdr new file mode 100644 index 00000000..2e9c1854 --- /dev/null +++ b/docs/02_Reference/ControlFlow/ControlFlow.mdr @@ -0,0 +1,4 @@ +# Control Flow + +## Repeats +let start simple ;-) diff --git a/docs/02_Reference/ControlFlow/Loops.mdr b/docs/02_Reference/ControlFlow/Loops.mdr new file mode 100644 index 00000000..4b787b4b --- /dev/null +++ b/docs/02_Reference/ControlFlow/Loops.mdr @@ -0,0 +1 @@ +# Loops diff --git a/docs/02_Reference/ControlFlow/Repeat.mdr b/docs/02_Reference/ControlFlow/Repeat.mdr new file mode 100644 index 00000000..bbfea851 --- /dev/null +++ b/docs/02_Reference/ControlFlow/Repeat.mdr @@ -0,0 +1,21 @@ +# the Repeat keyword +let start simple ;-) +The easiest way to do an action repeatidly in Gwion is, ... the **repeat** keyword! + +## Very basic example +@``` repeat.gw +repeat(3) + <<<"Hello, world!">>>; +@``` +@exec make -s CONTAINS="Hello" repeat.test + +## Block example +of course this also works with a block code. + +@``` repeat2.gw +repeat(3) { + maybe ? "You" : "Me" => string s; + <<<"Hello, ", s, "!">>>; +} +@``` +@exec make -s CONTAINS="Hello" repeat2.test diff --git a/docs/02_Reference/ControlFlow/forloop.mdr b/docs/02_Reference/ControlFlow/forloop.mdr new file mode 100644 index 00000000..5d01609f --- /dev/null +++ b/docs/02_Reference/ControlFlow/forloop.mdr @@ -0,0 +1,63 @@ +# For Loops +**For** loops in Gwion is pretty similar to classic **C** syntax + +## basic loops +@``` forloop0.gw +for(int i; i < 3; ++i) + <<>>; +@``` +@exec make -s forloop0.test + +Of course, it also works with a block of code. + +@``` forloop2.gw +for(int i; i < 3; ++i) { + i/2 => float f1; + i/2. => float f2; + <<>>; +} +@``` +@exec make -s forloop2.test + +## Nested Loops +@``` forloop3.gw +int array[3][4]; + +for(int i; i < 3; ++i) { + for(int j; j < 4; ++j) { + <<>>; + } +} +@``` +@exec make -s forloop3.test + +### Auto Loops + +#### Simple auto loop +@``` forloop4.gw +int array[2][3]; +for(auto a: array) { + <<>>; + for(auto b: a) + <<>>; +} +@``` +@exec make -s forloop4.test + +### Auto Pointer loop +With the simple auto loop, you only get the value in the array. +If you want to change it, you need a pointer + +@``` forloop5.gw +int array[2][3]; +int i; +for(auto a: array) { + for(auto @b: a) + <<<++i => *b>>>; +} +for(auto a: array) { + for(auto @b: a) + <<<*b>>>; +} +@``` +@exec make -s forloop5.test diff --git a/docs/02_Reference/ControlFlow/whileuntil.mdr b/docs/02_Reference/ControlFlow/whileuntil.mdr new file mode 100644 index 00000000..798b0334 --- /dev/null +++ b/docs/02_Reference/ControlFlow/whileuntil.mdr @@ -0,0 +1,23 @@ +# Loops + +@``` while0.gw +while(true) { + if(maybe) + break; + <<<"running...">>>; +} +@``` +@exec make -s while0.test + +well this may output nothing... +lets try + +@``` while1.gw +<<>>; +do{ + if(maybe) + break; + <<<"running...">>>; +} while(true); +@``` +@exec make -s while1.test diff --git a/docs/02_Reference/Extending/WIP_Driver.mdr b/docs/02_Reference/Extending/WIP_Driver.mdr new file mode 100644 index 00000000..20478632 --- /dev/null +++ b/docs/02_Reference/Extending/WIP_Driver.mdr @@ -0,0 +1,9 @@ +# Giving gwion a new driver + +## basics + +> in order to use GWION_CTL ... + +# concept + +# upd driver diff --git a/docs/02_Reference/Extending/WIP_Plugins.mdr b/docs/02_Reference/Extending/WIP_Plugins.mdr new file mode 100644 index 00000000..cd1822fd --- /dev/null +++ b/docs/02_Reference/Extending/WIP_Plugins.mdr @@ -0,0 +1,68 @@ +# Writing a Gwion plugin + +> THIS IS OUTDATED. please look at the source code in src/lib/ instead + + * [getting started] + +## Getting started +use the script + +### headers +``` +#include "vm.h" +#include "instr.h" +#include "import.h +``` + + +### Class +Define the type: +``` +struct Type_ t_mytype = { "MyType", SZ_INT, &t_object}; +``` +> every type extending t_object should have SZ_INT + +### Handling Constructors and Destructors +#### CTOR +``` +CTOR(mytype_ctor) { + /* constructor code here */ +} +``` +#### DTOR +``` +DTOR(mytype_dtor) { + /* destructor code here */ +} +``` + +those macros provide two variables: + * `o`: the *M_Object* for the (con/des)tructor + * `shred`: the *VM_Shred* for the (con/des)tructor + +``` +CHECK_BB(import_class_begin(env, &t_mytpe, env->global_nspc, mytype_ctor, mytype_dtor)) +``` +#### variable +declare a `m_int`. coding convention require + * a leading *_o* + * a following *_type_* +```c +m_int o_mytype_myvaroffset; +``` +#### function +```c +/* declare a member function */ +MFUN(mytype_memberfunction) { + /* code here */ +} + +SFUN(mtype_staticfunction) { + /* code here */ +} +``` + +#### operator + +### Import function + diff --git a/docs/02_Reference/Preprocessor.mdr b/docs/02_Reference/Preprocessor.mdr new file mode 100644 index 00000000..e4e9d832 --- /dev/null +++ b/docs/02_Reference/Preprocessor.mdr @@ -0,0 +1 @@ +# Gwion Preprocessor diff --git a/docs/09_Benchmarks.mdr b/docs/09_Benchmarks.mdr new file mode 100644 index 00000000..0f81e941 --- /dev/null +++ b/docs/09_Benchmarks.mdr @@ -0,0 +1,86 @@ +# Benchmarks + +We'll need a bash script + + + +### and a gnuplot script + + + +## Show the results +Then just run it +@exec bash benchmark.sh; #rm bench.plot benchmark.sh diff --git a/docs/10_BuildindTheDocs.mdr b/docs/10_BuildindTheDocs.mdr new file mode 100644 index 00000000..99190c1c --- /dev/null +++ b/docs/10_BuildindTheDocs.mdr @@ -0,0 +1,7 @@ +# How this doc is build + +## mdr + +## makefile + +## mkdocs diff --git a/docs/assets/benchmark/binary-trees.dat b/docs/assets/benchmark/binary-trees.dat index 2d13d935..6b1f8faa 100644 --- a/docs/assets/benchmark/binary-trees.dat +++ b/docs/assets/benchmark/binary-trees.dat @@ -1,3 +1,3 @@ -gwion 0.188183 0.30 -wren 0.237885 0.33 -lua 0.32730 2.38 +gwion 0.186408 0.33 +wren 0.230839 0.18 +lua 0.304600 0.24 diff --git a/docs/assets/benchmark/binary-trees.png b/docs/assets/benchmark/binary-trees.png index 8bf59bcaef00ae11acacdfba4352f01308442c5a..fb261d560b834315d0a5511ffd1b356cb1f98437 100644 GIT binary patch literal 11330 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

_>P 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 literal 11627 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 b-!cA0&AVEg5qLoe{Gg=o+|Ipe^yEJPgD%S} diff --git a/docs/assets/benchmark/fib-recurs.dat b/docs/assets/benchmark/fib-recurs.dat index ad47b5da..0e5f0c83 100644 --- a/docs/assets/benchmark/fib-recurs.dat +++ b/docs/assets/benchmark/fib-recurs.dat @@ -1,3 +1,3 @@ -gwion 5.4589 0.43 -wren 13.4301 0.40 -lua 7.2227 0.22 +gwion 5.3602 0.76 +wren 13.7710 0.54 +lua 7.5633 0.92 diff --git a/docs/assets/benchmark/fib-recurs.png b/docs/assets/benchmark/fib-recurs.png index a0637217198db804451e2ebb7ec2f3991ed62f64..837be4b0789e51c3ef0d4e86b623a7ddf4564b97 100644 GIT binary patch literal 9532 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 aMC9k&!`o^##v~t$~ literal 9648 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 diff --git a/docs/assets/benchmark/fib.dat b/docs/assets/benchmark/fib.dat index 5f73c7cd..7c079271 100644 --- a/docs/assets/benchmark/fib.dat +++ b/docs/assets/benchmark/fib.dat @@ -1,3 +1,3 @@ -gwion 0.086354 0.61 -wren 0.21780 0.55 -lua 0.219805 0.43 +gwion 0.085051 0.65 +wren 0.212702 0.17 +lua 0.21245 0.69 diff --git a/docs/assets/benchmark/fib.png b/docs/assets/benchmark/fib.png index 8bbc056ba34d4d939e58f89e012e6f79f41d5de0..899201fd9bf126d434ce277889ce3b9dfda2d9fc 100644 GIT binary patch literal 8441 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 diff --git a/docs/assets/benchmark/method-call.dat b/docs/assets/benchmark/method-call.dat index 083d19cb..539c489e 100644 --- a/docs/assets/benchmark/method-call.dat +++ b/docs/assets/benchmark/method-call.dat @@ -1,3 +1,3 @@ -gwion 0.091682 0.31 -wren 0.107952 0.40 -lua 0.25460 1.10 +gwion 0.095307 0.31 +wren 0.111192 0.41 +lua 0.26047 1.04 diff --git a/docs/assets/benchmark/method-call.png b/docs/assets/benchmark/method-call.png index d23c6ad5990853509a686b2502c3321cf435ac64..ce6a9734c2a538774af81096c3ec4ced9c4e23b1 100644 GIT binary patch literal 10662 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 G?)@7a5`g9a literal 10758 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 -- 2.43.0