タグ

2022年7月25日のブックマーク (2件)

  • Data.Sequence の両端における操作 - Qiita

    Haskell の両端キュー Haskell には Data.Sequence と呼ばれる両端キューライブラリが存在します。 ただのリストと比較すると 左端と右端どちらにも定数時間で要素を挿入できる1 Sequence 同士を対数時間で連結可能(>< とかいう可愛い演算子です)2 3 対数時間で要素にアクセス可能。しかもMaybeモナドに包んで返す関数もある4 などといった強みがあります。 調べてみたところ両端への挿入や端の要素の削除が、個人的にクセ強でしたのでまとめました。 要素を挿入する (<|) と (|>) 演算子を使います。定義は以下になります。 先頭への挿入 : (<|) :: a -> Seq a -> Seq a 末尾への挿入 : (|>) :: Seq a -> a -> Seq a 挿入の方向をイメージするとどうということはありませんが、よくある手続き型言語とは異なり引

    Data.Sequence の両端における操作 - Qiita
    igrep
    igrep 2022/07/25
    “ViewL は悲しい顔で (:<) ViewR は笑顔(:>)です”
  • nehan(縦書き文庫の組版エンジン)をWebAssembly化することで、約3倍の高速化を達成しました - anti scroll

    縦書き文庫の組版エンジンであるnehan(js製)をRustで書き換え、WebAssemblyで実行したところ、約3倍の高速化に成功しました。 現時点ですでに運用されています。 感想としては「当は10倍ぐらい速くなって欲しかったけど、そこまでは速度が出ずにトホホ…」という感じです。 3倍なら良いではないか、と思われる方もいるかもしれませんが、青空文庫の長編小説なんかは、だいたい40万字ぐらいあり、そのjsでの組版時間は(すごく遅い端末だと)27秒に達することもあります。 ちなみに手元のノートPC(メモリ8G)でjsに組版させると5秒ぐらいです。 この5秒が1.7秒ぐらいになるのは嬉しくても、27秒が9秒になっても、あんまり嬉しくないですよね。 だから、ずっと10倍を目標にしてきたのですが… まあこれから頑張って、Rust側のソースを最適化していこうと思います。 ビューアーの変更点 全ペー

    nehan(縦書き文庫の組版エンジン)をWebAssembly化することで、約3倍の高速化を達成しました - anti scroll
    igrep
    igrep 2022/07/25
    すばらしい