繁體中文
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…。