lua不同写法速度差别很大

 

前些天无意中在网上看到一篇文章,写的是几种脚本语言以及c的速度比较,大意是测试下来lua的速度很慢,只相当于c1/60左右,看了一下测试函数,如下(命名版本1):

 

tkstart = os.clock()

 

local count = 10000000

local accumv = 34.5;

local function iterate (times,accumv)

    if 0 == times then

        return accumv

    else

        return iterate (times - 1, accumv + 2)

    end

end

print(iterate(count,accumv))

 

print(os.clock() - tkstart)

 

这是个迭代调用,理论上这种调用速度不快,所以改写了一下,命名版本2

 

tkstart = os.clock()

 

local i=0.0;

local function process (ret)

 while(i < 10000000.0) do

  i = i+1.0

  ret = ret + 2.0

 end

 return ret

 

end

 

process(34.5)

print(os.clock() - tkstart)

 

再改写了一下,版本3,如下:

 

tkstart = os.clock()

 

local i=0.0;

local function process (ret)

 local t = ret

 while(i < 10000000.0) do

  i = i+1.0

  t = t + 2.0

 end

 return ret

 

end

 

process(34.5)

print(os.clock() - tkstart)

 

for循环再改写了一个版本,版本4,如下:

 

tkstart = os.clock()

 

local count = 10000000

local accumv = 34.5;

local function calc (times,accumv)

        local result = accumv

        for i=1,times do

                result = result + 2.0

        end

        return result

end

print(calc(count,accumv))

 

print(os.clock() - tkstart)

 

简单测试耗时如下

版本1  0.945

版本2  0.484

版本3  0.475

版本4  0.138   编译成.out跟直接执行.lua耗时差不多,没明显变化。

虽然是一个功能很简单实现也很简单的lua函数,但速度差别很大,由此可见不同写法对执行效率影响很大,跟版本4差不多的c程序执行耗时大约为0.016, lua大致相当于c1/8 - 1/9速度,而不是那篇文章的作者认为的只相当于c1/60

 

从上面四个不同代码大致可以看出以下问题:

1、  迭代算法是很慢的(版本1)。

2、  While的效率比for慢很多(版本234的比较)。

3、  临时变量比参数效率高(版本23)。

 

<think>嗯,用户想了解Lua和Java的相似度。首先,我得回忆一下这两种语言的特点。Lua脚本语言,而Java是编译型语言。不过用户可能更关注它们的语法、用途或者设计理念上的异同。 用户可能不太熟悉编程语言分类,需要先简单说明两者的类型。Lua作为脚本语言,常用于嵌入其他应用,比如游戏开发中的Lua脚本。而Java多用于企业级应用和安卓开发。这可能是用户想知道的背景信息。 接下来是语法对比。Lua的语法比较简洁,变量不需要声明类型,动态类型。而Java是静态类型,需要显式声明。比如变量定义,Lua是local a = 5,Java是int a = 5;。用户可能想知道这些差异是否导致相似度低。 还有,面向对象方面,Lua用table模拟对象,而Java是纯粹的面向对象。这里要说明两者在OOP实现上的不同,但Lua更灵活,而Java更严格。用户可能关心它们在编程范式上的区别。 性能方面,Java运行在JVM上,通常更快,Lua作为脚本语言更轻量但可能一些。不过用户可能对性能差异的实际影响感兴趣,比如在游戏中的使用。 应用场景的不同也很重要。Lua适合嵌入、快速开发,Java适合大型应用。用户可能想根据用途选择语言,需要指出各自的优势。 用户可能的深层需求是选择学习哪个语言,或者了解它们在项目中的适用性。需要比较两者的优缺点,帮助用户做决策。 总结时,要强调虽然语法有差异,但编程思维有共通之处。用户可能想了解学习其中一种后是否容易掌握另一种,可以提到基本概念如循环、函数的相似性,但核心设计不同。 要确保回答结构清晰,分点说明,同时保持口语化,避免技术术语过多。最后给出实际例子,比如变量定义、函数和循环的写法对比,让用户更直观理解。</think>让我们分步骤比较Lua和Java的相似度: 一、语言类型差异 $$ \text{Lua} \in \text{脚本语言} \quad vs \quad \text{Java} \in \text{编译型语言} $$ - Lua采用解释执行(通过Lua虚拟机) - Java先编译为字节码再通过JVM运行 二、语法特征对比 1. 变量声明 ```lua -- Lua示例 local num = 10 -- 动态类型 ``` ```java // Java示例 int num = 10; // 静态类型 ``` 2. 面向对象实现 - Lua使用table模拟对象: $$ \text{对象} = (\text{table} + \text{元表}) $$ - Java基于class的严格OOP: $$ \text{类} \rightarrow \text{继承} \rightarrow \text{多态} $$ 三、核心相似点 1. 基础语法结构 - 都支持:`for`/`while`循环、`if`条件判断 - 函数定义方式类似 ```lua function add(a, b) end ``` ```java int add(int a, int b) {} ``` 2. 垃圾回收机制 - 均采用自动内存管理 $$ \text{GC算法} \neq \text{具体实现} $$ 四、典型应用场景 | 特征 | Lua | Java | |-----------|----------------------|--------------------| | 运行环境 | 嵌入宿主程序 | 独立JVM | | 常见用途 | 游戏脚本、配置文件 | 企业应用、安卓开发 | | 性能特征 | 轻量快速但效率较低 | 重型但运行效率高 | 五、学习曲线关系 $$ \text{Java经验} \rightarrow \text{帮助理解Lua基础逻辑} $$ $$ \text{Lua经验} \nrightarrow \text{直接掌握Java高级特性} $$ 总结建议:如果您已有Java基础,学习Lua时需要注意其弱类型特性和灵活的元表机制。二者在基础语法层面的相似度约为35%,但在设计理念和应用场景上差异显著。根据具体需求选择:需要高性能系统开发选Java,需要轻量级脚本嵌入选Lua
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值