lua2c

lua2c is a Lua module and utility to convert Lua 5.1 source code to C API code.

http://lua-users.org/wiki/LuaToCee

  This utility converts a given Lua source file into an equivalent C source file written in terms of Lua C API calls. At least, this works for a large subset of the Lua language (see limitations below).

基于特定lua版本, 将lua代码转换为 LUA C api实现实现的c代码。 能够满足lua语言的大的子集。

代码:

https://github.com/davidm/lua2c

使用

Example usage:

lua lua2c.lua test/bisect.lua

which generates a C file similar to as shown here: [bisect.c].

可见 功能是使用lua脚本实现。

项目还提供了一个 shell 工具, 可以集成 翻译(lua-》c), 编译(c-》机器码), 执行(execute)于一体。

./clua test/bisect.lua

当然也可以只编译,不运行:

lua2c can even compile itself! (Note: the -c option compiles only without running.)

./clua -c lua2c.lua               # compile lua2c binary

./lua2c examples-lua/bisect.lua   # test

对比

lua2c的作用猜测是, 提升代码运行效率。

以此项目 bisect.lua 脚本为研究对象,  使用luac将其编译出一份C的版本,

与lua的版本实现做性能对比, 运行 1000次。

C版本运行脚本:

root@fqs:/home/sambadir/lua2c-master/lua2c-master# cat time_c.sh
#!/bin/bash
# while-count: display a series of numbers

date_start=$(date +%s)

count=1
upboundary=1000
while [[ $count -le upboundary ]]; do
    ./bisect.o
#    echo $count
    count=$((count + 1))
done

date_end=$(date +%s)

time=`expr $date_end - $date_start`

#time=$($date_end - $date_start)

echo $time

lua版本运行脚本(仅仅运行语句与c不同):

root@fqs:/home/sambadir/lua2c-master/lua2c-master# cat time_lua.sh
#!/bin/bash
# while-count: display a series of numbers

date_start=$(date +%s)

count=1
upboundary=1000
while [[ $count -le upboundary ]]; do
    lua ./examples-lua/bisect.lua
#    echo $count
    count=$((count + 1))
done

date_end=$(date +%s)

time=`expr $date_end - $date_start`

#time=$($date_end - $date_start)

echo $time

虽然脚本中有计算时间的部分, 但是只能达到秒的级别。 为精确计算时间, 我们使用系统的 time工具。

time /bin/bash time_c.sh

结果:

real    0m8.313s
user    0m0.464s
sys    0m0.756s

-----------------------

time /bin/bash time_lua.sh

结果:

real    0m8.770s
user    0m0.720s
sys    0m0.752s

=== 总体上, 是翻译成c之后的版本, 性能好些,但是不明显。 猜测跟脚本内容有关。

lua2c的更多相关文章

随机推荐

  1. 【BZOJ】3028: 食物

    http://www.lydsy.com/JudgeOnline/problem.php?id=3028 题意: 每种食物的限制如下:汉堡:偶数个:可乐:0个或1个鸡腿:0个,1个或2个蜜桃:奇数个鸡 ...

  2. SDL2.0学习

    http://www.ffmpeg.org/download.html http://doc.okbase.net/leixiaohua1020/archive/110977.html  //视频 h ...

  3. Emmet:HTML/CSS代码快速编写神器

    本文来源:http://www.iteye.com/news/27580    ,还可参考:http://www.w3cplus.com/tools/emmet-cheat-sheet.html Em ...

  4. OpenCV 3.0 CvMat and cv::Mat Conversion

    After OpenCV 3.0, CvMat cannot be directly converted to cv::Mat, we need to use function cvarrToMat( ...

  5. Odoo attrs X2many 类型的过滤

    有童鞋在群里问到 attrs 中的 many2many类型的字段该如何进行domain过滤,其实非常简单: Many2many的字段在js中获取的值的格式为[[6,false,[]]] 所以attrs ...

  6. ubuntu上安装Eclipse时遇到的一个错误

    A Java Runtime Environment (JRE) or Java Development Kit (JDK)must be available in order to run Ecli ...

  7. javascript阻止事件冒泡的兼容写法及其相关示例

    //阻止事件冒泡的兼容写法 function stopBubble(e){ //如果提供了事件对象,则是一个非IE浏览器 if(e && e.stopPropagation) //因此 ...

  8. Eclipse 官方简体中文语言包下载地址及安装方法

    Eclipse 官方简体中文语言包下载地址及安装方法 打开Eclipse Babel Project 主页: http://www.eclipse.org/babel/downloads.php 根据 ...

  9. 怎么配置Java环境变量?

    右键计算机 -> 属性 -> 高级系统设置 -> 环境变量,   在系统环境变量添加以下三条变量. 1. PATH, 配置JDK命令文件的位置. 输入“%JAVA_HOME%\bin ...

  10. IOS第八天(5:UITableViewController新浪微博, 计算行高)

    在 4 的 基础上重写 以下的方法 control #pragma mark - 代理方法 /** 计算单元格行高 */ - (CGFloat)tableView:(UITableView *)tab ...