OS
Auto语言践行LaOS(Languange as OS)理念,因此在语言层面支持一套“虚拟的”操作系统。
为此,Auto语言提供如下OS概念:
- Os.Process:于普通操作系统中的“进程”。
- Os.Thread: 操作系统中的“线程”。
- Task: 类比与操作系统中的“协程”或“纤程”。
我们在平时编程时,只需要与Task打交道即可,因此在Auto语言里,提供了专门的task关键字。
task的签名和type很像,区别在于task内定义的元数默认的寿元是@Task级别。
auto
task blink {
mut color = Red
on 10ms {
// toggle color
if color == Red {
pins.led.red = true
pins.led.blue = false
color = Blue
} else {
pins.led.red = true
pins.led.blue = false
color = Red
}
}
}这个例子中,blink任务会持续进行,每10ms切换一次颜色。 这里的color变量,其寿元为@Task级别,即任务结束时,才会被销毁。
在使用中,我们通过task.start方法来启动一个任务,通过task.end方法来结束一个任务。
auto
fn main {
// 启动任务
let t = blink.start()
// ...
中途可以获取任务的状态
print(t.color)
// 结束任务
t.end()
}