mirror of
https://github.com/enso-org/enso.git
synced 2024-11-28 08:35:07 +03:00
34 lines
1.6 KiB
Markdown
34 lines
1.6 KiB
Markdown
# 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.
|