mirror of https://github.com/sbt/sbt.git
53 lines
2.7 KiB
Plaintext
53 lines
2.7 KiB
Plaintext
DONE
|
|
-fix caching issue for compiler interface
|
|
-fix test ClassLoader
|
|
|
|
|
|
Goals/Guidelines for xsbt
|
|
=====
|
|
As usual:
|
|
- Immutable interfaces
|
|
- Typesafe
|
|
- Robust, flexible API
|
|
|
|
ISSUES
|
|
- Scala issue #2265: cannot use structural types or libraries that use structural types, or OOME: PermGen will occur. Running/testing user code with structural types might also cause OOME, but is unlikely unless the Scala standard library or compiler uses structural types.
|
|
|
|
TODO
|
|
- launcher interface versioning
|
|
- allow comments in datatype definition file
|
|
- tests for API extractor
|
|
|
|
update 0_6_Summary to mention different output directories.
|
|
look at permgen in Josh's ScalaTest
|
|
TrapExit handles System.exit(0) as nonzero exit code
|
|
|
|
Task engine
|
|
- method tasks will be normal tasks that pull the command line from a CommandLine task
|
|
- per task configuration, including logging (e.g. 'task compile log debug')
|
|
- unnamed tasks log to parent task
|
|
- better control over parallel logging. Approach undecided. Some possibilities:
|
|
+ optionally one task always logging
|
|
+ log each task to a file
|
|
+ interactive control over logging (might require tasks that use console to be explicit in their dependence on the console)
|
|
|
|
- Interfaces subproject that depends on no other project and defines interfaces in package xsbti. They are written in Java and cannot refer to Scala classes (compileOrder = JavaThenScala). These interfaces can be used to pass objects across ClassLoader boundaries.
|
|
- launcher/main interface is not static (no system properties should be used past the static entry point)
|
|
- simple, well-defined ClassLoaders
|
|
- use Exceptions instead of Option/Either
|
|
- every component gets its own subproject
|
|
- can use any version of compiler/Scala that is source compatible with the compiler-interface component
|
|
- build xsbt using normal cross-build conventions
|
|
- compiler: raw interface (no dependency analysis, but still in same jvm) or with dependency analysis
|
|
- compiler: can specify scala-library.jar and scala-compiler.jar + version instead of retrieving the ClassLoader
|
|
- compiler: new phase that extracts API defined in sources (classes, their members, and all type information)
|
|
- minimal dependence on main xsbt logger from subcomponents: use thin interface for subcomponents
|
|
|
|
Dependency Management
|
|
- resolvers are completely defined in project definition (use Resolver.withDefaultResolvers)
|
|
- configurations completely defined within project (use ModuleConfiguration.configurations)
|
|
|
|
Launcher
|
|
- see launch.specification
|
|
- boot interface contains static final int version = N that main xsbt can use to check if it can be loaded by that version (a lower bound check)
|
|
- main xsbt has static final int version = N that boot can use to check if it can load that version (a lower bound check) |