* Load Interfaces/Templates trees on demand -> Implemented
* Caching of loaded Interfaces/Templates -> Defined
* Selection of a template depending on a configuration -> Implemented
* Query the Cache by template to interrogate the support
of a feature/OS/Version -> Undefined
Code Features/Structuration:
- Interfaces (Middle End)
* Lists available Config variables, types and templates -> Implemented
* Describes How each template interacts with the others
(through provided chunks/pointcuts/attributes/methods) -> Implemented
* Can be extended depending on the configuration
variables' values -> Undefined(partly)
- Configuration Block (Middle/Front End)
* Assigns values to variables defined by the interfaces -> Implemented
- Sequences (Language-wide)
* Takes parameters (typed) from the caller -> Implemented
* Contains multiple chunks, one of which is the code
matching a sequence call -> Implemented
* Contains Instrumented C, resolved by the resolver -> Implemented
- Types (Middle/Back End)
* Described as a list of fields, wrapper by the compiler -> Implemented
* Declaration associated explicitly to a pointcut -> Implemented
* Contains rathaxes attributes, matched by an single
expression in the instrumented C -> Implemented
* Contains a list of 'methods' manipulating itself -> Implemented(buggy)
- Builtin Types (Middle/Back End)
* Described in interfaces -> Implemented(badly)
* Easily added to the compiler through a plugin-like
interface -> Implemented(badly)
* Same feature coverage as a Back-End type -> Implemented
- Callbacks (Front End)
* Receives parameters (typed) from the back-end -> Implemented
* Allows to describe an algorithm using the parameters -> Implemented
* Allows to declare temporary rathaxes variables -> Defined
- Error Management (Back-End)
* Block associated to a chunk that manages error
recovery (on the model of transactional C Code) -> Defined
* Builtin feature associated to automatically generate
labels and jumps to avoid name conflicts -> Undefined
- Descriptors (Front End, similar to types)
* Describe a user-defined type -> Undefined(partly)
- Atomic Blocks (Front-End)
* Creates an atomic behavior around multiple operations -> Undefined
* Generated a locked block or uses some specific chunks
to create the atomic behavior -> Undefined
- Identifier Magic (Back-End, Compiler internal)
* Rename variables in a block in order to prevent name
identifier conflict when weaving multiple chunks -> Undefined
Code Weaving (Code Generation System):
- Placeholders: Concatenated identifier -> Implemented
- Placeholders: Value -> Implemented
- Placeholders: Type Declaration -> Implemented
- Placeholders: Pointcut -> Implemented
* Includes any number of associated chunks, as long as
they are registered in the cache's session -> Implemented
* Provides a default behavior in case no chunk was found -> Implemented
- Placeholders: Type method call
* Used like an Object Oriented language object's method -> Implemented(buggy)
* Defined as a chunk with no pointcut associated -> Implemented
- Placeholders: Sequence Call
* Used seamlessly in Back-End/Front-End -> Implemented
* Used like a function call in any language -> Implemented
- Rathaxes variable Scalar/Ref transcription
* Provides an abstract notion of pointer -> Implemented
> Types attribute are scalar/ref typed -> Implemented
* The use of a rathaxes variable transcribes to
scalar/ref as needed, depending on the context -> Implemented
> Scalar to ref transcription -> Implemented
> Ref to Scalar transcription -> Implemented
> No transcription (ref/ref, scalar/scalar, */copy) -> Implemented
Compiler features:
- Logging:
* Uniform logging format -> Undefined
* Defines a logging level per module -> Defined
- Debugging:
* Provides a step-by-step way to debug the generation -> Undefined
* Leveled log -> Defined
If I missed some features, please help us completing this list, since it will
be really useful for us developers, in order to estimate the feature coverage
of the soon-to-be-started python rewrite, and what features we are missing
compared to the current state of the compiler.
By the way, I also plan to use this list to discuss some currently implemented
features, and some undefined or not-implemented features for a re-design before
we start writing the new compiler.
Cheers,
--
David Pineau,
Developer R&D at Scality