Lua 问世 | 历史上的今天

1993年7月28日,轻量级脚本语言Lua首次运行;1997年同一天,戴尔推出了基于WindowsNT的工作站400;2017年,苹果宣布停产非iOS系统的iPodnano和shuffle。这些事件反映了科技领域的创新与发展。

3ad722878a70c43125c1e18a51d51fda.gif

整理 | 王启隆

透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。

今天是 2023 年 7 月 28 日,在 1908 年的今天,北京储蓄银行正式营业,这是我国最早设立的国家储蓄银行;此前,在我国没有专门的储蓄银行,为个人提供的储蓄及其他金融业务是由商业银行办理的。储蓄银行是一种较为古老的金融机构,大多是由互助性质的合作金融组织演变而来;互助性质的储蓄银行就是存款人将资金存入银行,银行以优惠的形式向存款人提供贷款,这种组织形式在美国比较普遍。回顾科技历史,7 月 28 日这一天还发生过哪些关键事件呢?

1993 年 7 月 28 日:Lua 首次在线上运行

adf675913af212a5136653f03920eb31.png

图源:维基百科

Lua 是一个简洁、轻量、可扩展的脚本语言,有着相对简单的 C API,而很容易嵌入应用中。很多应用程序使用 Lua 作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性;Lua 的设计目标是成为一种很容易嵌入其他语言使用的脚本语言。Lua 的特色是:简洁、轻量、可扩展。Lua 在葡萄牙语中是“月亮”的意思。它既不是缩写,也不是缩略词,而是一个名词。

Lua 是在 1993 年 7 月 28 日由罗伯托·鲁萨利姆斯奇、沃尔德·塞莱斯和路易斯·恩里克·德·菲格雷多创建的,他们当时是巴西的里约热内卢天主教大学的计算机图形技术组(Tecgraf)成员。Lua 的先驱是数据描述/配置语言“SOL”(简单对象语言)和“DEL”(数据录入语言)。他们于 1992 年至1993 年在 Tecgraf 独立开发了需要增加灵活性的两个不同项目(都是用于工程应用的交互式图形程序)。在 SOL 和 DEL 中缺乏很多控制流结构,需要向它们增加完全的编程能力。

资料来源:维基百科

1997 年 7 月 28 日:戴尔工作站 400 推出

1d0f9ac54fece301eb7ec52af76147d5.png

图源:维基百科

1997 年 7 月 28 日,戴尔电脑公司宣布推出戴尔工作站 400 以进入工作站市场;它采用了行业标准的 Microsoft Windows NT Workstation 操作系统和最新的 IntelPentium II 处理器,包括以 300MHz 和 266MHz 速度运行的单处理器或双处理器。WorkStation 400 将成为首批配备 Pentium II 300MHz 处理器的工作站之一。戴尔的 400 系列工作站起步售价为 3,000 至 8,000 美元,直接瞄准了金融服务、数字内容创作和 MCAD 机械计算机辅助设计市场;而这次发布还获得了独立软件公司的支持,包括知名 MCAD 开发商,如 Parametric Technology、Autodesk、Dassault systems SA 以及路透控股旗下的 TIBCO 和 Mathworks 在金融服务领域的支持。

戴尔进入工作站市场后,与康柏电脑公司(Compaq)和数字设备公司(Digital Equipment)等公司展开了激烈的竞争;随着用户从 Unix 迁移到 Windows NT,基于英特尔的工作站市场年增长率在当时已经达到 44%。自 1990 年代后期以来,主流 PC 的功能不断增加,模糊了 PC 与技术/科学工作站之间的界限。典型的工作站曾经会使用专有硬件,使得它们与 PC 产生差异:例如,IBM 就曾在 1990 年代和 2000 年代期间将基于 RISC 的 CPU 用于其工作站,并将 Intel x86 CPU 用于其商业/消费 PC。然而,到 2000 年代初,这种差异基本消失了,如今的工作站使用高度商品化的硬件,这些硬件则多半由戴尔、惠普和富士通等大型 PC 供应商主导,并且基本都是 Microsoft Windows 或 Linux 操作系统。

资料来源:维基百科

2017 年 7 月 28 日:苹果宣布停产所有未运行 iOS 的 iPod 设备

2d0d23f4cd7c64bef6d89f71ab972cfb.png

图源:维基百科

2003 年,苹果公司发布了第一款 iPod,当时的 iPod 是世界上第一款可存储 1,000 首歌曲的 MP3 播放器。发明 iPod 是在 iTunes 之后,2000 年,当时人们因为 Napster 网站的关系,已经有了从网络下载音乐的习惯;乔布斯觉得这样太麻烦,他开始构思透过 iTunes 软件和 iPod 硬件传输歌曲的项目。

当时,市面上已经有了类似的播放器,但是大多数都很差,播放歌曲也少得可怜,待机时间短。乔布斯任命乔恩·鲁宾斯坦(Jon Rubinstein)开发这个项目。鲁宾斯坦收购了东芝最新的 1.8 英寸 5GB 的小硬盘的专利,并且确定了电池和屏幕等重要原件。再雇来了另外一位 iPod 之父托尼·法戴尔(Tony Fadell):此人在加入苹果之前已经做着一些 MP3 播放器的工作。

苹果电脑最初把 iPod 作为 Mac 用户的独有的产品销售,但由于非 Mac 用户需求增加,公司加入了对 Windows 的兼容。到 2004 年 1 月,iPod 成为全美国最受欢迎的数码音乐播放器,占领了 50%的市场份额。到了 2004 年 10 月,iPod 统治了美国的数位音乐播放器的销售,拥有超过 92% 的硬盘播放器和超过 65% 的所有类型播放器的市场。iPod 以极高的速率销售,在三年时间内总共销售了超过一千万部。它对文化产生了重大的冲击。

iPod 系列中的产品都提供设计简单易用的用户界面,除 iPod touch 为第六、七代 iPod nano、iPod shuffle 外皆由一个环形滚轮—iPod Click Wheel 操作。在早期,大多数 iPod 产品使用内置的硬盘储存媒介,而 iPod nano、iPod shuffle 及 iPod touch 则早已采用闪存。2017 年 7 月 28 日,历史上的今天,苹果公司宣布停产 iPod 系列中未搭载 iOS 系统的 iPod nano 与 iPod shuffle。这也是继 2014 年停产 iPod Classic 之后,苹果再度简化了 iPod 这一生产线。2022 年 5 月 10 日,随着苹果公司宣布 iPod touch 停产,全系列 iPod 均已宣告停产。

【欢迎投稿】以史为镜,可以知兴替。计算机科学发展至今,有许多至关重要的事件、人物,欢迎所有朋友一起共建「历史上的今天」,投稿邮箱:tangxy@youkuaiyun.com 。

aea5d51b293f34858f7095f47c4ada66.gif

推荐阅读:

网传小红书研发因客户端崩溃被辞退;DeepMind 实现 AI 可控核聚变新突破;扎克伯格承认 Threads 有炒作|极客头条

Go 基准测试中的常见陷阱

姜宁两度当选 Apache 软件基金会董事 | 开源英雄

粉丝福利:

d95ca9f0bd67af0d1df8e96ae0daf43b.png

<think>嗯,用户现在想了解Lua语言|符号的含义。首先,我需要回忆Lua的基础语法。记得在Lua中,|并不是内置的操作符,可能用户在某些代码片段中看到过,所以产生了疑问。 接着,查看用户提供的引用内容。引用[1]提到函数原型,引用[2]讨论模式匹配,引用[3]说明数组用表实现。这些引用中没有直接提到|符号,但引用[2]涉及Lua的模式匹配,联想到模式匹配中的特殊字符可能包括|?比如其他语言的正则表达式中|表示或,但Lua的模式匹配是否有这个特性呢? 然后查阅Lua官方文档或权威资料。根据记忆,Lua的模式匹配使用%转义,特殊字符包括. % ( ) [ ] * + - ?等,但没有|。标准字符串处理函数如find、match、gsub也不支持|作为模式字符。不过,Lua 5.1之后的版本增加了正则扩展库,比如lpeg,其中可能使用|作为或操作符。例如在LPeg中,|用于语法规则中的选择。另外,用户可能在外部库如LuaSQL的SQL语句中看到|作为逻辑或符号,但这是特定库的用法而非Lua原生语法。 再考虑用户可能的混淆点。用户可能接触过其他语言如JavaScript或Python,其中|在正则表达式中表示"或",但Lua的原生模式匹配不支持。或者看到位运算符|,但Lua 5.2及之前版本没有位运算原生支持,需调用bit32库。此外,在字符串或注释中作为普通字符。 需要明确告诉用户原生Lua中的情况,避免误解。同时提示第三方库中的可能性,特别是LPeg和bit库中的特殊用法。总结时强调|在标准Lua中无特殊含义,但在扩展库中有特定作用,建议用户根据上下文确认来源。 最后生成相关问题,帮助用户深入理解,避免混淆其他语言特性。比如区分模式匹配与正则表达式,提及扩展库的使用场景等。 </think>在Lua语言的标准语法中,**竖线符号 `|` 本身并没有特殊含义**。它的行为取决于具体的使用场景: ### 1. **原生Lua中无特殊功能** - 在Lua 5.1~5.4的标准语法中,`|` **不是运算符或关键字**。 - 若直接出现在字符串或注释中,它仅作为普通字符处理。例如: ```lua print("This | is just a symbol") -- 输出普通字符 ``` ### 2. **第三方库的扩展使用** `|` 的用途主要见于扩展库: - **LPeg (Parsing Expression Grammar)** - 在强大的模式匹配库 LPeg 中,`|` 表示 **"或"关系**,用于组合多个匹配规则: ```lua local lpeg = require "lpeg" -- 匹配 "cat" 或 "dog" local animal = lpeg.P("cat") | lpeg.P("dog") print(animal:match("cat")) --> 4 (匹配成功) print(animal:match("dog")) --> 4 (匹配成功) ``` - 这是 Lua 正则表达式(模式匹配)的增强实现[^2]。 - **位运算库 (如 bit32)** - Lua 原生不支持位运算,但通过 `bit32` 库(Lua 5.2+)或第三方库(如 `bitop`),`|` 可表示 **按位或运算**: ```lua local bit = require "bit32" print(bit.bor(5, 3)) -- 二进制 101 | 011 = 111 → 十进制 7 ``` ### 3. **用户自定义场景** - 在自定义函数或表中,`|` 可作为普通字符命名变量(需避开关键字): ```lua local | = "pipe" -- 合法但极不推荐(可读性差) t = { ["|"] = "symbol" } -- 作为表的键 ``` ### 常见误解澄清 - ❌ **原生模式匹配不支持 `|`** Lua 原生模式匹配(如 `string.find`)使用 `%` 转义(如 `%a` 字母),而非 `|` 表示"或"[^2]。 - ❌ **非逻辑运算符** 逻辑"或"在 Lua 中用 `or` 表示(如 `if a or b then`)。 --- ### 总结场景对比表 | **场景** | **`|` 的含义** | **示例** | |-----------------------|--------------------|-----------------------------| | 原生Lua字符串/注释 | 普通字符 | `str = "a|b"` | | LPeg 库 | 模式"或" | `lpeg.P("a") | lpeg.P("b")` | | 位运算库 (bit32/bitop) | 按位或 | `bit.bor(1,2)` | | 用户自定义标识符 | 合法字符(不推荐) | `t.["|"] = "symbol"` | --- ### 相关问题 1. Lua 的原生模式匹配与 LPeg 库有何主要区别?[^2] 2. 如何在 Lua 5.1 或 LuaJIT 中实现位运算? 3. 为什么 Lua 不将 `|` 设计为原生运算符? 4. LPeg 库除了 `|` 操作符外,还有哪些核心匹配规则?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优快云资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值