没有合适的资源?快使用搜索试试~ 我知道了~
埃及信息学杂志(2010年)11,1开罗大学埃及信息学杂志www.elsevier.com/locate/eijwww.sciencedirect.com原创文章DisBlue+:一个基于注释的分布式C#编译器萨米尔·E.AbdelRahmana,*,Amr M.阿卜杜勒·赛义夫ba埃及开罗大学计算机和信息学院b埃及Zagazig大学计算和信息学院2009年11月收稿; 2010年2010年7月17日在线提供摘要许多编程语言利用注释来向程序中添加有用的信息,但它们仍然会导致更多的令牌被编译,因此编译时间较慢。任何当前的分布式编译器都将程序分解成分散的不相交的片段以加快编译速度。然而,这些部分同步合作,高度依赖于彼此。由于消息、符号或代码必须在整个网络中漫游,这会导致大量的开销。本文介绍了两个很有前途的编译器,即基于注释的C#(Blue+)和基于分布式注释的C#(DisBlue+)。建议的Blue+注释基于公理语义来替换if/loop结构。由于开发人员倾向于使用许多(复杂)条件并在程序中重复这些条件,因此此类注释可减少编译扫描时间提高了整个代码的可读性。构建在Blue+之上,DisBlue+提出了其提出的分布式概念,即将每个程序类划分为其原型和定义,作为不相交的分布式部分,使得每个类定义仅与其相关的编译原型(接口)一起编译。这样的概念减少了在网络上传输的代码量,最小化了不相交的片段之间的依赖性,并消除了它们之间任何可能的同步。为了测试它们的效率,Blue+和DisBlue+使用大型代码对一些现有的编译器(即Javac,DJavac和CDjava)进行了验证。©2010计算机和信息学院,开罗大学。制作和主持人Elsevier B.V.保留所有权利。*通讯作者。电 子 邮 件 地 址 : s. fci-cu.edu.eg ( S.E. AbdelRahman ) ,amro43210@gmail.com(上午)Abdeldalaf)。1110-8665© 2010 开 罗 大 学 计 算 机 和 信 息 学 院 。 制 作 和 主 办Elsevier B.V.保留所有权利。开罗大学计算机和信息学院负责同行审查。doi:10.1016/j.eij.2010.06.001制作和主办:Elsevier1. 介绍研究的方向是使用简单的概念,即公理语义、注释和分布式编译接口,增强编译构造阶段以加速编译过程面向对象的编译器构造阶段[1]主要分为两大类,即前端和后端阶段。前端集群具有用于扫描代码的词法分析器、用于解析扫描的代码以生成一个主抽象树(AST)的语法分析器以及用于将所有程序语义添加到AST的语义分析器。研究关键词注释;公理语义学;分布式编译器; Blue2 S.E. AbdelRahman,A.M. Abdellatif范围只是帮助开发人员解决这个缺陷的前端阶段。公理语义学[2]通常与使用程序文本的纯静态分析来证明程序/指令是正确的相关联。语句正确性是通过将断言放置在语句之前和/或之后来PRE总是被解释为执行相关语句和POST的条件,如果违反,程序将被终止。注释[3开发者可以使用他/她的注释来扩展编程语言和/或其编译器的特征。这样的扩展被用作标记,使编译器处理这些特性。但是,向程序中添加更多标记会导致需要解析更多标记,从而导致编译开销。到目前为止,所有创新的注释都存在这个缺陷。分布式/并行编译器[16它可以在一个或多个编译器阶段完成,例如扫描,解析,语义分析,或者通过它们之间的流水线。近年来,分布式编译器的研究[20,21,23,30]大多是基于模块化思想进行的。模块之间的分离或模块原型(声明)和实现(定义)之间的分离总是用来减少编译时间。当在远程站点上分发这些片段时,每个站点都必须等待来自其他站点的特定信息,以便继续其编译。这种同步会增加编译时间。此外,由于在协作远程站点之间传输的大量代码而发生网络开销。据我们所知,目前所有的分布式编译器都存在这些缺陷。为了进行上述所有的研究,首先选择了一个名为Blue的C#编译器[32]作为研究基线。 其次,实施Blue+来处理建议的注释。第三,DisBlue+是在Blue+的基础上建立的,以实现上述所有贡献。最后,通过大量的应用为了测试Blue+和DisBlue+的效率,分别使用了本文的其余部分如下。本文的主要研究成果和目标将在下文中介绍.第三节介绍了一些相关的工作。第4节通过实例说明了Blue+方面。第5节通过实例演示了DisBlue+的功能。第6节显示了两个建议的编译器的一些实现问题。在第7节中,给出了实验结果。最后,在第8节中得出结论。2. 研究贡献公理语义、注释和编译接口概念是当前存在的编程问题(第3节)。如何利用这些概念来达到研究目的,是本研究的创新之处。除了代码的可读性和可重用性,研究的目标是克服由于注释标记和/或分布式编译的开销。拟议利用情况可概述如下:(1) 所有的程序条件都可以被公理语义替换为预编译的注释。这些注释是由开发人员在开发时在编译发生之前创建和编译的。此外,它们是可重用的,比任何当前的条件(复合)语句更具可读性。因此,减少了所产生的总令牌,并且更新比以往任何时候都容易。(2) 在所提出的分布式编译环境中,编译接口仅在网络中漫游,从而通过高度自动化的管理异步地保证相应组件之间的依赖关系。此外,由于接口是轻量级的,与现在的分布式编译器相比,总的传输字节减少了。为了衡量研究贡献,测量了编译时间速度的拟议利用的有效性(第7节)。此外,它的易用性、可读性和可重用性也通过许多实际和简单的应用程序进行了验证(第4节和第5节)。3. 相关工作编译器[8,17,30]中的许多研究工作都引入了注释或分布式技术来增强编译阶段。在下文中,描述了一些相关的研究。3.1. 注释注释可以以元数据的形式添加,然后在构建或执行程序的后期阶段可用。例如,编译器可以使用元数据来决定发出什么警告[6];调试器可以使用断言,与源代码混合以处理程序模块的行为[9];优化器也可以使用它们来分配寄存器[7];链接器[11,33]可以使用元数据将多个对象文件连接到单个可执行文件中;可视化设计器[11,33]可以使用元数据来控制模块属性的可视化。现代编程语言和传统编程语言一样,都支持程序注释。Java和.NET使注释能够通过所有编译阶段。Java的早期版本允许在名为attributes的类文件中使用注释[10]。此外,出于性能优化[7]和数组边界检查消除[21]的目的,还应用了字节码注释。Java 1.5正式引入了语言级别的注释[1,34]。NET正式使用注释,作为属性,从它的第一个版本[33最近[15]提出了一种根据其使用情况对注释进行分类的方法。在这种分类中,注释可以是命令式的、指示式的或虚拟式的。命令式注释是在运行时执行的命令[34]。例如,可以将@WebMethod注释附加到Java方法,以将方法转换为Web服务方法。指示性注释是可以从程序代码中推导出的事实[9]。检查数组边界就是一个例子。虚拟注释是具有前/后条件(断言)[5,9,13]形式的标记,当它们被执行并且执行违反时,运行时异常 被抛出。例如,DisBlue+:一个基于注释的分布式C#编译器在ALL[8]和Eiffel中用作程序注释的关键字[12]前/后条件的语言。到目前为止应用的所有注释(包括前置/后置条件)都增加了编译器的开销,因为需要解析更多的标记。本文提出,使用公理语义(第1节),一种新类型的虚拟注释,其中没有额外的信息添加到源代码,并在同一时间适用于条件(检查)的程序语句。3.2. 分布式/并行技术许多分布式/并行编译器已经被构造来减少编译时间。解析器可以将语法分解为不相交的小部分,并使每个处理器负责一个部分[8,16,17,25,26,28,29]。提出了将解析树划分为子树并将其分布在一组处理器上,每个处理器执行语义分析和代码生成,然后最终收集结果。参考文献[20,21,30]已建立基于modularity的概念Zuse[20]是一种模块化语言,它引入了具体、抽象、半抽象类型的概念,并允许将模块划分为规范和实现。使用Zuse编译器,master首先将编译单元分发给所有slave(客户端),这样它们必须同时开始每个其次,每个从机生成自己的代码。最后,主程序将生成的所有代码组合成一个完整的可执行程序。然而,Zuse编译器面临着一些缺陷。首先,它阻止开发人员编写两个相关的模块。第二,同步和依赖性问题禁止从机独立地继续。当一个从站需要其他从站的寻址信息或内联方法时,就会出现问题;这就是为什么编译器让所有从站同时启动每个阶段的原因。最后,由于可能在从设备之间交换prmc编译器[30]将编译单元分发到网络站点,使得每个站点提取其类的外部模型来描述相关接口。依赖站点需要此外部模型来继续其编译。每个外部模型都以二进制代码的形式进行编译,并将其与调试信息和相关符号表一起发送到链接器。因此,prmc com-piler遭受Zuse编译器的第二和第三个缺陷DJavac[21]是第一个分布式Java编译器。它解析 并分析源文件以提取关于文件之间的关系的信息,该信息用于构建邻接矩阵。例如,如果A从B继承,A实现B,或者A有一个B的对象,则类A直接依赖于类B。因此,A不能被编译,直到B被首先编译。一旦邻接矩阵建立,调度程序用于选择准备好的文件首先进行编译。为负责与单个远程服务器通信的每个主机创建线程。这些线程中的每一个都创建了一个到远程机器的TCP套接字连接,以便传输信息和文件。有两种类型的传输文件扩展名为.java和.class文件。对于.java文件,传输是从工作站到服务器进行编译。然后.class文件被传输回工作站。调度器的工作是通过选择要在其中一台服务器上编译的单个/一组文件来最大限度地减少编译时间。一个现成的文件是它所有的孩子都被编译的文件,因此它是-图1没有if语句的AST子树。是矩阵中的一个叶子节点。一旦一个准备好的文件被编译,它将被从矩阵中删除这使得所有依赖于它的文件都成为叶子节点,然后被提名为下一个选择。这个过程一直持续到所有文件都编译完成。DJavac的主要缺点是文件传输的广泛使用。在传输类文件时会增加额外的开销。例如,如果类A依赖于类B,而调度程序决定编译类A,那么要么转移A.java,要么转移类B,因为A在没有B .java/.class文件的情况下无法单独编译。本文提出了一种分布式编译技术,它不受同步问题的影响,它导致最小的网络开销。由于该编译器与DJavac有一些相似的思想,所以主要是进行比较。4. 基于注释的C#(Blue+)在设计Blue+编译器时,主要考虑了三个方面的问题.首先,公理语义[2]被确定为替代程序条件/循环的注释。这是因为它的简单性、可读性和声明性。第二,C#[33,35,36]被选为一种优秀的OOP语言。 与Java和C++相比,参考文献[38]给出了提名C#的充分理由。最后,作为C#编译器,Blue[32]被选为研究基线。它是遵循所有OOP编译器原则的托管编译器[1] 最初是为了教育和研究的目的。Blue+的基本思想是在编译阶段利用预解析操作。也就是在解析时间之前解析一些源代码。Blue+在开发时进行预解析以解析公理语义。然后在解析阶段将生成的树合并(注入)1到非公理状态的解析树中。预解析肯定是设计来减少编译时间。示例1通过显示使用if语句括起表达式之前和之后的抽象树(AST)来说明这一思想。如果状态子AST由环绕的粗闭合线标记例1.下面给出两个不等价的代码(图1和2),然后在图中描绘了相应的AST。分别为3和4。一些潜在的线索应呈现如下:1在上下文中使用单词注入,因为公理语义分析树没有完全与非公理语义分析树合并,而是在其一个节点处注入4S.E. AbdelRahman,A.M. Abdellatifstatic int function(intx){ x = 1; return x;}static int function(intx){ if(x 0)} x = x +1; return图2带有if语句子树的AST。图3图1代码。(1) 图4的代码应该被解释为图3的代码与对“x "值的约束相因此,在Fig. 4代码中,语句<“if(x 0)”是对“x=x+1”语句的断言,通过该断言确保“x "的值为负。(2) 虽然图1描述了“x =x+1”语句的AST(3) 这两个图之间的区别只是图中的环绕子树。 2,它与“if(x 0)”有关<。这意味着如果这棵树被切断,那么两个数字在语法上是相同的。而且,这样的子树可以用作独立的可重用部分。(4) 如果将图2所包围的子树与其余部分分开切割和处理,则可以通过进行两次注射再次获得整个图。第一个注入是图1Expstatement>节点连接到“if "子树的then_clause>节点然后,通过执行上述步骤,消除了将条件标记化所花费的时间,特别是如果编译器编辑器作为解释器,在标记化和解析的同时支持可视化地开发它们。预解析阶段无法完成,除非修改编程语言语法以支持公理语义规则。Blue+为C#BNF添加了公理语义规则图5许多现实生活中的应用[39]被实现来证明Blue+想法的可行性。此外,他们揭示了研究信念是如何对开发人员非常重要的编码/更新程序容易,简单,可读性与最小的管理努力。应注意以下几点(1) Blue+ GUI具有类似于Excel函数编辑器的功能,简化了注释(断言)的编写。(2) 生成的Blue+代码比它的Blue同义词简单得多,也更小。(3) 公理语义、声明性和简单性赋予了Blue+代码可读性,特别是当开发人员在他/她的代码中使用许多(重复复合)条件/循环时。下面选择了两个应用程序,即Travelling Sales Problem和Scanner Generator for Infix Expression,以显示Blue+的可行性、可读性和可重用性。4.1. 旅行推销员问题表1显示了图6中的Blue+断言及其相关的Blue条件。表1应阐明以下几点:图4图2代码。第二个是通过连接第一次注射图1BlockStatement> point。上述线索引发了Blue+的提议,具体如下:(a) 在程序开发时:开发人员可以(单独)编写他打算使用的断言,而不是if语句。在编写时,断言被编译到其对应的AST中,图2仅包围子树,并保存在外部文件中。之后,当开发人员希望在其代码中(重用)该断言时,他将恢复并重新加载目录中的文件。因此,开发人员可以很容易地重用或修改此断言以供进一步使用。这导致快速的维护程序。(b) 在程序解析阶段,断言树被放置在其相关的位置,以形成一个唯一的解析树。图5带有公理语义的扩充Blue文法。●●DisBlue+:一个基于注释的分布式C#编译器5表1蓝色+无花果 7个断言和相关的蓝色条件。号图7断言图6等效代码条件1如果(n>0)2for(inti=2; i =n; i++)3<所有子集,>for(int subset=1; subset A.size()-1; subset++)4for(int i=2;i =n!contains(A[subset],i);i++)5<其他>其他(1) 由于它们的声明性概念,所有图7的断言都比它们的图7更可读。 6个 相关结构,例如,断言4比相关的for循环复杂条件更可读和更简单。(2) 当每个断言解析树被注入时,所有解析树变量和方法的可见性和作用域,例如i,n,subset,A.size()和contains(A[subset],i),都将与所有主要AST元素一起检查。(3) 与其他代码部分分开,所有断言首先在开发时进行编码和解析。此外,当开发人员需要在其代码语句之前或之后使用/重复任何条件时,他可以选择对所需条件进行编码的断言。假设,如果开发人员希望重复图。 6多次编码第四个条件语句,例如:一千次,那么他必须写1000条语句。这导致解析循环1000次,增加了词法分析器和语法分析器的时间。此外,如果需要更改其中的某个部分,则开发人员必须进行1000次调整。与这种方法相比,如果使用图7断言,则语句被解析和修改一次。这导致减少两个阶段的时间,从而减少了维护程序。(4) 在解析时,Blue+解析器将else>与最近的如果解析器不能进行这样的匹配,那么它将生成解析器错误 。 在 给 定 的 示 例 中 , else> assertion 与isnPositive,>匹配。(5) 如果开发人员希望重命名任何断言,那么他会在断言文件中更新一次,Blue+本身会重命名整个相关程序中所有受影响的断言。图8. In fix表达式的 上下文无关语法图6蓝色旅行销售员问题代码。图7蓝色+旅行销售人员问题代码。图9蓝色的DFA代码切片6S.E. AbdelRahman,A.M. Abdellatif类解析器:IParser{private Token lookahead;private IScannerscanner;public void Begin(IScanner scanner){ this.scanner = scanner;int n = nums. getnums();}public void online()那就int n = getName(); int n= getName();//测试lookahead是左括号还是数字break;},while_true>eat(ITokens.token);Application.Exit{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}图10 Blue+对DFA程序的切片4.2. 用于Infix表达式的扫描器是编译器的一部分,通常是用某种编程语言编写的为了演示的目的,选择了一个小的语法用于说明图8 。 在 图 8 中 , 示 出 了 上 述 语 法 , 诸 如 NUMBER 、LPAREN、RPAR-EN、EOL、ADDOP和MULOP。相关的DFA代码列在图2和图3中。9和10的5. 建议的基于注释的分布式C#(DisBlue+)建立在Blue+之上,DisBlue+继承了它的所有功能(第4节)。此外,DisBlue+具有完全依赖于编译接口概念的分布式特性。Dis- Blue+的思想是基于OOP特性和软件工程原理.在多态性和接口特性的支持下,应用软件工程师将应用程序形成为应用服务器中的一组相关接口。与其编译的相关接口耦合的编译接口(CI)被发送到应用客户端之一。在该客户端中,通过逆向工程模块提取已编译的接口以获得其规格,然后编写CI的主体这些步骤呈现如下:(1) 软件工程师将程序划分为一组任务,然后为每个任务指定骨架代码。骨架代码是根据一组接口定义的。(2) 软件工程师指定哪些任务将分配给特定的开发人员。(3) 每个任务的可见性由软件工程师决定。(4) 发布分发命令。在服务器上对每个任务进行编译,并发送给每个开发人员(客户端)。(5) 在每个客户端接收到任务后,每个开发人员都有责任通过实现接收到的接口来创建实现类。(6) 当开发人员完成编写自己的任务时,他使用Blue+编译器将任务编译成.dll文件并将其发送到服务器。(7) 服务器收集所有的任务实现,并将它们编译成一个完整的程序。尽管编译接口不是一个新颖的思想,但在上述步骤中使用它的方式是一个分布式编译器的新颖思想,它揭示了许多潜在的点。首先,可以异步地对划分的任务进行编码,而无需项目开发人员之间的任何同步协作。其次,不会出现冲突或可能的编程错误,因为所有接口和相关主体都由软件工程师定义。第三,所有的任务都是自动组装的,这比今天的分布式编译器提供了更好的软件管理活动。最后,由于大多数DisBlue+传输的文件都是编译接口,因此DisBlue+应用程序的总传输字节数很小。这与现在类似的编译器相反,它们中的每一个都使其客户端由于它们的依赖性而彼此在下面的两个应用程序中,即编译器生成器和专家系统,以显示如何合作类之间的依赖关系可以很容易地和可读的DisBlue+提到的功能管理编译阶段可以被开发为单独的编译单元,使得每个阶段可以由调用对象的方法的一个对象呈现。因此,如果每个相界面都被清楚地定义,则相关的相可以单独开发,而不需要该相定义。使用定义良好的扫描器和解析器接口,public class Uncategorized{public String val; public ITokens tokenType;}public enum IPokens{NUMBER = 1,ADDOP = 2,MULOP = 3,EOL = 4,LPAREN = 5,RPAREN = 6,WS = 7,λ = 8}公共接口IScanner{GetNextToken();}公共接口IParser{ void Begin(IScanner scanner);}图11 DisBlue+编译器接口和令牌。图12 DisBlue+解析器实现的切片。DisBlue+:一个基于注释的分布式C#编译器7它们可以在显影过程中被部分去除。图11将令牌、令牌类型、扫描器和解析器规范分别呈现为令牌类、ITokens枚举、ISanner接口和IParser接口,使得令牌和IToken是共享数据结构。在协调器分发了所有必要的编译接口之后,两个并发开发人员可以独立地为它们编码实现。扫描器和解析器的实现如图所示。 12个。专家系统(图13)可以被实现为三个组件,主要是知识规则、知识存储器和知识GUI。这些组件可以分别分布到知识规则类、知识存储器接口和知识GUI类,使得接口在两个类之间共享。软件工程师有责任定义这些组件6. 实施要点Blue是一个开源的C#编译器,它使用命名空间System.Reception.Emit()来生成MSIL(微软中间语言)。Blue不使用System.CodeDom命名空间来解析代码;相反,它构建自己的词法分析器、解析器、符号表和代码生成器。Blue的解析器进行了修改,以适应前置/后置条件的新语法。Blue嵌入了研究IDE,以避免.NET框架的启动时间带来的成本。IDE用于可视化地构建公理(预/解析条件)。开发人员可以在编辑程序之前、期间或之后的任何时候添加公理。AST公理被序列化并保存在外部文件中。DisBlue+是一个分布式编译器,它使许多开发人员能够通过一些协调来共享他们的工作。在服务器上工作的软件工程师。服务器为每个连接到它的客户端分配一个线程,.NET Remot用来实现对象之间的通信。RObject是由服务器发布的对象;此对象包含许多用于连接,断开连接,发送和/或从/到客户端接收文件的网络方法。任何想要参与该项目的人都可以请求连接。服务器接受连接。 每个客户都可以工作,而他是业余的,稍后他可以提交他的任务。7. 实验结果图13专家系统应用DisBlue+设计。为了测试Blue+和DisBlue+,开发了两个代码生成器,并用于生成Blue+图14 Javac、Blue和Blue+编译器图16 Javac、Blue和Blue+编译器的时间比较图15 Javac、Blue和Blue+编译器的时间比较图17 DisBlue+、DJavac和CDJavac编译器的时间比较时间8S.E. AbdelRahman,A.M. Abdellatif表3Blue+ compiler with compound if条件。文件大小(字节)Java时间(毫秒)蓝色时间(ms)蓝色+时间(ms)复合if语句(五个条件)表2带有简单if条件的Blue+编译器。先决条件数目文件大小(字节)Java时间(毫秒)蓝色时间(ms)蓝色+时间(ms)简单if语句106830.9218750.43750.0625503174.40.9843750.468750.0781251006082.560.9843750.4843750.10937550030412.81.2968750.718750.3281251000609281.54687510.609375150091955.21.68751.2656250.921875109240.93750.4531250.0625504280.320.9843750.4843750.093751008478.721.1093750.5468750.14062550042393.61.50.8750.609375100084889.61.6718751.2968751.0156251500126,9761.8593751.718751.515625表4混合了for和if条件的Blue+编译器先决条件数目文件大小(字节)Java时间(毫秒)蓝色时间(ms)蓝色+时间(ms)混合if和for语句108920.9218750.4531250.078125504229.120.9843750.4843750.093751008417.281.0468750.531250.12515012697.61.1250.5781250.187530025,6001.2968750.656250.359375表5DisBlue+编译器vs DJavac和CDJavac。例项目总大小(千字节)DisBlue+总时间(ms)随机1基准DJavac总时间(s)CDJavac总时间(s)19850.880.5754.51.50247718.40.7004.751.46366969.60.8114.851.454105,4720.9005.0091.475124,9280.9664.81.366144,3841.1395.11.59和DisBlue+。代码是随机生成的,因此不同类型的公理可能(不)嵌套和/或(不)重用。在Blue+实验中,使用了三个案例研究,即:“简单的如果”(表2和图14 ),“复合的如果”(表3和图14 )。15),和“混合,如果和为”(表4和图。 16)。每种情况都是根据编码的公理语义(前提条件)的数量来衡量的。总的程序大小从600字节到126,976字节不等; 145,000字节是Blue可以编译的最大文件大小。以ms为单位测量时间,并与Javac和Blue编译器进行比较。应注意两个要点。 首先,在应用程序没有重用公理的最坏情况下测量时间;没有公理被重复。第二,自Blue+总是用单个引用替换复合条件,条件长度无关紧要。在DisBlue+实验(示例2)中,实现了DJavac和CDjava算法[21,23],并通过[21,23]实验对其进行了验证。此后,他们的基准,命名为选择基准测试是因为它获得了最快的DJavac和CDjava结果[21,23]。研究结果是在字节大小从9850到144384不等的程序上计算的在每个编译器中,它的时间是纯粹基于Eq.(1)并以ms为单位测量所有的实验都是在一台处理器为Pentium 4 CPU 2.40GHz和256 RAM的Blue+的机器上进行的。而DisBlue+测试是在一台服务器和四个客户端上完成的,DisBlue+:一个基于注释的分布式C#编译器9相同的规格具有不同的操作系统Win XP、Linux FedoraCore 6和Windows Server 2003。每个分布式编译器运行在两个超线程多处理器机器上,速度为667 MHz和3 GHz,每个机器都有2G RAM。实施例2(表5和图17)。DisBlue+时间取决于网络侧的文件传输和编译(公式10)。① ①)。总编译时间<$Serer任务编译时间服务器任务分发时间最长服务器客户端编译时间最长服务器客户端任务发回时间ð1Þ所有任务都是同时开发和编译的。它们也是通过OOP接口构造独立编译的。因此,总编译时间取决于所有客户端的最大值。此外,在每个客户机上应用公理语义还可以减少编译时间。8. 结论和今后的工作Blue+和DisBlue+提出了加速(分布式)OOP编译和维护阶段的想法。这些概念非常重要,原因如下– 使用公理语义而不是程序(节奏复合)条件,程序代码变得更具可读性和可重用性– 分布式编译活动的高度自动化管理工作是使用最小的编程依赖来实现的。但是,DisBlue+软件工程师应考虑通过接口删除所有应用程序依赖关系它旨在构建一个新的C#/C++编译器,具有上述功能,使它们可以影响所有的编译阶段,特别是解析和语义阶段。应该研究更多类型的注释来增强这样的编译器。引用[1] Appel Andrew W,Palsberg J. Modern compiler implementationin Java.北京:清华大学出版社.[2] Sebesta RW.编程语言的概念。第8版,Addison-Wesley; 2007年。[3] JSR 175:Java编程语言的元数据工具。可从以下网址获得:http://jcp.org/en/jsr/detail? id=175。[4] Biberstein M,Sreedhar VC,Mendelson B,Citron D,GiammriaA.测试注释程序。2005年,第一届ACM/USENIX虚拟执行环境国际会议(VEE[5] 达纳·N扩展了Haskell的静态检查。In:Haskell workshop,2006.[6] [10]李国雄,李国雄.扩展了Java的静态检查。2002年,ACMSIGPLAN 2002编程语言设计与实现会议论文集[7] Jones J,Kamin SN.使用虚拟寄存器注释Java类文件以提高性能。Concurr Pract Exp 2000;12(6):423[8] 放大图片作者:Khurshid S,Marinov D,Jackson D.一种可分析的注释语言。见:OOPSLA 2002,vol.2002年25日p. 231-45[9] Leavens G,Baker A,Ruby C. JML的初步设计:Java的行为接口规范语言。技术报告TR 98- 06 i,计算机科学系,爱荷华州立大学,1998年6月。[Last修订:2001年8月]。[10] Lindholm T,Yellin F. Java虚拟机规范第2版,Addison-Wesley;1999年。[11] Meredith P,Pankaj B,Sahoo S,Lattner C,Adve V.数据结构分析在隔离和分析链接数据结构方面有多成功?技术报告#IUCDCS-R-2005- 2658,伊利诺伊大学计算机科学系,2005年12月。[12] 迈耶湾Eiffel:语言。New York,NY:Prentice Hall,1992.[13] 作者:A.设计:.NET的自定义属性如何影响设计。IEEESoftw 2002;19(5):18[14] Pechtchanski I , Sarkar V. Immutability specification and itsapplications.在:2002年11月的ACM Java开发人员- ISCOPE2002联合会议上。北京:人民出版社,2002. p. 202-11[15] WürthingerT,Wimmer C,MössenboückH. JavaHotSpotTM客户端编译器的数组边界检查消除。第五届Java编程原理与实践国 际 研 讨 会 ( The Fifth International Symposium onPrinciples and Practice of Programming in Java)PPPJ; 2007年。p. 125比33[16] Asthagiri CR,Potter J.联想并行词法。在:第六届国际并行处理研讨会,比佛利山庄,加利福尼亚州,美国,1992年3月的会议记录。[17] Baccelli F,Fleury T.在多处理环境中解析算术表达式。17.第十七章[18] Baccelli F,Mussi P.一个用于算术表达式及其求值的异步并行解释器。IEEE Trans Comput 1986;35(3).[19] Boehm H,Zwaenepoel W.并行属性文法求值。在:第七次分布式计算系统增量会议论文集,IEEE,1987年9月。第347-354页。[20] 科尔伯格角分布式高级模块绑定,用于灵活封装和快速模块间优化。In:程序设计语言和系统架构国际会议的主席,瑞士苏黎世,1994. p. 282比97[21] 道尔顿A分布式Java编译器:实现与评估。硕士[22] 吴J,Saltz J,Berryman H,Hiranandani S.稀疏问题的分布式内存编译器设计。IEEE Trans Comput 1995;44(6):737[23] Distcc:一个快速、免费的分布式C/C++编译器; 2004年。可从以下网址获得:http://distcc.samba.org/[24] Ensink B,Adve V.在分布式系统中协调适应。2004年3月,在日本东京举行的第24届分布式计算系统国际会议(ICDCS[25] Hill J. AMT分布式数组处理器上的并行词法分析和解析。第18章:我的天[26] Khanna S,Ghafoor A.一种用于并行编译的数据分区技术。载于:平行汇编问题讲习班会议记录,加拿大安大略省金斯敦,1990年5月。[27] 并行计算的语言和编译器。参加:2001年LCPC第14次国际研讨会,美国肯塔基州坎伯兰福尔斯,2001年8月1日至3日。订正 文 件 , Lect Notes Comput Sci , 第 2624/2003 卷 。Berlin/Heidelberg:Springer; 2004.[28] 莱夫克湾Pila:流水线处理器上的词法和句法分析。载于:平行汇编讲习班会议记录,加拿大安大略省金斯敦,1990年5月。[29] McDonald L,Wendelborn A.并行词法分析。载于:平行汇编讲习班会议记录,加拿大安大略省金斯敦,1990年5月。[30] 二等兵J,Ducournau R.链接时静态分析,用于面向对象语言的有效单独编译。In:The10S.E. AbdelRahman,A.M. Abdellatif第六届ACM SIGPLAN-SIGSOFT软件工具和工程程序分析研讨会(PASTE 2005),2006年。 p. 20-7[31] 杨威属性文法的最精细划分算法在:第二次研讨会上属性文法及其应用WAGA 99,1999年3月。[32] 蓝色:C#编译器。可查阅:http://blogs.msdn.com/jmstall/archive/2005/02/06/368192.aspx。[33] Mono 项 目 。 可 从 以 下 网 址 获 得 : http://www.mono-poject.com/Main_Page。[34] SunJDK。可从以下网址获得:http://developers.sun.com/downloads/[35] ECMA C# 和 公 共 语 言 基 础 设 施 标 准 。 可 查 阅 :http://msdn2.microsoft.com/en-us/netframework/Aa569283.aspx。[36] Microsoft C#语言规范,Microsoft Corporation,2001年。[37] Rammer I , Szpuszta M. 高 级 .NET 远 程 处 理 。 第 二 版 ,Microsoft Cooperation; 2005.[38] Java/.NET运行时的性能比较; 2004年10月。可从以下网址获得:http://www.shudo.net/jit/perf/[39] 那不勒斯河使用C++伪代码的算法基础. Jones and BartlettPublishers; 2004.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功