Об этом проекте
kanso (簡素) — это язык программирования, построенный на идее о том, что исходный файл должен содержать только решения. Все, что обычно контролируется руководством по стилю, линтером или код-ревью, здесь обеспечивается компилятором: неканоничные пробелы, отступы или размещение пустых строк являются синтаксической ошибкой, имена используют snake_case, объявления и поля записей упорядочены по алфавиту, а перегрузки располагаются рядом, начиная с наиболее специфичных. Поскольку каждая программа имеет ровно один канонический вид, форматтер отсутствует.
Семантика, подчеркнутая в README, включает чистоту и эффекты как описания: print и оператор последовательности >> создают описание работы, которое исполняет среда выполнения, а команда check с флагом --plan показывает это описание вместо выполнения. Ошибка является значением, а не исключением: err reason и none распространяются до тех пор, пока перегрузка не обработает их, поэтому деление на ноль и выход индекса за пределы диапазона возвращают значения вместо сбоя. Диспетчеризация работает с литералами, конкретными типами и дженериками, начиная с наиболее специфичных. Язык поддерживает типы записей с одним конструктором и типизированными полями, позиционное конструирование и деструктуризацию в позиционной форме и форме подмножества ключей; применение через плотное прилегание без запятых; целые числа произвольной точности; интерполяцию строк; списки с индексацией с 1; dot pipe, где передаваемое значение становится первым аргументом; и лямбда-выражения. Дополнительные проверки во время компиляции отклоняют неиспользуемые привязки, неиспользуемые выражения, перепривязку до использования и перекрытие объявленных функций, типов или встроенных средств. Индексация xs[i] или m[k] является строгой, в то время как at xs выражает ожидаемое отсутствие.
Модули представляют собой директории: модуль охватывает любое количество файлов, разделяющих одно пространство имен, имена с префиксом подчеркивания являются приватными для модуля, а неиспользуемое приватное объявление считается ошибкой. В README подчеркивается, что корпус ошибок в tests/golden так же важен, как и корпус успешных тестов.
Раздел v0 перечисляет признанные приближения и открытые вопросы: правило конечной точки проверяется во время выполнения, а не компиляции; параметры дженериков никогда не привязывают err или none; канонический порядок объявлений является интерпретацией; цель pipe парсится как одно приложение, и невызываемая цель приводит к сбою во время выполнения; форма if является предварительной; нативный int — это int64, и переполнения фиксируются как дефект в скомпилированных бинарных файлах, в отличие от bigint интерпретатора. Еще не реализованы typesets, обновление записей, области сборки (build regions), процессы, полиморфизм эффектов и LSP.
Поддержка редакторов представлена одним TextMate-бандлом, который можно использовать в IDE JetBrains и VS Code для файлов .kso. Разработка ведется с использованием cargo test, охватывающим юнит-тесты и корпус golden-файлов; проект распространяется под лицензией MIT. Документация, спецификация и заметки компилятора опубликованы на сайте GitHub Pages.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.