lua的优点:
  • 可移植性
  • 容易嵌入
  • 体积小
  • 高效率
这些优点都来自于lua的设计目标:简洁。从Scheme获得了很多灵感,包括匿名函数,合理的语义域概念
 
lua前身:
巴西被禁运,引入计算机软件和硬件受限,巴西人有强烈的民族情绪去创造自己的软件。三名作者都是同一个实验室Tecgraf的,这个实验室与很多工业实体有合作关系。成立的头十年,重点是创造交互性的图形软件,帮助合作伙伴进行设计。巴西石油公司是其中一个重要伙伴。有大量的遗留数据需要处理。于是诞生了DEL,一个领域专用语言,主要用来描述数据流图的数据的。后来人们对DEL需求越来越多,不止是一门简单的数据描述语言可以解决的了。
 
lua为解决实际问题而生,受到三位作者学过的语言影响。自己创造的是..(两个句号)连接字符串。自豪的是,在13年的演进里,lua的类型系统只修改了两次。lua诞生的时候,基本类型包括nil,number,string,table,C function,Lua function,userdata。97年的时候,Lua3.0将C function和Lua function合并了。03年的时候,提出了boolean值类型,增加了thread协程类型。
 
1993年,第一版Lua由Waldemar在Roberto指导下完成。词法分析用了Unix上经典的yacc和lex。解释器将lua代码翻译成针对一个基于栈的虚拟机的指令。C API很容易扩展,因此最早只有5个函数(print,tonumber,type,next,nextvar)和3个库(input/output, string, math)。
 
Lua的历史
lua的发布模式和其他社区不一样。alpha版本已经相当稳定,beta版本几乎可以作为final版,除非是用来修复bug。这个发布模式对于lua的稳定性有很大帮助,但不利于尝试新特性。因此,从5.0版本开始,添加了新的work版本。work版本是lua当前开发版的snapshot,有助于lua社区迈向开源社区的哲学:早发布、多发布。
 
lua的标准库被刻意保持在一个很小的范围,因为大部分需要的功能都会由宿主或第三方库提供。4.0对C API重新设计了,C API有很大改动,之后就向着完美一点点前进了。结果是不再有任何内置函数,所有标准库都是基于C API实现,没有通过特别的后门去访问Lua内部结构。
 
Lua的vm在4.0版本以前一直是基于栈的。在3.1版本,我们对多个指令添加了变量来提高性能。后来发现这个实现复杂度很高,性能提升不明显,于是在Lua 3.2版本去掉了。从Lua 5.0开始,vm改为基于寄存器。代码生成器因此有更多机会去优化和减少常见Lua程序的指令数了。
 
Lua1
Lua的成功使得Lua被大规模用在数据描述上,而预编译Lua代码为VM字节码的特性,迫使Lua编译器必须非常快,即使是对于大型项目。通过将lex产生的scanner替换为一个手写的版本,我们几乎让Lua编译器的速度翻了一倍。同时,我们修改了Lua VM的table构造函数,构造一个大型的表不再需要一条条指令传参数进去了,可以一次调用完成。从那以后,优化重点就变成了预编译时间。
 
1994年,我们发布了带有这些优化的lua版本:Lua1.1。这次发布和第一篇描述Lua的设计和实现的文章是重合的。之前从未公开发布过的版本,就被称为Lua 1.0(Lua1.0的一个1993年7月的snapshot在2003年10月发布,以此庆祝Lua十周年)
 
Lua 1.1最早以源码方式在ftp提供下载。这远在开源运动兴盛蓬勃之前。Lua1.1有限制性的用户协议,对于学术用途是免费的,但是商业用途则需要协商。那部分协议没有凑效:尽管我们有一些初始联系人,从没有商业使用是经过协商的。其它脚本语言(比如Tcl)的免费促使我们意识到,限制商用甚至会反过来影响学术用途的发展,因为一些学术项目是打算最终走向市场的。因此,当发布Lua2.1的时候,我们将Lua作为无限制免费软件发布了。我们天真的以一种学院气的口吻对之前的协议重新措辞,并觉得新协议写的很直观了。稍后,随着开源许可证的散播,我们的协议文本变成了干扰着一些用户的噪音:我们的协议没有清晰的说明是否和GPL协议相容。在2002年5月,在邮件列表里进行了冗长的讨论后,我们决定将来发布的Lua版本(从Lua 5.0开始)都使用非常清晰直观的MIT协议。2002年7月,自由软件基金会(FSF)确认了我们之前的协议是GPL兼容的。但我们已经决定采纳MIT协议了。对我们协议的疑问从此都消失了。

《The Evolution of Lua》读书笔记 1的更多相关文章

  1. 【读书笔记】《Computer Organization and Design: The Hardware/Software Interface》(1)

    笔记前言: <Computer Organization and Design: The Hardware/Software Interface>,中文译名,<计算机组成与设计:硬件 ...

  2. 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008

    The Algorithm Design Manual, 2ed 跳转至: 导航. 搜索 Springer - The Algorithm Design Manual, 2ed Steven S.Sk ...

  3. [读书笔记]设计原本[The Design of Design]

    第1章 设计之命题 1.设计首先诞生于脑海里,再慢慢逐步成形(实现) 2.好的设计具有概念完整性:统一.经济.清晰.优雅.利落.漂亮... 第2章 工程师怎样进行设计思维——理性模型 1.有序模型的有 ...

  4. 《Unix编程艺术》读书笔记(1)

    <Unix编程艺术>读书笔记(1) 这两天開始阅读该书,以下是自己的体会,以及原文的摘录,尽管有些东西还无法全然吃透. 写优雅的代码来提高软件系统的透明性:(P134) Elegance ...

  5. 【英语魔法俱乐部——读书笔记】 3 高级句型-简化从句&倒装句(Reduced Clauses、Inverted Sentences) 【完结】

    [英语魔法俱乐部——读书笔记] 3 高级句型-简化从句&倒装句(Reduced Clauses.Inverted Sentences):(3.1)从属从句简化的通则.(3.2)形容词从句简化. ...

  6. 【英语魔法俱乐部——读书笔记】 2 中级句型-复句&合句(Complex Sentences、Compound Sentences)

    [英语魔法俱乐部——读书笔记] 2 中级句型-复句&合句(Complex Sentences.Compound Sentences):(2.1)名词从句.(2.2)副词从句.(2.3)关系从句 ...

  7. Computer architecture Computer organization

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCEComputer architectureNINTH EDITION C ...

  8. 图解TCP/IP读书笔记(一)

    图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...

  9. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  10. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

随机推荐

  1. linux下编译出现空间不足解决办法

    linux下编译出现空间不足解决办法 编译内核出现问题: AS      .tmp_kallsyms1.o .tmp_kallsyms1.S:2: fatal error: when writing ...

  2. 【Python】【学习笔记】1.快速入门

    1.软件安装 从官网下载相应版本的安装包,一般不大. https://www.python.org/ 安装一路默认即可 2. 参考教程:快速入门:十分钟学会Python 本文的内容介于教程(Totur ...

  3. c# 反射应用之工厂

    反射是.net的核心功能,十分的强大.但是好像微软封装的太过了,作为程序员,在实际项目中我很少用到反射(估计是参加的大型项目太少了,需要交互第三方的项目太少了). 工厂模式是软件设计模式中重要的一种, ...

  4. uva 213 Message Decoding

    思路来自紫书...开始时的思路估计100行+,果断放弃!关键:1.正确提取出函数!   initmap():初始化字母与整数的映射.   returnint(x):向后读取x位,并转换为十进制数返回. ...

  5. 微信APP支付服务端开发Java版(一)

    一.准备工作 去微信开发者中心下载(扫码支付,里面的大部分代码是可以用的) https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11 ...

  6. jsp学习之基于mvc学生管理系统的编写

    mvc开发模式:分别是 model层 view层 Control层 在学生管理系统中,model层有学生实体类,数据访问的dao层,view层主要是用于显示信息的界面,Control层主要是servl ...

  7. (转) jsp页面 URL传中文参数到Action里面出现乱码

    jsp页面 URL传中文参数到Action里面出现乱码,方法如下: 第一种:在Action中用 new String(str.getBytes("ISO8859_1"), &quo ...

  8. 【转】Java反射 之 反射基础

    一.反射 反射:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  9. VS 工程的 输出路径和工作路径的区别

    输出路径,是vs编译项目生成可执行文件的路径:工作路径是环境变量,比如我们在程序中写相对路径,就是以这个路径为基础的.在默认情况下,输出路径和工作路径都不写的话,默认是程序的bin下面的debug或者 ...

  10. Unity3D 一个较常见的错误信息“rect[2] == rt->GetGLWidth() && rect[3] == rt->GetGLHeight()”

    rect[2] == rt->GetGLWidth() && rect[3] == rt->GetGLHeight() 这个错误信息的具体含义我还不太清楚.它出现以后会不停 ...