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

Ion 1.1 Implementation Roadmap #94

Open
toddjonker opened this issue May 30, 2024 · 0 comments
Open

Ion 1.1 Implementation Roadmap #94

toddjonker opened this issue May 30, 2024 · 0 comments
Labels
1.1 Ion 1.1 design and implementation

Comments

@toddjonker
Copy link
Contributor

toddjonker commented May 30, 2024

Master issue tracking work to do across various repositories.

  • Integrate with conformance test suite
    • Java
    • Rust

System macro table and invocation

Simple system macros are available for invocation by E-expressions in both text and binary documents.

Relevant roadmap items:

  • Java:
    • Binary Parsing of E-Expressions
    • Binary Evaluation of Built-in E-Expressions
    • Text Parsing of E-Expressions
    • Text Evaluation of Built-in E-Expressions
    • Binary Write Support for E-Expressions
    • Text Write Support for E-Expressions
  • Rust:
    • Binary Write Support for E-Expressions
    • Text Write Support for E-Expressions

Basic Directives; symbol tables

The text and binary parsers detect simple 1.1 directives. Most symbol table features are supported.

Relevant roadmap items:

  • Java:
    • Text Write Support for Encoding Directives
    • Binary Write Support for Encoding Directives
    • Text Read Support for Encoding Directives
    • Binary Read Support for Encoding Directives
  • Rust:
    • Text Write Support for Encoding Directives
    • Binary Write Support for Encoding Directives
    • Text Read Support for Encoding Directives
    • Binary Read Support for Encoding Directives

User macro table and invocation

Macro tables can be defined by composing from other modules. E-expressions in both text and binary documents can invoke macros from user-defined modules. (We don't actually define macros yet; we just pass-through system macros.)

Relevant roadmap items:

  • Java:
    • Binary Evaluation of User-Defined Macros
    • Text Evaluation of User-Defined Macros

Simple Macro Definitions and Template Language expressions

Macros with single-value parameters can be defined and invoked.

Relevant roadmap items:

  • Java:
    • Binary Evaluation of User-Defined Macros
    • Text Evaluation of User-Defined Macros

Cardinality and Rest invocations

Macro definitions can declare non-singleton parameters. Invocations can use argument groups and implicit-rest syntax.

  • Explicit ! cardinality declaration in signature
    • 💼
    • 🦀
  • ? cardinality: declaration, TL empty-group invocation, Eexp empty-groups, stream-length check
    • 💼
    • 🦀
  • Omitting trailing optional arguments
    • 💼
    • 🦀
  • * and + cardinality: declaration, TL group invocation, Eexp groups, stream-length check
    • 💼
    • 🦀
  • Validate parameter stream-length against declared cardinality
    • 💼
    • 🦀
  • Implicit-rest invocation in TL and Text Eexp; now values, make_string, etc are usable
    • 💼
    • 🦀
  • Update system macros (esp annotate) with proper cardinalities
    • 💼
    • 🦀
  • TL macro invocation using qualified references to system module: (':$ion:values') (':$ion:1')
    • 💼
    • 🦀

Relevant roadmap items:

  • Java:
    • Binary Read Support for Tagless Parameter Encodings
    • Text Read Support for Tagless Parameter Encodings
    • Binary Write Support for Tagless Parameter Encodings
    • Text Write Support for Tagless Parameter Encodings
  • Rust:
    • Text Read Support for Tagless Parameter Encodings
    • Binary Write Support for Tagless Parameter Encodings
    • Text Write Support for Tagless Parameter Encodings

Importing into modules

Modules can reference user macros from preceding inline modules.

  • module use another local module
  • TL macro invocation using qualified references to used module: (':M:mac' ...)
  • TL macro invocation using bare name: (':mac' ...)
  • TL macro invocation using local address: (':3' ...)

Encoding declarations

Macro parameters can be constrained to primitive and macro-shaped encodings.

  • Support uint8 encoding; range checks at invocation site
  • Parse signatures with macro-type annotations
  • Invocation with ! and ? macro-shaped arguments in TL and Eexp
  • Invocation with * and + macro-shaped arguments in TL and Eexp (incl arg groups)
  • Implicit-rest invocation with macro-shapes

TODO other primitive encodings

Advanced Template Language expressions

  • TL if_void, if_single, if_multi special forms
  • TL for special form

Convenience Forms

  • Anonymous macros
    • 💼
    • 🦀
  • Encoding-level use
  • import clauses

TODO Shared modules; tunneled modules; more advanced system macros

Other roadmap items:

  • Java:
    • Binary Shared Encoding Modules
    • Text Shared Encoding Modules
    • Testing Runner for Ion 1.1 Test Vectors
    • Automatic Macro Generation for Jackson
    • Testing Performance Regression Detection for Ion 1.1
  • Rust:
    • Shared Encoding Modules
    • Built-In Macro Generation System
    • Procedural Macro Generation System
    • Ion-Rust Benchmark CLI and Ion 1.1 Test Runner
    • Ion Performance Regression Detection Workflow Integration
    • Testing Runner for Ion 1.1 Test Vectors
@toddjonker toddjonker pinned this issue May 31, 2024
@toddjonker toddjonker added the 1.1 Ion 1.1 design and implementation label May 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1.1 Ion 1.1 design and implementation
Projects
None yet
Development

No branches or pull requests

1 participant