1. 先创建一个项目
$ moon new example
2. 按照如下目录结构创建文件夹与文件
.
├── main
│ ├── a.mbt
│ ├── main.mbt
│ └── moon.pkg
├── moon.mod
└── pkg
├── lib.mbt
└── moon.pkg
main/a.mbt
pub func f() {
"a\n".print()
}
main/main.mbt
func init {
"Hello, world!\n".print()
f()
@pkg.g()
}
main/main.pkg
package main
import "example/pkg"
moon.mod
module "example"
pkg/lib.mbt
pub func f() {
"pkg\n".print()
}
-
pkg/moon.pkg
空
3. 最后执行 moon run
$ moon run
Hello, world!
a
pkg
2 个赞
把包定义文件和源代码文件分开的设计, 看起来有点奇怪, 能解释一下为什么这么设计嘛 ?
1 个赞
目前的设计是每个包共享一个 moon.pkg
文件,这样在处理包之间的依赖关系的时候可以只读取、解析一个文件,对于大型项目可以节省很多构建时间。
后续我们会在 IDE 中改善体验。
2 个赞
关于月兔的 包 (package), 模块 (module) 术语与 js, rust 不一致的问题:
-
js 的模块是单个源文件, 包基本上是 npm 的包
-
rust 的模块是单个文件, 文件的一部分, 或一个目录, crate 是较大的单位 (类似于 js 的包)
js 和 rust 的模块都是较小的单位, “包” 是相对较大的单位.
而月兔正好相反, 包 是较小的单位, 而 模块 是相对较大的单位.
如果之前主要使用的编程语言是 js 或 rust, 那么入手月兔的时候, 看到这里就会比较晕.
我就是看了半天才明白.
建议月兔把 “模块” 换成别的术语, 容易导致误解.
目前的模块与包的概念、包括项目的目录结构组织与Go类似
1 个赞