File tree Expand file tree Collapse file tree 5 files changed +41
-7
lines changed Expand file tree Collapse file tree 5 files changed +41
-7
lines changed Original file line number Diff line number Diff line change @@ -32,7 +32,7 @@ https://lang.pivotstudio.cn
3232- 同时支持aot和jit两种模式
3333- 极其方便的rust互操作
3434- 支持debug
35- - 支持lsp,自带vsc插件,能替佛那个优秀的代码支持
35+ - 支持lsp,自带vsc插件,能提供优秀的代码支持
3636
3737
3838## 项目结构
Original file line number Diff line number Diff line change 2828# CONTRIBUTING
2929
3030- [ Contributing] ( ./CONTRIBUTING-CN.md )
31+
32+ # Blogs
33+
34+ - [ About pivot lang] ( blogs/aboutpl.md )
Original file line number Diff line number Diff line change 1+ # 聊一聊pivot-lang
2+
3+ 这是这个项目的第一篇博客,这篇博客里我准备讲一讲这个项目的意义还有它的发展方向,还有一些写的过程中的有趣的话题。
4+
5+ 这个项目希望创造出一种好用的类rust的新编程语言,他要具有大部分先进的特性,并且避免掉rust太难学习的缺点。
6+
7+ 目前已经完成的部分和rust非常的像,但是已经有一些功能上出现区别,比如模块化。模块化表面上和rust有点像,但是其实完全不一样,要说类似其实反而和go更类似一些,不过也有很大区别。
8+ 我们预计之后的一些高级功能,比如代数类型、模式匹配和一些别的特殊语法糖上,我们会和rust有巨大分歧,这方面还敬请期待。
9+
10+ ## History
11+
12+ 项目大概是2022年9月中旬开始的,一开始的时候我们几乎完全手写了第一版lexer和parser。当时那一部分代码大部分是[ @RINNE-TAN ] 写的,因为我那个时候还不会rust,只能对[ @RINNE-TAN ] 的代码进行拙劣的模仿。我们初期争论比较大的点是是否该用lr分析法的工具,而不是ll分析手写递归下降。最后我们还是觉得ll可控性更好一些,选择了手写。但是就写了个开头,我们就发现这玩意写到后边可维护性会有很大问题,简直是依托__ 。
13+
14+ 所以我们开始重新考虑一些自动或者半自动的工具,比如antlr、lalrpop之类的。这些工具有个很严重的问题,就是他们往往需要在特殊格式里编写一部分源代码,而写这部分代码的时候是没有代码提示的。这对于其他的语言应该好一些,但是这对于rust来说是相当致命的,尤其是在我们没有人是rust大佬的情况下。
15+
16+ 这个时候伟大的[ @RINNE-TAN ] 找到了[ nom] ( https://github.com/Geal/nom ) ,虽然这个东西上手有点不习惯,但是熟练之后被证明究极好用,于是我们果断重写了之前的lexer和parser的代码。我代码量大概就是这个时候开始反超[ @RINNE-TAN ] 的,因为重构几乎都是我搞的。
17+
18+ 之后我们十一之前加班加点,希望在10.1期间作出一个有一些基础功能的版本,这期间有很多人都参与了代码编写,不过总体来说这一阶段的工作是比较简单的。唯一一个相对难一点的功能是@CjiW 做的函数相关的功能,函数至今也是我们代码生成中最复杂的模块之一。
19+
20+ 十一之后我们加入了大量lsp相关的功能,还有debug支持。这两个都是之前我做的项目中比较少或者没有涉及过的,意外的是这两个功能的实现都比较顺利。
21+
22+ 顺带一提,项目里很多奇怪的东西还有一些文件的命名多少沾点二次元,这都是托了[ @RINNE-TAN ] 大爷的福。
23+
24+ 再后来,我们的高级功能开始提上日程,[ @RINNE-TAN ] 几乎实现了泛型功能的所有代码,这部分逻辑十分复杂,因为涉及到自动泛型推断和代码膨胀等技术,是目前编译器中最复杂的功能之一。谢谢你,[ @RINNE-TAN ] !
25+
26+ 顺便提一句,[ @RINNE-TAN ] 现在是单身,如果有人对找程序员男朋友感兴趣,请抓紧
27+
28+ [ @RINNE-TAN ] : https://github.com/RINNE-TAN
29+
30+ ## Future
31+
32+ 接下来一段时间的首要任务是完善泛型功能,让impl快能加泛型,接口也支持泛型。然后,就是代数类型和模式匹配,这些任务预计寒假能搞完。之后的高级功能就是闭包和协程支持,然后需要完善系统库,gc支持多线程。如果非常顺利的话,寒假结束前有机会完成到协程。
33+ 项目现在非常缺人,如果你对开发pl感兴趣,请联系我们。
Original file line number Diff line number Diff line change 77接口底层实现为结构体,具有如下的结构:
88
99```
10- 原值指针
11- ---
1210类型哈希
1311---
12+ 原值指针
13+ ---
1414方法1指针
1515---
1616方法2指针
2020方法n指针
2121```
2222
23- 对应pltype复用 ` PLStruct ` ,增加 ` is_interface ` 标记 。
23+ 对应pltype使用 ` PLTrait ` ,其实内部存储的是结构体类型 ` STType ` 。
2424
2525
2626
Original file line number Diff line number Diff line change @@ -16,9 +16,6 @@ method就是隶属于某个结构体的函数,它们与普通函数**没有**
1616```
1717在一个包中,可以定义外部引入的包中结构体的` method ` .
1818
19- ``` pivot-lang
20- {{#include ../../../test/main.pi:extern_impl}}
21- ```
2219
2320调用method的时候,使用` <receiver类型>.<method> ` 即可
2421
You can’t perform that action at this time.
0 commit comments