【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.mzph.cn/news/852889.shtml

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

相关文章

【Gradio】Building With Blocks 控制布局

默认情况下&#xff0c;块中的组件垂直排列。让我们看看如何重新排列组件。在底层&#xff0c;这种布局结构使用了网页开发的 flexbox 模型。 行 在 with gr.Row 子句中的元素将全部水平显示。例如&#xff0c;要并排显示两个按钮&#xff1a; with gr.Blocks() as demo:with g…

JAVA云HIS医院管理系统源码 云HIS运维平台源码 SaaS模式支撑电子病历4级,HIS与电子病历系统均拥有自主知识产权

JAVA云HIS医院管理系统源码 云HIS运维平台源码 SaaS模式支撑电子病历4级&#xff0c;HIS与电子病历系统均拥有自主知识产权 系统简介&#xff1a; SaaS模式Java版云HIS系统&#xff0c;在公立二甲医院应用三年&#xff0c;经过多年持续优化和打磨&#xff0c;系统运行稳定、功…

SSH密钥认证:实现远程服务器免密登录的两种方法|Linux scp命令详解:高效实现文件与目录的远程传输

简介&#xff1a; 服务器之间经常需要有一些跨服务器的操作&#xff0c;此时就需要我们在一台服务器上登录到另外一台服务器&#xff0c;若是人为操作时我们都可以每次输入密码进行远程登录&#xff0c;但要是程序需要跨服务器时&#xff0c;每次输入密码就不现实了&#xff0c…

最新Sublime Text软件安装包分享(汉化版本)

Sublime Text 是一款广受欢迎的跨平台文本编辑器&#xff0c;专为代码、标记和散文编辑而设计。它以其简洁的用户界面、强大的功能和高性能而著称&#xff0c;深受开发者和写作者的喜爱。 一、下载地址 链接&#xff1a;https://pan.baidu.com/s/1kErSkvc7WnML7fljQZlcOg?pwdk…

解决:安装MySQL 5.7 的时候报错:unknown variable ‘mysqlx_port=0.0‘

目录 1. 背景2. 解决步骤 1. 背景 吐槽1&#xff0c;没被收购之前可以随便下载&#xff0c;现在下载要注册登录吐槽2&#xff0c;5.7安装到初始化数据库的时候就会报错&#xff0c;而8.x的可以一镜到底&#xff0c;一开始以为是国区的特色问题&#xff0c;google了一圈&#x…

[Algorithm][贪心][最长递增子序列][递增的三元子序列][最长连续递增序列][买卖股票的最佳时机][买卖股票的最佳时机Ⅱ]详细讲解

目录 1.最长递增子序列1.题目链接2.算法原理详解3.代码实现 2.递增的三元子序列1.题目链接2.算法原理详解3.题目链接 3.最长连续递增序列1.题目链接2.算法原理详解3.代码实现 4.买卖股票的最佳时机1.题目链接2.算法原理详解3.代码实现 5.买卖股票的最佳时机 II1.题目链接2.算法…

厂里资讯之总体架构介绍以及环境搭建

本项目是本人根据黑马程序员的微服务项目黑马头条进行包装改造&#xff0c;作为实习简历上面的项目&#xff0c;为了进一步熟悉深挖这个项目&#xff0c;写了这一系列的博客来加深自己对项目的理解。 概述 项目背景 本项目主要着手于使用户获取学校最新最热的资讯&#xff0c…

使用 ML.NET CLI 自动进行模型训练

ML.NET CLI 可为 .NET 开发人员自动生成模型。 若要单独使用 ML.NET API(不使用 ML.NET AutoML CLI),需要选择训练程序(针对特定任务的机器学习算法的实现),以及要应用到数据的数据转换集(特征工程)。 每个数据集的最佳管道各不相同,从所有选择中选择最佳算法增加了复…

seata原理源码分析系列(一)架构, 组件

简介 SEATA开源的分布式事务解决方案&#xff0c;用于解决分布式系统中的数据一致性问题&#xff0c;由阿里巴巴开源。 分布式系统&#xff0c;数据存储在不同的资源管理器(数据库)&#xff0c;需要保证分布式事务的原子性&#xff0c;业界比较常用xa&#xff0c;数据库标准实现…

C语言 | Leetcode C语言题解之第151题反转字符串中的单词

题目&#xff1a; 题解&#xff1a; void myResverse(char* s,int start,int end){while(start<end){char temp s[start];s[start] s[end];s[end] temp;start;end--;} } char* reverseWords(char* s) {int start 0;int end strlen(s)-1;myResverse(s,start,end);if(s[…

面试题:Redis是什么?有什么作用?怎么测试?

有些测试朋友来问我&#xff0c;redis要怎么测试&#xff1f;首先我们需要知道&#xff0c;redis是什么&#xff1f;它能做什么&#xff1f; redis是一个key-value类型的高速存储数据库。 redis常被用做&#xff1a;缓存、队列、发布订阅等。 所以&#xff0c;“redis要怎么测试…

Linux系统使用Docker安装Dashy导航页结合内网穿透一键发布公网

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

机器视觉:工业镜头的主要参数

工业镜头是图像采集系统的重要光学设备。它的作用是将目标物体的像成在相机的感光面上。 一、工业镜头原理 镜头是对光线进行调制和变换&#xff0c;使目标能够成像到相机的感光芯片上。将不同折射率的硝材加工成高精度的曲面&#xff0c;再把这些曲面进行组合后设计成能够满…

秋招突击——6/14——复习{(树形DP)树的最长路径}——新作{非递归求二叉树的深度、重复区间合并}

文章目录 引言复习树形DP——树的最长路径 新作使用dfs非递归计算二叉树的深度多个区间合并删除问题实现思路实现代码参考思路 总结 引言 这两天可能有点波动&#xff0c;但是算法题还是尽量保证复习和新作一块弄&#xff0c;数量上可能有所差别。 复习 树形DP——树的最长路…

React state(及组件) 的保留与重置

当在树中相同的位置渲染相同的组件时&#xff0c;React 会一直保留着组件的 state return (<div><Counter />{showB && <Counter />} </div> ) // 当 showB 为 false, 第二个计数器停止渲染&#xff0c;它的 state 完全消失了。这是因为 React…

vite.config.js如何使用env的环境变量

了解下环境变量在vite中 官方文档走起 https://cn.vitejs.dev/guide/env-and-mode.html#env-variables-and-modes 你见到的.env,.env.production等就是放置环境变量的 官方文档说到.env.[mode] # 只在指定模式下加载,比如.env.development只在开发环境加载 至于为什么是deve…

windows下open webui+ollama+sd webui

原文&#xff1a;https://wangguo.site/Blog/2024/Q2/2024-06-14/ 说明&#xff1a;安装使用环境是在Windows下 1、给ollama一个好看的交互界面&#xff08;open webui&#xff09; 1.1、ollama安装 安装&#xff1a;在ollama官网下载windows版本进行安装 模型列表&#xff1…

【SQLAlChemy】表之间的关系,外键如何使用?

表之间的关系 数据库表之间的关系分为三种&#xff1a; 一对一关系&#xff08;One-to-One&#xff09;&#xff1a;在这种关系中&#xff0c;表A的每一行都与表B的一行关联&#xff0c;反之亦然。例如&#xff0c;每个人都有一个唯一的社保号&#xff0c;每个社保号也只属于…

南师大GIS专业2024排名NO.1!!!

南师大GIS 666 学科专业实力666&#xff0c;研究方向多多多&#xff01; 有学术方向有开发应用方向&#xff0c; 有GIS&#xff08;建模、数字地形、基础理论和三维GIS等&#xff09;、 有Cartography &#xff08;叙事地图、动态地图、地图风格迁移等&#…

Visual Studio Code 的安装教程和配置C语言环境插件推荐

目录 1.vscode简介2.下载安装vs code3.VSCode基础配置VSCode界面简介VSCode设置中文界面VSCode个性化设置VSCode常用设置基本编辑快捷键VSCode常用快捷键 4.下载安装MinGW5.设置vscode里的环境6.插件推荐7.vscode官方文档 1.vscode简介 VSCode是微软出的一款轻量级编辑器&…