Why Lua?
Why Lua?
最近在很多的地方都遇到了lua这个东西,于是想一探究竟,为什么这么多的游戏前端都用了Lua脚本呢?
于是乎简单的看了一下Lua,目前总结出来了几点~
还是先放上资源:
GitHub上Lua的开源项目:https://github.com/rjpcomputing/luaforwindows/releases
(1)从语言上来说呢,Lua是一种小巧的脚本语言(像js,python等脚本语言),用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能;一些游戏(或者说许多游戏)核心部分是用c/c++来写的,不是说一定得用Lua这样的脚本语言,但c/c++在前端写起来会非常的臃肿,为什么不用小巧的Lua等脚本语言代替呢?既有c/c++的功能接口,又显得不那么多,
可以看到,Lua非常的小了,虽说看过Python和Lua,发现这2者在许多地方都非常的相似,但Lua要轻便的多,Lua一开始就把自己做的比较清爽,只做它该做的事,其它的都不管,小巧,灵活是它的特点;
Lua 特性:
轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里,
可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样,
其它特性:
支持面向过程(procedure-oriented)编程和函数式编程(functional programming),
自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象,
语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持,
通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等,
Lua应用的一些场景:
游戏开发(很多了),
独立应用脚本,
Web 应用脚本,
扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench,
安全系统,如入侵检测系统,
(2)热更新,尤其是对手游来说,这一点也是大佬告诉我的,热更新在游戏开发时是一件很重要的事情,不管是对于服务器还是客户端,总不能有一点改动就重新打包,发布,更新吧,热更新就是要让玩家感觉不到更新,而是我们在后台帮它做了,客户端使用Lua就能解决这个问题;
最后说一下看完Lua教程的感受:
我是先看完的Python,再看的Lua,初一看,我去,这么相似,可能是受java和c++的影响,初一看这样的脚本语言是会觉得语法呀,数据啊比较的相似,但你会发现每种脚本语言吸引人的地方都不一样,拿Python来说,初识Python的我对它的CGI编程非常感兴趣,而Lua给我的印象就是:小,但功能全;语法上让我这个c++出身的我有很大的强迫症,QAQ,功能上给我的感觉是在给像c/c++这类的大型语言做扩展,整体上来说不算太难,比较好入门,是值得一学的一门语言!
Valar Morghulis - @Arya
Why Lua?的更多相关文章
- lua执行字节码的过程介绍
前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...
- lua 学习笔记(1)
一.lua函数赋值与函数调用 在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...
- 在redis中使用lua脚本让你的灵活性提高5个逼格
在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...
- 使用Nginx+Lua代理Hadoop HA
一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...
- 打印Lua的Table对象
小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...
- lua解析赋值类型代码的过程
我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...
- 怎么调试lua性能
怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...
- Lua 安全调用 metatable 的简单应用
事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...
- 让Lua自己把文件夹下面的所有文件自动加载起来吧
没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...
- 让Lua支持Linq吧
第一次接触Linq是在使用C#的时候,这种语法,在处理列表数据非常方便.如果想了解Linq的更多内容可以百度一下Linq,不过你不了解也没关系,让我在Lua中给你展示一下Linq的魅力.简单点说,Li ...
随机推荐
- conts、var 、let的区别
1.const定义的变量不可以直接修改,通过 this.a = 'kkk' 进行修改, 而且必须初始化. 2.var定义的变量可以修改,如果不初始化会输出undefined 3.let是块级作用域,函 ...
- python 编写登陆接口
#!/usr/bin/env python#_*_ coding:utf-8 _*_dic={ 'yts':{'password':'123','count':0}, 'nick':{'passwor ...
- 在qt creator中使用imread并将图片显示到QLable中时没反应
调试时发现Mat m = imread("")函数运行了,但是将鼠标放在m上面时,发现m是空的,但是竟然能往下运行,简直恶心,于是我在后面加上判断m.empty(),发现返回了tu ...
- javaee设计模型简介
(一)五种模式 1.单例模式 在某些情况下,有些对象只需要一个就可以了,即每个类只需要一个实例.例如,一台计算机上的可以连接多台打印机,但是该计算机上的打印程序只能有一个,这里就可以通过单例模式来避免 ...
- RABBITMQ too many heartbeats missed
执行rabbitmqctl status | grep -A 4 file_descriptors 显示socket_used 达到 socket_limited 的值 增加socket_limi ...
- javascript DOM document属性
DOM控制页面中的所有元素 每个载入浏览器的HTML文档都会成为Document对象,利用它可对HTML页面中的所有元素进行访问 常用属性: title:返回或设置当前文档的标题 常用方法 write ...
- table动态增加删除
基于网上代码修改实现动态添加表数据行 <!DOCTYPE html> <html lang="cn"> <html> <head> ...
- Java修饰符final总结
final 的意思是最终的,不可改变的. final可以用来修饰 a.类. b.方法(包括类方法和对象方法). c.变量(包括成员变量.局部变量). 1. final修饰类: 用final修饰的类不能 ...
- VBA随机地牢生成
无聊啊--于是,我想做一个随机地图. 但是我很懒,不想做. 但是身体很诚实. 这次是直接在Excel中制作的地图,但是,VB的执行效率很慢,我代码的效率也很慢,导致,一旦地图长宽稍大,就会出现好几分钟 ...
- Vue --- :is
1.1 基本示例 <div id="app"> <!-- template slot transition --> <input type=" ...