Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enso Compiler 2.0 (Alpha 2) #806

Closed
18 tasks done
iamrecursion opened this issue Nov 6, 2019 · 0 comments
Closed
18 tasks done

Enso Compiler 2.0 (Alpha 2) #806

iamrecursion opened this issue Nov 6, 2019 · 0 comments
Assignees
Labels
--breaking Important: a change that will break a public API or user-facing behaviour p-medium Should be completed in the next few sprints

Comments

@iamrecursion
Copy link
Contributor

Summary

The current interpreter treats the entirety of the static analysis and compilation phase as an afterthought, but this is not a state of affairs that can be maintained if we want to evolve the language.

In order to support the new syntax and more sophisticated language features, including typechecking in the future, we need to have a proper 'compiler' front end to the Enso interpreter. This, along with the interpreter and the language server, is what makes up the totality of the Enso Engine. The compiler is intended to support the following capabilities:

  • Static analysis of Enso programs
  • Transformation of Enso programs (e.g. desugaring and optimisation)
  • Typechecking and other static analysis processes.

The initial compiler implementation is based purely on the existing machinery, but it is organised in a fashion more amenable to evolution and further development.

Value

The first phase of the development of the compiler component aims to provide all the facilities necessary for integrating the new syntax with the interpreter. This will start off with a limited subset of the syntax, and then evolve the featureset to support all the necessary capabilities, giving us a usable form of the new syntax as soon as is possible.

Specification

The following elements are presented in order as a plan for integrating the new parser and new compiler front-end with the existing interpreter. After the completion of each of these steps the interpreter should be in a working state.

It should be noted that these steps provide gradual support for syntactic sugar. This is in order to ensure that analysis passes do not have to cope with extraneous nodes from Core.Sugar, and can instead deal (where relevant) only with Core.Primitive structures.

Acceptance Criteria & Test Cases

  • The above-listed specification points have been completed and have all landed on master.
  • They are accompanied by rigorous tests and benchmarks to ensure that there are no functionality regressions and that performance is acceptable.
@iamrecursion iamrecursion self-assigned this Nov 6, 2019
@iamrecursion iamrecursion reopened this Nov 6, 2019
@iamrecursion iamrecursion transferred this issue from another repository Jun 23, 2020
@iamrecursion iamrecursion added Category: Codegen --breaking Important: a change that will break a public API or user-facing behaviour p-medium Should be completed in the next few sprints labels Jun 23, 2020
@iamrecursion iamrecursion mentioned this issue Jun 24, 2020
26 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
--breaking Important: a change that will break a public API or user-facing behaviour p-medium Should be completed in the next few sprints
Projects
None yet
Development

No branches or pull requests

2 participants