ぜのぜ

しりとりしようぜのぜのぜのぜ

605日目

日記

今日書いたコード

境界の判定ロジックを書いた · Gurrium/ReadGraphemeCluster@9cace8f · GitHub テストを修正した · Gurrium/ReadGraphemeCluster@de23df1 · GitHub

感想

こういうことがしたいが、いいやり方が思い浮かばなかった。

let timeoutTask = // 一定時間後にfor-awaitをキャンセルするタスクを作る

for try await scalar in fileHandle.bytes.unicodeScalars {
    // timeoutTaskのタイマーをリセット
    // scalarを処理する
}

604日目

日記

今日書いたコード

テストを書いた · Gurrium/ReadGraphemeCluster@6537d60 · GitHub

感想

やっとテストが書けたぴよ〜〜〜〜〜〜〜〜〜〜〜

同じスレッドだとfor-awaitの前に書ききるかそれにブロックされるかしかなくて、別のスレッドにするためにTask.detachedの中にwithTaskGroupで書くと書き込まれる順番が不定になるしで泣きそうだった。

Pipeは必要だったかどうかはわからない。テスト用のインプットファイルと直結できない気がする。

602日目

日記

今日書いたコード

UnicodeScalarを読めるようにした · Gurrium/ReadGraphemeCluster@62945b9 · GitHub

感想

いろいろ調べて書いてたけどFileHandle.bytes.unicodeScalars: AsyncUnicodeScalarSequence<FileHandle.AsyncBytes>*1が生えてて要らなくなった。

便利〜〜〜〜〜〜〜。多分canonical modeを無効にすれば行ごとではなくUnicodeScalar単位で読み込まれるはず。GraphemeClusterは判定してくれないので(そういうメソッド無いよね????)頑張る。

for try await scalar in FileHandle.standardInput.bytes.unicodeScalars {
    print("\(scalar.value) (\(scalar))")
}
❯ swift run
Building for debugging...
Build complete! (0.10s)
😀
128512 (😀)
10 (
)
👨‍👩‍👧‍👦
128104 (👨)
8205 ()
128105 (👩)
8205 ()
128103 (‍👧)
8205 ()
128102 (👦)
10 (
)