Skip to content

日本語の書き直しと、言語間で食い違っていた挙動の修正 - #1

Merged
tatuharu merged 2 commits into
mainfrom
rewrite-japanese-text
Oct 5, 2026
Merged

tatuharu merged 2 commits into
mainfrom
rewrite-japanese-text

Conversation

@tatuharu

@tatuharu tatuharu commented Oct 5, 2026

Copy link
Copy Markdown
Member

概要

2つのコミットからなる。

  1. 日本語のコメントとドキュメントを読みやすく書き直す(359921f)
  2. 言語間で食い違っていた挙動をそろえる(5618389)

1つ目は文章だけの変更で、コードの挙動は変えていない。2つ目は挙動を変える修正で、5言語それぞれにテストを足している。

1. 日本語の書き直し

全ファイルのコメント・docstring・Markdownを、yomiyasuの方針で書き直した。

  • 和欧文の間の半角空白を取った(約8,800か所 → 約1,600か所。残りは見出しの章番号の後、CommonMarkで空白が要る太字の閉じ記号など)
  • 句点を消した名残で途中で折れていた文を1行につないだ
  • データに使う「壊れる」「黙って」「突き合わせる」「入口」「別物」などの言い回しを直した
  • 意味と、仕様の規範の強さ(しなければならない / してよい など)は変えていない

触っていないもの:

  • 文字列リテラル(例外メッセージ、テスト名、CLIの出力)
  • CIのname:(必須チェック名になっているため)
  • spec/testdata/(生成物。all_tagsの説明だけ直して作り直した)
  • docs/features.mdの行名のうち、check_docs_sync.pyが照合している9つ

あわせて次も行った。

  • コードのコメントから仕様書の章番号と参照先を外した。 章立てを変えるたびにコメントが古くなるため。check_comments.pyにこの検査を足し、これまで漏れていた/** */の中の句点も検査するようにした
  • コメント・ドキュメントと実装の食い違いを、実装に合わせて直した。 書き戻しを止める条件(DataVersion 4786未満のときだけ)、LZ4が任意依存という古い記述、「4言語」の書き残し、porting-guideにあった存在しない関数やモード、check_docs_sync.pyの照合キーのずれなど
  • origin/mainの「利用者が読みやすいように修正」(19d3aca)の上に載せ直した。 READMEは、そのコミットで消した節は消したままにしている

2. 挙動の修正

対象 直したこと
Rust ワールド経由でチャンクを読むと、WorldOpenOptionsに渡した警告の通知先が呼ばれなかった
Python binary32の範囲を超えるNbtFloatがOverflowErrorになっていた。符号付きの無限大にする
Python 途中で切れたGZipや壊れた圧縮データで、標準の例外がそのまま出ていた。MALFORMED_DATAに包む
Python / TypeScript Floatのシグナリング NaN を読み書きするとビットが変わっていた。読んだビットのまま書き戻す
全言語 SNBTの\Uでサロゲートの範囲を書いたときの扱いを\uとそろえた(C#は想定外の例外が漏れていた)
C# / Java / TypeScript / Python 孤立サロゲートを含むCompoundのキーを受け付けていた。書き出すと読み戻せないため、SNBTではMALFORMED_DATA、APIではINVALID_ARGUMENT
Python 対になったサロゲートと補助文字が別の文字列になっていた
全言語 リストの範囲外の位置で、TypeScriptは配列が伸び、Rustはパニックしていた。失敗したときに空のリストの要素型が確定するのも直した
全言語 読み書きモードで存在しないフォルダへ書けなかった。書き出す直前にディレクトリを作る
全言語 level.datの一時ファイルをfsyncしてから置き換える
TypeScript / Rust \N{…}のエラーメッセージに波括弧が抜けていた

CHANGELOGに「未リリース」の節を作って記録した。仕様10・11・40と、features.mdの「言語ごとの差異」にも反映している。

ドキュメントの事実誤りも直した。

  • 仕様11とADR 0006の異種リストの扱いが、Minecraftの挙動(Compoundでない要素を{"": 値}に包む)と逆だった
  • ADR 0001 / 0002、READMEのTypeScriptの要件とRustの行を実態に合わせた

確認したこと

  • 単体テスト: C# 214件 / Java 197件 / TypeScript 151件 / Python 214件 / Rust 152件、すべて成功
  • spec/run-conformance.sh: 834件すべて一致
  • build_testdata.pyの出力とspec/testdataに差分なし
  • check_comments.py / check_docs_sync.py / check_links.py: すべて問題なし
  • 1つ目のコミットで変わったのが、コメント・docstring・説明文の行だけであることをスクリプトで確認(Pythonは構文木で比較)

レビューで見てほしい点

  • 見出しのアンカーが変わっている。 空白を取ったため、約30件の見出しのアンカーが変わった。リポジトリ内のリンクは直してあるが、外部から#見出しでリンクしている場合は切れる
  • 孤立サロゲートのキーを拒否するようになった。 これまで受け付けていた入力がエラーになる。ただ、そうして書き出したデータはもともとこのライブラリでも読み戻せなかった
  • Pythonのdocstringの空白も取った。 ``x``や:class:の前後の空白を取ったので、Sphinxで描画するとマークアップとして認識されない(いまはSphinxを使っていない)

未確認

RustのMSRV(1.75)は、手元にツールチェーンがないため確かめていない。使ったのは1.75で使える機能だけで、確認はCIのmsrvジョブに任せる。

全ファイルのコメントと Markdown を yomiyasu の方針で書き直した。
和欧文の間の半角空白を取り、句点を消した名残で途中で折れていた文を
つなぎ、データに使う「壊れる」「黙って」のような言い回しを直した。
意味と、仕様の規範の強さは変えていない。

コードのコメントから、仕様書の章番号と参照先を外した。
章立てを変えるたびにコメントが古くなるため。check_comments.py に
この検査を足し、これまで漏れていた /** */ の中の句点も見るようにした。

書き直しの途中で見つかった、コメント・ドキュメントと実装の食い違いを
実装に合わせて直した。主なものは次のとおり。

- 書き戻しを止めるのは DataVersion 4786 未満のときだけ
- LZ4 は自前で展開しており、任意依存ではない
- 「4言語」の書き残しを、TypeScript を含めた記述にする
- porting-guide に書かれていた存在しない関数・モードを実在の手順にする
- check_docs_sync.py の照合キーを features.md の今の行名に合わせる

docs/api/ の生成部分は check_docs_sync.py --write で作り直した。
書き直しの途中で見つかった、言語ごとに挙動が違う箇所を直した。
どれも 5 言語それぞれにテストを足して確かめている。

- Rust: ワールド経由でチャンクを読むと、WorldOpenOptions に渡した
  警告の通知先が呼ばれなかった
- Python: binary32 の範囲を超える NbtFloat が OverflowError になって
  いた。他の言語と同じく符号付きの無限大にする
- Python: 途中で切れた GZip や壊れた圧縮データで、標準の例外が
  そのまま出ていた。MALFORMED_DATA に包む
- Python / TypeScript: Float のシグナリング NaN を読み書きすると
  ビットが変わっていた。読んだビットを持っておき、そのまま書き戻す
- SNBT の \U でサロゲートの範囲を書いたときの扱いを \u とそろえた。
  C# では想定外の例外が漏れていた
- 孤立サロゲートを含む Compound のキーを受け付けていた。書き出すと
  読み戻せないため、SNBT では MALFORMED_DATA、API では
  INVALID_ARGUMENT にする
- Python: 対になったサロゲートと補助文字が別の文字列になっていた
- リストの範囲外の位置で、TypeScript は配列が伸び、Rust はパニック
  していた。失敗したときに空のリストの要素型が確定するのも直した
- 読み書きモードで存在しないフォルダへ書けなかった。書き出す直前に
  ディレクトリを作る
- level.dat の一時ファイルを fsync してから置き換える
- TypeScript / Rust: \N{…} のエラーメッセージに波括弧が抜けていた

あわせて、ドキュメントの事実誤りを直した。仕様 11 と ADR 0006 の
異種リストの扱いが Minecraft の挙動と逆だったほか、ADR 0001 / 0002、
README の TypeScript の要件と Rust の行、テストベクタ all_tags の
説明を実態に合わせた。
@tatuharu
tatuharu merged commit 75bcfb4 into main Oct 5, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant