Skip to content

Commit 3603129

Browse files
committed
docs: add blogs
1 parent 0d27289 commit 3603129

File tree

5 files changed

+41
-7
lines changed

5 files changed

+41
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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
## 项目结构

book/src/SUMMARY.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,7 @@
2828
# CONTRIBUTING
2929

3030
- [Contributing](./CONTRIBUTING-CN.md)
31+
32+
# Blogs
33+
34+
- [About pivot lang](blogs/aboutpl.md)

book/src/blogs/aboutpl.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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感兴趣,请联系我们。

book/src/references/interface.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
接口底层实现为结构体,具有如下的结构:
88

99
```
10-
原值指针
11-
---
1210
类型哈希
1311
---
12+
原值指针
13+
---
1414
方法1指针
1515
---
1616
方法2指针
@@ -20,7 +20,7 @@
2020
方法n指针
2121
```
2222

23-
对应pltype复用`PLStruct`,增加`is_interface`标记
23+
对应pltype使用`PLTrait`,其实内部存储的是结构体类型`STType`
2424

2525

2626

book/src/references/method.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)