c-lessonみたいな感じでF# の奴何かやってくれません?と言われてちょっと考えるなど。
fsharp-lessonが略称かな。
c# - Is there a .Net library similar to GNU readline? - Stack Overflow
を見ていろいろ試したが、今の所ちゃんと扱えるのを見つけられていない。
ブログにした。 dotnetで使えるReadLineっぽいライブラリで日本語が使えるのは無いのだろうか? - なーんだ、ただの水たまりじゃないか
自分で作る事にした。>ReCJKLine
第三回ではメモリと時間を測りたい。
ToyRelに試してみた時のメモ。
とりあえずパッケージを追加。
$ dotnet add package benchmarkdotnet
ToyRelで試す。Program.fsに以下を書く。
open BenchmarkDotNet.Attributes
open BenchmarkDotNet.Running
[<MemoryDiagnoser>]
type ProductBench() =
[<Benchmark>]
member _.Product() =
runStatement "use tandp"
runStatement "(stock) product (delivery)"
[<EntryPoint>]
let main _ =
BenchmarkRunner.Run<ProductBench>() |> ignore
0
以下で実行される。ちょっと回数が実行されすぎてランダムのファイル名がぶつかるが。
$ dotnet run -c Release
もうちょっと回数を減らしたい。
open BenchmarkDotNet.Jobs
open BenchmarkDotNet.Engines
[<SimpleJob (RunStrategy.ColdStart, targetCount=1)>]
[<MemoryDiagnoser>]
type ProductBench() =
...
で一回になった。
以下みたいにした所
printfn "%d" (System.Diagnostics.Process.GetCurrentProcess().WorkingSet64)
printfn "%d" (GC.GetTotalAllocatedBytes true)
printfn "%d" (System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64)
printfn "%d" (System.Diagnostics.Process.GetCurrentProcess().PeakPagedMemorySize64)
printfn "%d" (System.Diagnostics.Process.GetCurrentProcess().PeakVirtualMemorySize64)
printfn "%d" (System.Diagnostics.Process.GetCurrentProcess().PeakWorkingSet64)
以下みたいな結果になった。
52350976
4667080
0
0
0
0
なぜPeakが0なのかは分からないが。
/usr/bin/time -l
と比べてみよう。
$ dotnet build -c Release
$ /usr/bin/time -l bin/Release/net6.0/ToyRel
...
0.95 real 0.99 user 0.02 sys
50819072 maximum resident set size
12713 page reclaims
...
31428608 peak memory footprint
maximum resident set sizeとWorkingSet64はほぼ一致している。 一方でこれらはアプリがallocateしたもの以外のも含んでそう。
この辺はGCが使われるくらい長く動くもので測るとどうなるかを調べてみないと何がいいか結論は難しいが、
ファイルパスからハッシュを計算したいとする。 暗号用途じゃなくてハッシュ用途。
Cyan4973/xxHash: Extremely fast non-cryptographic hash algorithm
SpookyHashが良さそう?
一通り揃っているのでどれでも良さそうだが。