课前热身|开始学习之前我们要准备什么?
宫文学
你好!我是宫文学,欢迎来到《手把手带你写一门编程语言》的课程。
其实,你从课程题目就可以看出,我们这个课强调动手实践。所以在这一节课,我要给你介绍一下我们这个课程示例代码所采用的计算机语言,以及相关编程环境的搭建。这样,会方便你阅读、运行和修改课程的示例代码。
对于课程里用到的汇编语言、编译原理知识,如果你之前没有相关的经验,也不要担心。我会介绍一下我们这方面的设计思路,保证你通过这个课程会更快、更扎实地掌握它们。
通过这篇导读,你会对课程里用到的语言、工具、技术心里有数,以便更好地开启你的学习之旅。
好,我们先从使用的计算机语言和环境说起。
怎么快速上手 TypeScript 语言
我们这个课程的目标呢,是要实现 TypeScript 的编译器和各种运行时。既然如此,那么我就尽可能地用 TypeScript 来实现这个目标。
虽然我们这个课程主体的代码都是用 TypeScript 写的,但我正式使用 TypeScript 其实是从 2021 年 5 月份开始,也就是我开始准备这个课的时间。
我知道你肯定会问:用几个月的时间,既要了解 TypeScript,又要用 TypeScript 写自己的编译器,是不是太不靠谱了?当然,你可能也是因为要学习这门课程,第一次使用 TypeScript,所以我就分享一下自己的一些经验。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文是一门编程语言实践课程的导读,作者宫文学介绍了准备写一门编程语言所需的准备工作,并分享了他学习和使用TypeScript的经验。文章涵盖了TypeScript的环境配置、C语言的功能和配置、汇编语言的必要性以及编译原理的需求。宫文学强调了动手实践的重要性,并鼓励读者通过阅读资料和依靠经验直觉来快速上手TypeScript语言。此外,他提供了示例代码,并鼓励读者用自己顺手的语言重新实现。总的来说,本文强调了实践学习的重要性,为读者提供了开启学习之旅的准备。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- 奋斗的蜗牛老师,可以讲解一下如何实现多个文件的编译吗,现在的资料都是讲怎么编译一个文件里面的代码
作者回复: 通过git clone代码后,会有几个.json格式的配置文件,这就是用于支持多文件编译的配置信息。 另外运行npm i --save-dev @types/node后,会产生一个node_modules子目录,这样就能支持模块机制了。 这样就能支持多个文件(多个模块)的编译,并且也能引入node.js中自带的模块,实现文件读写等功能。 后面几节就逐步开始用多个文件了,因为一个文件显然放不下那么多的功能。
2021-08-1224 - Why So Seriousgit clone之后失败了 这个是啥问题呀 老师 fatal: invalid server response; got 'version 1'
作者回复: 可能是环境问题。 你进一下微信群?在课程的首页里有链接。 助教和其他同学可以帮助你分析一下。
2021-08-13 - 有学识的兔子这门课我们有学习社区或者微信群吗?
编辑回复: 有的!在课程简介下面,有提示加入交流群的链接,加一下小助手的微信会自动拉进群~
2021-08-12 - 彩色的沙漠老师里面的Token字符串生成是用那个库吗?上面的代码对Token的结构不清楚
作者回复: 没太明白您的意思。 没用哪个库,都是自己手写的代码。
2021-08-102 - ifelse加油,奥利给2022-09-08归属地:浙江12
- 阿特吾组撒windows64位可以参考这篇http://www.manongjc.com/article/23844.html2021-09-01
- 俞嘉彬努力学习中!2021-08-27
- 奕我是深入学习 typescript 来的,typescript 的类型系统太强大了2021-08-13
- qinsi看了后面的代码似乎明白这里为什么要提一句类型断言。比如第一课里有这样的代码: ```typescript if (typeof (x as FunctionDecl).body === 'object'){ retVal = this.visitFunctionDecl(x as FunctionDecl); } ``` 这里是根据object的形状来判断object的类型,可以说是手动实现了duck typing。由于需要检查object的属性,所以用上了类型断言。但因为检查的都是实际的AstNode,所以可以直接用instanceof type guards: ```typescript if (stmt instanceof FunctionDecl) { retVal = this.visitFunctionDecl(stmt) } ``` 可以看到一旦通过了type guard (if instanceof),对象的类型就被确定下来了,后面(传参等时候)无需再用类型断言。严格来讲,类型断言只是在“编译”时告诉编译器,“我很确定把这个对象当成这个类型用没问题,不用给我报错”。而把类型检查放到“运行”时的是type guards。2021-08-13
收起评论