手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

42|到这里,我们的收获和未尽的工作有哪些?

你好,我是宫文学。
到今天这节课为止,我们已经把这门课程的主要内容都学完了。感谢你一路的坚持!
所以,在今天这节课,我想做一个简单的总结。我想先带你回顾一下我们一起闯过的那些技术关卡,以及取得的成果。接下来,我还想梳理一下我们尚未完成的工作,也对我们后续作为开源项目的 PlayScript 语言做一下规划。
在这个过程中,你可以暂时从技术细节中解脱出来,站在一个语言的架构师的角度,一起做一些高层面的思考,锻炼一下架构思维。
首先,我们简单总结一下当前已经完成的工作。

当前的收获

到目前为止,我们在 40 多节课的内容里,塞进了大量的知识点。我们按课程顺序来梳理一下。

基础篇:三大关卡

在第一部分基础篇中,我带你连续闯了三个关卡。
第一个关卡,是编译器前端技术,包括词法分析、语法分析和语义分析技术。
在词法和语法分析方面,我们这门课没有带你进入相关算法的迷魂阵,而是带你去掌握最佳实践。一方面,这些算法我在《编译原理之美》课程中已经讲过了。另一方面,如果你只是写个编译器,而不是写个像 Yacc、Antlr 这样的编译器生成工具,其实不需要深究那些算法,只要大概明白原理就行了。
即使是这样,对于递归下降中的左递归问题这样偏理论性的知识点,很多同学免不了还是有疑惑。比如,有同学会问我,我在课程里用到的有些文法,为什么仍然有一些是左递归的呢?这里其实涉及到 PEG 文法的一个知识点,我会在后面的加餐里讲一下 PEG。其实,并不是所有的左递归都没有办法处理。关于左递归,直到现在仍然是做算法研究的人感兴趣的一个领域。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

这篇文章总结了作者对现有编程语言和工具的不满意以及对未来语言和工具改进的期望。作者提到了对后端编程语言、前端编程环境、企业应用的编程语言以及物联网应用开发的不满意,并分享了对这些领域的改进需求。他还介绍了自己对一门新语言的期望,包括高并发、高可靠性、资源消耗低、跨平台部署等特性。此外,作者还总结了一门课程的内容,强调了实现一门语言所需的技术并不高不可攀,鼓励读者对未来的语言和开发工具充满信心。整篇文章涵盖了对编程语言和工具的现状不满、对未来改进的期望以及对技术发展的思考,为读者提供了对编程语言和工具发展方向的启发和思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • blackonion
    老师,我想提个bug,目前playscript寻找变量是按照栈帧找的,但实际上js应该是要按作用域找的。例如let a = 'global'; function test1() { let a = 'test1'; test2(); } function test2() { println(a); } test1();这段代码应该输出'global'才对,我在谷歌和火狐浏览器尝试了都是这个结果,而不是'test1'。 另外根据老师的说法,后端用rust不是挺好?感觉rust很适合这种场景,没有GC,内存占用很克制。
    2021-11-19
    1
  • 米德大王
    老师, 物联网应用, 可以用ESP32,micropython啊,非常好用,直接跑Python就好了。 我在想把Java编译成字节码,跑到micropython的虚拟机上面,哈哈哈
    2023-05-28归属地:浙江
  • ifelse
    学习打卡
    2022-10-04归属地:浙江
  • 扇子
    老师,我想问下,整个语言开发好之后,标准库的开发是怎样的?尤其是网络模块和文件操作模块这个是怎样的? 我理解的是: 如果一个新的语言playscript是静态编译语言。如果用c来写编译器,那么playscript里面的网络模块和文件模块使用的就是c语言的网络模块和文件模块。经过c编译之后可执行程序里面的网络模块和文件模块都是可执行的机器码。 这里不管使用c来写编译器还是golang或者java写编译器,只要目标程序都是编译成可执行的二进制文件,那么网络模块和文件模块都是编译成机器码。 以上是我的理解,不知是否正确??
    2022-09-22归属地:广东
  • 有学识的兔子
    挺感谢老师的,真的是一门夯实基础的课程,从此对千奇百怪的程序问题有个思考逻辑和入手点。 点赞👍
    2021-11-22
  • 才学前面一小部分,先看了最后一节
    2021-11-22
  • 至今未来
    好巧 虽然我没学完 但是我今天刚好看到这篇文章哈
    2021-11-19
  • 写点啥呢
    感谢老师的分享
    2021-11-19
  • 奋斗的蜗牛
    课程这么快就要结束了,期待老师后面的分享
    2021-11-19
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部