导出程序
你在 Divooka Compute 中编写的文档就是一个程序:它可以在没有编辑器的情况下,从命令行、脚本、计划任务或服务器中运行。Publish 会将其构建为一个独立的程序,可以在未安装 Divooka Compute 的地方运行;stew 以 stew.exe 的形式随附在 Divooka Compute 的文件夹中,可以直接运行文档本身。
发布程序
工具栏右侧的 Publish 会将当前位于前台的文档构建到一个文件夹中,其中包含一个独立的程序——一个以文档命名的可执行文件,以及它运行所需的一切。该功能适用于已保存到文件的文档。其卡片如下:
| 字段 | 说明 |
|---|---|
| Name | 程序的名称:即其可执行文件和程序集的名称。初始值为文档的名称。 |
| Version | 标记在程序上的版本,由数字和点组成:1.0.0。 |
| Author、Copyright、Description | 同样标记在程序上;作者和描述的初始值取自文档。 |
| Folder | 程序写入的位置。 |
| Icon | 用于生成程序图标的图片——PNG、JPEG、BMP、GIF、TGA、WebP 或 ICO——留空则不使用图标。非正方形的图片会居中放置而不是拉伸。 |
| Platform | 当文档的 Targets 指定了 Windows 或 Linux 时显示:程序要为其中哪个系统构建,当前系统排在最前。 |
| Prefer Native AOT | 在允许的情况下将程序编译为本机代码——一个体积小、启动迅速的文件夹。在不允许的情况下,程序会以自包含(self-contained)方式构建,卡片会说明原因。本机代码只能为你发布时所在的系统构建。 |
| Self-contained | 携带 .NET 运行时,因此程序可以在未安装 .NET 的地方运行。关闭时,程序会小得多,但运行的地方需要 .NET 10。 |
按 Publish:停靠栏的 Publish 标签页会显示每个阶段,最后给出生成的结果——Published Calculator: Native AOT, 16 files, 7.2 MB——其中的文件夹按钮可以打开程序所在的文件夹。卡片会在这台计算机上记住你为每个文档所做的选择。
程序最终成为什么,由文档自己在其自身的图上——大纲中的 Document——的 Properties 中决定:
- Application kind:Program 在命令窗口中运行,并在其中读取和打印;Desktop Application——计算器、游戏、故事——会打开自己的窗口,不带命令窗口。会打开自己窗口的示例——GUI 和 Glaze 示例、视觉小说、光线追踪器——都是 Desktop Application。
- Targets:文档面向的系统——Windows、Linux、Android、Arduino Uno——每个系统一个开关;对于未作说明的文档则全部关闭。Publish 在 Platform 下提供 Windows 和 Linux。为另一个系统构建时,程序是否自包含取决于其开关的设置,Native AOT 对其关闭,并且卡片会列出其包在该系统上使用、而本发行版未携带的任何本机库。
这两项都保存在文档中,每次更改都是 Ctrl+Z 可以撤消的一个步骤。
由框架运行的程序——GUI、Glaze 游戏、Novella 故事、状态机——与其他程序一样构建为本机代码。
使用 stew 运行文档
按 Ctrl+Shift+` 打开停靠栏的 Terminal 标签页:它会从屏幕上文档所在的工作区文件夹启动,在那里可以直接通过名称调用 stew。在其他任何命令行中,请使用 Divooka Compute 文件夹中 stew.exe 的完整路径,或将该文件夹添加到你的 PATH 中。
stew Hello.dvk
stew 会像编辑器那样打开文档,并像编辑器的 Run 那样运行它,在运行过程中打印文档所打印的内容——在这里是 7。除非另有指定,它会以编译方式运行;--mode interpreted 则改为逐个节点运行:
stew --mode interpreted Hello.dvk

与在编辑器中一样,Flows 入口图会运行其 active 节点,因此请在保存之前将产生程序输出的节点标记为 active。
输入
一次运行所接收的内容,就是入口图所声明的内容:Function 的输入,或 Routine 的 Begin 所声明的值。在 stew --help 后面跟上一个文档,会说明运行从哪个图开始、按什么顺序接收哪些内容,以及如何运行它:
> stew --help Examples/Benchmarks/Mandelbrot.dvk
Mandelbrot.dvk runs 'Graph' (Routine).
Inputs (in declaration order):
Width: Number (Double), default 80
Height: Number (Double), default 80
MaxIteration: Number (Double), default 80
To run it:
stew Examples/Benchmarks/Mandelbrot.dvk
stew Examples/Benchmarks/Mandelbrot.dvk 80 80 80
stew --mode interpreted Examples/Benchmarks/Mandelbrot.dvk
文档后面给出的值会按该顺序绑定到各个输入,省略的输入则使用其默认值;包含空格的值请加引号。Flows 或 Events 入口不声明任何输入,文档后面的内容会作为程序的参数传递给它。
运行结束时
成功完成的运行以 0 退出,并列出入口图返回的内容;失败的运行会打印失败信息并以 1 退出。其他代码有:2 表示 stew 无法解读命令行,130 表示运行被 Ctrl+C 停止——第一次 Ctrl+C 会像编辑器的 Stop 那样停止运行,第二次则立即结束 stew。调用 stew 的脚本可以检查该代码,以判断程序是否正常运行。
在 stew --measure 后面跟上文档,会照常运行它,然后在标准错误输出上报告每个阶段——打开、准备、编译、运行——所花费的时间和所用的资源,不会影响程序自身的输出。单独使用 stew --help 会列出所有选项,以及可以让带窗口的文档(游戏、GUI)在没有窗口的情况下运行的环境变量。
打包文档以便交付
读取其旁边文件的文档——图像、表格、它引用的另一个文档——需要将这些文件一并带上。stew --pack 会将一个文档及其文件夹中的所有内容放入一个 Divooka app bundle(Divooka 应用包),即单个 .dvb 文件:
stew --pack Hello.dvk Hello.dvb
stew 会说明它打包了多少个文件以及放在哪里。该文档成为包的入口,文件夹中的其他每个文件都保持在其旁边的原有位置。如果没有指定包的名称,stew 会在文件夹旁边写入一个以该文件夹命名的包。包的运行方式与文档相同——stew Hello.dvb——它会在运行期间解包,运行结束后删除,因此可以复制到另一台装有 Divooka Compute 的计算机上,像在这里一样运行。
提供笔记本服务
Divooka Notebook 文档——由 Events 图布局的网页,其单元格由文档的 Function 来响应——通过同样随附在该文件夹中的 dvn 共享:dvn "My Notebook.dvk" 0.0.0.0:5080 会将其提供给你的本地网络,直到按下 Ctrl+C。请参阅 Divooka Notebook。
图的图片
要将图放入幻灯片、文档或消息中,请按 Ctrl+P 或工具栏上的相机按钮。Snapshot 卡片提供以屏幕两倍分辨率、缩放至适合大小的整个图——Graph on the grid、Graph on a plain background、Graph transparent 和 Graph transparent with grid——或按当前状态截取的 The whole window。选择其中一项,然后按 Save PNG…。