パターンを一緒にチェーニングします

コンパイラーのチェーンでは、特定のコンパイラーの任意の出力レイヤーを、チェーン内の任意のコンパイラーによる追加入力として使用できます。

通常、が Driver 実行するタスクには、 1 つのパターンの実装が含まれています。 ただし、処理ライブラリを使用して、複数のチェーン・コンパイル・パターンで構成されるタスクを作成することもできます。 このようにすると、パイプライントポロジで特定の処理タスクに定義するパイプラインの数を削減できます。

制限事項

異なるコンパイラーが同じ出力レイヤーに書き込むことはできません。 処理ライブラリは、この条件が満たされているかどうかを確認し、 2 つのコンパイラが同じ出力レイヤーに書き込みを行おうとすると例外を発生します。

特定のコンパイラーが 1 つ以上の出力レイヤーを入力として必要とする場合、これらのレイヤーは、指定されたレイヤーよりも前にチェーン内に存在するコンパイラーのいずれかによって作成されている必要があります。 この状態はライブラリでも確認され、発生した場合は例外が発生します。

複数のコンパイラータスクを作成しています

次の例では、このタスクと、 2 つの異なるタイプのコンパイラから構築された複数のコンパイラタスクを含む関連するビルダーについて説明します。 すべてのパターンがインクリメンタル・コンパイルをサポートしているわけではないので、結果のタスクでは常に入力全体が再処理され、変更内容は無視されます。 すべてのチェーン・コンパイラがインクリメンタル・コンパイルをサポートしている場合は、このようには当てはまりません。この場合、インクリメンタル処理が適用されると、チェーン全体がインクリメンタルに実行されます。

def configureCompiler(completeConfig: CompleteConfig,
                      context: DriverContext,
                      builder: DriverBuilder): builder.type = {

  // The task Id
  val taskId = "Id"

  // Create the two compilers according to limitations of multi-execution
  val myNonIncrementalCompiler = new MyNonIncrementalCompiler(context)
  val myDepCompiler = new MyDepCompiler(context)

  // Create the multi-compiler builder
  val multiCompilerTaskBuilder =
    builder
      .newMultiCompilerTaskBuilder(taskId)
      .addNonIncrementalCompiler(myNonIncrementalCompiler)
      .addDepCompiler(myDepCompiler)

  // Build the multi-compiler driver task and add it to the driver builder
  val multiCompilerTask = multiCompilerTaskBuilder.build()
  builder.addTask(multiCompilerTask)
}

」に一致する結果は 件です

    」に一致する結果はありません