匯出程式
你在 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…。