Skip to content

OS ​

Auto语言践行LaOS(Languange as OS)理念,因此在语言层面支持一套“虚拟的”操作系统。

为此,Auto语言提供如下OS概念:

  1. Os.Process:于普通操作系统中的“进程”。
  2. Os.Thread: 操作系统中的“线程”。
  3. 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()
}

基于 MIT 许可发布。