楼主: convoi
跳转到指定楼层
上一主题 下一主题
收起左侧

[打卡]CS61B/61C

🔗
 楼主| convoi 2019-7-5 21:10:14 | 只看该作者
全局:
昨天做完了 CS61C 的 Project 1. 这个 Project 训练内存管理以及异常处理。涉及到很多 if null goto ERROR 的操作,这个时候用 C 的宏就显得非常厉害了,仿照 V8 的代码对所有 malloc 返回结果都做了一个 if null exit with allocation failed 的 DCHECK 宏,最后顺利通过了 Autograder。

昨天时值 Babel 发版,帮助修复了一个新版本的 regression。https://github.com/babel/babel/issues/10162 排查问题的过程很有意思,因为刚发版本,也顶着时间约束。

有意思的是这个 Bug 在上一个 patch release 里面已经出现了,居然社区没有发现。可见大家对于依赖的升级态度:没有想要的新功能,是不会冒险去升级的。
回复

使用道具 举报

🔗
wegrow 2019-7-7 12:16:40 | 只看该作者
全局:
想问下lz上下来觉得61C对找软件开发的工作有帮助吗?还是说只是纯粹自己兴趣使然想全面了解一下硬件相关知识?
回复

使用道具 举报

🔗
 楼主| convoi 2019-7-8 07:24:59 | 只看该作者
全局:
wegrow 发表于 2019-7-7 12:16
想问下lz上下来觉得61C对找软件开发的工作有帮助吗?还是说只是纯粹自己兴趣使然想全面了解一下硬件相关知 ...

我不确定有没有帮助,因为我还没有试过在学过了 61C 之后去找软件开发的工作。

我希望未来从事编译器相关领域的工作,因此我需要 61C。
回复

使用道具 举报

🔗
 楼主| convoi 2019-7-9 04:13:27 | 只看该作者
全局:
本帖最后由 convoi 于 2019-7-9 04:15 编辑

昨天做完了 CS 61C 的 HW 3,刷了好几次才通过 AutoGrader。HW 3 主要是 RISC-V Assembly 与 Instruction Format 的相互转换。值得提示的是从 Instruction 转成 RISC-V Assembly 的时候不需要完全转成二进制再去根据不同的 format 做区分,可以选择原来给出的十六进制位,例如:

Example: `0x00b542b3`
1. Use the last two digits to determine the opcode. Since it’s bigger than `8`, shift Right `b` to get `3`, and `33` is arithmetic functions, which will obey `R-type` instruction format.
2. Check the fourth digit `4`,  smaller than `8`, so `33/4` is the signature. Check the green card, the `operand` is `xor`.
3. Check the third digit `2`, shift left and add `1` from `b`. We will get `x5` a.k.a `t0`, which is our `rd`
4. Check the fifth digit `5`, shift left and add `0` from `4`. We will get `x10` a.k.a `a0`, which is our `rs1`
5. Check the sixth digit `b`, pad the leading using trailing `0` from the seventh digit `0`. We will get `x11` a.k.a `a1`, which is our `rs2`
6. Obviously `funct7` is `0`.
7. In all, we can translate it to `xor x5, a0, a1`
值得一提的是看着汇编码转成了机器码突然有醍醐灌顶的感觉,一层一层的软件工程到了这里终于开始和和硬件打交道了,非常有意思。
回复

使用道具 举报

🔗
 楼主| convoi 2019-7-13 03:27:50 | 只看该作者
全局:
昨天做完了 61C 的 Lab 3 和 Lab 4。

61C 自带的 RISC 模拟器省掉了缺少编译环境的痛苦:https://venus.cs61c.org/

Lab 里面有一道实现单链表的 map 功能的问题。这里的 map 可以用递归来实现,一开始实现完发现程序一直不停机,后来在 venus 上面调试才知道每次 map 执行的时候没有把 ra 推栈,因此当递归到叶子结点退出的时候返回地址 ra 就错了,因为跳到了错误的位置而一直在循环。

map 的递归实现实际上是一个 Tail Call Recursion,因此可以用 goto 来实现从而省掉额外的调用栈开销。手动把 ra 的入栈放到第一次进入的时候,后面只需要更新状态变量一直跳就可以了。

尾递归优化是 ECMAScript 6 标准的一部分,然而浏览器厂商对这个功能提出了异议,(https://v8.dev/blog/modern-javascript#proper-tail-calls)认为 implicit 的尾递归会让开发者非常困惑,而且因为去掉了额外的调用栈而会让 debug 变得麻烦。社区提出了显式声明尾递归的语法提议:https://github.com/tc39/proposal-ptc-syntax
回复

使用道具 举报

🔗
 楼主| convoi 2019-7-15 03:35:46 | 只看该作者
全局:
本帖最后由 convoi 于 2019-7-15 03:42 编辑

昨天花了一天时间磕磕绊绊做完了 Project 2,这个项目是实现一个 61C 语言(C 语言的一个子集)的编译器(也就是把高级语言转成 RISC-V 的汇编语言)。当然这个项目大量 helper (包括 parser 的部分)已经提前准备好了,所以考察的侧重点是 code generation。

这个项目因为有外部依赖而不能在本机运行,我本来差一点要放弃这个项目但想想还有 autograder,就决定依靠 autograder 来做调试,从测试结果去反推哪里实现可能有问题。因为对 compiler 的测试实际上是测试生成的汇编码在 RISC 模拟器的执行结果,所以有时候一个地方出了错可能会导致看起来毫不相关的程序会编译出错。

幸好 VS Code 给的语法提示足够用,最后提交了22次,终于通过了所有测试。因为这是第一次在没有调试环境的情况下把 Project 做出来,所以抓了 submit 的时间和分数做了一个图:
一开始一步步上升觉得还挺顺利,后面分数就一直往下走了,直到最后才发现都是栈操作的问题。一次成功的提交,背后有二十次失败

Rplot.png (228.73 KB, 下载次数: 0)

Rplot.png
回复

使用道具 举报

🔗
 楼主| convoi 2019-7-17 05:49:38 | 只看该作者
全局:
今天做完了 Lab 5. 用 Logisim 画电路还是挺有意思的一件事情。从昨天开始课程转向了机器语言之下的硬件部分,曾经想过要不要就此打住转去上 CS 164。想想了解一下这些硬件部分的东西也挺好,而且有一个当下的 schedule 可以跟。上完 61C 再来开 CS 164 坑吧。

晚上的空余时间依然交给 Babel,修复了一个 regression 类的问题,吐槽一下 Facebook 的 Flow 做得真是对编译器不友好。这么一份 JavaScript 语法扩展居然没有一份标准规约,这就是私有标准(尽管源码公开,但是只有 Facebook 实现了 flows)的麻烦。对比之下 TypeScript 就好多了:https://github.com/microsoft/TypeScript/blob/master/doc/spec.md

微软真的不是过去的微软了。
回复

使用道具 举报

🔗
张智玮 2019-7-17 13:30:18 | 只看该作者
全局:
lizhi931104 发表于 2019-6-4 22:21
楼主,请问怎么可以下载到61c的lab和proj的code呢?

补充内容 (2019-6-4 22:24):

lab 和 proj 一般官网就有,但是要看视屏课的话必须是学生邮件登录的youtube才能看到
回复

使用道具 举报

🔗
张智玮 2019-7-17 13:31:37 | 只看该作者
全局:
关于61c,找不到视屏其实不要紧,我上过这门课,其实感觉lecture挺没用的,主要都是discussion比较有用。主要都是自学。
回复

使用道具 举报

🔗
 楼主| convoi 2019-7-17 23:51:35 | 只看该作者
全局:
张智玮 发表于 2019-7-17 13:31
关于61c,找不到视屏其实不要紧,我上过这门课,其实感觉lecture挺没用的,主要都是discussion比较有用。主 ...

Discussion、Lab、Project 都有很多额外的信息。Lecture 毕竟只是覆盖最基础的部分。不过 Summer 的 61C Lecture 每一次会提到两个 TA 的一些个人爱好,那一张幻灯片还挺好玩的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表