DigitableCourses
Настройки портала
Показать возможности портала

Локально и без аккаунта. Аккаунта нет, регистрация не нужна: введённое в инструменты остаётся в localStorage браузера и на сервер не уходит.

Свой счётчик считает открытия страниц и дочитывания: уезжает адрес и десятая доля текста. Без cookies и чужих счётчиков, IP не хранится, Do Not Track уважается. Как это проверить

Репозиторий портала не выложен, «открытым кодом» мы его не зовём. Открыто это:

Живёт портал на донатах, платных консультациях и разборах по запросу и покупке Workbench.

Планов делать курсы платными нет.

flang

Язык, в котором функция несёт свои тесты и обещания, а компилятор доказывает, что она завершается и держит обещания. Проверка — прямо в браузере.

flang 0.7.32

Нажмите «Проверить». Первая проверка скачает компилятор flang 0.7.32 со страниц языка — около 10 МБ, дальше он берётся из кеша. Текст программы остаётся во вкладке.

Язык за минуту

flang — язык со словесным синтаксисом. Функция в нём несёт свои тесты (пример) и обещания (обеспечивает, требует), а компилятор проверяет их до запуска:

  • завершение — у функции с пометкой тотальная компилятор доказывает, что она заканчивается на любом входе;
  • примеры — flang check вычисляет каждый пример и падает, если ответ не совпал;
  • обещания — flang check --proof доказывает постусловие для всех входов или прямо говорит «не доказано»;
  • печать — flang emit превращает программу в исходник на C, Go, Rust, Python, Java, C#, Elixir, JavaScript или TypeScript.
модуль «Скидки»

тотальная функция «Скидка»
  принимает сумма: неотрицательное
  возвращает неотрицательное
  обеспечивает «скидка не больше суммы» результат не больше сумма
  пример «крупный заказ»
    дано сумма равно 12000
    ожидается 500
  если сумма не меньше 10000
    то 500
    иначе 0

Здесь компилятор вычислит пример, докажет, что функция завершается, и докажет обещание «скидка не больше суммы» для любой суммы: в ветке то он знает, что сумма не меньше 10 000, а значит не меньше 500.

Установка

Одна команда: скрипт ставит flang 0.7.32 в ~/.local/bin и сверяет архив с SHA256SUMS выпуска. Компилятор C и sudo не нужны.

curl -fsSL https://raw.githubusercontent.com/digitable-lol/flang/main/install.sh | sh

Или через Homebrew:

brew install digitable-lol/tap/flang-package
flang check file.flangразбор, типы, завершение, примеры
flang check file.flang --proofто же плюс доказательство обещаний
flang run file.flang --function «Total»вычислить функцию и напечатать значение
flang emit file.flang --target goнапечатать программу на другом языке
flangинтерактивная оболочка
Запасной путь: сборка из исходников выпуска 0.7.32 (нужны компилятор C и make)
curl -fsSLO https://github.com/digitable-lol/flang/releases/download/v0.7.32/flang-0.7.32-c.tar.gz
mkdir flang && tar -xzf flang-0.7.32-c.tar.gz -C flang
make -C flang
./flang/flang check program.flang --proof

Каталог установки меняет PREFIX, версию — FLANG_VERSION. Остальные способы — asdf, пакеты deb и rpm — в описании установки.

Куда дальше