编译时间的集成实现框架元编程外文翻译资料

 2022-10-11 14:45:18

英语原文共 37 页,剩余内容已隐藏,支付完成后下载完整资料


编译时间的集成实现框架元编程

作者:Yannis Lilis和 Anthony Savidis
摘要

编译时元编程的一个源文件的编译过程中执行的程序,通常的目标更新它的源代码。尽管元编程的基本程序,它们通常被视为例外情况下,不分享共同的做法和发展工具。朝这个方向,我们确定一套语言实现的基本要求,相关的编程功能,软件工程支持,和编程环境,并阐述了解决这些要求的一种编程语言实现。特别是,我们介绍的概念,集成编译时元编程,为相干程序从特定的元代码片段在组装源代码。我们表现的这种编程模型,并说明其优势各种元程序场景。此外,我们提出了一个集成的工具链,支持全面建设特点和编译时元程序调试。

关键词:编译时元编程;多语言汇编编程;上演;模型

1.简介

多阶段编程语言[ 3,1 ]承担代码生成和支持的编程任务它作为一个一流的语言特征使自我转变,实现一种物化的底层语言代码生成器。当代码生成成为一种语言构造时,一个可能写的生成器代码,它生成其他代码,后者成为主要的一个组成部分用它代替原来的生成器代码的程序。在这个意义上,发电机起着作用元程序,即程序产生的另一个程序,而整个过程是递归的如果所生成的代码也是生成器代码,导致分期嵌套。在本文中我们交替使用的术语和元程序阶段。分期定义包括自定义语法,通常被称为分段注释[ 3 ]。在早期阶段的语言如MetaML [ 4 ]和[ 5 ]分期MetaOCaml,生成代码只发生在程序执行期间(运行时分期或运行时编程(RTMP))。然而,程序的分期方法也可以应用在程序编译。支持分期定义的评价和主程序的实际转换编制阶段。为了支持这样的转换,被操纵的源代码片段是通常表示为一个抽象语法树(AST)。语言支持的例子编制方案包括模板Haskell [ 6 ],收敛[ 7 ] [ 8 ]和[ 9 ],metalua

图1.多阶段语言的一般分期过程。

我们的工作落在了多语言支持的领域和重点使CTMP通过实践和工具常用的程式正常全面发展程序。我们的主要动机是,在CTMP被许多语言的支持,作为一个发展的实践在过去几年中,它仍然作为一种特殊的发展功能似乎与主语言分离。元程序通常开发和未与正常程序的相似性部署。从开发商的角度看,他们往往缺乏一般的概念,如文件和模块,而从部署的角度来看,他们通常采用没有状态共享的宏调用策略或主控制流的概念。作为元编程计划,它是不合理的,提供多样化的发展风格,其中的世界和实际提供较少的设施元程序。在这个方向,我们强调的必要性元编程和编程之间的正常方法集成,具有共同的软件实践和开发工具。在这种情况下,我们首先确定一组与语言特征相关的突出要求,软件工程和编程环境,以有效支持这样的整合。然后,我们阐述的方式,最确定的要求已被安置和实施我们的语言。在这样的背景下,我们提出了集成的概念,编译时元编程作为嵌入在源文件中的段片段的相干程序。

论文结构如下。第2节建立了分期使用的术语文件,提供相关的背景信息,分期语法。第3节确定的关键集成编程支持的要求,而4节阐述了我们的主张,讨论的实施方法和提出的元编程模型的比较它的表现力,对目前流行的模型。第5节阐述的概念集成的工具链,显示元程序成为一流的项目管理,公民建立系统和集成开发环境(IDE)源码级调试器。最后,第6节总结并得出主要结论。

2.背景

在阐述集成元编程,我们的命题要求,我们多阶段语言的几个常见问题探讨。我们使用的术语阶段嵌套代表的方式阶段被嵌入在彼此。特别是,高级嵌套问题内在的元代码将评估过程的分期较早,而下一级嵌套问题外metacodethat将进行分期过程后。在这个意义上,在一个程序与氮阶段,最里面的一个嵌套的,将被执行第一,而最外层的阶段有嵌套的一个并将执行最后。我们将继续与语言相关的分期共同特征值语法和语义,在讨论源片段作为行为和关键操作拟引用概念。

3.要求

元编程的实践是由相关的语言特征的能力的强烈影响和工具,以支持软件工程。在这种情况下,我们继续与突出的软件工程的要求,对综合实践活动的本质和元编程正常程序。应该指出的是,这种要求是来自现有的元语言,妥协的元编程的软件工程的缺点。

  总体而言,我们认为要从根本上难以正常元编程。然而,受限制的软件工程支持现有的语言,使它更难,有时一个黑暗的艺术渲染元编程的程序员。因为它变得很明显,这是条关于元编程工具实际上是提出这样的要求的水平类似于正常的程序.

3.1 利用正常语言特征和工具
  其中一个最重要的要求整合对正常程序和元程序是在语言语境下的所有正常的语言功能和工具的充分利用。它至关重要的是,metaprogrammers经验语言上正常语言的一种扩展,而不是限制它。这可能似乎很明显,但事实上,这是不符合大多数语言。我们简要地解释在CTMP执业这个要求的含义。有两个理由为什么所有正常语言的开发建设语言是关键。首先,在执行一个程式,一个不应在实施一个正常的程序所提供的功能比。二,即使当另一种相当的设施,它是困难和痛苦的程序员熟悉用正常的语言来学习和部署一组不同的结构编程任务。总体而言,正常语言在表达和表达上应充分利用组织的编程逻辑,额外的语法和语义,只介绍在必要的地方。

3.2支持上下文无关和上下文敏感的生成


  元编程是常用的像一个宏观系统变换源片段通过代码生成指令插入额外的源代码。在这个框架中,有2个可能的选项(图2)在控制插入上下文:(我)上下文无关的代码被插入在生成指令的源点和(二)上下文相关的上下文:当前的信息AST上下文提供给代指令,使在任何位置插入编码AST可到达的上下文的情况下自由的情况下通常称为剪切或内联和涵盖所有情况生成器逻辑不需要对代码插入上下文的认识。在这种情况下,发电机操作仅在其参数,如果有的话,并产生一个源片段,插入更换在AST原发电机指令。上下文无关的生成是很常见的元语言,而频繁,唯一可用的选项,如LISP,方案[ 19 ],MetaML,metalua,收敛。

图2。上下文无关(顶部)与上下文敏感(底部)代码生成。


  上下文敏感的情况下是更一般的,占所有的情况下,发电机逻辑需要决定实际代码插入上下文。此外,生成器可以在多个不同的位置插入代码片段,而不只是在一个单一的上下文中。

3.3 构成和生成所有的语言结构

  通常,重用是主要的动机领导的组成和经常练习的代码骨架或模板设计。在这样的一个典型的场景,重复使用的代码清楚地涉及到整个语言构造的范围,虽然经常性的代码模式成为代码骨架的组成和插入应用元编程。现在,一旦这个类型的重用是预期的正常程序,有没有特别的原因被排除在外的元编程。换句话说,元编程的程序,值得所有功能正常程序,包括使用任何重复的元代码的能力。对于后者来说,这是至关重要的。语言能够表达和创作元代码与正常代码。

4.集成的元编程

我们提出了一个新的编程模型,我们称之为集成的阶段,因为它允许软件
在某种程度上类似于正常程序的元程序工程。总体而言,生成性元编程是作为其他功能特性,程序可能有,没有意义两个世界之间的方法论分离是必要的。在这个模型中,独立在相同的筑巢阶段代码片段作为一个统一的程序,一个词法作用域控制流、共享程序的状态,确定的主要语言规则。此外,所有正常语言特点可在实施阶段。

4.1规划模型

  正如已经提到的,一个集成的元编程是由舞台码级联在同一阶段中,以其在主要来源的外观的顺序嵌套。因为这个装配,其评价的本质是其组成的源片段从而表示词法作用域控制流程内部集成的元程序的顺序执行。因为级联的片段可能包含一个生成指令,一个集成元程序表现为在其外围程序的多个输入和输出的位置。我们在这里使用这个术语,而不是仅仅因为嵌套级别的主要程序。一、导致集成元程序托管在其他集成的元编程。在阶段代码中,在正常程序中使用的任何功能都可以使用,比如执行典型的文件输入/输出,启动GUI可能优化代码生成行为的程序员交流,处理网络连接和通信,加载动态链接库,等等。集成的元编程模型相比,反映了一个支离破碎的阶段代码基本方法论转变。总的来说,分离阶段相同的封闭程序的片段没有特定的目标,只有复杂的工程的元编程。总之,下面几轮重复进行阶段评估直到没有任何阶段存在:

1.确定最内层嵌套级别
2.这种嵌套层次组装集成元程序
3.建立和执行

从上述过程中的阶段评估,这是显而易见的,我们所提出的模型反映了不同的评价以自上而下和当前多级语言评估的传统做法相比,里里外外。例如,考虑以下嵌套的阶段代码,其中F1,F2,G1和G2的表达和上演!表示元程序调用。

传统的多级语言的评估顺序是

集成的元编程的求值顺序是

括号是用来表示,封闭的阶段式表达式是作为一个单一的执行相干程序并不是孤立的调用。显然,这两者是不同的。下面的例子说明了这两种方法之间的评价顺序的形式图5。

图5。在基金评价为典型的多级语言表达与我列举上演上演的代码块和J表示阶段嵌套在各块。

4.2元语言

  在下面的章节中,我们简要概述我们的综合实施分期元编程的语法和语义。

准引号(写的lt;hellip;gt;)可以插入到定义中,如表达式,语句,函数,等等,来传达自己的AST的形式和最简单的方式(不只有一个)来创建直接从源文本行为。例如,lt;lt; 2 gt; gt;是AST 1对原文的1 2,而ast_make_const(3.14)产生的数字AST常数3.14。准引号内的变量在上下文中的名称解析在各自的AST是最后插入,即是词法作用域在插入点。例如,不与任何在准引号位置上可见的times;times;times;1。词法作用域和变量的使用第一次声明的名字满足。因此,如果没有在插入点定义的话,一个新的times;被引入的分配。

防止变量捕获和支持健康的宏,我们允许在准行情alpharenamed变量使用特殊语法。那些是自动内容独特标识符。特别是,lt; $ * gt;表示,在插入时,会有一个新的独特的名字语境。在大多数的元语言,这样的卫生行为是主动的捕捉默认名称只能通过特殊语法启用。

我们特意选择了这样一个反激活策略,因为我们认为这更多的常适合实际使用元编程。更具体地说,元程序可能产生:(我)完整的命名的元素如类,函数,方法,常量、命名空间和仿制药,可以直接部署;(ii)模板的代码片段来填补与其他代码片段;和(三)其他非模板代码片段,可以进一步组合。

4.2.2 分期标签

代码和支持CTMP必不可少。在语法上,他们之间的边界定义阶段代码片段和介绍阶段嵌套,也被称为元级转移。除了内联(代)和执行(元级变速),出现在各种元语言,我们也介绍定义。我们将显示,后者是所需的语言在执行不能语法表示块范围内的语句和程序作用域定义。例如,接口定义和java导入指令仅仅是全局定义的,而报表只能局部定义的块。因此,不可能有适当的共同的非终结符执行可以采取两个地址。

我们首先详细介绍分期标签语法和语义。

内联(书面!(expr))是分级编码评价表达式(它的值必须是一个AST型)为封闭程序以取代本身。准引号内的内联标记是允许的,并且作为所有其他准引用表达式,只是AST值不直接评价。它是允许携带代表表达内联指令被内联的AST、意义代指令可能产生进一步的代指令,从而支持metagenerators。后者,除了嵌套的阶段,静态定义通过明确的分期标签,允许任意数量的阶段是动态的元编程的介绍自己。

作为一个极端的例子,下面的内联指令(第二个)反复再现本身(使用第一个是准引用),造成无休止的分期。

以一个小的变化,同样的例子工作的方式,内联指令再现控制次数。示例中所示的值为nil表示一个空的AST值基本上替换没有代码的生成器。

执行(书面 amp;stmt)定义一个阶段地代表任何单个语句,局部定义,或语块。

5.综合工具链

处理阶段作为一个全面的计划,意味着支持他们与工具和设施类似的正常程序。在这样的背景下,详细阐述在IDE中,阶段的集成、工作空间管理、构建系统,和源码级调试器。

5.1工作区管理器的集成

首先,综合元程序提取并存储为单独的只读文件连接到各自的主程序。显然,这允许更好的复习和理解,学习一元程序在单独的文本片段作为嵌入在主程序的比较。其次,修改后的版本的主程序,在每一个阶段的评价,也被存储为单独的只读文件,显示清楚地上演的转换,介绍了在原来的程序。所有这些源文件都是在编译过程中产生的,并被传播到工作区管理器中,以包含在其各自的文件夹和结构中。

一旦合并在工作区中,除了审查和浏览,它们也被用于报告编译错误,设置断点和执行源级调试。

5.2构建系统集成

在主程序的编译环发生阶段的翻译的提取,建立阶段,编译器应直接与构建系统互操作。这一过程,如图15所示,包括以下步骤:

1。当一个源程序被编译时,生成系统就可以解析和生成依赖关系,最后在实际的源代码中调用编译器,同时也等待可能的进一步要求。

2。如果源包含阶段,过程将继续从步骤4。

3。否则,源程序直接编译,编译系统被通知,二进制已准备好,编译过程到此结束。

4阶段的来源,即一个集成的元程序。

图15。建立系统和编译器交互序列图的元编程

5、提

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[151479],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

发小红书推广免费获取该资料资格。点击链接进入获取推广文案即可: Ai一键组稿 | 降AI率 | 降重复率 | 论文一键排版