From 677868a959f7204341816f2fc9a5cc62ac3043ba Mon Sep 17 00:00:00 2001 From: Username404 Date: Sat, 31 Jul 2021 21:04:15 +0200 Subject: [PATCH] Add a directory with documentation files. --- README.md | 5 ++--- docs/gettingstarted.md | 44 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 docs/gettingstarted.md diff --git a/README.md b/README.md index 23af668..fd736ff 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,12 @@ Aka Yer Bacon, - #### A language that transpiles into lua, javascript or python code. - -Here's how a "hello world" lambda will look like (`#=>` can be used as a shorthand for `#= ->`) ``` main #=> { println "Hello, World!" } ``` + ### Planned features: - Type inference @@ -20,7 +19,7 @@ main #=> { - Compilation to jvm bytecode? ## Getting Started -Variables assigned using #= can't be changed (they are "final"), while the ones affected using the normal operator (=) can. +#### See the documentation ## Build requirements diff --git a/docs/gettingstarted.md b/docs/gettingstarted.md new file mode 100644 index 0000000..2056f97 --- /dev/null +++ b/docs/gettingstarted.md @@ -0,0 +1,44 @@ +## 1 - Variables +Variables defined using #= can't be changed (they are "final"), while the ones affected using the normal operator (=) can. +``` +helloworld #= "Hello World" +``` + +## 2 - (Anonymous) Functions +You can make an anonymous functions using the following syntax: +``` +getHelloWorld: ~String => { + return "Hello World!" +} +``` +`~String` can be omitted, see [#3](#3---types). + +Note that you can make `getHelloWorld` final by replacing `=>` with `#=>`. + +To define a **named** (and mandatorily final) function, replace `=>` with `>>` and put the (optional) return type before the function's name: +``` +String getHelloWorld >> { + return "Hello, World!" +} +``` +### 2.1 - Main +Main can be a variable named `main` that contains an anonymous function, a function named `main` or a function that has the `as_main` attribute: +``` +main #=> {} +main >> {} +as_main helloWorld >> {} +``` + +## 3 - Types +Types are *inferred*, which means that specifying types of variables or returned values is optional. + +Every variable has a static type by default; it is possible to make a **non-final** variable dynamic by adding the `dyn`/`dynamic` attribute: +``` +dyn helloWorld = 0 +helloWorld = "Hello World!" +``` +The attributes mentioned above can also be used as a return type for functions/anonymous functions: +``` +helloWorld: ~dynamic => {} +dyn helloWorld >> {} +``` \ No newline at end of file