zoukankan      html  css  js  c++  java
  • 当我读《自己动手实现Lua-虚拟机、编译器和标准库》时我在想什么

    写在前面

    • 这本书长这样

      

    • 这本书用Go语言实现Lua(包括虚拟机、编译器和标准库)。
    • 本书的章节设计是我看过的专业书中设计最用心的,共21章,每章在前一章的基础上实现一个内容;平均下来每章的页数差不多,如果时间充分,一天读完一章(包括写代码)也是可以做到的。
    • 本书的写作方式仍然是我喜欢的“谈话口吻”,非常详细,非常体贴我一个开头并不了解“虚拟机是什么”种种问号的人。
    • 我认为它可以归到“能顺顺利利读下来的专业书”一类。

    一些准备

    • 心理准备:在下定决心读完这本书前,我翻了翻前言,感觉是“要读此书,先需要会Go语言,需要了解编译原理”,但我不会Go,也不会编译原理,如果真想读完这本书,感觉要花很多时间先去学Go和编译原理!Go倒还好说,我学到能基本看懂Go代码的程度就差不多了,这个花不了多久,但让我先弄懂编译原理实在有难度,而且我再一搜《编译原理》,真是好厚一砖头书!这会不会和我“实现Lua”的目标南辕北辙呢?“到底要不要读完这本书”,做这个心理准备真的做了很久,最后下的决定是先读起来,Go和编译原理它要用到的时候再去另外看。结果我发现读起来的时候,Go语言我是推迟到第2章一半内容读过去了才开始学的,学Go期间也在每天读这本书,只不过阅读进度缓慢;至于编译原理,我发现完全不用提前学,因为这本书就是在教我什么是编译原理,虽然我还没翻过《编译原理》一书,无法和它做对比,但我觉得既然它已经教会我成功“实现一种语言”,那《编译原理》想告诉我的,这本书也同样告诉了我。
    • 搭建环境:“学一种语言,最难的一步就是第一步”,放在这里就是搭建环境,为了能成功跑出Lua语言和Go语言版的Hello World,我在搭建环境上花了不少时间,为此特意各写了一篇博文做踩坑记录( Lua:Windows快捷安装Lua ,Go:Windows用VSCode搭建Go环境 );读书到后期第19章,还需要先安装gcc编译器,不然会报无gcc错误,gcc编译器安装可以参考这两篇博文(博文1博文2)。
    • 命令行:因为此书是在Mac环境中敲的代码,而命令行内容在Mac和Windows上略有不同,我特意在G站上另外开了一个记录此书Windows相关命令行内容,方便不关心命令行差异的同学们直接复制使用就行。

    一些感想

    • 我出于想要了解“为什么Lua就能实现热更新”的目的,开始搜索Lua相关书籍,结果除了《Lua程序设计》,还有《Lua设计与实现》,而《自己动手实现Lua》一书是在前两本书的参考下写作出来的,于是我把这三本书都买下来,到手先翻了翻。《Lua程序设计》是我的入门书在此略过,《Lua设计与实现》更像分析Lua源码的理论书籍,而《自己动手实现Lua》有实践部分能让我留下印象,所以我才选择这本书开始阅读,但读完感觉此书并没有介绍到热更部分。不过我在《Lua设计与实现》一书目录上有看到热更部分,所以我的下一本书会是阅读《Lua设计与实现》。
    • 虽然阅读目的没有实现,但我顺便学会了虚拟机和编译器(我的成品)。
    • 此书已经极尽所能讨论且实现了Lua的重要部分,对于我关心的userdata类型,GC垃圾回收等内容没有讲述,在阅读过程中也有一些小问题没有解决,我还需要阅读其他资料,继续把Lua琢磨明白。

    参考

  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/caiger-blog/p/12992580.html
Copyright © 2011-2022 走看看