Compilation / 编译
你每次改动草图,vvvv 都会即时编译它,并把正在运行的程序同步更新。我们把这叫「Hotswap」—— 是的,它和你可能听过的 .NET Hot Reload 是类似的东西,只不过在 vvvv 里它是自动的、一直在发生的,而且你多半察觉不到。
编译器工作时,编辑器左上角、Quad 菜单下方会出现一个小指示灯:
| 指示灯颜色 | 含义 |
|---|---|
| 灰色 | 正在构建符号 |
| 橙色 | 正在生成 C# 代码 |
即时编译大多数时候完全没有存在感,但当你在做大型项目或节点库、而所有 .vl 文件都得被持续纳入改动检测时,它会造成明显的卡顿。为此 vvvv gamma 5.0 引入了只读包的概念。
Read-only packages / 只读包
只读包里的草图不参与即时编译。这样它们就以优化过的方式运行,和你导出之后的效果一样。除了执行更快,编译器不必再操心它们这件事本身也省下了 CPU 周期,还让 vvvv 整体的内存占用更小,从而减轻了垃圾回收的压力。
Restrictions in read-only packages / 只读包里的限制
属于只读包的草图,顶上会有这样一条横幅:

在只读的草图里,注意以下限制:
- 提示框不会显示草图里流动的数据
- 你做的任何修改都不会生效
如果你确实改了并保存,这些改动要等到下次启动 vvvv 时才会被发现,届时会触发该草图的一次性重新编译。
What makes a package read-only? / 什么样的包是只读的?
默认情况下所有包都是只读的。 这让 vvvv 的启动时间和内存占用都有明显改善。
具体包括:
Editable packages / 可编辑的包
你想让某些包脱离「默认只读」,最可能的原因是:你通过源码包仓库(英文)引用了它们,就是为了改它们。
这种情况下,启动 vvvv 时要加上命令行参数(英文) editable-packages。下面这个例子让所有以 “VL.Devices” 开头的包、以及 “VL.Audio” 这个包都退出预编译:
--editable-packages VL.Devices*;VL.Audio
备注
另外,凡是依赖于你所指定的这些包的包,也会一并变成可编辑的。