zoukankan      html  css  js  c++  java
  • lua2c

    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之后的版本, 性能好些,但是不明显。 猜测跟脚本内容有关。

  • 相关阅读:
    查看文件夹内各文件数目
    Resnet论文翻译
    查看keras自动给文件夹标号
    文件夹内自动图片遍历
    将wiki人脸数据集的性别信息提取出来制作标签
    将wiki人脸数据集中的图片按男女分类
    IPFS私有网络集群搭建
    带参数的函数增加装饰器
    【IPFS + 区块链 系列】 入门篇 — IPFS环境配置
    程序员那些事儿:技术骨干的烦恼
  • 原文地址:https://www.cnblogs.com/lightsong/p/5299738.html
Copyright © 2011-2022 走看看