Schneller Start ohne RubyGems, Rational statt BigDecimal, Helfer in Rdb::Helpers
bin/rdb läuft mit --disable-gems (ca. 85 statt 170 ms je Befehl), dafür rechnen Summen und /act mit Rational. Hilfsfunktionen und Konstanten liegen nicht mehr auf Object, Kopf-/Strichzeile und awk-Aufruf an einer Stelle. Tests laufen parallel: 21 statt 70 Sekunden.
This commit is contained in:
+12
-8
@@ -81,22 +81,26 @@ Index ohne Entsprechung in der Suche offen.
|
||||
2. **Schlechte Hash-Funktion — Behoben** (FNV-1a, größter Eimer 4). Ursprünglich: ([fast.rb:68](../lib/rdb/fast.rb)):
|
||||
`bytes.sum % slots`. Bestätigt: 3000 fünfstellige Nummern landen in 30 Slots,
|
||||
größter Bucket 223. Abhilfe: FNV-1a o. Ä., Primzahl-Slotzahl.
|
||||
3. **Geld in `Float` — Behoben** (`BigDecimal` in `total`/`mean`/`subtotal` und /act). Ursprünglich: ([act.rb:11](../lib/rdb/cmd/act.rb), `to_f` im /act-Teil
|
||||
3. **Geld in `Float` — Behoben** (`Rational` in `total`/`mean`/`subtotal` und /act). Ursprünglich: ([act.rb:11](../lib/rdb/cmd/act.rb), `to_f` im /act-Teil
|
||||
und in `total`). Abhilfe: `BigDecimal` oder ganzzahlige Rappen.
|
||||
4. **awk-Brücke** ([env.rb:119-138](../lib/rdb/env.rb)): ganze Tabelle als String
|
||||
4. **awk-Brücke — bewusst offen.** `awk` und `awk_text` teilen sich jetzt den Aufruf. Streaming
|
||||
und ein eigener Ausdrucksparser wären ein Umbau mit Verhaltensrisiko (awk-Syntax ist
|
||||
dokumentierte Schnittstelle). Ursprünglich: ([env.rb:119-138](../lib/rdb/env.rb)): ganze Tabelle als String
|
||||
durch `capture3`, kein Streaming; handgeschriebener Parser erkennt Strings und
|
||||
Regexe heuristisch (`prev`) und hängt vom awk-Dialekt ab.
|
||||
5. **Globale Methoden auf `Object`** (`fast_opts`, `lock_file`, `num`, `money`,
|
||||
5. **Globale Methoden auf `Object` — Behoben** (`Rdb::Helpers`, Konstanten in `Rdb`). Ursprünglich: (`fast_opts`, `lock_file`, `num`, `money`,
|
||||
`ask`, `need`, `show_record` …). In ein Modul kapseln und in `Env` einbinden.
|
||||
6. **Doppelter Code.** `awk`/`awk_text`; Schlüsseltabellen-Parsing in `fast_opts`/
|
||||
6. **Doppelter Code — Behoben** (`Table.head_text`, `dash_cells`, `headed?`; `awk` über `awk_text`). Ursprünglich: `awk`/`awk_text`; Schlüsseltabellen-Parsing in `fast_opts`/
|
||||
`key_columns`; von Hand gebaute Kopf-/Strichzeilen trotz `Table.dash_row`.
|
||||
7. **Tests.** Laufzeit ca. 66 s wegen eines Ruby-Prozesses pro Test. Fehlerfälle
|
||||
7. **Tests — Behoben** (Suite 70 s → 21 s). Parallel, und `bin/rdb` startet mit `--disable-gems` (ca. 85 statt
|
||||
170 ms je Befehl). Fehlerfälle haben jetzt Tests. Den Rest der Zeit braucht
|
||||
`test_testall_runs_demo_script` (rund 300 Befehle nacheinander). Ursprünglich: Laufzeit ca. 66 s wegen eines Ruby-Prozesses pro Test. Fehlerfälle
|
||||
(Encoding, Tab in Wert, Locks, Editor) nicht abgedeckt; Tests direkt gegen
|
||||
`Rdb.run` im Prozess wären schneller.
|
||||
8. **Repo.** `demo/fact.pl`, `fact_lc.pl`, `rule.pl` sind ungetrackt;
|
||||
8. **Repo — offen, Entscheidung beim Autor.** Ursprünglich: `demo/fact.pl`, `fact_lc.pl`, `rule.pl` sind ungetrackt;
|
||||
`demo/testall.old` (1187 Zeilen) wäre als Golden-File-Test besser gepflegt.
|
||||
|
||||
## Empfohlene Reihenfolge
|
||||
|
||||
Schwachstellen, Fehler und Verbesserung 1–3 sind erledigt. Offen sind 4–8: die
|
||||
awk-Brücke, globale Methoden auf `Object`, doppelter Code, Testlaufzeit, Repo-Aufräumen.
|
||||
Schwachstellen, Fehler und Verbesserungen 1–3 und 5–7 sind erledigt.
|
||||
Offen: die awk-Brücke (4, bewusst) und das Repo-Aufräumen (8).
|
||||
|
||||
Reference in New Issue
Block a user