简体中文
English 简体中文 繁體中文
Methodox 首页

导出程序

你在 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

停靠栏的 Terminal 标签页位于工作区文件夹中,stew Hello.dvk 在其中打印出了 7

与在编辑器中一样,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…。