New plan to [fix the `sbt` build](https://www.pivotaltracker.com/n/projects/2539304/stories/182209126) and its annoying: ``` log.error( "Truffle Instrumentation is not up to date, " + "which will lead to runtime errors\n" + "Fixes have been applied to ensure consistent Instrumentation state, " + "but compilation has to be triggered again.\n" + "Please re-run the previous command.\n" + "(If this for some reason fails, " + s"please do a clean build of the $projectName project)" ) ``` When it is hard to fix `sbt` incremental compilation, let's restructure our project sources so that each `@TruffleInstrument` and `@TruffleLanguage` registration is in individual compilation unit. Each such unit is either going to be compiled or not going to be compiled as a batch - that will eliminate the `sbt` incremental compilation issues without addressing them in `sbt` itself. fa2cf6a33ec4a5b2e3370e1b22c2b5f712286a75 is the first step - it introduces `IdExecutionService` and moves all the `IdExecutionInstrument` API up to that interface. The rest of the `runtime` project then depends only on `IdExecutionService`. Such refactoring allows us to move the `IdExecutionInstrument` out of `runtime` project into independent compilation unit.
1.1 KiB
layout | title | category | tags | order | ||
---|---|---|---|---|---|---|
developer-doc | Instruments | runtime |
|
9 |
Instruments
Instruments are used to track runtime events to allow for profiling, debugging and other kinds of behavior analysis at runtime.
Naming Conventions
Every Instrument must be implemented in Java and have name that ends with
Instrument
.
Fixing Compilation
Annotations are used to register the implemented instruments with Graal. The annotation processor is triggered when recompiling the Java files. Unfortunately, when doing an incremental compilation, only the changed files are recompiled and the annotation processor 'forgets' about other instruments that haven't been recompiled, leading to runtime errors about missing instruments.
To fix that, individual services have to be placed in separate subprojects
depending on runtime
and aggregated under runtime-with-instruments
. Later
the META-INF registrations are concatenated in the final uber jar.