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

Milestone: Airframe 22 #2006

Closed
xerial opened this issue Jan 9, 2022 · 1 comment
Closed

Milestone: Airframe 22 #2006

xerial opened this issue Jan 9, 2022 · 1 comment
Labels
roadmap Major milestones
Milestone

Comments

@xerial
Copy link
Member

xerial commented Jan 9, 2022

Airframe Development Roadmap for 2022 https://github.com/orgs/wvlet/projects/1

We only have three major goals for 2022: RPC, Documentation, and Scala 3.

Finalizing the RPC Framework

Airframe RPC has been battle tested and becomes comfortable enough for building production applications. It's time to standardize RPC programming, error handling, logging, etc. If you are interested see also the presentation: Unifying Frontend and Backend Application Development with Scala (ScalaCon 2021) (slides)

Better Documentation

So far, we only have documentations for individual modules and these documentations are bit isolated. To have a comprehensive view of these modules, we need a walk-through documentation so that we can learn how to build applications using Airframe starting from logging, web application development, RPC, runtime DI, building UI with Scala.js, etc. #2169

Better Scala 3 Support

Related: #1077

Scala 3 does not fully support runtime-reflection. Airframe is heavily using airframe-surface (e.g., Surface.of[X]) to extract type information (constructor parameters, generic types, alias, and public methods) at runtime.

There are several challenges:

The usage of runtime-reflection in Airframe is quite limited and it already can support Scala.js, so even if we only use compile-time only macros for extracting type information, there should be no major obstacles. Some redesign of Surface (or recreation as a new module) might be necessary to effectively limit the scope of Surface.

Details: How Is Surface loaded from a given class?

A notable usage of runtime-reflection in Airframe is Surface.ofClass(cl), which is used in AnyCodec for resolving Surface from a given class:

This feature is added in #1098 and used for encoding RPC argument classes in the logs. Another usage is scanning Route classes in airframe-http for finding RPC APIs from the class path.

To avoid using runtime-reflection, we need a way to pre-register Surfaces of these classes that need to be serialized. An approach for providing runtime-reflection for Scala 3 can be found in https://github.com/gzoller/scala-reflection, but without a help from Scala compiler plugin, the performance for looking up type information will be quite slow.

@xerial xerial added the roadmap Major milestones label Jan 9, 2022
@xerial xerial pinned this issue Jan 9, 2022
@xerial xerial added this to the Airframe 22 milestone May 8, 2022
@xerial xerial modified the milestones: Airframe 22, Airframe 23 Apr 24, 2023
@xerial
Copy link
Member Author

xerial commented Apr 24, 2023

#2682 will take over this milestone

@xerial xerial closed this as completed Apr 24, 2023
@xerial xerial unpinned this issue Apr 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
roadmap Major milestones
Projects
Status: Done
Development

No branches or pull requests

1 participant