1.3. 命令行功能
本节介绍 wa
命令主要功能。
1.3.1. 帮助信息
输入 wa
命令或 wa -h
可查看命令行帮助信息,如下:
$ wa
NAME:
Wa - Wa is a tool for managing Wa source code.
USAGE:
wa [global options] command [command options] [arguments...]
VERSION:
v0.8.1-mvp
COMMANDS:
play start Wa playground
init init a sketch Wa module
build compile Wa source code
run compile and run Wa program
fmt format Wa source code file
test test Wa packages
yacc generates parsers for LALR(1) grammars
logo print Wa text format logo
GLOBAL OPTIONS:
--debug, -d set debug mode (default: false)
--trace value, -t value set trace mode (*|app|compiler|loader)
--help, -h show help (default: false)
--version, -v print the version (default: false)
COPYRIGHT:
Copyright 2018 The Wa Authors. All rights reserved.
See "https://wa-lang.org" for more information.
主要有以下子命令:
- play:启动本地版本的 playground;
- init:初始化一个凹语言工程;
- build:编译凹语言程序;
- run:编译并执行凹语言程序;
- fmt:格式化凹语言源代码文件;
- test:执行凹语言工程的单元测试;
- yacc:凹语言版本的 yacc,用于生成 LALR(1) 语法规则的解析器代码;
- logo:打印凹语言文字版本的Logo。
其中 build 命令在 1.1.1 节展示过,play 命令已经在 1.2.5 节展示过,本节简要介绍之外的子命令。
1.3.2 初始化工程
在 1.1.1 节已经展示过 wa run hello.wa
执行一个独立文件的凹语言程序。但是单文件的凹语言程序有一个巨大的限制——它只有一个文件且不能引用非标准库的代码。对于更大的凹程序推荐用凹工程的方式组织。
使用 wa init
命令可以初始化一个凹工程,先看看命令行帮助:
$ wa init -h
NAME:
wa init - init a sketch Wa module
USAGE:
wa init [command options] [arguments...]
OPTIONS:
--name value, -n value set app name (default: "hello")
--pkgpath value, -p value set pkgpath file (default: "myapp")
--update, -u update example (default: false)
--help, -h show help (default: false)
该命令有 -name
和 -pkgpath
两个重要的参数,分别对应工程的名字和对应的包路径。每个参数都有默认值,可以用 wa init
生成一个 hello 工程。
$ wa init
$ tree hello
hello
├── LICENSE
├── README.md
├── src
│ ├── main.wa
│ ├── mymath
│ │ └── math.wa
│ ├── mypkg
│ │ └── pkg.wa
│ └── zz_test.wa
├── vendor
│ └── 3rdparty
│ └── pkg
│ └── pkg.wa
└── wa.mod
7 directories, 8 files
工程的结构在 1.4 节介绍。
1.3.3 编译和执行
命令行环境进入 hello 目录,输入 wa build
将在 output 目录构建出 wasm 模块:
$ wa build
$ tree output/
output/
├── hello.wasm
└── hello.wat
1 directory, 2 files
默认输出的是 WASI 规范的 output/hello.wat
和 output/hello.wasm
文件。可以用标准的工具执行输出的 wasm 模块。也可以用 wa
命令执行:
$ wa run ./output/hello.wasm
你好,凹语言!
5050
...
如果不带参数执行 wa run
命令,表示编译并执行当前凹语言工程,会先构建出 output/hello.wasm
然后再执行。
1.3.4 格式化代码
wa fmt
命令用于格式化代码,其命令行帮助信息如下:
$ wa fmt -h
NAME:
wa fmt - format Wa source code file
USAGE:
wa fmt [command options] [<file.wa>|<path>|<path>/...]
OPTIONS:
--help, -h show help (default: false)
命令行参数是要进行格式化的路径:
wa fmt file.wa
格式化指定的凹语言文件wa fmt path
格式化指定目录下的全部凹语言文件wa fmt path/...
递归格式化指定路径的凹语言文件,含子目录
如果不指定参数,则默认格式化当前目录下全部的凹语言文件。如果当前目录属于凹语言工程中,则默认格式化全部子目录的凹语言文件。
1.3.5 单元测试
默认生成的工程会有一个 src/zz_test.wa
测试文件,内容如下:
func TestSum {
assert(sum(100) == 5050, "sum(100) failed")
}
func ExampleSum {
println(sum(100))
// Output:
// 5050
}
在 TestSum
测试函数中通过内置的 assert
函数测试 sum(100)
的结果为 5050。在 ExampleSum
示例测试函数中通过 // Output:
测试输出的内容符合期望的结果。
在工程目录的命令行环境通过 wa test
命令执行测试:
$ wa test
ok myapp 104ms
1.3.6 凹语言版本的 yacc
yacc 是用于生成语法解析器的程序,是编译器爱好者的工具。凹语言的 yacc 从 goyacc 移植而来,详细的用法可以参考凹语言官网碎碎念部分的 相关文章。
1.3.7 打印 Logo
wa logo
可以输出一些文本格式的 Logo 图案,读者可以通过 wa logo -h
命令帮助自行探索。