自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么我選擇Lua?

開(kāi)發(fā) 開(kāi)發(fā)工具
Lua是一個(gè)小眾產(chǎn)品,而什么本文中作者會(huì)選擇Lua語(yǔ)言呢?作者認(rèn)為L(zhǎng)ua語(yǔ)言的7點(diǎn)優(yōu)勢(shì)足夠讓他認(rèn)為L(zhǎng)ua確實(shí)是一門非常簡(jiǎn)單并強(qiáng)大的語(yǔ)言。下面就讓我們?cè)敿?xì)的了解下吧。

在這篇文章中,我將向你解釋為什么要使用Lua。我寫(xiě)這篇文章最初的動(dòng)機(jī)是由于Lua郵件列表中的一則消息 “why isn't Lua more widely used?” 。針對(duì)這個(gè)消息的回復(fù)各種各樣,有的說(shuō)是因?yàn)槿鄙兕悗?kù),而我更贊同另外一個(gè)觀點(diǎn),那就是大部分人都不喜歡自己動(dòng)手 (do it yourself)的方式來(lái)解決問(wèn)題。我常常把Lua比作Arch Linux。這也就注定了Lua是一個(gè)小眾產(chǎn)品。下面我將列出幾條為什么我要使用Lua的理由:

1. 可以和 C/C++ 集成

我的編程經(jīng)歷不長(zhǎng),但是我已經(jīng)使用過(guò)很多種語(yǔ)言了,包括Lisp,Scheme,Python,Perl,Bash,VBA,SQL等等。但是它們沒(méi)有一個(gè)可以像Lua那樣可以和C混著使用。C語(yǔ)言的API非常的干凈和直觀,你花一個(gè)下午的時(shí)間就可以上手了。如果你對(duì)這個(gè)感興趣的話,你可以看看“PIL's section on the C API” 。

為什么這個(gè)特性很重要呢?首先,如果你有現(xiàn)成的C/C++類庫(kù)的話,你可以很容易的在Lua中調(diào)用這些API?;蛘吣阋部梢詫?xiě)一個(gè)腳本讓Lua在C中執(zhí)行。這也意味著Lua的程序不會(huì)有速度問(wèn)題。如果你還是覺(jué)得Lua不夠快的話,你可以用C完全重寫(xiě)這段代碼。雖然別的語(yǔ)言的程序也可以用C重寫(xiě),但是我還沒(méi)有發(fā)現(xiàn)誰(shuí)能比Lua更方便的做到這一點(diǎn)。

2. 快速、簡(jiǎn)潔

相比于其他語(yǔ)言,Lua的實(shí)現(xiàn)是非常高效的。也許是因?yàn)長(zhǎng)ua使用的是“基于寄存器的虛擬機(jī)” 而不是基于堆棧的虛擬機(jī)?;蛘哒f(shuō)使用Lua的開(kāi)發(fā)者都非常的牛逼。不管怎樣,你幾乎不需要顧慮Lua代碼的性能問(wèn)題。

但是如果你對(duì)性能還是不滿意的話,你可以嘗試使用LuaJIT:
“LuaJIT是公認(rèn)的運(yùn)行最快的動(dòng)態(tài)語(yǔ)言的實(shí)現(xiàn),并且對(duì)內(nèi)存的使用少,虛擬機(jī)占用低于125K,JIT編譯器占用不到85K (在x86環(huán)境中)。”
LuaJIT可以幾乎和C代碼餓速度媲美。不管怎樣,如果你還是對(duì)速度不滿意的話,你可以試試我在***點(diǎn)中提出的建議。

3. 教育作用

雖然這不是一個(gè)編程語(yǔ)言的功能,但是我發(fā)現(xiàn)使用Lua讓我對(duì)計(jì)算機(jī)科學(xué)的整體了解有所提高。比如說(shuō),這篇文章是關(guān)于 Lua 5.0 的實(shí)現(xiàn)的,讓我對(duì)虛擬機(jī)是如何實(shí)現(xiàn)的有了一個(gè)了解。閱讀源代碼讓我大開(kāi)眼界。我認(rèn)為這一切都得益于Lua有條不紊的改進(jìn)

4. 函數(shù)式編程

Lua提供了函數(shù)式編程的架構(gòu),讓編程更加的有趣。例如 anonymous functions, higher order functions, lexical closures,proper tail calls等等。這些特性不是語(yǔ)言的一些語(yǔ)法糖,而是Lua從底層就整合了這些特性。比如說(shuō),Lua的每一個(gè)方法都是一個(gè)值(比如數(shù)字2,或者字符串“ktr”),也就意味著每一個(gè)方法都是匿名的。你只要給它取個(gè)名字,然后你就可以調(diào)用它了。你可以給print重新賦值:
print = math.sin
你可以利用這個(gè)功能創(chuàng)建沙箱。如果print是一個(gè)危險(xiǎn)的操作,你可以替換成你自己的print方法或者從全局中刪除這個(gè)方法。

5. 任何東西都是一張表

在Lua中,任何一個(gè)變量類型都是一張表,例如Array,Hash,“module”或者全局變量等等。也就是說(shuō)你可以“require”一些模塊(類似Python的import語(yǔ)句)并且把結(jié)果當(dāng)錯(cuò)table來(lái)處理。在Python中,你可以 __import__('...') 一些模塊,然后返回值的變量就可以通過(guò)類似 var(module) 的方式來(lái)訪問(wèn)。在Lua中,你可以通過(guò) module[var] 的方式來(lái)訪問(wèn)模塊中的變量。我這里提到Python是為了強(qiáng)調(diào)不同之處,說(shuō)明Lua更容易使用。

這也讓你學(xué)習(xí)Lua的語(yǔ)法更加快速。你不用擔(dān)心list和dictionary、package有什么不同。

6. 一致性

不知你是否意識(shí)到,Lua是非常一致的語(yǔ)言。它的很多功能都是做的恰到好處。比如說(shuō),Lua沒(méi)有“for”循環(huán)直到Lua 4.0,也就是Lua語(yǔ)言發(fā)布7年以后。這是因?yàn)閣hile循環(huán)更為通用,而且語(yǔ)法更簡(jiǎn)潔。Lua的開(kāi)發(fā)團(tuán)隊(duì)相對(duì)來(lái)說(shuō)比較保守,他們不接受patch,所以Lua的進(jìn)化比較緩慢,但是比較平穩(wěn)。你知道所有的功能都是有規(guī)劃的在進(jìn)行,也就意味著你不能指望你所期待的功能可以被很快的實(shí)現(xiàn)。

7. 可移植性

關(guān)于這一點(diǎn)我不會(huì)講很多細(xì)節(jié),但是Lua基本上可以在任何環(huán)境中運(yùn)行。Lua的代碼是按照“Clean ANSI C”的標(biāo)準(zhǔn)編寫(xiě)的,所以如果你有一個(gè)C的運(yùn)行環(huán)境,你就可以運(yùn)行Lua。

總結(jié):Lua是一門非常簡(jiǎn)單但是強(qiáng)大的語(yǔ)言。

原文鏈接:http://www.oschina.net/news/26081/why-i-choose-lua

【編輯推薦】

  1. 編程語(yǔ)言新寵兒:Julia誕生記
  2. 當(dāng)下主流JVM語(yǔ)言一覽
  3. Lua開(kāi)發(fā)工具脫離Eclipse 成為獨(dú)立版本
  4. 菜鳥(niǎo)入門Java語(yǔ)言學(xué)習(xí)的要點(diǎn)
  5. 流行的編程語(yǔ)言之戰(zhàn)
責(zé)任編輯:林師授 來(lái)源: 開(kāi)源中國(guó)社區(qū)
相關(guān)推薦

2013-10-22 15:18:19

2012-11-14 20:55:07

容錯(cuò)服務(wù)器選型CIO

2021-04-06 11:07:02

字節(jié)跳動(dòng)組織架構(gòu)

2021-02-01 07:20:51

KafkaPulsar搜索

2018-12-21 11:26:49

MySQLMongoDB數(shù)據(jù)庫(kù)

2019-04-19 11:56:48

框架AI開(kāi)發(fā)

2025-01-03 08:50:23

2012-10-10 16:52:21

CentOSDebianUbuntu

2011-11-28 10:21:52

Nginx特性

2020-08-14 10:40:35

RestTemplatRetrofitJava

2012-01-05 10:14:24

諾基亞聯(lián)手微軟

2021-03-15 07:43:17

騰訊工作事業(yè)

2009-12-21 17:11:38

Linux認(rèn)證

2009-06-25 15:09:34

選擇JSFESRI

2015-10-14 18:25:03

一體化架構(gòu)設(shè)計(jì)微服務(wù)

2020-07-17 14:06:36

Scrum敏捷團(tuán)隊(duì)

2012-04-04 22:07:12

Android

2023-02-26 01:25:23

Sanic框架工具

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2017-02-27 15:19:04

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)