0%

Lua

JSON(JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


二、做事方式

一、概念

      Lua是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

      Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

二、介绍

  1. 数据类型
数据类型 描述
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)
boolean 包含两个值:false和true
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表
  1. 特性

    • i,j = j,i – 交换变量的值
    • table默认初始索引一般以 1 开始
    • table访问时支持table[i]table.i
    • 在Lua中false和nil为假,true和非nil(包括0)为真
    • #返回字符串或表的长度,如#”Hello” 返回 5
    • for var=exp1,exp2,exp3 do <执行体> end:var 从exp1变化到exp2,每次变化以exp3(可选,默认为1)为步长递增var,并执行一次”执行体”
    • 字符串的定义方式
    • 单引号’string’
    • 双引号”string”
    • [[string]]
  2. 协程

    • Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西
    • 一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行
    • 在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起
    • 协同程序有点类似同步的多线程,在等待同一个线程锁的几个线程有点类似协同
  3. 面向对象

    • 用table来描述对象的属性
    • 用function可以用来表示方法
    • LUA中的类可以通过table+function模拟出来

三、垃圾回收

      和大多开发语言一样,Lua也采用了自动内存管理,它运行了一个垃圾收集器来收集所有死对象(即在Lua中不可能再访问到的对象)来完成自动内存管理的工作。具体就是Lua实现了一个增量标记-扫描收集器,它使用这两个数字来控制垃圾收集循环:垃圾收集器间歇率和垃圾收集器步进倍率,这两个数字都使用百分数为单位。

  • 垃圾收集器间歇率控制着收集器需要在开启新的循环前要等待多久。增大这个值会减少收集器的积极性。当这个值比100小的时候,收集器在开启新的循环前不会有等待。设置这个值为200就会让收集器等到总内存使用量达到 之前的两倍时才开始新的循环
  • 垃圾收集器步进倍率控制着收集器运作速度相对于内存分配速度的倍率。增大这个值不仅会让收集器更加积极,还会增加每个增量步骤的长度。不要把这个值设得小于100,那样的话收集器就工作的太慢了以至于永远都干不完一个循环。默认值是 200,这表示收集器以内存分配的”两倍”速工作

四、安装

Lua并不象其它许多”大而全”的语言那样包括很多功能,比如网络通讯、图形界面等,它提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。

  1. Linux下安装(centos7)

    1
    2
    3
    tar zxf lua-5.3.5.tar.gz
    cd lua-5.3.5
    make linux test
    • 查看安装是否完成 lua -v
  2. Mac下安装

    • cd /usr/local/src
    • sudo wget https://www.lua.org/ftp/lua-5.3.5.tar.gz
    • sudo tar -zxvf lua-5.3.5.tar.gz
    • cd lua-5.3.5
    • sudo make macosx test
    • sudo make install
    • lua -v

五、参考

  1. 参考一

热更框架xLua

一、介绍

      热更新是一种各大手游App常用的更新方式,简单来说就是在用户通下载安装APP之后,打开App时遇到的即时更新。热更新就是动态下发代码,它可以使开发者在不发布新版本的情况下修复BUG和发布功能,让开发者得以绕开苹果的审核机制,避免长时间的审核等待以及多次被拒造成的成本。

      xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈。自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub。xLua最大的特色是不仅支持纯lua脚本热更,更是可以做C#代码的bug hotfix,即平时开发时使用C#,项目上线后如果突然发现有bug,可以直接用lua去修复出bug的地方,原理就是通过[Hotfix]特性标记然后在IL逻辑层判断修改逻辑,使程序去执行更新后的lua逻辑代码而不是走之前的C#逻辑。

二、使用

待补充

三、参考

  1. 参考一
  2. 参考二