enso/engine/runtime/README.md

34 lines
1.6 KiB
Markdown
Raw Normal View History

# Enso Runtime
2020-07-21 15:59:40 +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.