Update README.md
This commit is contained in:
parent
b0df87bd6a
commit
b5de11a7fa
53
README.md
53
README.md
|
@ -13,7 +13,38 @@ AlexScript (which is a misnomer; the language will soon be renamed
|
||||||
since it's not actually a scripting language) is a programming
|
since it's not actually a scripting language) is a programming
|
||||||
language designed to have a functional feel and very high-level
|
language designed to have a functional feel and very high-level
|
||||||
ergonomics while maintaining speed using strictly-controlled,
|
ergonomics while maintaining speed using strictly-controlled,
|
||||||
deterministic memory management.
|
deterministic memory management. The language is capable of compiling
|
||||||
|
to C (and possibly other languages in the future), allowing for
|
||||||
|
maximum portability without having to write a new backend for the
|
||||||
|
compiler for every possible target; also, the compiler and tooling
|
||||||
|
will eventually be rewritten in AlexScript to allow for maximum
|
||||||
|
portability.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```
|
||||||
|
// Calculates the nth fibonacci number.
|
||||||
|
def fibonacci (0: U32) : U32 = 0
|
||||||
|
| fibonacci 1 = 1
|
||||||
|
| fibonacci n = fibonacci (n - 2) + fibonacci (n - 1);
|
||||||
|
|
||||||
|
// Prompts the user for a number n, and prints the Fibonacci numbers up
|
||||||
|
// to n.
|
||||||
|
def fibPrompt
|
||||||
|
= do {
|
||||||
|
print "Enter a number: ";
|
||||||
|
num <- read <$> getLine;
|
||||||
|
sequence_ (print . fibonacci <$> [0 .. num]);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Program entry point.
|
||||||
|
def main: IO ()
|
||||||
|
= fibPrompt;
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that type annotations are always optional; here they're given for
|
||||||
|
`fibonacci` and `main` for illustrative purposes, but omitted for
|
||||||
|
`fibPrompt` (for which the compiler infers the return type `IO ()`).
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
|
|
||||||
|
@ -71,6 +102,24 @@ Some features the language will most likely have:
|
||||||
can be converted to an `IO` computation using
|
can be converted to an `IO` computation using
|
||||||
`UNSAFE_assertMemorySafe : MemoryUnsafe a -> IO a`.
|
`UNSAFE_assertMemorySafe : MemoryUnsafe a -> IO a`.
|
||||||
- Further safety monads may be added in the future.
|
- Further safety monads may be added in the future.
|
||||||
-
|
- The language achieves good performance by guaranteeing a number of
|
||||||
|
optimizations:
|
||||||
|
- Since the language uses a linear type system, garbage collection
|
||||||
|
is not done; instead, values are stored on the stack unless
|
||||||
|
explicitly declared to be on the heap, and heap-stored values are
|
||||||
|
cleaned up at deterministic points as calculated at compile time.
|
||||||
|
- Functions of type `Fn t -> t` are optimized into functions that
|
||||||
|
operate on pointers to `t`, i.e., notionally, `Fn (*mut t) -> ()`,
|
||||||
|
where `*mut t` is a mutable pointer to a type `t`.
|
||||||
|
- Types that contain an optional, non-null pointer like `Option (Box
|
||||||
|
a)`, `Option (Ref a)`, etc., are optimized into nullable pointers.
|
||||||
|
- Since the language has no loops, the compiler guarantees
|
||||||
|
optimization of tail-call recursion to loops on all functions, as
|
||||||
|
is standard in functional languages.
|
||||||
|
|
||||||
## Compilation
|
## Compilation
|
||||||
|
|
||||||
|
When invoked with no flags, AlexScript by default compiles source code
|
||||||
|
directly to code that is valid C and C++, then calls the system C
|
||||||
|
compiler to generate an object file, then calls the system linker to
|
||||||
|
generate an executable file.
|
||||||
|
|
Loading…
Reference in a new issue