百科问答小站 logo
百科问答小站 font logo



C语言学到什么程度可以看Lua的源码? 第1页

  

user avatar   airtrack 网友的相关建议: 
      

首先你需要学会lua(不仅仅是C语言水平的问题),这里的学会我指的是能用lua写个几千上万行业务代码,对lua有了一定的理解,再根据你自己理解找找对lua哪方面感兴趣,专门针对那方面去看lua的代码,比如函数调用是怎么实现的(以及与C语言怎么交互的)、lua的debug库是怎么提供hook指令执行的等等。你看云风那么多lua分析的文章都是这段时间关注GC就看GC的实现,那段时间关注string的实现就看string的相关代码。找到你关注的感兴趣的部分去看,比你在14588行代码(lua 5.2.3的代码,排除注释和空行)乱无头绪的看要好多了。

如果你想通过看lua代码学习编译原理的知识,那自然就看词法分析、语法分析、代码生成及VM代码,这方面我曾写过三篇博客(

lua源码剖析(一)

lua源码剖析(二)

lua源码剖析(三)

)。不过我不推荐通过lua源码来学习编译原理,因为很难在lua这种工业级的解释器里理清交杂在一起的语法分析、语义分析以及代码生成。lua本身是一个一遍式的编译器,我觉得对于初学者来说这是不好理解的,在这个一遍式的编译器里还交杂着GC和运行时报错的准备工作,另外一方面lua的代码变量太短,经常是一个字母,不好读(至少我是这么认为的),各个模块之间耦合也很大程度的影响理解。我觉得学习编译原理最好的方式是,先通看一遍编译原理,然后硬着头皮写一个渣编译器(解释器),这时候你再来看lua这块的代码会好很多。我在看lua代码之前,就是自己实现了一个lua的子集,我目前正在写第二版的实现(luna第二版:

airtrack/luna · GitHub

只是子集,没有metatable userdata coroutine等东西),luna的第一版我实现了一个渣一般的栈虚拟机,在看了lua的代码之后,我想实现一个寄存器虚拟机,于是写了第二版。在写第二版的时候有时候遇到某个问题,觉得我自己的想法实现成本太高时(运行时的时空代价),我就会看看lua是怎么实现的,比如运行时报错(f()函数调用,f本身不是函数的报错),而这时候我已经有过自己的思考,再去看lua的这块实现,看代码3-5分钟就看到了重点,醍醐灌顶,然后迅速的实现出来。其实到目前为止我都没有完整的看过lua的代码。

另外lua的是一个工业级的解释器,它的很多实现方式是有效率考虑的(比如一遍式的编译),而且很多实现方面都是在它这个语言之下是很优的(也许是最优的),如果换做另外一门语言,是不能完全套用它的实现方式,当然原理是通的,所以我觉得关键还是理解实现后面的原理,不单单是看怎么实现的。




  

相关话题

  初一就学会了五种编程语言算不算超越同龄人呢? 
  高级语言为什么要添加数据类型? 
  C、C++、Java、JavaScript、PHP、Python、Ruby 这些语言分别主要用来开发什么? 
  为什么计算机采用补码而不是原码或反码? 
  C 语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解? 
  C 语言中不同类型指针的大小是否完全相同,为什么? 
  你见过哪些神一样的优化操作? 
  为什么把内核镜像放在u盘里,电脑(BIOS)加载失败? 
  怎样才算精通SQL? 
  程序员面试,面试官更注重代码量、项目经验还是操作系统、数据结构这种基础课程?两者比例是五五开还是多少? 

前一个讨论
如何看待余承东转发《跌倒华为,吃饱苹果》表示高端产品让给苹果,中低端给了OPPO,vivo和小米?
下一个讨论
如何看待摩尔庄园手游的偷牛BUG?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利