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?的更多相关文章

  1. lua执行字节码的过程介绍

    前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...

  2. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  3. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  4. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  5. 打印Lua的Table对象

    小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...

  6. lua解析赋值类型代码的过程

    我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...

  7. 怎么调试lua性能

    怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...

  8. Lua 安全调用 metatable 的简单应用

    事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...

  9. 让Lua自己把文件夹下面的所有文件自动加载起来吧

    没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...

  10. 让Lua支持Linq吧

    第一次接触Linq是在使用C#的时候,这种语法,在处理列表数据非常方便.如果想了解Linq的更多内容可以百度一下Linq,不过你不了解也没关系,让我在Lua中给你展示一下Linq的魅力.简单点说,Li ...

随机推荐

  1. linux怎么实时查看目录下是否有文件生成

    inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件. inotify-tools是用 ...

  2. Python学习之路基础篇--06Python基础+dict的学习

    字典和列表其实差不多,所说3.6 之前的版本字典是没有顺序的.是Python中唯一的映射数据类型,key 是可哈希(不可变数据类型),如元组.bool.int 和 str:value 是任意数据类型. ...

  3. leetcode 813. Largest Sum of Averages

    对于一个数组中的数进行分组,取每个组里的平均值进行加和的. 使用动态规划,其中dp[i][k]表示以i为结尾的有k个分组的,那么递推式为: dp[i][k]=dp[j][k-1]+(sum[i]-su ...

  4. 基于webpack的react开发环境搭建新手教程

    最近学习react-webpack项目搭建,找到一篇我认为不错的博客,跟着学习了一番,写得很详细很好,本篇博客纯属记录总结,要看更详细的搭建过程及解析,请戳: 基于webpack的React项目搭建( ...

  5. XSS学习(二)

    尝试操作Cookie 创建一个cookie,需要提供cookie的名字,值,过期时间和相关路径等 <?php setcookie('user_id',123); ?> 它的作用是创建一个c ...

  6. django中云存储静态文件

    Django自带文件存储系统存储在本地文件夹,如果我们将文件存储在云端,需要自定义文件存储系统. 自定义文件存储系统需要继承django.core.files.storage.Storage from ...

  7. Fish 下报错 Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'.

    在用fish激活virualenv虚拟环境时,使用命令: source ./venv/bin/activate 报错 ./venv/bin/activate (line 23): Unsupporte ...

  8. sed命令讲解

    sed命令选项及作用 -n 不打印所有的行到标准输出 -e 表示将下一个字符串解析为sed编辑命令 -f 表示正在调用sed脚本文件 sed编辑命令 p 打印匹配行 = 打印文件行号 a\ 在定位行号 ...

  9. 1-Two Sum @LeetCode

    1-Two Sum 题目 思路 题目中得到的信息有: 都是整数,并且可正可负,也可一个值包含多个: 只有一个正确的结果. 方法一: 最直接的思路就是两重循环遍历,时间复杂度是O(n^2),这样肯定不行 ...

  10. Just nothing

    I know that's I should do what I can to find a job But I can't focus on it I am always sad and I can ...