【CS.PL】Lua 编程之道: 简介与环境设置 - 进度8%

1 初级阶段 —— 简介与环境设置

文章目录

  • 1 初级阶段 —— 简介与环境设置
    • 1.1 什么是 Lua?特点?
    • 1.2 Lua 的应用领域
    • 1.3 安装 Lua 解释器
      • 1.3.1 安装
      • 1.3.2 Lua解释器的结构
    • 1.4 Lua执行方式
      • 1.4.0 程序段
      • 1.4.1 使用 Lua REPL(Read-Eval-Print Loop)
      • 1.4.2 脚本执行文件(类似shell的.sh)
      • 1.4.3 用lua命令加载文件
      • 1.4.4 `luac`编译器

在这里插入图片描述

1.1 什么是 Lua?特点?

Lua 是一种轻量级、高效的脚本编程语言,由巴西计算机科学家 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 开发。它的设计目标是简单、可嵌入、可扩展,以及具有良好的性能。Lua 在很多领域都有广泛的应用,包括游戏开发、嵌入式系统、脚本编写等。

特点:

  • 高效利用 C 的性能: Lua 解释器用 C 编写,可以与 C 和 C++ 代码无缝集成,充分利用了 C 语言的高性能。它的运行环境在启动时会为 Lua 代码分配一个大的堆空间,从而提高执行效率。即c#和c++都兼容 => C进程开了一大块的堆空间, 用于跑lua代码
  • 解释性语言: Lua 是解释性语言,代码在执行时一行一行地编译和执行,这使得开发过程更加灵活和快速。即输入一行 -> 编译一行 -> 执行一行.
  • 动态类型: Lua 是动态类型语言,不需要显式声明变量类型,变量的类型由其值决定。相较于静态强类型(如 Java)和静态弱类型(如 C++)语言,Lua 在类型处理上更加灵活。
  • 垃圾回收机制: Lua 内置垃圾回收器,自动管理内存,防止内存泄漏。即GC机制.
  • 热更新: 由于其解释性和动态性,Lua 支持热更新,可以在运行时修改和更新代码,提高开发效率。即改了立马执行, 开发快, 热更新

1.2 Lua 的应用领域

Lua 在各种领域中都有丰富的应用:

  • 游戏开发: 许多游戏引擎(如 Unity、CryEngine)都支持使用 Lua 编写游戏逻辑和脚本,实现更灵活的游戏行为和交互。例如,2002 年《梦幻西游》和 2004 年《魔兽世界》都采用了 Lua 作为脚本语言,分别用于游戏逻辑和玩家插件。
  • 嵌入式系统: Lua 的轻量和易嵌入特性使其在嵌入式系统中广泛应用,用于配置、控制和脚本编写。
  • 脚本编程: Lua 可作为通用的脚本语言,用于编写自动化任务、工作流程和快速原型开发。
  • 科学计算: 一些科学计算领域使用 Lua 进行数据分析、建模和可视化。
  • 网络编程: Lua 也用于网络编程,例如在服务器端创建脚本化的网络应用。一个典型的应用是 Nginx 与 Lua 的结合(OpenResty),实现高效的服务器端开发。

e.g.客户端
2002 云风 <梦幻西游> Unreal 蓝图/lua层
2004 <魔兽世界> 脚本层 玩家侧用于修复报错的插件

e.g. 服务端:

  • nginx -> Openresty -> Lua(后端服务器开发框架): 因nginx = 1主进程 + 2进程 + 进程之间构建的线程池; 开发时通过改配置文件, 用c语言改模块
  • redis(remote distance) -> Lua原子操作
  • 生活中鼠标宏(罗技)

1.3 安装 Lua 解释器

1.3.1 安装

  • 官方 Lua: Lua 最新的官方版本是 5.4 及以上。访问 Lua 官方网站(https://www.lua.org/)下载最新版本,并按照说明进行安装。
  • LuaJIT: LuaJIT 是 Lua 的 Just-In-Time 编译版本,性能优于官方解释器,特别适用于服务端开发。它通过提前编译常用语句,提高了执行效率,运行时间越长,性能越接近 C++。即Lua JIT(**Just In Time**), 服务端, 效率比官方的高 => **把经常使用语句预编译好, 无须等到运行到语句处才编译, 运行越久与C++相比效率越接近** ==> java也有JIT机制!.
    • Windows 系统: 访问 Lua 官方网站下载 Windows 版本的 Lua 解释器(https://www.lua.org/)下载 Windows 版本的 Lua 解释器,并按照说明进行安装。,并按照说明进行安装。
    • Linux 系统: 大多数 Linux 发行版都提供 Lua 解释器的软件包。使用包管理器安装 Lua,例如:sudo apt-get install lua5.4
    • macOS 系统: 使用 Homebrew 等包管理器安装 Lua 解释器,例如:brew install lua

1.3.2 Lua解释器的结构

![[Pasted image 20230808134852.png]]

Lua 解释器的结构可以分为以下几个主要部分:

  1. 词法分析器(Lexer): 这个部分负责将源代码字符串分解为词法单元,也就是语言中的最小可识别单元,比如关键字、标识符、操作符等。词法分析器将源代码转换为一个个词法记号,以便后续的解析和执行。
  2. 语法分析器(Parser): 语法分析器接收词法记号流,将其组织成语法结构,构建一棵抽象语法树(AST)。这个树状结构表示了代码的层次结构,有助于理解代码的结构和含义。
  3. 编译器(Compiler): 编译器将抽象语法树转化为中间代码,通常是字节码。这个中间代码包含了对应的操作码以及操作数,它更接近计算机硬件执行的形式,但仍然比源代码更接近人类可读。
  4. 虚拟机(Virtual Machine): Lua 解释器的核心是虚拟机。虚拟机执行中间代码,将其翻译为实际的机器指令或者执行相关的操作。虚拟机还负责管理变量、堆栈和函数调用等运行时状态。跨平台的核心, 缺点是效率变低, 这也是类似java的, 像 c-- ==> java优化就是优化虚拟机
  5. 垃圾回收器(Garbage Collector): Lua 包含一个垃圾回收器,用于自动管理内存。它会识别不再使用的对象,释放其占用的内存,并确保没有内存泄漏。
  6. 标准库和扩展模块: Lua 附带了一套标准库,其中包含了许多常见的功能,如字符串处理、文件操作等。此外,Lua 还支持通过加载扩展模块来扩展其功能。

整个 Lua 解释器的流程大致如下:

  1. 词法分析器将源代码转换成词法记号。
  2. 语法分析器使用词法记号构建抽象语法树。
  3. 编译器将抽象语法树编译成中间代码(字节码)。
  4. 虚拟机执行中间代码,实现实际的功能。
  5. 垃圾回收器自动管理内存,防止内存泄漏。

1.4 Lua执行方式

1.4.0 程序段

Lua一个执行的基本单位叫chunk(程序段)

1.4.1 使用 Lua REPL(Read-Eval-Print Loop)

交互式解释器,读取﹣求值﹣输出循环

要启动 Lua REPL,只需打开终端并输入 lua 命令,然后按回车键。这将进入 Lua 的交互式模式,可以在其中输入 Lua 代码并按回车键执行。每次执行后,您将看到代码的输出结果。

> print("Hello, Lua!")
Hello, Lua!

1.4.2 脚本执行文件(类似shell的.sh)

hello.lua

$ !../lua表启动了lua.bin

# !/usr/local/bin/lua
print("Hello, Lua!")

执行chmod u+x hello.lua && ./hello.lua

1.4.3 用lua命令加载文件

hello.lua

print("Hello, Lua!")

==> lua hello.lua(类似python)

1.4.4 luac编译器

luac 编译器, 预编译

  • 提前编译好, 提高效率
  • 保护源代码
luac -o hello.luac hello.lua

CS.PL.1000.3-Lua
Created: 2023-08-08.Tuesday13:14

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350036.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LAMP部署及应用

LAMP架构 LAMP架构是指一种常用的网站开发架构&#xff0c;它由以下几个组件组成&#xff1a; Linux操作系统&#xff1a;作为服务器的操作系统&#xff0c;LAMP架构通常使用Linux作为操作系统&#xff0c;因为Linux通常被认为是稳定和安全的。 Apache HTTP服务器&#xff1a…

iOS ReactiveCocoa MVVM

学习了在MVVM中如何使用RactiveCocoa&#xff0c;简单的写上一个demo。重点在于如何在MVVM各层之间使用RAC的信号来更方便的在各个层之间进行响应式数据交互。 demo需求&#xff1a;一个登录界面(登录界面只有账号和密码都有输入&#xff0c;登录按钮才可以点击操作)&#xff0…

AI模型部署:Triton+TensorRT部署Bert文本向量化服务实践

前言 本篇介绍以Triton作为推理服务器&#xff0c;TensorRT作为推理后端&#xff0c;部署句嵌入向量模型m3e-base的工程方案和实现&#xff0c;句嵌入模型本质上是Bert结构&#xff0c;本案例可以推广到更一般的深度学习模型部署场景。 内容摘要 推理服务器和推理后端介绍Ten…

【Numpy】numpy.r_用法

numpy.r_[字符串, 数组, 数组] numpy.r_的这三个整数默认值是0,1,-1 numpy.c_就是numpy.r_在三个整数是-1,2,0时的特例&#xff0c;因为常用&#xff0c;所以单独拎出来了。第一个参数-1指沿最后一个轴(维度)连接 有一个shape(2, 3, 4)的数组 np.random.randint(low0, high1…

文章MSM_metagenomics(一):介绍

介绍 欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 用于复现Huang et al. [huang2024establishment]研究分析的计算工作流程&#xff0c;所有复…

LDR6020显示器应用:革新连接体验,引领未来显示技术

一、引言 随着科技的飞速发展&#xff0c;显示器作为信息展示的重要载体&#xff0c;其性能和应用场景不断得到拓展。特别是在办公、娱乐以及物联网等领域&#xff0c;用户对显示器的需求越来越多样化。在这一背景下&#xff0c;LDR6020显示器的出现&#xff0c;以其卓越的性能…

STM32硬件接口I2C应用(基于HMC5883L)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识HMC5883L 3.1 HMC5883L功能介绍 3.2 HMC5883L的寄存器 4 HMC5883L驱动程序实现 4.1 驱动函数实现 4.2 完整驱…

QT调用vs2019生成的c++动态库

QT调用vs2019生成的c动态库 dll库的创建方法&#xff1a; VS2019创建c动态链接库dll与调用方法-CSDN博客 加减法示范&#xff1a; 头文件 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号编…

解决方案︱视频孪生智慧高速解决方案

系统概述 在交通强国战略的指导下&#xff0c;我国政府高度重视以数字化为核心的智慧高速公路建设与发展。2023年9月&#xff0c;交通运输部印发了《交通运输部关于推进公路数字化转型加快智慧公路建设发展的意见》&#xff0c;强调到2035年&#xff0c;全面实现公路数字化转型…

【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南

目录 &#x1f497;1. 准备工作和环境配置&#x1f495; &#x1f496;安装OpenCV&#x1f495; &#x1f496;安装Dlib&#x1f495; 下载并编译TensorFlow C API&#x1f495; &#x1f497;2. 下载和配置预训练模型&#x1f495; &#x1f496;2.1 下载预训练的ResNet…

一文入门vim

先来波快问快答。 第一个问题&#xff0c;vim是什么&#xff1f; vim就是一文本编辑器。 第二个问题&#xff0c;我们为什么要使用vim&#xff1f; 好像在终端中可选择使用的文本编辑器也不多&#xff08;其他有&#xff0c;但是相对而言vim用的比较广泛&#xff09; 第三…

automa学习:写一个取某东图书数据的片断

周五了&#xff0c;实在没事情了。正好上午有个朋友问automa的事&#xff0c;心想再写一个练习一下&#xff0c;毕竟&#xff0c;熟能生巧。 目标某东图书&#xff1a; 分析及介绍如下。 1.新建标签页 1.悬停元素。要注意 县 停 .cate_menu_item:nth-child(14) > .cate_…

SQL进阶day10————多表查询

目录 1嵌套子查询 1.1月均完成试卷数不小于3的用户爱作答的类别 1.2月均完成试卷数不小于3的用户爱作答的类别 ​编辑1.3 作答试卷得分大于过80的人的用户等级分布 2合并查询 2.1每个题目和每份试卷被作答的人数和次数 2.2分别满足两个活动的人 3连接查询 3.1满足条件…

【docker】如何解决artalk的跨域访问问题

今天折腾halo的时候&#xff0c;发现artalk出现跨域访问报错&#xff0c;内容如下。 Access to fetch at https://artk.musnow.top/api/stat from origin https://halo.musnow.top has been blocked by CORS policy: The Access-Control-Allow-Origin header contains multipl…

【字符函数】

接下来介绍部分字符函数测试 2. 字符转换函数 1.字符分类函数 1.1iscntrl 注&#xff1a;任何控制字符 检查是否有控制字符 符合为真 int main() {int i 0;char str[] "first line \n second line \n";//判断是否遇到控制字符while (!iscntrl(str[i])){p…

AI办公自动化:kimi批量搜索提取PDF文档中特定文本内容

工作任务&#xff1a;PDF文档中有资料来源这一行&#xff0c;比如&#xff1a; 资料来源&#xff1a;moomoo tech、The Information、Bloomberg、Reuters&#xff0c;浙商证券研究所 数据来源&#xff1a;CSDN、浙商证券研究所 数据来源&#xff1a;CSDN、arXiv、浙商证券研…

效率翻倍!ComfyUI 必装的工作流+模型管理插件 Workspace Manager

一、Workspace Manager 安装方式 插件 Github 网址&#xff1a; https://github.com/11cafe/comfyui-workspace-manager 如果你没有安装 Workspace Manager 插件&#xff0c;可以通过以下 2 种方式安装&#xff1a; ① 通过 ComfyUI Manager 安装&#xff08;推荐&#xff0…

这世上又多了一只爬虫(spiderflow)

让我们一起默念&#xff1a; 爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫 接着大声喊出来&#xff1a; 一&#xff01;只&#xff01;爬&#xff01;虫&#xff01;呀&#xff01;爬&#xff01;呀&#xff01;爬&#xf…

【机器学习】因TensorFlow所适配的numpy版本不适配,用anaconda降低numpy的版本

目录 0 TensorFlow最高支持的numpy版本 1 激活你的环境&#xff08;如果你正在使用特定的环境&#xff09; 2 查找可用的NumPy版本 3 安装特定版本的NumPy 4. 验证安装 5.&#xff08;可选&#xff09;如果你更改了base环境 0 TensorFlow最高支持的numpy版本 要使用 …

[C#]使用C#部署yolov10的目标检测tensorrt模型

【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;T…