第 1 章:运行第一个程序
本章的目标是在终端看到一行 你好,豫言!。先创建程序代码和它所属的练习包,后续章节都在这个包里操作。
创建练习包
先完成快速开始中的工具安装和 make 豫构。然后在仓库根目录新建 教程练习 目录,把下面的内容保存为 教程练习/教程练习。包。豫:
「名称」者『教程练习』也。
「所有者」者『豫言』也。
「版本」者『0.1.0』也。
「简介」者『保存入门教程的练习程序。』也。
「说明」者「典」【
「汉语」者『包说明.汉语.md』也,
「文言」者『包说明.文言.md』也,
】也。
「类型」者「典」【
「种类」者『可执行文件』也,
「入口」者『入口』也,
「文件名」者『yy教程练习』也,
】也。
「依赖」者「列」【『标准库』】也。
包名要与文件名一致,这里是 教程练习。配置说明这个包生成可执行文件,从 入口。豫 开始,并使用标准库。这里沿用仓库的所有者“豫言”,依赖中的简写会选择同一所有者下的标准库。
当前包格式还要求两份说明文件。在同一目录创建 包说明.汉语.md,写入:
# 教程练习
用于运行豫言入门教程的示例。在仓库根目录构建教程练习包,再运行 yy教程练习。
再创建 包说明.文言.md,写入:
# 学豫言
此包存入门之例。于仓库根目录构之,乃行 yy教程练习。
包配置先照着填写即可。第七章会解释列表,第十章会解释包与模块;完整字段说明可查包系统。
在同一目录新建 入口。豫,写入完整程序:
寻观「标准库」之书。
「打印行」于『你好,豫言!』。
第一行让当前文件能够直接使用标准库里的名称。第二行调用 「打印行」,把 『你好,豫言!』 作为参数传给它。
这里有三种值得先记住的写法:「打印行」 是函数名称,『……』 是字符串,于 把参数交给函数。注意名称与字符串使用不同的括号。
构建,再运行
在仓库根目录执行:
./yy豫构 构建 教程练习 --输出 yy教程练习
./yy教程练习
第一条命令检查源码并生成可执行文件 yy教程练习,第二条命令运行它。输出应为:
你好,豫言!
修改源码后,需要重新构建,运行的程序才会包含修改。如果只想检查类型,可以执行:
./yy豫构 类型检查 教程练习
类型检查不会运行你的打印语句,因此不会输出问候语。后续章节继续使用这个练习包:替换 入口。豫 的内容,再执行构建和运行命令。
标点也是语法
每条顶层声明用中文句号 。 分隔。换行负责排版,不能代替句号。下面这段仍然是同一个程序,不过分行写更容易阅读:
寻观「标准库」之书。「打印行」于『你好,豫言!』。
如果构建失败,先检查文件位置、包名和标点。把 『你好』 写成 「你好」 时,编译器会尝试查找名叫“你好”的定义,不会把它当作文字。
动手修改
把输出文字改为自己的名字,再增加一条打印语句。重新构建后,终端应显示两行文字。随后只修改源码、直接运行旧的可执行文件,观察输出为什么没有改变。