The Handly project is a proposed open source project under the Technology Top-Level Project.
This proposal is in the Project Proposal Phase (as defined in the Eclipse Development Process) and is written to declare its intent and scope. We solicit additional participation and input from the Eclipse community. Please send all feedback to the Eclipse Proposals Forum.
The Handly project aims to provide a foundation for construction of language-oriented handle-based models not unlike the JDT Java Model in their essential qualities. It borrows from core design patterns and principles used in the Java Model, but aims for a generalized albeit partial basic implementation, on top of which complete handle-based models for languages of diverse kinds could be built with relative ease. The project includes a layer of integration with Xtext.
It is well known that the Java Model is one of the pillars of Eclipse Java development tools (JDT). To a great extent, it is the Java Model that makes possible seamless tool integration and unified user experience in JDT. The Java Model is designed to be a lightweight, fault-tolerant model with elements to which a reference can be kept; the model that is well suited for presenting in views. It meets those design goals with a handle-based, lazily-populated model that keeps no resolved information and wrappers the workspace resource model. Meanwhile, models with similar design properties might play an equally important role in Eclipse-based development tools for other languages.
It seems that core design patterns and principles used in the Java Model can be just as relevant to handle-based models for other languages. But as the Java Model shows, implementation of those patterns and principles might be a nontrivial undertaking. Doing it from scratch, over and over again for each language does not appear to be an attractive proposition, especially when dealing with languages on a large scale (e.g. DSL engineering). Can those patterns and principles be (at least partially) implemented in a framework of general usefulness? That is the question that seems worthwhile to investigate.
It can be said that handle-based models are an important ingredient in an Eclipse IDE, if only because the workspace resource model is handle-based. The handle-based Java Model of JDT provides further evidence. The Java Model also shows that the (programming-language agnostic) resource model is often not enough: a language or a group of languages may need its own handle-based model that defines a code-centric view on resources and supports navigation down to structural elements inside a source file (which requires parsing the contents of the file). It is this class of language-oriented handle-based models that is the main interest of this project.
The project aims to investigate technology needed to deal with such handle-based models on a large scale. In particular, the project will attempt to distill the core abstractions of a handle-based model into a uniform API and supply basic building blocks for construction of such models. It borrows heavily from some of the design patterns and principles used in the Java Model, but aims for a generalized albeit partial implementation.
Thus, the project will provide a uniform API and a partial implementation for the central notion of a handle that acts like a key to a model element and has the following principal characteristics:
A handle-based design gives a lot of freedom when resolving handles to find the corresponding element state (the body). For instance, an implementation can maintain a (not strictly) bounded LRU cache of element bodies. The handle acts like a key into the cache. The model swaps out bodies to make room for other elements (unsaved changes can never be swapped out). Bodies store the cached structure and attributes for a particular element and are computed on demand. The basic building blocks for such implementation will be supplied by the project.
Furthermore, the project will support the notion of a working copy (of a source file), its editing and reconciling. A layer of integration with Xtext will be provided for editing and reconciling a working copy connected to an Xtext editor.
While providing a uniform handle-based API, the project will try to impose as minimal restrictions as possible on the shape or the underlying language(s) of attainable models.
The project rests upon the Eclipse Platform and includes a layer of integration with Xtext; integration with other Eclipse projects is possible in the future.
There are existing efforts at Eclipse that might be viewed as related to the project in a way:
We believe the nature of this project makes Eclipse the right home for it. As stated above, handle-based models can play an important role in an Eclipse-based IDE. This supports our hope that the area of work to be developed by the project might be interesting and useful to the Eclipse community. At the same time, such project should definitely benefit from the wider exposure with the Eclipse community. We do welcome and hope for open participation and contributions from the community; diversity is really important for this project to succeed. The project would also benefit from the commendable Eclipse development process and IP management.
The initial code base will be contributed by 1C LLC and includes the core framework and a layer of integration with Xtext.
Although the code is pretty stable and has been used internally with promising results, we regard it only as a starting point. The intent is to come up with a really nice design in this problem area through an open and transparent development process informed by community feedback.
Some parts of the initial design and implementation were adapted from Eclipse JDT and Xtext projects. The code makes direct references to the following third-party libraries, already present in the Eclipse Orbit repository:
There are no known legal issues.
The following individuals are proposed as initial committers to the project:
We welcome additional committers and contributions.
The following Architecture Council members will mentor this project:
The following individuals, organisations, companies and projects have expressed interest in this project:
The initial contribution is to be expected shortly after creation of the project and approval of the Eclipse IP Team. The first milestone build based on the initial code base should follow soon after that. Although no exact dates are given, we intend to make the initial contribution available to the community as soon as technically and legally possible.
Back to the top