<commit_before># -*- mode: org -*-

* TODO

- [X] dynamic-window 最適化
  書き込みがあるまでは 定数参照にする。

- [X] state を元に戻す機能。
  reinitialize-instance を使う？
  => 一応、 reset という別関数に

- [X] fixed window
  固定window なら、一意に圧縮できる。 encoder で class slot のみ実装?
  とりあえず、 fixed window フラグを state に入れ、 encode 内部で見るように。


- [ ] 必要な上位interface
  {encode,decode}-{string,utf8-vector,utf16-vector,utf32-vector}
  state省略はこの層の機能かな

  => encode/decode string だけにした。 babel がそうだから。
  しかし、テストを書くには、 Unicode 配列がそこそこ便利そう。

- [ ] character と code-point を双方食えるように？


- [X] iconv などが、中途バッファを食った時にどうするかを見る。シフト状態を iconv_t に持つんだっけ？
  iconv のように、 stream ではなく buffer を渡すようにして、状態を戻させる他にない気がする。
  先読みバッファ？

  => iconv のエラー時には、変換に失敗した所の先頭を差すようにする。
  なので、そうするような restart を入れた。

- [ ] Restart 周りの参考先
  Gauche, babel, iconv lisp ffi

- [X] macro : handler-bind で error 拾って state を書き戻す
  とりあえず、 position を書き直すのを入れた。
  どこまで state を戻すかを選べるようにしておきたい。

  => 上記 iconv の調査のように、書き戻す restart を定義した。 (~with-scsu-error-handling~)


- [ ] stream からの使用??
  string にしてから変換すればよいか。

- [ ] char-code-limit が小さい環境での surrogate ほどいてから encode, しないと define extended できない

- [ ] :initial-priority 引数
  :lookahead か配列。もう計算しちゃおう。


- [ ] rearrange test
  util, codepoints, examples, interface 

* TODO 圧縮率

Sdnを使う方が小さい
Decode utf16 mode？ サロゲートを戻さない
QuoteはBMP専用

- define か unicode-mode の使い分け: Define の方が quote よりも短いので、SCSUの例では優先的に使っている
- SQn を dynamic-window に使う

1. standAlone だけquote
2. compressible なら sdn. Sdxは微妙？
3. あきらめてunicode


新しい符号を見つけたら、
・bmp で単品 quote にするかを確認
・LRUで置き換えwindow探して入れ替え
・単品かどうかで quote かどうかを規定
・あまりにも全入れ替えで、しかもまた状態が戻るようなら、unicode mode

Window更新優先度
・なし
・言語ごと定義
・lookahead


短い encoding から試さないとだめ
- 2byte define window
- 3byte define window
- quote unicode BMP char
- unicode mode


* ボツネタ

- decode-unit* で +SCU+ とかが来たときに、再帰しないでタグを返す。
  decode-unit の上位側で、出来るだけタグを食えるようにする。

  => 面倒。特にサロゲートとにの組み合わせを、上位関数でやらないといけないのは嫌。
  ちょっと例外的な系の効率は、まあ置いておけるかも。

- decode の char writer を普通の loop にする。
  => きちんとエラーを投げたり、 vector-push などを使う必要もあるので、 with-buffer-accessor 必要。

- Read func のモードとしてpeek
 → 先読み内容を引数に
  
* 仕様

-
<commit_msg>updated TODO<commit_after># -*- mode: org -*-

* TODO

- [X] dynamic-window 最適化
  書き込みがあるまでは 定数参照にする。

- [X] state を元に戻す機能。
  reinitialize-instance を使う？
  => 一応、 reset という別関数に

- [X] fixed window
  固定window なら、一意に圧縮できる。 encoder で class slot のみ実装?
  とりあえず、 fixed window フラグを state に入れ、 encode 内部で見るように。


- [ ] 必要な上位interface
  {encode,decode}-{string,utf8-vector,utf16-vector,utf32-vector}
  state省略はこの層の機能かな

  => encode/decode string だけにした。 babel がそうだから。
  しかし、テストを書くには、 Unicode 配列がそこそこ便利そう。

  => encode/decode UTF-32 が必要。 define extended を活用するため。

- [ ] character と code-point を双方食えるように？


- [X] iconv などが、中途バッファを食った時にどうするかを見る。シフト状態を iconv_t に持つんだっけ？
  iconv のように、 stream ではなく buffer を渡すようにして、状態を戻させる他にない気がする。
  先読みバッファ？

  => iconv のエラー時には、変換に失敗した所の先頭を差すようにする。
  なので、そうするような restart を入れた。

- [ ] Restart 周りの参考先
  Gauche, babel, iconv lisp ffi

- [X] macro : handler-bind で error 拾って state を書き戻す
  とりあえず、 position を書き直すのを入れた。
  どこまで state を戻すかを選べるようにしておきたい。

  => 上記 iconv の調査のように、書き戻す restart を定義した。 (~with-scsu-error-handling~)


- [ ] stream からの使用??
  string にしてから変換すればよいか。

- [ ] char-code-limit が小さい環境での surrogate ほどいてから encode, しないと define extended できない

- [ ] :initial-priority 引数
  :lookahead か配列。もう計算しちゃおう。


- [ ] rearrange test
  util, codepoints, examples, interface 

* TODO 圧縮率

Sdnを使う方が小さい
Decode utf16 mode？ サロゲートを戻さない
QuoteはBMP専用

- define か unicode-mode の使い分け: Define の方が quote よりも短いので、SCSUの例では優先的に使っている
- SQn を dynamic-window に使う

1. standAlone だけquote
2. compressible なら sdn. Sdxは微妙？
3. あきらめてunicode


新しい符号を見つけたら、
・bmp で単品 quote にするかを確認
・LRUで置き換えwindow探して入れ替え
・単品かどうかで quote かどうかを規定
・あまりにも全入れ替えで、しかもまた状態が戻るようなら、unicode mode

Window更新優先度
・なし
・言語ごと定義
・lookahead


短い encoding から試さないとだめ
- 2byte define window
- 3byte define window
- quote unicode BMP char
- unicode mode


* ボツネタ

- decode-unit* で +SCU+ とかが来たときに、再帰しないでタグを返す。
  decode-unit の上位側で、出来るだけタグを食えるようにする。

  => 面倒。特にサロゲートとにの組み合わせを、上位関数でやらないといけないのは嫌。
  ちょっと例外的な系の効率は、まあ置いておけるかも。

- decode の char writer を普通の loop にする。
  => きちんとエラーを投げたり、 vector-push などを使う必要もあるので、 with-buffer-accessor 必要。

- Read func のモードとしてpeek
 → 先読み内容を引数に
  
* 仕様

-

{'fraction_non_alphanumeric': 0.09143130684538056, 'fraction_numerical': 0.006223073240785065, 'mean_word_length': 4.21072319201995, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 16, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '269021', 'n_tokens_mistral': 2704, 'n_tokens_neox': 2568, 'n_words': 415}