UStackUStack
Franz icon

Franz

Franz — функциональный язык программирования с лаконичным синтаксисом, прототипно-ориентированными объектами и компиляцией через LLVM IR для эффектов и замыканий.

Franz

Что такое Franz?

Franz — высокоуровневый, функциональный, интерпретируемый, динамически типизированный язык программирования общего назначения с лаконичным синтаксисом и развитой стандартной библиотекой. Основная цель — поддержка функциональных паттернов программирования с инструментами для управления эффектами и предсказуемого выполнения.

Проект представлен как прототипно-ориентированный язык с безопасными по возможностям эффектами и детерминированным воспроизведением, включая «строго без побочных эффектов» (с явным исключением для ввода-вывода). Также предусмотрён путь от исходного кода к нативным исполняемым файлам через LLVM IR.

Ключевые возможности

  • Функциональное ядро с прототипно-ориентированными объектами: использует небольшую функциональную основу и прототипно-ориентированные объекты для моделирования поведения, при этом сохраняя центр на функциональных конструкциях.
  • Безопасные по возможностям эффекты с детерминированным воспроизведением: разработаны для локализации и контроля эффектов из импортируемых файлов Franz.
  • Строго без побочных эффектов (с исключением для таблицы ввода-вывода): модель языка описывается как избегающая побочных эффектов, кроме явно упомянутого механизма ввода-вывода.
  • Нативная компиляция через LLVM IR: поддерживает прямую компиляцию к нативным исполняемым файлам с использованием LLVM IR.
  • Литералы списков и операции со списками в LLVM: включает синтаксис литералов списков, например [1, "hello", 3.14], и вложенные списки, плюс операции head, tail, cons, empty?, length, nth и is_list.
  • Примитивы сравнения и математики для распространённых типов: предоставляет операторы равенства и упорядочивания (is, less_than, greater_than) для целых чисел, чисел с плавающей точкой и строк, плюс математические функции remainder, power, random, floor, ceil, round, abs, min, max и sqrt.
  • Управление потоком и условные конструкции типа паттернов: предлагает конструкты if/when/unless и «цепочки cond» для многонаправленного ветвления в стиле паттерн-матчинга.
  • Лексическая область видимости с замыканиями на основе снимков: реализует лексическую область видимости, где замыкания تلتقط переменные из окружения на момент определения; поддерживает вложенные замыкания произвольной глубины.
  • Песочница на основе возможностей для импортируемого кода: использует паттерны исполнения в песочнице через use_with() и локализацию эффектов через use_as() и точечную нотацию (как описано в тексте репозитория).

Как использовать Franz

  1. Клонируйте или откройوا репозиторий Franz и изучите включённый README.md и примеры файлов (например, examples/mult-table.franz и examples/game-of-life.franz).
  2. Ознакомьтесь со стандартной библиотекой модулей, упомянутых в документации (String, Math, List, Func), чтобы увидеть доступные встроенные функции и операции со списками и комбинаторами списков.
  3. Следуйте паттернам лексической области видимости и замыканий, показанным в тексте репозитория, чтобы проверить, как замыкания تلتقط переменные и как ведут себя вложенные замыкания.
  4. Запустите скрипты репозитория для упражнений на реализации и дымовых тестах (репозиторий упоминает bash-скрипты, например scripts/run-comparison.sh и автоматизированные дымовые тесты).

Примеры использования

  • Создание кода для трансформации данных с функциональной обработкой списков: используйте литералы списков и операции со списками (например, паттерны типа map, как показано в тексте репозитория, плюс head/tail/nth и другие помощники для списков),来 манипулировать структурированными данными.
  • Реализация логики с множеством ветвей с помощью условных цепочек: используйте цепочки cond для ветвления в стиле паттерн-матчинга, когда вам нужна маршрутизация логики на основе сравнений целых чисел, числа с плавающей точкой или строк или защитных условий.
  • Написание кода высшего порядка с замыканиями: используйте комбинаторы модуля Func (например, compose2, apply и apply_twice) вместе с замыканиями на основе снимков для построения функциональных компонентов的可重复ного использования.
  • Демонстрация предсказуемой области видимости в маленьких программах: используйте лексическую область видимости и замыкания вложенной произвольной глубины для построения программ, где захваченные переменные должны оставаться стабильные по вызовам.
  • Прототипирование поведения языка с нативной компиляцией: компиляйте код Franz через pipeline LLVM IR для получения нативных исполняемых файлов, включая пути кода, которые упражняют операции со списками, математику, сравнения и управление потоком.

Альтернативы

  • Функциональные языки программирования с сильными системами типов (например, языки семейства ML): Если вам в первую очередь нужен функциональный синтаксис с предсказуемым скоупингом и замыканиями, но не требуется компиляция через LLVM IR как основной акцент.
  • Прототипно-ориентированные языки (например, JavaScript с функциональными паттернами): Подходит, если вас интересует прототипно-ориентированное моделирование объектов, хотя рабочий процесс и модель эффектов, описанные для Franz, отличаются.
  • Универсальные компилируемые языки с функциональными возможностями (например, языки, компилируемые через LLVM): Если вам нужна компиляция через LLVM IR и функциональные конструкции, но вы предпочитаете экосистему с другим синтаксисом и соглашениями времени выполнения.
  • Скриптовые языки для прототипирования с подходами к песочницам: Если ваш приоритет — быстрое экспериментирование с контролируемым выполнением (в репозитории обсуждаются паттерны безопасности на основе возможностей), вы можете выбрать другую среду выполнения, предлагающую собственные механизмы песочниц.

Альтернативы

AakarDev AI icon

AakarDev AI

AakarDev AI — это мощная платформа, которая упрощает разработку приложений ИИ с бесшовной интеграцией векторных баз данных, позволяя быстрое развертывание и масштабируемость.

Arduino VENTUNO Q icon

Arduino VENTUNO Q

Arduino VENTUNO Q — edge AI компьютер для робототехники: ускоренный вывод нейросетей и микроконтроллер для детерминированного управления. Через Arduino App Lab.

Devin icon

Devin

Devin — AI coding-агент для команд: помогает завершать миграции и крупные рефакторинги, выполняя подзадачи параллельно под контролем инженеров.

BenchSpan icon

BenchSpan

BenchSpan запускает AI agent бенчмарки параллельно, фиксирует результаты и ошибки в истории прогонов, помогает воспроизводить их по commit hash.

open-codex-computer-use icon

open-codex-computer-use

open-codex-computer-use — open-source служба «Computer Use» в виде MCP-сервера: AI-агенты управляют GUI на macOS, Linux и Windows.

Codex Plugins icon

Codex Plugins

Используйте Codex Plugins, чтобы объединять skills, интеграции приложений и MCP-серверы в повторно используемые сценарии для доступа к Gmail, Google Drive и Slack.