lua论文 lua-an extensible extension language 中文翻译

Lua在葡萄牙语中是月亮的意思。
学习Lua的过程中翻译了这篇96年发表的论文,用作学习,还有有许多翻译不足的地方,希望讨论的小伙伴可以留言。
lua论文翻译
地址 https://www.lua.org/spe.html

lua是一个可扩展的扩展性语言
摘要
这篇论文描述了lua,一门用于扩展应用的语言。lua通过简单却强大的表机制,将程序特性和强大的数据描述能力相结合。这个机制实现了记录,数组,递归数据类型,还有面向对象的机制,例如带有动态分配的方法,等概念。lua也实现了一种允许编程者以一种不同以往的方式拓展lua语义的fallback机制。一个值得注意的例子是,回调允许使用者添加不同的的语言继承特性。目前,lua被广泛的使用在多任务生产,包括用户配置,通用目标的数据入口,用户接口描述,结构化图像元文件的存储,和通用的有限元素片段属性配置。
介绍
定制化app正呈现一个上升的趋势。当应用正在变得复杂,通过简单的元素来定制化变得不可能:用户现在希望在运行是进行配置决定;用户也希望写宏命令和脚本去提升生产力。为了实现这些需求,现在有一个很重要的趋势,就是将复杂系统分为两部分:内核和配置。内核实现了基础的类和系统的对象,并且通常由一个编译型的,静态类型的语言,像c和modula-2.配置部分,通常由交互的,灵活的语言,其连接了这些类和对象去绘制出最终的应用。

配置语言拥有多个品种,从简单的用于选择依赖,通常由命令行中的参数列表或者从配置文件中读取的键值对实现,到嵌入式语言,用于使用通过应用提供的原始元素实现的用户自定义的函数扩展app。嵌入式语言可以十分强大,有时候是一些主流编程语言,例如lisp和c的简化版。这些配置语言也被叫做扩展语言,因为他们允许基础利用新的用户定义的内容来扩展内核语义。

让扩展语言与独立语言不同的是,他只能在宿主语言中工作,称为宿主程序。此外,宿主程序通常提供领域特定的扩展去定制嵌入的语言为了宿主语言自己的目的,通常的是通过提供更高等级的抽象。为了这个,一个嵌入式语言既拥有语义为了自己的程序,又有一个应用程序api为了与宿主程序沟通。不想更简单的配置语言,那些习惯于提供参数值和系列行动给宿主程序,这由一个双向的交流在宿主程序和主程序之间。

值得注意的是,对扩展语言的需要与那些通用目的的编程语言之间是不同的。这些主要需求是:

  • 扩展语言需要好的数据描述能力,因为他们是经常被用作配置语言。
  • 配置语言应该有一个清晰和简单的语法,因为他们的主要用户不是专业的编程人员。
  • 配置语言应该是小型的,并且有一个小的实现。否则,添加这些库到一个应用的代价会变得很高。
  • 扩展语言不是用几十万行代码为软件编写大的片段。因此,那些为支持大型项目编程的机制,像静态类型检查,信息隐藏,异常处理等变得不那么重要。
  • 最后一点,扩展语言应该也是可扩展的。不想传统的语言,扩展语言被用于一个很高的抽象层次,足以与不同领域的用户交互。

这篇论文描述了Lua,一门扩展的过程是语言,拥有强大的数据描述能力,设计用于以一种通用目的的扩展语言。lua作为两种描述语言而提出,色艺用于配置两种特定的应用:一个是科学数据入口,另一个是从地址探头获得数据中进行可视化地质分析。当用户开始对这些语言逐渐要求更高的能力时,一门具备真正的编程能力的语言的要求就变得清晰了。为了不同时升级和维护两个不同的语言,被采纳的解决办法就是设计一们能够既服务于这两个应用,又可以为其他应用服务的语言。因此,Lua融合和大多数过程语言的能力,控制结构(whiles,ifs,等),声明,子程序,和中缀操作符,而且抽象出特定于任何领域的语言特性。这样,lua不仅可以用作一个完整的语言,并且也可以用作一个语言框架。

Lua很好的实现了上述的需求。他的语言和控制结构十分简单,像Pascal。Lua很小,整个类库大概6千行的ANSI C,其中大概两千行是由yacc实现的。最终,Lua是可扩展的。在他的设计中,许多不同的特性的添加已经被一些鱼汛编程者自己去实现这些特性的元机制替代了。这些元机制是:动态关联数组,反射功能,和回退。

动态关联数组直接实现了一系列的数据类型,像普通的数组,记录,sets和bags。他们通过构造器也提升了语言的数据描述能力。

反射功能允许高多态部件的创造。持久性和多命名空间是不直接在lua中实现的两个例子,但这些可以在Lua中通过反射功能简单的实现。

最后,尽管Lua有一个固定的语法,回调可以扩展许多构造的语法的意义。举例说,回调可以被用来实现不同的特性,一些不在Lua中的特性。

Lua预览
这个部分包含了Lua中主要的一些概念的简短介绍。展示了一些以示例代码展现的例子,来展现Lua这门语言的特色。完整的语言的定义可以在参考手册中找到。

Lua是一个通用目的的嵌入式编程语言,被设计用来支持过程式的编程,使用数据描述能力。作为一个嵌入式语言,Lua没有主程序的概念,它只嵌入在一个宿主上工作。Lua提供了一个C函数的库,可以被连接到主程序。主程序可以访问库中的函数去执行一段Lua代码,读和写Lua变量,并且注册c的函数,被Lua调用。另外,回调函数可以在当Lua不知道如何执行时,被调用。这种方式下,Lua可以被用于复制多个不同的领域,这样可以创建定制化的编程语言仅共享一个语法框架。这就是为什么Lua被称为一个语法框架。另一方面,为Lua写一个交互式的,独立的的翻译器十分简单。
#include <stdio.h>
#include “lua.h”
#include “lualib.h”
int main(int argc,char *argv[])
{
char line[BUFSIZ];
iolib_open();
strlib_open();
mathlib_open();
while(gets(line)!=0)
lua_dostring(line);
}
Figure1:一个Lua的交互式解释器
Lua中的所有状态都是在一个全局环境中被执行的,这个全局环境保存了所有的全局变量和函数。这个环境在主程序开始时就被初始化了,并且保存到直到主程序结束。

Lua的一个命令集合被叫做一个chunk。一个chunk可以包含状态和函数定义。当一个chunk被执行时,首先啊所有的函数和状态都被编译了,并且函数被加到全局环境中,然后这个状态被按序列执行。

Figure2展示一个Lua只如何作为一个很普通的配置语言的例子。这个代码定义了三个全局变量并且给他们夫勒支。Lua是一个动态类型语言:变量没有类型,只有值,所有的值都携带了他们的类型。这样,Lua中就没有值的类型了。
width = 420
height = width3/2
color = “blue”
Figure2:一个简单的配置文件
更多的强大的配置可以通过六控制和函数定义来编写。Lua使用了一个传统的Pascal类型的语法,使用保留字和显示终止的块,分号是可选的。这样的语法是熟悉的,健壮的,可以被很简单的分解。一个简单的例子被展示在Figure3.注意到函数可以返回多个值,和多个表达式可以被用来接受这些值。这样,通过引用传递的参数,总是一些语义上的困难,可以被从语言中去除(像c中传递多参数,需要通过结构体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值