flang компилятор доказывает, что программа не зациклится 0.6.2 GitHub English

Как учить язык дальше

Это порядок чтения: восемь шагов от установки до своей первой настоящей программы. У каждого шага сказано, что вы после него умеете, какую страницу читать и какой командой проверить, что шаг взят. Порядок не обязателен, но он выведен из того, чем одно опирается на другое: третий шаг не читается без второго.

Дорога: что за чем1 поставить2 первая программа3 учебник4 своя задача5 справочник6 что доказывается7 разговор с миром8 наружу: печать и пакеты
Дорога: что за чем

1. Поставить

После шага: команда flang отвечает на --version.

Читать — Установка. Путей четыре; самый короткий — одна команда Homebrew, без Node и без сборки исходников.

flang --version

2. Первая программа

После шага: вы написали файл, проверили его и запустили функцию.

Читать — Первая программа. Там та же пятиминутка, что на главной, но подробно и до печати программы в C.

flang check hello.flang
flang run hello.flang --function Удвоить --args '{"н": 21}'

Первое, обо что здесь спотыкаются: примеры лежат внутри функции и прогоняются при каждой проверке файла. Отдельного каталога тестов нет и не будет.

3. Учебник — шесть глав

После шага: вы понимаете, почему нет циклов, чем разбор отличается от свёртки и что именно обещает слово тотальная.

Читать — Учебник. Шестая глава доводит до утверждения, принятого ядром доказательств; на ней стоит остановиться и не спешить дальше.

Три привычки, которые здесь придётся отложить, и это главное содержание шага:

привычкачто вместо неё
циклсвёртка или рекурсия
изменить элемент на местепостроить новое значение
бросить исключениевернуть отказ значением

4. Своя задача

После шага: вы написали программу, которую не списали.

Возьмите задачу, которую уже решали на другом языке — факториал, Фибоначчи, проверку палиндрома, — и напишите её заново словами flang, с примером внутри каждой функции.

Если проверка отказала словом FLANG_NOT_TOTAL — это не поломка, а разговор: компилятор не увидел, почему рекурсия кончается. Что он принимает за убывание, разобрано в Что даёт признак «тотальная».

5. Справочник — когда дорожка кончилась

После шага: вы находите нужную форму записи, не спрашивая никого.

6. Что доказывается, а что нет

После шага: вы отличаете доказанное от прогнанного и не путаете одно с другим.

Это середина языка, и здесь стоит задержаться дольше всего.

Короткая правда, ради которой шаг и стоит здесь: завершаемость доказывается массово, а поведение — редко. Остальное проверено прогоном по сетке значений, и отчёт называет это словом «сетка», а не «доказано».

7. Разговор с миром

После шага: вы понимаете, откуда в чистом языке берутся файлы, сеть и время.

Программа на flang не делает действий — она возвращает их описания, а исполняет их тот, кто программу запустил. Из этого вырастает всё остальное:

8. Наружу: печать, встраивание, пакеты

После шага: ваша программа работает внутри чужой системы.

Если застряли

Компилятор отвечает не «ошибка», а именем беды и разбором:

flang check файл.flang         # что не сошлось
flang check файл.flang --proof # что именно доказано, а что нет
flang --help                   # двенадцать команд и что каждая делает

Отказ начинается с имени: FLANG_TYPE, FLANG_NOT_TOTAL, FLANG_PROOF_INDUCTION_STEP. Имена, которые начинаются с FLANG_PROOF_, — это отказы ядра доказательств, и они разобраны поимённо на странице Ядро отказало: чья это ошибка. Остальные названы в man flang, раздел ДИАГНОСТИКА.