Franz 是什么?
Franz 是一种高级、函数式、解释型、动态类型、通用的编程语言,语法简洁且标准库内容丰富。其核心目标是支持函数式编程模式,同时提供管理副作用和可预测执行的工具。
该项目被定位为面向原型的语言,支持能力安全的副作用和确定性重放,包括“严格无副作用”(明确注明 IO 例外)。它还提供了通过 LLVM IR 从源代码到原生可执行文件的路径。
主要特性
- 函数式核心与面向原型对象:采用小型函数式基础加上面向原型对象来建模行为,同时保持语言以函数式构造为中心。
- 能力安全副作用与确定性重放:设计用于帮助本地化和控制从导入的 Franz 文件中产生的副作用。
- 严格无副作用(IO 表例外):语言模型被描述为避免副作用,仅明确提及 IO 机制作为例外。
- 通过 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
- 克隆或打开 Franz 仓库,查看随附的
README.md和示例文件(例如examples/mult-table.franz和examples/game-of-life.franz)。 - 查看文档中引用的标准库模块(String、Math、List、Func),了解可用的内置函数和列表/列表组合子操作。
- 按照仓库文本中展示的词法作用域和闭包模式,验证闭包如何捕获变量以及嵌套闭包的行为。
- 运行仓库提供的脚本,执行实现和冒烟测试(仓库提及的 bash 脚本如
scripts/run-comparison.sh和自动化冒烟测试)。
使用场景
- 使用函数式列表处理构建数据转换代码:使用列表字面量和列表操作(例如仓库文本中展示的
map式模式,以及head/tail/nth等列表辅助函数)来处理结构化数据。 - 使用条件链实现多分支逻辑:当需要根据整数/浮点数/字符串比较或守卫路由逻辑时,使用
cond链进行模式式分支。 - 使用闭包编写高阶代码:将“Func 模块”组合子(如
compose2、apply和apply_twice)与基于快照的闭包一起使用,构建可重复使用的函数式组件。 - 在小型程序中演示可预测的作用域:使用词法作用域和任意深度的嵌套闭包,构建捕获变量在调用间保持稳定的程序。
- 通过原生编译原型化语言行为:通过 LLVM IR 管道编译 Franz 代码,生成原生可执行文件,包括执行列表操作、数学、比较和控制流代码路径。
常见问题
-
Franz 是否无副作用? 仓库文本称“严格无副作用”,并明确注明 IO 表作为例外。
-
Franz 是否编译为原生可执行文件? 是。该项目描述称“通过 LLVM IR 直接编译为原生可执行文件”。
-
Franz 使用什么类型模型? Franz 被描述为动态类型并支持垃圾回收。
-
Franz 中的闭包捕获如何工作? 文档描述了词法作用域,其中闭包捕获定义时环境中的变量(基于快照的闭包),并支持任意深度的嵌套闭包。
-
仓库中包含哪些工具? 仓库包含
examples/下的示例、“冒烟测试”测试,以及用于运行比较和检查的脚本(详见页面内容)。
备选方案
- 具有强类型系统的函数式编程语言(例如 ML 系列语言):如果您主要需要函数式语法、可靠的作用域和闭包,但不将基于 LLVM 的本地编译作为重点。
- 基于原型的语言(例如采用函数式模式的 JavaScript):当您关注原型导向的对象建模时适用,但 Franz 所述的工作流和效应模型有所不同。
- 具有函数式特性的通用编译型语言(例如通过 LLVM 编译的语言):如果您需要 LLVM IR 编译和函数式构造,但希望采用不同语法和运行时约定的生态系统。
- 用于原型设计的脚本语言(采用沙箱机制):如果您优先考虑快速实验和受控执行(仓库中讨论了基于能力的安全模式),可以选择提供自身沙箱机制的其他运行时。
替代品
AakarDev AI
AakarDev AI 是一个强大的平台,通过无缝的向量数据库集成简化 AI 应用程序的开发,实现快速部署和可扩展性。
Arduino VENTUNO Q
Arduino VENTUNO Q 边缘AI电脑,集成AI推理与微控制器确定性控制;用 Arduino App Lab 打通嵌入式、Linux与边缘AI开发。
Devin
Devin 是 AI 编程代理,帮助软件团队并行完成代码迁移与大规模重构子任务;工程师负责项目管理并批准改动。
BenchSpan
BenchSpan 支持 AI agent 基准并行运行,自动记录得分与失败并整理运行历史;按提交标签复现,减少失败重跑浪费的 token。
open-codex-computer-use
open-codex-computer-use 是开源“电脑使用”服务的 MCP 服务器封装,让 AI 代理在 macOS/Linux/Windows 上执行桌面 GUI 操作。
Codex Plugins
使用 Codex Plugins 将技能、应用集成和 MCP 服务器打包成可复用工作流,扩展 Codex 访问 Gmail、Google Drive 与 Slack 等工具。