3.0 KiB
Serene's Language Specification
\clearpageνll≠wpage
\chapter{Overview of Serene}
Basic Types
Special Forms
def
:
def
has the following form:
(def <NAME> <VALUE>)
- Defines a global binding
- Returns the name of the binding as a symbol
<NAME>
has to be a symbol- If
def
is not a top level expression, it will create anundef
global binding which will be set to the<VALUE>
when the execution flow reaches thedef
itself.
Libraries
In terms of static and dynamic libraries, If the library is a Serene library meaning that it is designed to only work with serene (we will see how in a bit), then whatever namespaces that it contains will be added to the compiler and all those namespaces will be map to the library (all the namespaces will point to the same JITDylib).
But if the library is a generic static or dynamic library a namespace with the same
name as the library minus the suffix will be added to the compiler, for example libssh.so
will be mapped to libssh
namespace.
Static
Dynamic
Object
Unsorted
Eval
Evaluating any form using eval
will add the form to the namespace containing the
eval
expression.
Glossary
- Symbol
- A Lisp Symbol. Just a symbol. A name that might be bound to a value and evaluates to the value.
- IR Symbol
- The
Symbol
infrastructure essentially provides a non-SSA mechanism in which to refer to an
operation in IR symbolically with a name. On MLIR level they are different from native symbols even though we use them to refer to native symbols. But they don't necessarily map to native symbols.
- Native Sybol
- As the name suggests native symbols refer to native code symbols. Like those you find in an
object file.