如何利用terralang实现terrapp

介绍

这篇文章主要讲解了“如何利用terralang实现terrapp”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”如何利用terralang实现terrapp”吧!

<强>本文关键字:发明自己的语言,可lua扩展的语言系统,用库发明语言vs用语言发明语言,是工具链语言也是应用生产语言,全生态语言

整个xaas系列文章中,我们编译组装了自己的dbcolinux,现在我们要发明自己的语言,如果说linux生态允许我们很大自由地定制一个完善的操作系统,那么terralang类似地,就是一个给我们定制语言系统的工具,它的设计目的之一就是这个,而且经过了专门的去复杂化。我们可以在少量知识和实践储备的前提下,复制粘贴式地发明自己的简单语言系统

我们要定制的语言系统是cpp在前面关于terralang的文章中《terracling》《+ +》,我们多次提到了这个目的,我们现在要利用terra最小核心实现一个真正可用的cpp,其实terra已经是个cpp了,但是它离真正可用的cpp还是有点差距,因为它只定义了最小语言扩展所需用到的核心(稍后谈到它的正交类型和语句设计),所以严格来说它只是个cplus,而现在我们要在这个基础上造一个接近标准terralang cpp的dsl, terralang.org的网站中,也有大量相关资料专门提到这个专门课题,这成为我们的所有足够的起点。

与lua接通,更像c,设计语言的语言

在这之前,我们要了解terralang作为元语言工具的这种能力的深层原因,我们按前述文章的做法,称呼terralang为整个terralangsys,而terra是单个语言:

首先,terra应该被称为受力(terra是c系的,地球是c对lua extender),但是它却更适合被称为terra/lua的,这是为什么呢,因为terralangsys中,地球被设计成与lua混编,那么terra究竟是发明语言的语言,还是用来被日常使用的语言。都可以,甚至terra当然也可以作为独立语言(.....与高性能的脚本语言扩展构建语言.....嵌入式jit编译器一个独立的低级语言....),但是大部分情况下,它以terra/lua方式被使用.lua中欠入terra——-terralang主要用来元编程或dsl写。严格来说,terralang中只有terra, lua二种语言。

terralang中有二种独立的语言,它们的运行时是并存的,也是可以离线分别使用的.Terra lua运行时编译器的一部分,terra执行在一个单独的环境:terra代码运行独立的lua运行时。在lua运行期对应terra的编译期,而terra的运行期是操作系统的,并不绑定整个terralangsys

但是在语法上和使用上,terra/lua却是一体的,甚至是紧密联系的,就像一种语言——即terralang。

terra是用来代替和改进C的,它有自己的类型系统(terra的类型类似于C),代码系统,和所有一门语言应该有的那些,本来如果C有terra需要的与lua交互的一切,那么C直接就是地球了,但是因为没有,所以对C的增强就演化成了terra,——我们把它称为cplus,在地球中日常编程是lua/terra混编,所以实际上可以视为lua/terra + cplus混编,另一方面,terra也是对lua的扩展,terra表达式是lua语言的扩展。Terra C API扩展Lua与一组Terra-specific功能的API,一句话,Terra使Lua像C,使C像Lua

那么,为什么要这么做呢?因为terralang被设计成将C与Lua良好交互,互操作,它必须要及其简单,一开始就考虑进免绑定交互,luajit有ffi可以以简单的方式与C交互,其实luajit ffi对于C的封装已经接近了,Terra也是采用它的作法,既然Lua/C已经可以,为什么还要出一个地球/Lua,这是因为其远远不够。比如它缺少元编程和多级编程那些,所以Terra增进和增加了这些,它有哪些方面使得它一面像C,一面又接通Lua

其实现原理和准则是什么呢?诚然多语言体系有极可能优秀的多的方案,但terralang只选取了适合自己的部分。

它实现了一个预处理器,使得设计期和执行期分离,分离编译时和runtime-time环境,这二个期,它们交互的单元非常小——一个Terra函数或类型这使得语言系统高效清希,二个期都有完备的语言系统,却能承接,服务于一体化结果。这个过程是这样的:

在设计期和编译期,预处理器解析文本,为每个Terra函数构建AST。然后它取代了Terra功能文本与Terra函数调用专门在当地的环境。这个构造函数作为参数解析AST,以及一个Lua关闭了当地的词法环境。使得在语法上,terra/lua是一体的。写出来的。t程序将包含多语言源码,但在编译期共享词汇范围和不同的执行环境中因为词法作用域上,双方的类型彼此可见。随时相互转化。这种简化是刻意而为之的:基于lua ffi,它使来自terra的所有语言元素作为lua的值存在,简化了这二门语言在各个期的所有谈话,稍后会谈到。

如何利用terralang实现terrapp