HermitCrab: a restricted clitic adds 17.5% work steps, mostly host search that repeats per MSA (measured on the port)

オープン
#610 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
リファクタリング
明瞭さ
おおむね明確
活発さ
活発
技術スタック
csharp
領域
performance

調査の方向性

Start by reading the FieldWorks/HC loader and related issues #599 and #600 to understand the existing rule indexing and root-search cache. Then investigate whether rules with identical shapes across MSAs can share a clitic rule. Done means measuring work steps on a grammar with multi-MSA clitics and reporting the change.

索引モデルが issue の本文から書いたものです。

説明

Claude-drafted.

One restricted enclitic adds 1,075,012 work steps (+17.5%) to a real grammar's word lists, and most of it is host search, not the clitic's own rules. The enclitic is a one-segment allomorph of another clitic, restricted to / [V] _. Measured on the PanGloss port (same work-step counting as hc.dll), not on hc.dll. The data is private; aggregates only.

What we know (work steps over 7,969 word occurrences):

  • 82.6% of the added steps fall on words ending vowel + g; 13.3% on words not ending in g.
  • By object: 51.2% host search (root index and existing rules), 13.4% the clitic's own rules, 35.4% unattributed (18.7% under v8 counters).
  • As a standalone one-MSA particle it adds about half as much (held +8.3% against +17.3%). Inferred: the port's loader compiles one clitic rule per MSA (two here), and each repeats the host search.
  • An environment pre-check saves at most about 4% (42,779 steps).
  • In the port, the edge-segment rule index plus the per-word root-search cache gave -12.1% on base lists and -13.1% with the clitic.

Not known: whether the C# loader also makes one clitic rule per MSA.

Proposed change (C#): check whether the FieldWorks/HC loader can share one clitic rule across MSAs whose shapes are identical, so the host search runs once. Measure the change in work steps on a grammar with multi-MSA clitics.

Related: #599, #600, #564, #601 (all open). PanGloss: sillsdev/PanGloss#90 (source, open); PRs sillsdev/PanGloss#95 and #96 (merged) are the index and cache. PRs sillsdev/PanGloss#101 and #102 (open) fix the loader making one copy per MSA for ad hoc allomorph prohibitions: the same mechanism, but a correctness fix, not a speedup.

Next: count host-search steps for a multi-MSA clitic on hc.dll before changing the loader.


Evidence -- method and tables

Port at PanGloss 0.12.1, pangloss batch --stats --work-columns, one thread. 7,969 occurrences: 7,206 held, 563 dev, 200 non-words. Arms: the grammar without the enclitic, and with it.

Set of steps Added Share
Total, base 6,132,123 to 7,207,135 1,075,012 +17.5%
Words ending vowel + g 888,370 82.64%
Words ending ng or other consonant + g 43,417 4.04%
Words not ending in g 143,225 13.32%
By object Steps Share
Root and existing-rule host search 550,182 51.18%
The two clitic rules 143,806 13.38%
Unattributed (v7 counters) 381,024 35.44%
Unattributed (v8 counters) 201,456 18.74%

The pre-check estimate skips the clitic branch for the 638 g-final words where [V] _ fails: 43,417 gross, 42,779 net at about 1 step per check, against 1,075,012 added.

Standalone encoding: held +8.34%, dev +11.49%, non-words +16.44%, against +17.31% held for the allomorph encoding. These are separate encodings, so the halving is not isolated to MSA count.

Index and cache on the port (PanGloss 0.12.2 changelog): base 6,132,123 to 5,392,090 (-12.07%); with the clitic 7,207,135 to 6,265,316 (-13.07%). The index alone gives 5,395,400 on base and 6,340,178 with the clitic (-12.0% both).

Sources
主要言語
C#
スター
29
フォーク
16
平均マージ
6日 7時間
マージ済み PR(30日)
14

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

sillsdev/machine のほかの issue

sillsdev/machine の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。