1 个不稳定版本
0.1.6 | 2023年7月23日 |
---|
#540 在 编程语言
270KB
7.5K SLoC
mrdo
mrdo是一种语言,其变量可以是以下之一
- 实数(可变的64位浮点数)
- 整数(可变的32位整数)
- coll(实数的不可变集合)
- 待办事项:dict(键值不可变实数集合)
用法
bash$ ./mrdo
将启动REPL。在REPL中使用:h
获取元命令列表。
bash$ ./mrdo<文件名> [-o<输出>]
将编译提供的程序并运行它,可选地输出字节码。如果提供的程序已经是字节码,则将直接运行。
有关其他标志,请参阅bash $ ./mrdo --help
子模块
编译器从高级语言编译到汇编
汇编从汇编编译到字节码
vm运行字节码
repl理解汇编和高级代码
语言特性
变量
可以使用=
运算符定义变量并为其赋值。赋值是一个复制操作,即
foo = 42.0
bar = foo
将从foo
复制值到bar
,从而定义两个实例。
请注意,虽然变量类型是推断的,但它也是不可变的。一旦变量是一个类型,就不能将其重新赋值给新类型。
函数
待办事项(在新的Rust世界中尚未实现)
函数在并行处理集合,可以是以下之一
map
(将输入集合中的每个元素转换为输出集合中的一个元素)filter
(有条件地输出输入集合中的每个元素)fold
(将集合累加到一个元素)
对于map
,输入和输出集合可以是不同类型。
以后可能会添加更多函数类型。
操作
提供常用操作
- 算术:+、-、/、*
- 比较:gt、gte、lt、lte、eq、ne
- 待办:逻辑操作:
and
、or
、not
、xor
逻辑操作将 0.0 视为假,将所有其他值视为真。
算术运算
如果左右两边都是 real
或 integer
,则算术运算将按预期进行。
如果两者都是 coll
,则它们必须具有相同的大小,操作将成对应用。
如果一个是 real
或 integer
,另一个是 coll
,则 real
或 integer
将应用于 coll
中的每个元素。
比较运算
对于 coll
类型,比较遵循 Rustlang 模型。具体来说,如果一个集合的任何元素在操作中比较为真,则整个操作将返回真(或 1)。
特定于集合的操作
集合本身具有以下操作定义
- 待办:flatten:接收多个集合并将它们合并为一个集合。
- 待办:sort:接收一个集合,并返回一个按给定比较操作顺序排列的元素 seq。
- 待办:first:返回集合中的前 'n' 个元素,类型与集合相同。
- 集合类型。
io
可以使用以下函数读取或写入集合
- 待办:read
- write 使用 stdin 和 stdout
旧版本
该项目有一个更丰富功能的老版本,它使用 LLVM 编译为二进制文件,但这限制了运行时可以执行的操作,因此已被移至 old
。
依赖关系
~5.5–7.5MB
~121K SLoC