Skip to content

Latest commit

 

History

History
90 lines (51 loc) · 4.66 KB

lua.md

File metadata and controls

90 lines (51 loc) · 4.66 KB

Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode with a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.

Learn

  • Which OSS codebases out there are so well designed that you would consider them 'must reads'?

    https://www.reddit.com/r/programming/comments/63hth/ask_reddit_which_oss_codebases_out_there_are_so/

    Online Lua 5.1 source code browser

    Recommended reading order:

    lmathlib.c, lstrlib.c: get familiar with the external C API. Don't bother with the pattern matcher though. Just the easy functions.

    lapi.c: Check how the API is implemented internally. Only skim this to get a feeling for the code. Cross-reference to lua.h and luaconf.h as needed.

    lobject.h: tagged values and object representation. skim through this first. you'll want to keep a window with this file open all the time.

    lstate.h: state objects. ditto.

    lopcodes.h: bytecode instruction format and opcode definitions. easy.

    lvm.c: scroll down to luaV_execute, the main interpreter loop. see how all of the instructions are implemented. skip the details for now. reread later.

    ldo.c: calls, stacks, exceptions, coroutines. tough read.

    lstring.c: string interning. cute, huh?

    ltable.c: hash tables and arrays. tricky code.

    ltm.c: metamethod handling, reread all of lvm.c now.

    You may want to reread lapi.c now.

    ldebug.c: surprise waiting for you. abstract interpretation is used to find object names for tracebacks. does bytecode verification, too.

    lparser.c, lcode.c: recursive descent parser, targetting a register-based VM. start from chunk() and work your way through. read the expression parser and the code generator parts last.

    lgc.c: incremental garbage collector. take your time.

    Read all the other files as you see references to them. Don't let your stack get too deep though.

    If you're done before X-Mas and understood all of it, you're good. The information density of the code is rather high.

  • 温故而知新

  • Lua源码阅读推荐顺序

  • Lua5.3源码浅读 SHT

Libraries

  • LuaRocks is the package manager for Lua modules
  • json.lua A lightweight JSON library for Lua

Projects

  • DCLua A Lua 5.3 VM and compiler written in Go.
  • 一个 Lua 内存泄露检查工具
  • Awesome window manager is a highly configurable, next generation framework window manager for X.
  • lite is a lightweight text editor written mostly in Lua — it aims to provide something practical, pretty, small and fast, implemented as simply as possible; easy to modify and extend, or to use without doing either.

FAQs

Resources

  • Awesome Lua: A curated list of quality Lua packages and resources.