代码流程分析

本文探讨了Larva语言在代码流程分析中的挑战,包括函数返回值处理、死代码检测以及变量初始化分析。针对Larva函数自动返回`nil`的特点,提出了在编译阶段检查函数最后一个语句的解决方案,并讨论了其局限性。同时,文章还提到了其他类型的死代码检测,如条件语句和循环中的未执行代码。此外,文章指出Larva在变量初始化方面的规定,以及与C++等语言的对比,强调了正确初始化和依赖关系的重要性。
摘要由CSDN通过智能技术生成
在larva的语义和流程分析上,我偷了很大的懒,基本等于没做,因为觉得做起来太麻烦了


流程分析可以在一段语法上完全没有问题的代码中,找出可能有问题的代码,这个不同编译器支持程度也不同,其实在绝大多数情况下,不做这个问题也不大,不过larva面对了一个相关的不可逃避的问题,因为它和python一样有一个特性:若一个函数或方法最后没有return,则自动return一个空对象,larva中是nil,python中则是None,比如:
func f():
    print "hello world"
f最后应该隐式return nil


根据实现的不同,这个问题也有各种程度的解决办法
最简单的就是编译器不做任何处理,采用解释器执行,无论是解释ast还是字节码,若一个函数执行到最后还没有return,虚拟机就自动return nil
另一个简单方法是,无论何种情况,给函数后面加一个return nil即可,虽然会造成下面这种情况:
func f():
    return 0
    return nil
但这在语法上是正确的,执行也没有问题,只是最后的return永远执行不到而已,就是占用代码空间
不过larva并不能用上述这两种方式,原因有两点:
1 larva的实现可能是(也是目前唯一的方式)转换为其它代码,而其它语言的编译器可能很严格&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值