1个不稳定版本
0.1.0 | 2023年10月26日 |
---|
#863 in 编程语言
13KB
93 行
简介
Mag是一种可选类型、面向对象编程语言,具有模式、类和多重方法。
以下是一个使用多重方法定义一个(非常低效的)递归Fibonacci函数的简单示例:
def fib(0) 0
def fib(1) 1
def fib(n Int) fib(n - 2) + fib(n - 1)
这定义了多次相同的fib
方法,由于实现中的方法签名不同,因此不需要在函数内部进行单独的条件检查。
未来将提供更多文档,并请务必查看Robert Nystrom关于Magpie的博客文章以获取更多信息。他的文章是该项目的灵感来源和基础。
特性
可扩展性
解析器和编译器结构使用模块化、基于特质的架构,其中结构负责实际的转换,这意味着语义的实际解释是动态的,并且可以使用特殊的解析器在运行时由Mag代码扩展,这一概念甚至可以扩展到编译和执行,以提供一个非常灵活的编程环境。
模式匹配
模式不仅用于类似Rust的match
表达式,它们实际上散布在整个mag
和magc
语言结构中,用于方法参数、变量解构、错误报告等许多有用的方面。
入门
不要说太多模糊的话,让我们从命令行开始一个REPL,以便启动并运行此项目。
在项目根目录下运行以下命令以启动REPL
cargo run
尝试输入简单的算术表达式,如1 + 2
或3 * 7
,以查看执行管道的工作。目前预期会有很多错误!
鸣谢
Mag基于Robert Nystrom的Magpie语言,他是一位Google的语言工程师,拥有一个博客和许多惊人的想法。他的各种博客文章是启动和激发此项目的灵感,即使原始代码库停止进一步开发,我也打算继续他的遗志。
然而,由于与原始的Magpie语言存在一些语法差异,这两种语言是源不兼容的,因此有不同的名称。特别是Bob的实现用空格(通常是无意义的字符)替换了用于在对象上调用方法的点(通常),这让我觉得相当不直观,尤其是对于新手程序员。
依赖
~13–23MB
~353K SLoC