手册目录

项目结构

Feng 项目由一个 feng.fm 清单、源文件目录和构建输出目录组成。

典型布局

myapp/
├── feng.fm
├── src/
│   ├── main.ff
│   ├── model.ff
│   └── service.ff
└── build/

src/build/ 是默认值,可以在清单中修改。源文件路径不决定模块名;模块由每个文件开头的 module 声明决定。

feng.fm

最小可执行项目:

[package]
name: "myapp"
version: "0.1.0"
target: "bin"
src: "src/"
out: "build/"

最小库项目把 target 改为 "lib"。开发清单可包含四个节:

  • [package]:名称、版本、目标、源码目录、输出目录和目标平台。
  • [dependencies]:精确版本或本地路径依赖。
  • [assets]:构建时复制的资源目录。
  • [registry]:当前项目使用的包源。

清单使用自身的节式文本语法,不应当按 TOML、YAML 或 INI 解析。

模块与文件

open module myapp.user;

open type User {
  let name: string;
}

一个文件只能属于一个模块,同一模块可以分布在多个文件中。每个文件独立声明需要的 import

建议按职责拆分文件和模块,但不要依赖目录层级提供可见性。真正的包外边界由 open module、顶层 open 和成员可见性共同决定。

输出目录

项目构建会为每个目标平台创建独立目录:

build/<platform>/
├── bin/    # 可执行目标
├── lib/    # 库目标
├── mod/    # 符号表
├── obj/    # 中间对象
└── ...

库打包产物位于 build/pkg/<name>-<version>.fb。构建目录是生成内容,不应提交或手动维护。