AVSI2和cart基本完成了!

AVSI 是我从大一开始制作的编译器系列。最近又完善了一下,出了个第二代,还写了一个包管理器叫 cart,定位类似于 rust 的 cargo。目前基本能用了。

组成

  项目由三个部分组成:

  • avsi: 编译器本体
  • cart: 包管理器
  • libavsi: 标准库

  包管理器的命名过程挺有趣的,一开始想命名为 minecart(矿车)。但搜了一下 github 已经有同名的项目,所以索性去个头,命名成 cart。
  光编译器本体和包管理器加起来就达到了九千多行代码,标准库后续应该会继续写,目前只有 print 和 read 两种函数。第一次写这么大的项目,以前写的山寨 Minecraft 也才三千多行。这在以前的我看来是完全不可能的事情。大概这就是迭代开发的魔力吧。回看我第一号 commit 的时候有种无法言说的奇妙感觉。
  这么大的项目不仅意味着函数分组麻烦,而且意味着出bug会更加难以调试。由于写的测试样例比较刁钻,导致每一次花一小时增加一个小功能,就要花上五六个小时 debug。这个过程下来可能把 c++ 语言本身的坑和 llvm 的坑都踩了一遍。

使用

  使用 cart 可以很方便地建立和构建项目(毕竟对标的是 cargo):

  新建一个项目,名为 mycode,这个过程会建立一个项目文件夹,并且提供一个 Hello World 的代码和一个配置文件

$ cart new mycode
$ cd mycode
$ ls
Cart.toml  main.sl

  然后使用 cart build 构建项目,默认可执行文件为 a.out

$ cart build
compile source files
avsi main.sl --package-name mycode -O -W 

link objs
GNU ld (GNU Binutils) 2.38
$ ./a.out
Hello World!

  过程十分简单

杂谈

  llvm项目有一个明显的问题,llvm入门的文章非常多,搜索引擎搜索一下,首页的文章基本都可以入门。但是遇到具体问题后搜索引擎就失灵了,因为基本找不到解决方法,英文和中文搜索都是一样的。这个时候采取的办法比较极端一些了:看别人的项目源码。Google上面搜索一个代码片段可以搜索到相关的项目。我通过看源码解决了一些玄学无比的问题。再麻烦一点只能看头文件和llvm或clang源码来解决了。

posted @ 2022-07-02 23:23  ChipenHsiao  阅读(17)  评论(0编辑  收藏  举报