Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

Lua被低估了

Posted on 2024-12-27

我对Lua的设计和实现了解得越多,印象就越深刻。很少有软件能够用如此少的代码完成如此多的事情。

不幸的是,Lua 没有像其他一些语言那样的营销和炒作水平。缺乏宣传意味着更少的开发人员了解 Lua 的功能和优点。它通常被认为是一种小众语言,主要用于游戏和嵌入式系统。

因此,Lua 可能没有得到应有的关注,尽管它有很多东西可以提供;

Lua很容易理解

Lua 是一种自由、自反、命令式脚本语言。创建于 1993 年,旨在嵌入其他应用程序中以对其进行扩展。该解释器由巴西工程师开发,此后已多次更新。

它的设计很干净,代码也很快。

C API 易于使用并提供良好的性能,并且封装了足够的 VM 实现,使得 C 模块与 Lua 和 LuaJIT 源代码和二进制兼容。它的语法干净、简约,即使对于初学者来说也很容易理解,但又非常容易掌握。

Lua 具有极强的嵌入式能力。

Lua 旨在轻松嵌入到用其他语言(特别是 C 和 C++)编写的应用程序中。这使其成为编写脚本和扩展游戏和嵌入式应用程序的绝佳选择。以 C 为例,嵌入 Lua 如下:

 #include <lua.h> #include <lauxlib.h> #include <lualib.h> int main() { lua_State *L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "./myscript.lua"); lua_close(L); return 0; }

多范式支持

独立或使用正确的库,Lua 支持多种编程范例,包括命令式、函数式和面向对象编程。这种灵活性确实使我们能够使用最适合我们需求的一种。

然而,并非所有事情都适合每个人……

索引约定

在 Lua 中,索引通常从索引 1 开始,但这是一种约定。数组可以用 0、负数或任何其他值(除了 nil 之外的任何值)进行索引。 Lua 并不真正具有序列意义上的数组。只有表,并且表始终是键值哈希。


注意:表和 ipairs 等内置函数的标准库假定索引从 1 开始的类数组表。因此,出于几乎所有实际目的,您可能希望从 1 开始索引类数组表。 ~ telemachus


错误处理

虽然我个人喜欢 Lua 处理错误的方式,但对于来自其他语言的开发人员来说可能不太直观。在 Lua 中,错误可以作为值处理,就像在 Go 中一样:

 function risky_function() error("Something went wrong!") end local status, err = pcall(risky_function) if not status then print("Error: " .. err) end

以 Nil 结尾的数组

最让我困扰的可能是数组(用作数组的表)以 nil 结尾,这意味着数组的末尾由 nil 值标记。如果处理不当,这可能会导致意外行为:

 local arr = {10, 20, 30, nil, 50} for i, v in ipairs(arr) do print(v) -- Output: 10, 20, 30 (nil terminates the array) end

ipairs函数在遇到 nil 值时停止迭代,如果您希望它继续迭代整个表,这可能会令人惊讶。如果您怀疑序列有间隙,则应避免使用ipairs 。相反,您可以使用pairs (或next )来获取整组项目,而无需在第一个nil处停止。

太长了;

Lua 是一种强大、高效、多功能的编程语言,值得更多的认可。其简单性、可嵌入性和性能使其成为游戏和嵌入式系统等广泛应用的绝佳选择。然而,它可能被视为一种利基语言,来自更流行语言的竞争可能有所贡献。

如果您正在寻找一种简单、高效的脚本语言,请尝试一下,您会感到惊讶。

从 0.5.0 开始,Lua 在 nvim 中用于插件,你敢打赌它非常高效!

原文: https://nflatrea.bearblog.dev/lua-is-so-underrated/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Lou Plummer
  • Luke Wroblewski
  • Matt Stoller
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme