关于Lua语言的概述

关于Lua语言的概述

    @作者:evandrolg, 翻译:cloudfeng

我在2013年的时候才是玩Lua,是受到一个使用Lua有段时间,并且告诉我关于它好玩的事情的朋友影响。在那时,我已经有几年的编程的经验了,我已经与不同的语言模式都打过交道,比如Python、Ruby、JavaScript、Shell、C#和Java,并且使用它们有一定程度的专家水平。

从那以后,我使用经常使用Lua编程,并且在一定程度上把Lua当作工作之外最喜欢的语言来做开发。此外,我在周末的时间做了一个小应用程序:Pegasus.lua,在空余时间开发了以开源的http服务器,它完全是用Lua编写的。

我不具备Lua开发者社区所具备的传统技能。我只是一个web开发人员,主要是把Lua作为C/C++应用的嵌入脚本语言。而Lua开发者社区的焦点是因为Lua作为一种高层次的语言,它具有快速、轻量级的解释器(Lua的解释器大小小于200kB!),而不像其他的动态语言,比如Python和Ruby。

Lua语言中最让我关注是它的简单性。Lua的语法极其友好并且有一个干净的核心,具有编程经验的人(特别是对解释型语言有一定了解的人),能够在几分钟之内就能掌握Lua语言。实际上,我认为Lua是我学习编程语言中最为简单的一种语言,主要是因为Lua没有复杂的语法,而且我有JavaScript编程工作经历(是的,Lua与JavaScript十分相似,但是这就是它的优点!)

下面列出Lua的优点和缺点是我在使用Lua所发现的:

优势:

  • Lua实际上有8种类型:nil,string(字符串),number(数值类型),function(函数),boolean(布尔类型),thread(线程), userdata(用户类型)和table(表) (表是此语言中最牛的魔术)

  • 在Lua中你不能通过类实现面向对象编程,但是可以像Self,JavaScript和Io一样通过原型实现面向对象技术。

  • 元表是一个很棒的主意!尽管刚开始的时候我对它感到十分困惑,但是员表的概念在Lua中是十分棒的。它是一种显示的技术实现操作符的重载,同时也可以扩展对象(表)的属性。

  • 在Lua中,函数是第一类值,与JavaScript十分相似。这意味着,Lua允许程序员可以把函数做为函数的参数、可以把它声明为变量、可以把它存在数据结构中,在JavaScript中对函数的操作都可以应用到Lua中。我最为喜欢Lua中对函数如此方便操作。

  • 支持闭包;

  • 你可以通过return语句来导出模块。Ok,详细的说,当我第一眼看到Lua的这种语法的时候,我感觉到特别的自然。

  • 支持协同程序

  • Lua解释器相比于其他动态类型语言,比如PHP、Python、Ruby,甚至Node.js都要快。

  • 简单的实现元编程技术(ok,它是一种动态语言...)

  • 尽管Lua已经减少了核心特性的数目,但是它允许程序员使用简单的方式扩展语言的特性,比如:

  • LuaJIT 是目前动态语言中最快的即时编译器之一。

缺陷:

  • 缺少debug工具的支持。我知道很多程序员并不使用debug工具,但是我真喜欢此类工具并且我一直通过print方式来debug我的代码。

  • Lua没有传统的错误处理方式,比如trycatchfinally。事实上,你可以用pcall函数来处理错误,但是我认为这种方式不是十分自然。每次我需要处理错误的时候,我经常使用下面try-catch方案

-- try-catch.lua
function catch(what)
    return what[1]
end

function try(what)
    status, result = pcall(what[1])
    if not status then
        what[2](result)
    end
    return result
end
require "try-catch"
try {
    function()
        error('oops')
    end,
    catch {
        function(error)
            print('caught error: ' .. error)
        end
    }
}
  • Lua 不支持三目条件运算符。我认为它并不是语言中很重要的特性,但是我必须承认我确实喜欢它,比如我需要某些简短的检测存储在变量中的值。可以把它作为附加的特性,你可以创建相关的函数来扩展三元条件运算符

可以直接使用 (cond and false-value or x),条件是cond必须为真才行。所以可以创建一个函数来实现?:运算符

-- T 和 F必须可以求值的
function ternary(cond, T, F)
    if cond then 
        return T 
    else 
        return F
    end
end

print("blah: " .. ternay(a == true, "blah", "nahblah"))

一种更为广泛的方式是使用函数作为参数

function ternay (cond, T, F, ...)
    if cond then
        return T(...)
    else
        return F(...)
    end
end
print("blah: " .. ternary(a == true ,function() return "blah" end ,function() return "nahblah" end))
  • 在社区中没有提供足够的库来解决编程领域中的常见问题。可以是这个社区的特征吧(在大的项目中打发小的解决方案,但是并不会将其开源)或表明Lua并不是很流行的语言。我碰到很多难题,比如找到一个可靠的XML解析库(我已经找到一个很好的XML库,但是它不是很流行。)

我所列出的Lua的缺陷是可以理解,毕竟Lua专注于一个轻、快的解释器。Lua的优势可以弥补其缺陷,是因为它提供了一种简单的方式来扩展该语言的核心特性。

Lua作为其他编程工具,并非是“银弹”。比如我并不认为它是web核心应用的理想工具。不仅是因为它自身的限制,而且也web环境中缺少成熟的项目来解决比较常见的问题--连接数据库、缓存工具、MVC,等等。对于这些问题,Python和Ruby社区都提供成熟的库和框架以及广泛的测试。

然而,因为Lua是高层次的语言并且在动态语言中有一个最快的解释器,它可以作为应用中出现语言性能问题比较好的选择,比如通信、游戏、那些内存受限的嵌入式应用。

来源:
https://medium.com/@evandrolg/lua-a-general-view-and-personal-about-the-language-2744aa5665cb#.wo5a96a66

注意:本文遵守MIT 条款

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,335评论 0 17
  • 第一篇 语言 第0章 序言 Lua仅让你用少量的代码解决关键问题。 Lua所提供的机制是C不擅长的:高级语言,动态...
    testfor阅读 2,638评论 1 7
  • 1. 写在前面 很多时候我们都需要借助一些脚本语言来为我们实现一些动态的配置,那么就会涉及到如何让脚本语言跟原生语...
    杰嗒嗒的阿杰阅读 3,420评论 9 31
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,074评论 6 244
  • 以前大概不爱看书 爱看电视 捧着电视机度过一天又一年 广告也被啃完 然后漫无目的地搬着凳子坐在天台上面发呆 一秒又...
    思索_BeautyLin阅读 275评论 0 2