2020-04-14 19:00:51 +03:00
|
|
|
|
# Enso Runtime
|
2020-07-21 15:59:40 +03:00
|
|
|
|
|
2020-04-14 19:00:51 +03:00
|
|
|
|
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.
|
2019-10-29 17:32:50 +03:00
|
|
|
|
|
|
|
|
|
### Truffle Nodes creation convention
|
|
|
|
|
|
2020-07-21 15:59:40 +03:00
|
|
|
|
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.
|
2019-10-29 17:32:50 +03:00
|
|
|
|
|
2020-07-21 15:59:40 +03:00
|
|
|
|
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.
|
2019-10-29 17:32:50 +03:00
|
|
|
|
|
2020-07-21 15:59:40 +03:00
|
|
|
|
This convention should be implemented for every node throughout this codebase –
|
|
|
|
|
if you see one not obeying it – please fix it.
|