1

私は次のビルドシステムを持っています

module Main where

import Development.Shake

main :: IO ()
main = shakeArgs shakeOptions $ do

  "a" %> \out -> do
    need ["a.in"]
    cmd_ "sleep" "10"
    cmd "touch" [out]

でビルドしstack buildて実行しstack exec myShake -- --progress aます。

クリーン ビルドをtouch a.in実行してから再度実行すると、シェイクによって非常に間違った進捗予測が表示されます。1000 分以上を予測することもあります。

(5 秒ごとに端末のタイトル バーに進行状況の予測が表示されるので、これを正しく理解していれば、ここでは最初の進行状況の予測についてのみ説明します。このビルド システムの例で得られるのはこれだけです。)

私はスタックとシェイクのバージョン 0.16 で lts-9.6 を使用します (git + stack.yaml のパッケージのエントリを介して)。

4

2 に答える 2

1

進行状況の仕組みに関するドキュメントは、次の場所にありますprogressDisplay

現在の実装では、残り時間 ( に基づくtimeTodo) と既に完了した作業 ( timeBuilt) を予測します。パーセンテージは としてremaining / (done + remaining)計算されますが、残り時間は、このビルドで観察された作業率によって残りをスケーリングすることによって計算されますdone / time_elapsed

1 つのことしか行わない非常に短いビルド システムの場合、作業率は一般的にガベージです。 1000メートル)。

作業率を変更するという考え方は、バッテリー電源と主電源でラップトップを使用している場合があり、異なる並列処理フラグを渡す場合があるということです。少なくとも最初は、Shake が作業率の概算として 1 つまたは複数のスレッドを使用する必要がある可能性は十分にあります。

于 2017-10-01T22:36:30.783 に答える