Crates.io | valkyrie-ast |
lib.rs | valkyrie-ast |
version | 0.1.12 |
source | src |
created_at | 2023-05-22 13:06:09.477712 |
updated_at | 2024-03-04 08:56:26.387657 |
description | Strong typed abstract syntax tree of valkyrie language |
homepage | |
repository | https://github.com/nyar-vm/valkyrie.rs |
max_upload_size | |
id | 870660 |
size | 223,982 |
教你一个编程语言, 高亮的时候使用 scala 的高亮
这个语言是这样定义类的
# 定义一个类 A
class A { }
# 定义一个类 B 继承 A
class B(A) { }
你觉得多继承应该怎么写?
这个语言中这样定义代数效应
class Logging {
level: Integer
message: String
effect debug(s: String): Self / Pure {
new Self { level: 0, message: s }
}
effect print(s: String): Self / Pure {
new Self { level: 1, message: s }
}
effect error(s: String): Self / Pure {
new Self { level: 2, message: s }
}
effect fatal(s: String): Self / Pure {
new Self { level: 3, message: s }
}
}
使用 raise 激发代数效应, 使用 try catch 语句处理代数效应.
try {
raise Logging::debug("hello")
}
.catch {
case Logging(level, message):
std::io::std_err().lock().write(message)
}
这段代码应该怎么编译
if a {
yield 1
print 2
}
yield 2
let yield1 = {
print(2)
if_break()
}
let if_break = {
yield2()
}
let yield2 = {
ret()
}
类型签名部分分为 Type / Effect
两部分, 两者都可以省略, Type 的默认值为 Unit, Effect 的默认值为 Pure.