lua学习笔记(二)
Lua变量12345678910111213141516171819202122232425Lua变量三种类型:全局变量(储存在名称为_G的table中)、局部变量、table中的域Lua中的变量全都是全局变量,即使在语句块或函数里,除非用local显式声明为局部变量局部变量作用域与C/C++概念相同变量默认值为nil]]-- test.lua文件脚本a=1 -- 全局变量local b=2 -- 文件内局部变量 function () c=5 -- 全局变量 local d=6 -- 局部变量endrua()print(c,d) --输出:5 nildo local a=6 -- 局部变量,这里局部变量覆盖了全局变量,引用外部全局变量时可以用_G.a来引用,类似于C/C++的::a b=6 -- 对局部变量重新赋值 print(a,b) -- 输出:6 6endprint(a,b) -- 输出:5 6
赋值语句123456789101112131415-- 赋值可以改变一个变量的值和表域a="hello" .. " ...
Lua源码笔记
用Lua开发游戏已经有一段时间了,但是对Lua的理解还一直停留在浅层。最近想深入研究下,于是着手开始看Lua源码,并在本文记录知识点。
模块GC1.基本数据结构Lua的基本数据结构是一个类型union+type。相关的核心代码如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647** Common type for all collectable objects*/typedef struct ;** Common Header for all collectable objects (in macro form, to be** included in other objects)*/ GCObject *next; lu_byte tt; lu_byte marked** Common type has only the common header*/struct { CommonHeader;};** Tagged Values. This ...
nginx与lua的执行顺序和步骤说明
一. nginx执行步骤
nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系,详细内容可以阅读《深入理解nginx:模块开发与架构解析》这本书,这里只做简单介绍;
1. post-read
读取请求内容阶段,nginx读取并解析完请求头之后就立即开始运行;
2. server-rewrite
server请求地址重写阶段;
3. find-config
配置查找阶段,用来完成当前请求与location配重块之间的配对工作;
4. rewrite
location请求地址重写阶段,当ngx_rewrite指令用于location中,就是再这个阶段运行的;
5. post-rewrite
请求地址重写提交阶段,当nginx完成rewrite阶段所要求的内部跳转动作,如果rewrite阶段有这个要求的话;
6. preaccess
访问权限检查准备阶段,ngx_limit_req和ngx_limit_zone在这个阶段运行,ngx_limit_req可以控制请求的访问频率,ngx_limit_zone可以控制访问的并发度;
7. access
权 ...
Lua特别之处笔记
<a href="/2015/02/02/gdb_tutorial/" rel="next" title="GDB基础教程">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
GDB基础教程
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item">
...
论文阅读:Ranking vs. Regression in Machine Translation Evaluation
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'],
inlineMath: [['$','$']]
}
});
</script>
来源:WMT Metrics Shared Task 2008
链接:Abstract or PDF
作者:Kevin Duh
单位:UWashington
阅读基础:本文前部为读者普及了Metrics的相关知识,读之即可。另外模型中用到的RankSVM1可以看一下(不看也行,读这篇论文关注的是思想)。
WMT历年来的一个重要任务就是为翻译结果设计评价指标,即WMT Metrics Shared Task.
metrics是给定译文和参考翻译,评价参考翻译的质量。
与之不同的是,q ...
Erlang+Lua的一次重构
目前所在的项目基于erlang cluster搭建框架,再接入lua用于写逻辑。由于之前有一些erlang+lua的开发经验,因此着手项目的重构和优化,过程中一些体会,记录于此。
先简述一下项目架构,erlang做集群,网络层,节点交互,DB交互等,lua层只写逻辑。一个erlang的Actor持有一个luastate,为了加速erlang和lua之间的交互效率:
将逻辑数据置于lua中而不是erlang中,在落地时,以二进制格式丢给erlang进行DB操作
以lual_ref和msgid等方式,尽量用整数代理字符串
erlang和lua异步运行,lua跑在原生线程池中,这在这篇博文中介绍过
除了这些,还需要注意lua的沙盒环境管理,错误处理,热更新等,这里不再详述。就目前这种结构而言,还有一些缺陷:
原子线程池忙碌可能导致的erlang虚拟机假死,需要保证原生线程池最多占用的核数不超过erlang虚拟机能使用的核数
lua state本身带来的不稳定性,特别是内存,在Actor过多时将会非常明显
第二点,也是目前我们遇到的最棘手的问题,我们知道,在lua中,模块,函数,均是一 ...
lua
介绍
Lua 是一个小巧的脚本语言。openresty采用的是LuaJIT 2 ,而不是标准的lua。
解释下什么是jit
LuaJIT 的运行时环境包括一个用手写汇编实现的 Lua 解释器和一个可以直接生成机器代码的 JIT 编译器。
Lua 代码在被执行之前总是会先被 lfn 成 LuaJIT 自己定义的字节码(Byte Code)。关于 LuaJIT 字节码的文档,可以参见:http://wiki.luajit.org/Bytecode-2.0(这个文档描述的是 LuaJIT 2.0 的字节码,不过 2.1 里面的变化并不算太大)。
一开始的时候,Lua 字节码总是被 LuaJIT 的解释器解释执行。LuaJIT 的解释器会在执行字节码时同时记录一些运行时的统计信息,比如每个 Lua 函数调用入口的实际运行次数,还有每个 Lua 循环的实际执行次数。当这些次数超过某个预设的阈值时,便认为对应的 Lua 函数入口或者对应的 Lua 循环足够的“热”,这时便会触发 JIT 编译器开始工作。
JIT 编译器会从热函数的入口或者热循环的某个位置开始尝试编译对应的 Lua 代码路径。 ...
Lua 学习 chapter27
目录
前言
第一个示例
lua堆栈操作
处理应用代码中的错误
内存分配
只有疯狂过,你才知道自己究竟能不能成功。
前言
lua是一种嵌入式语言,这就意味着lua并不是一个独立运行的应用,而是一个库,它可以链接到其它应用程序,将lua的功能融入到这些应用。
由于lua存在解释器(可执行的lua),所以我们可以独立的使用它,这个解释器是由lua标准库实现的独立解释器,它负责与用户交互,将用户的文件和字符串传递给lua标准库,由标准库完成主要工作。
因为能被当作ku来扩展某个应用程序,所以lua是一个嵌入式语言。同时,使用了lua语言的程序也可以在lua环境中注册新的函数,比如用c语言实现的函数,从而增加一些无法直接用lua语言编写的功能,因此lua也是一种可扩展的语言。
上述的两种对lua语言的定位,分别对应c语言和lua语言之间的两种交互方式。在第一种形式中,c语言拥有控制权,而lua语言被用作库,这种交互形式中c代码被称为应用代码。在第二种中,lua语言拥有控制权,而c语言被用作库,因此c代码被称为库代码。应用代码和库代码都是用相同的API与lua语言通 ...
lua代码风格
</header>
<div class="entry">
<h1 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h1><ul>
一、程序的版式
1.1 空行
1.2 空格
1.3 长行拆分
1.4 使用缩进
二、命名规则
2.1 共性规则
2.2 文件命名
2.3 类的命名
2.4 变量命名
2.5 常量,事件名的命名
2.5 枚举
三、文件组织
3.1 文件描述
3.2 文件中变量的定义
3.3 类变量的定义
3.4 函数参数的定义
3.5 函数的定义规则
3.6 注释的使用
三、分隔和缩进
3.1 使用空行
3.2 使用空格符
3.3 使用换行符
3.4 使用小括号
3.5 使用缩进
四、编程技巧
4.1 应该尽量使用local变量而非global变量
4.2 临时变量的处理
4 ...
Nginx 使用 lua
1. 软件版本
2. 环境准备
3. 软件安装
4. 配置lua脚本
5. 配置php
6. 配置日志,记录post请求的request_body 和response_body
1. 软件版本
系统 centos6.7X86_64
nginx 1.11.5
lua-nginx-module 0.10.7
PHP 5.6.27
2. 环境准备
配置yum仓库
wget -O /etc/yum.repos.d/CentOS-Base.repo[https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2](https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=2)
wget -O /etc/yum.repos.d/epel.repo[https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/epel?co ...