wvlet / airframe

Essential Building Blocks for Scala

Home Page:https://wvlet.org/airframe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Milestone: Scala 3 (Dotty) Support

xerial opened this issue · comments

Scala 3 (dotty)

  • Use Scala 3.0.0 #1639
  • Add a basic configuration
  • Extract AirSpec as an external project #1992
  • Test Scala version sandwitch sbt/sbt#5767
  • airframe-log support #867 #1381
  • Surface support #1384
  • airframe-di support #1649
    • Split source folder for Scala 2 and 3 #1405
    • Support Scala3 macros #1407
    • deprecate in-trait bindings #1653
    • [ ] new A with DISupport #1410
    • [ ] Traverse Template node in Scala 3 for rewriting new A with DISupport {} code lampepfl/dotty#10931
  • AirSpec #1659
  • Use TastyInspector
    • Create ReflectSurface factory
    • RuntimeSurface.of[X]
  • Run all AirSpec tests
    • parquet #2209 Need to resolve Surface of nested objects at runtime or pre-register Surfaces
    • grpc (Need to register trait factories to start gRPC server. #2194
      • Scala 3.1.3-RC2 or later will be required for generating new class from a trait type T lampepfl/dotty#11685)
    • airframe-log
    • surface
      • recursive surface (with type substitution)
      • local surface inside object or class #1695
      • NamedParameterTest
      • RecursiveHigherKindTypeTest #2052
    • di
    • codec
    • json
    • msgpack
    • canvas
    • control
    • ulid
    • metrics
    • rx
    • okhttp (Finagle server is used for testing) #2440 #2865
    • http-recorder (Finagle server is used internally) #1146
  • airframe-config
  • airframe-http
  • airframe-http-router
  • airframe-http-grpc (codec is required)
    • airframe-http-router
    • airframe-http-codegen (Need to read Surfaces of RPC/Endpoint interfaces from classpath)
      • Fix (or remove the usage of) unstable Tasty-based surface #1698 See also #2006 for more context
  • [ ] airframe-http-finagle (Finagle must be migrated to Scala 3) Finagle will not migrate to Scala 3 soon
  • canvas
  • codec
    • Split code for Scala 2 and 3 #1640
  • control
  • jmx
  • launcher
  • metrics
  • msgpack
  • json
  • rx
  • rx-html
  • rx-html-widget
  • parquet
  • ulid
  • Cross build for Scala.js + Scala 3.0.0
    • Extract sbt-airframe as a separate project #1686
    • Surface (Use Scala 3 inline methods for JS src) #1676
    • AirSpec for Scala.js + Scala 3.0.0 #2202

Hi, I'm researching alternative frameworks for web development in Scala, as I want to move away from Akka, which would include Play and Lagom.

A few weeks ago, I've come to know Airframe and the possibility to move to Scala 3 caught my attention.

I see this is not completed but much of the work is done already. So I want to ask if you think it should be ok to start a new project in Airframe using Scala 3 only.

@deabreu I understand the issues around Finagle (no Scala 3 support) or Akka (adopted business license).

For Scala 3, Netty or gRPC backend of airframe-http will be promising (and the basic functionalities are already working in Scala 3), but it's not production ready at this moment. I'm trying to implement the remaining pieces such as #2689, for supporting all of the functionalities in Scala 3

@takezoe @shimamoto @exoego @yuokada All of the Scala 3 migration work has been completed! Thank you for all of your contributions so far.

Although the documentation needs some updates around the new RxRouter and RxFilter usage, I'm still expecting to have some interface changes while building real applications using Scala 3. I'll update the doc once these new interfaces for Scaal 3 become stable. Especially, Netty-based HTTP server backend and Rx-based filters have not been battle-tested yet.

Around Scala.js, fastOptJs, npm-bundler, building facade manually become obsolete, and we now can use YARN, fastLinkJS, Vite.js, scalablyTyped, etc., which enable seamless integration with the JS ecosystem. https://www.scala-js.org/doc/tutorial/scalajs-vite.html I'll dig into how to set up projects using these new standards.

@deabreu Airframe 23.5.0 has been released. Scala 3 is now fully supported. Example RPC server and client with Netty backend https://github.com/wvlet/airframe/tree/master/examples/rpc-examples/hello-rpc