在读了一篇关于如何创建编程语言的文章后,我受到了启发,自己创建了一个解释器。我查看了几种语言是如何实现的,并意识到它们都是基于英语的。我想在“外国”自然语言(如汉语)的基础上开发一种编程语言,看看它可能会带来哪些缺点。我从参考网上发布的各种资源开始(最著名的是 Crafting Interpreters ),然后慢慢地开始主要靠我自己实施概念。事实证明,从头开始创建一个完整的编程语言是相当困难的,但这正是它的乐趣所在。
为什么叫「Qi」?Qi是从汉字的拼音中衍生出来的「气」, 这在英语中是「空气」的意思。我希望这种语言能够快速、轻巧,并且完全透明,就像空气一样!
打印行("你好,世界")
-
气在中文基础上。说英语的人通常不会想当然地认为他们所学的编程语言都是基于他们已经很流利的母语。以英语为母语的人可以通过阅读关键字(“if”、“int”、“while” 等)合理地推断Python代码的功能。让这种语言以外语为基础,可以让全球更多的人更容易地使用编程。
-
气速度很快。气使用单通道编译器编译出高效的字节码,这种字节码可以异常精确地运行。以及各种优化,例如 Nan Boxing 通过哈希表探测,气的速度与竞争对手的动态语言相当。
-
气是轻的。由于不到5000行代码,整个项目可以在一天内阅读。虽然代码很短,但所有内容都格式良好,易于理解。最终的可执行文件大小只有约140 kb,允许您在几乎任何可以想象的设备上运行它。
-
气是面向对象的。将类放在前面和中心,面向对象编程提供了一个清晰的模块化结构,通过抽象和封装等概念,它在处理复杂性方面比函数式编程要好得多。
虽然运行一些基准测试并不太擅长判断性能,但它们看起来很酷。。。这里有几个。
每个基准测试运行5次,每种语言的平均运行时间。
这些测试在我的 Macbook Air 2017 上运行,配备双核 i5 CPU 和 8 GB RAM。
基准测试的代码可以在test 文件夹中找到。
- make
- macOS
brew install make
- Windows
choco install make
- Linux
- 应该被纳入系统
- macOS
- 克隆或下载git repo的zip。
- 打开终端,然后
cd
到/src/cmake-build-release
- 运行
make
. - 全部完成!
单元测试非常重要(特别是对于编程语言),我已经包含了一个完整的气测试套件,以确保解释器的每个方面都做它应该做的事情。测试程序可以在/test
目录中找到这里。为了自动化测试过程,这里 提供的 Go 程序 /utils/test.go
运行每个使用输入的解释器测试程序,捕获输出并验证结果。
###运行测试程序
要运行测试,您需要将 Go 安装到您的系统上。从此处下载并安装它。
执行 Go 程序相当容易。只需运行 go run test.go
并将所需解释器的路径传递到 -interpreter=
参数中。
go run test.go -interpreter=解释器的路径在这里
如果您忘记实现否定运算符,以下是测试程序的输出:
$ go run test.go -interpreter=PATH
FAIL ../test/array/indexing.qi
Expected output '假' on line 7 and got 'b'.
FAIL ../test/array/methods.qi
Expected output '【零,1,2,3】' on line 9 and got '【零,2,3,4】'.
FAIL ../test/for/scope.qi
Expected output '-1' on line 10 and got '1'.
FAIL ../test/number/literals.qi
Expected output '-0' on line 4 and got '0'.
Expected output '-0.001' on line 7 and got '0.001'.
FAIL ../test/operator/negate.qi
Expected output '-3' on line 1 and got '3'.
FAIL ../test/string/indexing.qi
Expected output 'g' on line 7 and got 't'.
268 tests passed. 6 tests failed.
exit status 1
如果所有测试都通过,这里是输出:
$ go run test.go -interpreter=PATH
All 274 tests passed (641 expectations).
入门页面是安装和设置语言的绝佳指南。
代码示例请参考测试.
要更深入地了解气,请访问语言指南.
- 类
- 继承
- 列表
- 递增/递减运算符
- 切换/预设语句
- 优化
- 将所有内容翻译成中文
- 制作徽标
- 完成自述文件
- 将自述文件翻译成中文
- 创建网站
- 首页
- 入门
- 语言指南
- 转义序列
- 按位运算符
- 删除分号
- 支持科学记数法、二进制等数字
- 更多字符串方法
- 更多列表方法
- 模块系统
贡献使开源社区成为学习、启发和创造的绝佳场所。 非常感谢您做出的任何贡献。
如果您有更好的建议,请 fork 存储库并创建拉取请求。您也可以简单地打开带有“增强”标签的问题。 别忘了给项目打星!再次感谢!
- Fork 项目
- 创建您的功能 branch (
git checkout -b feature/AmazingFeature
) - Commit 你的更改 (
git commit -m 'Add some AmazingFeature'
) - Push 到 Branch (
git push origin feature/AmazingFeature
) - 打开一个 Pull Request
在 MIT 许可下分发。有关更多信息,请参阅“LICENSE.txt”。
Andrew Yang - @anonymousaaardvark - [email protected]