#编程语言 #vm #assembly #compiler #cli

app mrdo

一种用于处理数据集的编程语言(编译器、汇编器、VM和REPL)

1 个不稳定版本

0.1.6 2023年7月23日

#540编程语言

Apache-2.0

270KB
7.5K SLoC

Rust 6K SLoC // 0.0% comments C++ 1.5K SLoC // 0.0% comments Shell 45 SLoC // 0.1% comments

Rust

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
  • 待办:逻辑操作:andornotxor 逻辑操作将 0.0 视为假,将所有其他值视为真。

算术运算

如果左右两边都是 realinteger,则算术运算将按预期进行。

如果两者都是 coll,则它们必须具有相同的大小,操作将成对应用。

如果一个是 realinteger,另一个是 coll,则 realinteger 将应用于 coll 中的每个元素。

比较运算

对于 coll 类型,比较遵循 Rustlang 模型。具体来说,如果一个集合的任何元素在操作中比较为真,则整个操作将返回真(或 1)。

特定于集合的操作

集合本身具有以下操作定义

  • 待办:flatten:接收多个集合并将它们合并为一个集合。
  • 待办:sort:接收一个集合,并返回一个按给定比较操作顺序排列的元素 seq。
  • 待办:first:返回集合中的前 'n' 个元素,类型与集合相同。
  • 集合类型。

io

可以使用以下函数读取或写入集合

  • 待办:read
  • write 使用 stdin 和 stdout

旧版本

该项目有一个更丰富功能的老版本,它使用 LLVM 编译为二进制文件,但这限制了运行时可以执行的操作,因此已被移至 old

依赖关系

~5.5–7.5MB
~121K SLoC