用途:XVCL 是面向 Fastly VCL 的转译器,为 VCL 增加元编程能力。编写 .xvcl 文件,编译成标准 .vcl,再用 Falco 本地测试或部署到 Fastly。所有 XVCL 构造在编译期解析,无运行时开销。
主要能力:常量 #const(支持类型、表达式、列表、元组);模板表达式 {{ }} 及 range、len、str、int、hex、format、enumerate、min、max、abs 等内置函数;#for/#endfor 循环(含元组解包、enumerate);#if/#elif/#else/#endif 条件;#let 变量简写;#def/#enddef 函数(支持单值与元组返回);#inline/#endinline 零开销内联宏;#include 包含(相对路径或 -I 搜索路径,含 include-once 与循环检测)。
使用方式:编译需 uvx(由 uv 提供),本地检查用 Falco。示例:uvx xvcl main.xvcl -o main.vcl;falco lint main.vcl;falco simulate main.vcl(默认监听 localhost:3124)。编译选项包括 -o/--output、-I/--include、--debug/-v、--source-maps、--error-format。
适用场景:编写 Fastly VCL 脚本、数据驱动路由与重定向(建议用 #for 填充 VCL table 以获得 O(1) 查找)、本地运行与测试 VCL。
限制与注意:常量仅编译期存在,须用 {{NAME}} 输出;后端名须用 F_ 前缀,不可用 backend default;每个子程序需 #FASTLY 宏;VCL 无取模运算符;Vary 须在 vcl_fetch 设置;falco 测试中 req.url.path 只读;req.request 已弃用;Cookie 解析建议用 subfield。不适用于调试无 XVCL 的 .vcl、Fastly API/CLI 操作、Fastly Compute 或 Terraform。若用户明确要求纯 VCL,则保留 .vcl 不引入 XVCL。