Skip to content

Commit e705bc2

Browse files
author
Marat Zimnurov
committed
Три числа файлов в документах считали разное, и нигде не было сказано что
SPEC и README говорили «все шесть файлов», обзор — «все семь», а тот же SPEC ниже — «восемь файлов». Выглядело как расхождение, из-за которого в публичные тексты не поставили ни одного числа: непонятно, какое верно. Верны все три, и это хуже простой ошибки — потому что проверить их нечем, пока не сказано, что именно считается: ШЕСТЬ — собственные исходники компилятора в self/: пять слоёв и bootstrap/compiler.flang; ВОСЕМЬ — все исходники .flang, из которых компилятор собирается: связывание добавляет к тем шести core/json.flang и stdlib/strings.flang; СЕМЬ — файлы C, которые компилятор ПЕЧАТАЕТ и которые сверяются побайтово; их число задаёт бэкенд, а не число входов. Измерено, а не выведено: восемь — обходом транзитивных «использует» от bootstrap/compiler.flang, семь — тем, что печатает сам тест самораскрутки («неподвижная точка сошлась: 7 файлов совпали побайтово»). Числа оставлены как были, исправлены формулировки: каждая теперь называет, что считает. В SPEC добавлена сноска со всеми тремя — следующий, кто увидит несовпадение, прочтёт объяснение вместо того, чтобы «чинить» верное число. Нашлось при подготовке публичных материалов: расхождение заметили, потому что собирались назвать число снаружи, где его проверят.
1 parent 6672800 commit e705bc2

2 files changed

Lines changed: 15 additions & 4 deletions

File tree

README.ru.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@ flang repl flang/stdlib/lists.flang
835835
```
836836

837837
**Неподвижная точка сошлась.** Эталон, `flang₁` и `flang₂` печатают компилятор одинаково — все
838-
шесть файлов, — то есть компилятор понимает язык так же, как эталон, и никакой набор тестов этого
838+
семь напечатанных файлов C, — то есть компилятор понимает язык так же, как эталон, и никакой набор тестов этого
839839
не заменяет. Проверка — `flang/test/self-bootstrap.test.mjs`, и она печатает результат:
840840

841841
```

flang/self/SPEC.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,19 @@ AST** и выдаёт **те же диагностики и тот же верд
7979
`flang/test/self-bootstrap.test.mjs`.
8080

8181
Шаг 2 **пройден**, и неподвижная точка **сошлась**: эталон на JavaScript,
82-
`flang₁` и `flang₂` печатают компилятор побайтово одинаково — все шесть файлов.
82+
`flang₁` и `flang₂` печатают компилятор побайтово одинаково — все семь напечатанных
83+
файлов C.
8384
Компилятор воспроизводит сам себя, то есть понимает язык так же, как эталон.
85+
86+
> **Почему в этом документе три разных числа файлов, и все три верны.** Считают
87+
> они разное, и путаница уже стоила расхождения между SPEC, README и обзором.
88+
> **Шесть** — собственные исходники компилятора в `self/` (пять слоёв и
89+
> `bootstrap/compiler.flang`). **Восемь** — все исходники `.flang`, из которых
90+
> компилятор собирается: к тем шести связывание добавляет `core/json.flang` и
91+
> `stdlib/strings.flang`. **Семь** — файлы C, которые компилятор ПЕЧАТАЕТ и
92+
> которые сверяются побайтово; их число задаёт бэкенд, а не число входов.
93+
> Именно семь показывает тест: «неподвижная точка сошлась: 7 файлов совпали
94+
> побайтово».
8495
Проверка: `flang/test/self-bootstrap.test.mjs`, тест «шаги 2 и 3», в обычном
8596
прогоне и без гейта.
8697

@@ -113,8 +124,8 @@ AST** и выдаёт **те же диагностики и тот же верд
113124
| `flang/self/parser.flang` | 35 276 | 18.90 ГБ | 0.092 ГБ | 205× |
114125

115126
Линейность видна прямо: рост числа токенов в 10.1 раза раньше поднимал память в
116-
94.5 раза, теперь — в 10.8. Весь компилятор (119 тысяч токенов, шесть файлов
117-
разбираются дважды): было порядка 90 ГБ и недостижимо, стало 2.44 ГБ за 10.7
127+
94.5 раза, теперь — в 10.8. Весь компилятор (119 тысяч токенов, шесть собственных
128+
исходников `self/` разбираются дважды): было порядка 90 ГБ и недостижимо, стало 2.44 ГБ за 10.7
118129
секунды.
119130

120131
## Что это даёт

0 commit comments

Comments
 (0)