enso/engine/runtime/README.md
2020-07-21 13:59:40 +01:00

34 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Enso Runtime
The Enso [runtime](/runtime) is responsible for the actual execution of Enso
code. This means that it encompasses the following functionality:
- **Parsing:** Taking Enso code as input and generating an AST that maintains a
sophisticated set of information about the input.
- **Desugaring:** Reducing the user-facing Enso code into a simplified language
known as `Core`.
- **Type Inference:** Inferring the types of bindings in the user's code.
- **Type Checking:** Checking that the inferred and provided types for bindings
match up across the codebase.
- **Optimisation:** Static optimisation processes to improve the performance of
the user's program.
- **Code Execution:** Actually running the Enso code.
- **Introspection Hooks:** Providing hooks into the running code to allow the
language server to inspect information about the code as it runs.
### Truffle Nodes creation convention
All Truffle nodes that are expected to be created as part of ASTs should
implement a public, static `build` method for creating an instance. If the node
is DSL generated, the `build` method should delegate to the autogenerated
`create` method, so that nodes are always created with `build`. Such a
convention allows us to easily switch node back and forth between manual and DSL
generated implementations, without the need to change its clients.
The only exception are nodes that are never expected to be a part of an AST
e.g. root nodes of builtin functions, for which an `asFunction` method should be
implemented instead.
This convention should be implemented for every node throughout this codebase
if you see one not obeying it please fix it.