serene/docs/spec.org

3.0 KiB
Raw Blame History

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 an undef global binding which will be set to the <VALUE> when the execution flow reaches the def 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.