Repository navigation
flang 0.7.32 — Пакеты ставятся командой flang install; сервер по умолчанию слушает только 127.0.0.1; верное постусловие «для всех … таких что» снова проходит
LatestПакеты ставятся командой flang install; сервер по умолчанию слушает только 127.0.0.1; верное постусловие «для всех … таких что» снова проходит
Что появилось
flang installставит пакет по имени.flang install main.flang 'Логика: не ниже 1.0'берёт список реестра, выбирает наибольшую подходящую версию, сверяет sha256 пакета, кладёт файл рядом с программой, проверяет его и пишет замокflang.lock. Ответ:поставлено пакетов: 1и строкаЛогика 2.0.0 → logic.flang-package: доказано 4 из 7 обязательств. Нужда дописывается вflang.needs, и следующийflang install main.flangбез имён ставит всё из него.- Откуда берётся список пакетов. Ключ
--registry <адрес>(http://, https:// или путь к файлу), иначе ключregistryв ближайшем.flangrc, иначе список на GitHub. Пакет, в котором есть закон или «объявлено, не доказано», ставится только с--accept-unproven. Ошибки установки — кодыFLANG_INSTALL_*, код возврата 1. flang run --argsпринимает списки, записи и варианты.flang run sum.flang --function "Сумма" --args '{"числа":[1,2,3,4]}'печатает10. Раньше — отказ «ждался плоский объект скаляров». Значение не того типа внутри списка —FLANG_TYPE: вызов функции «Сумма»: аргумент «числа»[1] не соответствует типу число, код 1.- Ошибки в изоморфизмах и функторах называют стрелку и объект. Перепутанная или необъявленная стрелка изоморфизма —
FLANG_ISO_MISMATCH, объект безединица—FLANG_ISO_IDENTITY_MISSING, функтор без образа объекта —FLANG_FUNCTOR_OBJECT_MISSING. Во всех трёх случаях код 1, и сообщение называет стрелку или объект.
Что изменилось
- Сервер, который открывает программа, слушает только 127.0.0.1. Порт, открытый программой под
flang io, принимает соединения только с этой же машины. Чтобы слушать все адреса, задайте переменную:FLANG_LISTEN_ADDRESS=0.0.0.0 flang io server.flang. Неверное значение — ошибкаFLANG_IO_NET:адрес привязки «nowhere» из FLANG_LISTEN_ADDRESS не годится: нужен адрес IPv4, вроде 127.0.0.1 или 0.0.0.0. - Верное постусловие с «для всех … таких что» снова проходит.
для всех н таких что н не меньше 0 обеспечивает «сдвиг неотрицателен» результат не меньше 0у функции с теломн—проверено … замечаний нет. В 0.7.31 проверка пробовала входн = -1, который ограничение исключает, и отвергала верную программу. Обход из заметки к 0.7.31 больше не нужен. - Литерал
u64— до 2^64 − 1.дано а равно u64 18446744073709551615проходит. Раньше литерал выше 2^53 − 1 давалFLANG_TYPE: аргумент «а» не соответствует типу u64. - Граница из
требуетсравнивается точно. Изтребует а не больше 18446744073709551615больше не доказываетсяобеспечивает результат не больше 18446744073709550592: оба числа раньше округлялись до 2^64 и считались равными. - Ноль от умножения, деления и остатка — всегда +0.
(-12 остаток от 6) равен 0—даи в проверке, и в напечатанном коде;0 умножить на -5и0 делить на -5тоже дают +0. Минус ноль, пришедший на вход, остаётся минус нулём: «Целая часть» от-0—-0, какMath.truncиtruncв C. - Функция, которая никогда не возвращает значение, собирается в C и C++ с
-Werror. Раньше компилятор C отвергал напечатанный файл предупреждением о неиспользованном результате. - Имена напечатанных файлов. Модуль с латинским именем даёт файл с этим именем; любой другой —
program.*(FlangProgramв Java и C#). Раньше имя транслитерировалось: модуль «Привет» печатался вprivet.py, теперь — вprogram.py. flang --mcp-modeсообщает версию двоичного. В ответе наinitializeстоит та же версия, что печатаетflang --version.- Ответ по HTTPS больше 20 000 байт принимается. Раньше такой ответ обрывался ошибкой
FLANG_RECURSION_LIMITв клиенте TLS. Теперь проходит ответ до 1 МБ (предел ответа поhttps— 1 048 576 байт). - Ответ HTTP и HTTPS по частям собирается целиком. Тело с
Transfer-Encoding: chunkedсклеивается из частей; оборванное или испорченное — ошибкаFLANG_IO_NET. flang newработает после установки. Образец спецификации, который копируетflang new, ставится вместе с flang (архив, deb, rpm, AUR, Homebrew) вshare/flang-fspec.- Плагин Neovim и Vim. По умолчанию плагин берёт
flang lspиз PATH, еслиflang --versionне ниже 0.7.25. Настройки называютсяg:flang_binary_lsp(1 — всегда, 0 — никогда) иg:flang_no_setup; старые имена тоже читаются. Корнем проекта языковой сервер получает каталог проекта, а не<проект>/.git.
Что сломалось
- Функция без строки
возвращает— ошибка. Раньше она проходилаcheckкодом 0. Теперь —FLANG_PARSE … у функции «Удвоить без типа» нет строки 'возвращает': тип результата обязателен, код 1. Как починить: допишитевозвращает <тип>после строкипринимает. - Сервер программы не виден с других машин. Если к вашему серверу под
flang ioходят снаружи, запускайте его сFLANG_LISTEN_ADDRESS=0.0.0.0. - Изоморфизм с перепутанной стрелкой и объект без
единица— ошибки. Раньшеcheckне находил в них ошибки. Как починить: сообщение называет стрелку или объект — разверните стрелку или объявитеединица. - Имена файлов печати сменились. Сборка, которая ждала
privet.pyили похожий транслит, найдётprogram.py. Как починить: возьмите новое имя или назовите модуль латиницей.
Описание языка
Разделы DESCRIPTION.md, изменённые с v0.7.31:
- Команды
Packages are installed with flang install; servers listen on 127.0.0.1 by default; a correct «для всех … таких что» postcondition passes again
What appeared
flang installinstalls a package by name.flang install main.flang 'Логика: не ниже 1.0'(Logic, at least 1.0) reads the registry list, picks the highest matching version, checks the package's sha256, puts the file next to the program, checks it and writes the lock fileflang.lock. Output:поставлено пакетов: 1(1 package installed) and the lineЛогика 2.0.0 → logic.flang-package: доказано 4 из 7 обязательств(4 of 7 obligations proved). The need is added toflang.needs, and a laterflang install main.flangwith no names installs everything from it.- Where the package list comes from. The flag
--registry <address>(http://, https:// or a file path), else the keyregistryin the nearest.flangrc, else the list on GitHub. A package that carries a law or a claim «объявлено, не доказано» (declared, not proved) is installed only with--accept-unproven. Install errors are theFLANG_INSTALL_*codes, exit code 1. flang run --argstakes lists, records and variants.flang run sum.flang --function "Сумма" --args '{"числа":[1,2,3,4]}'prints10. Before, it was refused: a flat object of scalars was expected. A value of the wrong type inside a list isFLANG_TYPE: вызов функции «Сумма»: аргумент «числа»[1] не соответствует типу число(argument numbers[1] does not match type number), exit code 1.- Errors in isomorphisms and functors name the arrow and the object. A swapped or undeclared arrow of an isomorphism is
FLANG_ISO_MISMATCH, an object withoutединица(identity) isFLANG_ISO_IDENTITY_MISSING, a functor without the image of an object isFLANG_FUNCTOR_OBJECT_MISSING. All three exit with code 1, and the message names the arrow or the object.
What changed
- A server opened by a program listens on 127.0.0.1 only. A port that a program opens under
flang ioaccepts connections from the same machine only. To listen on all addresses, set the variable:FLANG_LISTEN_ADDRESS=0.0.0.0 flang io server.flang. A wrong value is the errorFLANG_IO_NET: the bind address «nowhere» from FLANG_LISTEN_ADDRESS is not an IPv4 address such as 127.0.0.1 or 0.0.0.0. - A correct «для всех … таких что» postcondition passes again.
для всех н таких что н не меньше 0 обеспечивает «сдвиг неотрицателен» результат не меньше 0(for all n such that n ≥ 0, the result is ≥ 0) on a function whose body isнisпроверено … замечаний нет(checked, no remarks). In 0.7.31 the check tried the inputн = -1, which the restriction excludes, and refused a correct program. The workaround from the 0.7.31 notes is no longer needed. - A
u64literal goes up to 2^64 − 1.дано а равно u64 18446744073709551615passes. Before, a literal above 2^53 − 1 gaveFLANG_TYPE(argument a does not match type u64). - A bound from
требует(requires) is compared exactly.требует а не больше 18446744073709551615no longer provesобеспечивает результат не больше 18446744073709550592: both numbers used to round to 2^64 and count as equal. - A zero product, quotient or remainder is always +0.
(-12 остаток от 6) равен 0(remainder equals 0) isда(yes) in the check and in printed code;0 умножить на -5and0 делить на -5give +0 too. A minus zero that comes in as input stays minus zero: «Целая часть» (whole part) of-0is-0, likeMath.truncand Ctrunc. - A function that never returns builds in C and C++ with
-Werror. Before, the C compiler refused the printed file with a warning about an unused result. - Names of printed files. A module with a Latin name gives a file of that name; any other gives
program.*(FlangProgramin Java and C#). Before, the name was transliterated: the module «Привет» was printed toprivet.py, now toprogram.py. flang --mcp-modereports the version of the binary. The answer toinitializecarries the same version asflang --version.- An HTTPS answer above 20 000 bytes is accepted. Before, such an answer stopped with
FLANG_RECURSION_LIMITin the TLS client. Now answers up to 1 MB pass (the limit of anhttpsanswer is 1 048 576 bytes). - A chunked HTTP or HTTPS response is put back together. A body with
Transfer-Encoding: chunkedis joined from its chunks; a cut or broken one is the errorFLANG_IO_NET. flang newworks after an install. The spec template thatflang newcopies is installed with flang (archive, deb, rpm, AUR, Homebrew) intoshare/flang-fspec.- The Neovim and Vim plugin. By default it uses
flang lspfrom PATH whenflang --versionis 0.7.25 or newer. The settings areg:flang_binary_lsp(1 always, 0 never) andg:flang_no_setup; the old names are still read. The language server gets the project directory as its root, not<project>/.git.
What broke
- A function without a
возвращает(returns) line is an error. Before,checkpassed it with code 0. Now it isFLANG_PARSE … у функции «Удвоить без типа» нет строки 'возвращает': тип результата обязателен(the result type is required), exit code 1. To fix: addвозвращает <type>after theпринимаетline. - A program's server is not reachable from other machines. If your server under
flang iois used from outside, start it withFLANG_LISTEN_ADDRESS=0.0.0.0. - An isomorphism with a swapped arrow, and an object without
единица, are errors. Before,checkfound no error in them. To fix: the message names the arrow or the object — turn the arrow around or declareединица. - Names of printed files changed. A build that expected
privet.pyor a similar transliteration will findprogram.py. To fix: use the new name or give the module a Latin name.
Страница выпусков: по-русски · in English.
Архив flang-0.7.32-c.tar.gz — исходники C99 и Makefile: make && sudo make install, Node не нужен. Или brew install digitable-lol/tap/flang.