找回密码
 立即注册
查看: 365|回复: 5

如何深入学习Lua?

[复制链接]
发表于 2023-5-22 11:15 | 显示全部楼层 |阅读模式
我们公司基于本身的游戏引擎,使用Lua开发游戏,看不到引擎源代码,一切都是封装好了的。Lua很容易上手,公司招聘一个新人,一两周就能上手。写Lua脚本,感觉没什么技术挑战,感觉这样长久待下去,本身的职业和技术成长会很没用前途,请问我该怎么办? 跳槽好呢?还是做好目前的工作深入学习Lua以及相关技术? 技术大牛们是怎么对待Lua的?
发表于 2023-5-22 11:16 | 显示全部楼层
Lua. URL: http://www.lua.org/
这次读的是 Lua 官方的文档。之前已经读过 Roberto Ierusalimschy 之 Programming in Lua 但那是比较早期的免费版本,没有涉及 Lua 后续更新的内容。况且,再完善的书在语法和库函数的细节上也不可能和官方文档相比。因而这次又浏览了一下 Lua 的官方文档。
Lua 官方文档大致分两部分。第一部分是对语法、语义以及虚拟机运行原理的介绍。这一部分写得就像一本入门教科书,只不过内容编排更加贴近语言的知识结构本书。第二部分则是对 Lua 标准库的介绍。需要注意的是, Lua 的标准库分为两个部分,一部分是 Lua 语言内部调用的标注库。一部分则是 提供给 C 的 Lua-C API,提供 Lua-C API 是为了方便从 C 中操作或调用 Lua。能让 C 语言方便地调用 Lua 程序,并与之集成是 Lua 设计的初始目标之一。
相比于 Programming in Lua 这本书的旧版,官方文档除了在函数和语法细节上介绍得更全面以外。还介绍了新版本的一些新功能。比较重要的我认为有两点:其一是对二进制操作的支持,其二是对 UTF 的支持。这两点都是不破坏 Lua 原有紧凑性前提下的重要功能扩充。
<hr/>求点赞,求收藏,求分享
欢迎关注我的公众号,微信搜索:知则
发表于 2023-5-22 11:17 | 显示全部楼层
可以阅读《 Lua程序设计》。
这本书是由 Lua 语言作者亲自撰写的。权威,不枯燥,书中还有一些使用 Lua 的高阶技巧。每章后还附有习题,网上可以找到习题的答案,可以在学习完每章节后,上机实践完成习题,这样有助于理解 Lua 中的一些概念。
看书学习还不够,只有自己写才会真的理解。 这本书比较偏向于阐释 Lua 本身,想要更多了解 Lua 的真实使用场景,可以阅读一些 Lua 语言的项目源码。自荐一下,比如 Apache APISIX。
发表于 2023-5-22 11:17 | 显示全部楼层
根据你的兴趣,把它用到你的兴趣中来,既提升你的兴趣,还提升你的Lua的技术。
比如,我用Lua来搞技术分析,性能又好,还避免了C++的诸多缺点。
C++开发通达信的dll指标公式非常麻烦,需要dll编译、dll解绑然后捆绑之类繁琐操作,,有一定点更改就要这么重新来一遍;而且C++的语法一般也比较复杂,内存操作也有一定危险,那么脚本语言就没有这么繁琐了。
在下面这篇文章里,我基于JavaScript和Lua做了基于脚本的通达信dll指标,免去了以上麻烦。
tonyblackwhite:JavaScript和LUA脚本语言通达信DLL公式开发本文基于LUA开发了经典的考夫曼自适应均线通达信Dll指标。
考夫曼自适应移动平均线(KAMA)

考夫曼的适应性移动平均指数(KAMA)是由Perry Kaufman开发的一种智能移动平均指数。强大的趋势跟踪指示器基于指数移动平均线(EMA)计算,对趋势和波动都有反映。当噪音很低时,它会紧跟价格,当价格波动时,它会消除噪音。和所有移动平均线一样,KAMA可以用来观察趋势。价格交叉它表明一个趋势发生变化。价格也可以从KAMA反弹,因此它可以作为动态支撑和阻力。它经常与其他信号和分析技术结合使用。
本文的KAMA均线的算法来自考夫曼本人编写的《交易系统与方法》。
就是这本:


当然,可以提醒大家的是,中文版翻译得有点难懂,考夫曼本人对有些指标的算法也写得比较简单,因此许多指标可能做不出来,推荐看原版。



第5版长这样



第6版长这样

在通达信Lua版dll对应的文件tdxdlllua1.lua中输入如下代码:
function zeros(n)
delt={};
for i=1,n do
delt=0;
end
return delt;
end


function ta.AMA(PRICE,n,Nf,Ns)

local len=#PRICE;

local direction=zeros(len);

for i=n+1 ,len do
direction=PRICE-PRICE[i-n];
end

volatility=zeros(len);
delt={};
delt[1]=0;
for i=2,len do
delt=math.abs(PRICE-PRICE[i-1]);
end

for i=n,len do
local sum=0;
for j=1,n do
sum=sum+delt[i-n+j];
end
volatility=sum;
end

fastest=2./(Nf+1.);
slowest=2./(Ns+1.);

ER=zeros(len);
smooth=zeros(len);
c=zeros(len);

for i=n+1,len do
ER=math.abs(direction)/volatility;
smooth=ER*(fastest-slowest)+slowest;
c=smooth*smooth;
end

ama=zeros(len);
ama[n]=PRICE[n];
for i=n+1,len do
ama=ama[i-1]+c*(PRICE-ama[i-1]);
end

return ama;
end
   
local n=10;
local Nf=2;
local Ns=30;
out =AMA(A,n,Nf,Ns); 这里我捆绑了通达信的5号dll。效果如图:


应用效果如下,这里我用于上证指数(数据截止2021年8月10日),选择的“主图叠加”,可以看出,KAMA对于趋势跟踪得相当完美:


这里Lua版的计算结果和JS版的效果完全一样。二者语法也相当接近,都能很好的完成计算。当然Lua脚本的计算性能要更好,因为Luajit很强大。
JS版的见这篇:
<a href="http://zhuanlan.zhihu.com/p/398442806" data-draft-node="block" data-draft-type="link-card" data-image="http://pic2.zhimg.com/v2-12cbfbe6d5aaf2f531db317d33ea9d3d_ipico.jpg" data-image-width="800" data-image-height="800" class="internal">tonyblackwhite:通达信dll之JavaScript版考夫曼自适应均线需要进一步指出的是,本文的算法结果与TA-lib的卡夫曼自适应均线的计算结果完全一致。
但是这里为了demo,算法基本是由伪代码直译过来的,没有加入任何优化,因此性能应该是不如TA-lib的,但是在通达信上的测试表明,做分析完全够用了,没有出现性能不够卡顿情况。
当然,不怕麻烦,完全可以直接用C++调用TA-lib,然后制作通达信dll指标。
当然Luajit有ffi,lua有cffi,二者都可以直接调用TA-lib的dll,也很方便。Lua语言本来就是个C语言的调包侠。有兴趣可以私我或者加Q:2795035196

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-5-22 11:18 | 显示全部楼层
lua语言虽然精巧,但是麻雀虽小,五脏俱全,是一门非常有研究价值的语言,如果想深入研究lua语言,理解它是怎么构建的,是非常有意义的,刚好今天在另一个问题上回答了如何构建lua解释器,在这里做一下搬运工
如何自己手动编写一个lua解释器?以上。
发表于 2023-5-22 11:19 | 显示全部楼层
如果你喜欢技术就去做深入研究,找相关工作去做。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-25 00:03 , Processed in 0.108055 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表