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)