没有合适的资源?快使用搜索试试~ 我知道了~
--理论计算机科学电子笔记107(2004)7-25www.elsevier.com/locate/entcsBeta与Eclipse–Ole Lehrmann Madsen,PeterAndersen and Mads BrøggerEnevoldsen1,2奥胡斯大学计算机科学系ABO34,DK-8200,N,Denmark摘要本文介绍了为了实现对基于Java的Eclipse集成开发环境中的BETA语言。挑战之一是在BETA中实现插件并能够在Eclipse中加载它们。 为了做到这一点,Java和BETA之间需要某种形式的语言互操作性。第一种方法是使用Java本机接口,并使用C在Java和BETA之间架起桥梁。这这是一个可行但复杂的解决方案。第二种方法是让BETA编译器生成Java类文件。使用这种方法,可以在BETA中实现插件,甚至可以继承Java类。 本文介绍了这两种方法,从Beta到Java类文件的映射保留字: 语言互操作性,测试版,Java,JVM,Eclipse,调试器,.NET,Java。1电邮地址:olm,datpete,daimi.au.dk2BETA与Eclipse的集成由Adverse.org [2]赞助,实际工作由Mads Brøgger Enevoldsen[ 3 ]作为硕士论文项目的一部分进行,由Peter Andersen和Ole Lehrmann Madsen共同监督。Beta到Visual Studio的移植以及与Visual Studio的集成由Microsoft Denmark和Microsoft Cambridge赞助。Beta到JVM的移植是由Sun Microsystems赞助 Beta到JVM和 JVM 的移植由 Peter Andersen 和 Ole Lehrmann Madsen 完 成。 我们 衷心 感谢 JakobRoland Andersen、Lars Bak、Brian Berry、Gilad Bracha、Susanne Brøndberg、NeilGafter、Kim Falk Jørgensen、Henry Michael Lassen、Kasper Verdich Lund、HenrikLykke Nielsen、Dave Thomas和Jørgen Thyme的支持、启发和帮助。1571-0661 © 2004 Elsevier B. V.根据CC BY-NC-ND许可证开放访问。doi:10.1016/j.entcs.2004.02.0478O.L. Madsen等人理论计算机科学电子笔记107(2004)71介绍本文的目的是介绍在Eclipse [2]中实现对BETA [11]语言支持的项目经验。Eclipse是一个通用的集成开发环境(IDE),它具有一个插件体系结构,便于添加新工具。Eclipse是用Java实现的[4],其体系结构为用Java编写插件做好了充分的准备。用Java以外的其他语言编写插件是可能的,但这需要相当多的工作。因此,该项目的主要主题是研究语言互操作性问题,以便在基于Java的Eclipse IDE中实现对BETA的支持。BETA是一种面向对象的编程语言,在许多平台上使用本机编译器实现对于程序开发,一个强大的IDEMjolnerTool非常适合在BETA中进行程序开发然而,研究使用Eclipse等通用IDE的适用性有• 大多数软件开发人员根据他们所从事的项目类型使用几种编程语言。为所有语言使用同一IDE将使在语言之间交替使用更有效。• 库和框架通常可以从另一种语言中使用,而不是在其中实现。到目前为止,面向对象(OO)语言之间的语言互操作性还很有限.在最简单的形式中,可以从OO语言使用例如C中的过程库。使用MicrosoftCOM[5],跨语言使用组件(和对象)相对容易。在微软的.NET[ 6 ]/.NET [ 7 ] 3中如果语言互操作性增加,那么能够在同一IDE中支持多种语言当然是一个优势。• 一个通用的IDE应该比一个专用的IDE提供更多的工具。• 它需要相当多的资源来支持像MjolnerTool这样的IDE。使用一个通用的IDE,维护负担将有望减少到特定的工具,例如。β的为了用Eclipse替换MjolnerTool,需要满足一些要求(i) MjolnerTool中所有(或至少大部分)可用的工具都应该3 是通用语言O.L. Madsen等人理论计算机科学电子笔记107(2004)79在Eclipse中可用。其中包括代码浏览、文本缩进编辑、语法指导编辑、语义浏览、编译、调试、一个类似UML的CASE工具和一个界面生成器。此外,现代IDE的其他功能,如语法着色和语义工具提示,应该是可用的。(a) 代码浏览、文本编辑、语法着色和编译器调用在Eclipse中应该是直接支持的(b) 缩进、语法导向编辑、语义浏览、CASE工具和界面构建器都是语言特定的,预计这些工具必须作为新的插件提供(c) 对于调试,从一开始就不清楚是否可以重用某些Eclipse功能,或者必须提供特定的BETA调试器。(ii) Beta版的插件应该在Beta版中实现。这样做的原因是,它将允许重用MjolnerTool中现有的BETA代码此外,如果BETA开发人员和用户为了实现BETA工具而不得不切换到Java,那么使用Eclipse的动机就会更小。(iii) BETA库和框架通常应该可以与Eclipse一起使用对于非GUI框架,预计不会有问题,但对于GUI库,在实现Eclipse插件时,这可以在多大程度上完成,这一点并不清楚。下面描述了两种将BETA与Eclipse集成的方法。最初的方法是使用JNI通过C桥接Java和BETA。通过这种方式,原则上可以在BETA中编写部分插件正如下面所说的,这是令人厌烦的,而且调试起来非常复杂第二种方法是从BETA生成Java类文件,并在Eclipse中启动这些类文件。考虑到这一点,编写支持上述大部分需求的插件应该是很简单的。然而,从BETA生成类文件是一项主要任务。类文件被设计为支持Java,在许多方面,BETA比Java更通用。之所以认为这是一个现实的替代办法,是因为Eclipse项目是与在JVM4和微软的Java/.NET平台上实现BETA的项目同时进行的。该项目的目标是调查现代(类型化)虚拟机是否适合支持像BETA这样的语言,评估JVM和Java作为虚拟机平台,并调查Java/.NET声称的语言互操作性是否可以与BETA一起工作,4 JVM是Java Virtual Machine的缩写。10O.L. Madsen等人理论计算机科学电子笔记107(2004)7以及在JVM上语言互操作性的可能程度。这两个项目的现状如下:(i) Beta已经被移植到JVM和JVM。(ii) NET上的BETA语言互操作性似乎像承诺的那样工作- 令人惊讶的事情(至少对作者来说)是,它的工作原理就像在JVM上。(iii) 使用JNI获得了BETA与Eclipse集成的简单形式这包括浏览、文本编辑、缩进和启动编译器。压头模块是用BETA编写的。(iv) 通过使用BETA到JVM编译器,可以获得更紧密的集成。5插件可以用BETA编写,编译成类文件并在Eclipse中启动。(v) 将JBeta与Eclipse一起使用,可以通过Eclipse中可用的Java调试器对BETA程序2初始Eclipse集成2.1插件代码浏览和原始文本编辑的测试版源文件是可能的Eclipse“开箱即用”。 但是,由于Eclipse不知道BETA源文件,因此使用起来会很不方便。举个例子,Eclipse会抱怨不知道刚打开的文件的语言,并建议使用标准的文本编辑器编辑文件。通过制作一个只包含一个XML文件的小型Eclipse插件,可以很容易地指定扩展名为.bet的文件应该用一个特殊的图标显示,并使用标准的文本编辑器,而无需询问。然后可以向插件添加更多的功能,例如,文本编辑。可以通过几个类添加着色,而编译器激活需要实现大量的类,因为这通常涉及扩展Eclipse工具栏。2.2使用JNI添加缩进策略对于Eclipse文本编辑,可以关联一个所谓的策略这指定了代码缩进的默认 行 为 Eclipse 类 库 中 存 在 一 个 名 为 DefaultAutoIndentStrategy 的 默 认JavaScript通过重写方法实现特定语言的编译策略5从现在开始称为JBetaO.L. Madsen等人理论计算机科学电子笔记107(2004)711在这门课上。在Mjølner系统库中,有一个针对BETA代码的编译策略的实现。我们的目标是使用这个现有的BETA库在编辑器插件中实现JavaScript策略JDK6库提供了一个名为JNI7的本地方法接口。这允许在Java虚拟机中运行的代码访问用C编写的库方法。BETA也有一个C接口,它与JNI结合使得Java和BETA之间的互操作性通过C成为可能图1所示的实现Java部分实现了Eclipse扩展点。 名为JniIndentWrapper的库包含从Java调用C所需的所有Fig. 1. 使用JNI的这种形式的互操作性要求BETA插件用Java编写,但允许部分功能用BETA实现。这有助于重用现有的BETA代码。Java类通过JNI调用BETA库的代码如下所示:class BetaAutoIndentStrategy extends DefaultAutoIndentStrategy{ nativeint indentLine(int lineNo);//外部方法public String getString(){String. getString(“String”);//调用外部函数...}public void customizeDocumentCommand(IDoString d,DocumentCommand c){...value = indentLine(lineNo);//调用外部方法...}}6 Java Development Kit的缩写7 Java Native Interface的缩写12O.L. Madsen等人理论计算机科学电子笔记107(2004)72.3评价代码浏览和原始编辑在Eclipse中实际上是“免费”的通过一个小的插件规范,可以让Eclipse知道具有给定扩展名的源文件。然而,为了获得基本的功能性,如语法着色和编译器调用,需要相当多的编码。也许比预期的要多。通过JNI重用BETA代码实现的BETA策略包含多个源文件中的1000多行BETA代码这表明这种技术可以用于非平凡的然而,它有几个缺点:一个问题是使用三种不同的语言这使得集成繁琐和复杂。不仅编写代码很复杂,而且更重要的是,一旦编写和编译,就很难确定它是否能工作。库的加载发生在运行时,并且代码的这种后期绑定使得编译器不可能对例如各种方法调用。当外部代码中出现运行时错误通常情况下,必须在VM外部的某个地方显示错误消息Crashed。检查这样的bug是通过仔细查看源代码并在任何地方使用print语句来完成的总的来说,这个解决方案远远不够好。它解决了这个问题,但对于实施者来说,以一种非常不方便的方式。接下来的部分将描述一种不同的方法,它以一种原生的方式解决了这个问题3Beta在Java虚拟机上的实现在介绍用于Eclipse集成的JBeta解决方案之前,先介绍从BETA到JVM关于BETA到JVM的映射,有两个总体问题:(i) JVM是一种类型化的虚拟机,旨在支持Java,并且BETA可以映射到JVM并不明显。因此,一个总体问题是是否可以找到到JVM的映射(ii) 另一个问题是从程序员的角度看语言的互操作性为了获得真正的语言互操作性,应该可以使用BETA中用Java编写的类,反之亦然。如果有一个针对JVM的BETA实现,这应该是可能的。主要问题是这样做的可读性/可理解性。使用Java从O.L. Madsen等人理论计算机科学电子笔记107(2004)713BETA可能不会造成问题,因为BETA程序员只需要理解所使用的Java类反过来可能更有问题,因为BETA比Java更通用。应该向将要使用BETA的Java程序员展示BETA作为反映映射的Java类的视图从Beta到JVM这意味着必须定义一个可读的映射,这当然是一个比仅仅找到一个工作映射更强的要求。请注意,本文并不试图介绍BETA通用性背后的基本原理。目的是介绍将BETA映射到JVM的一些问题。这将通过或多或少有用的例子来说明。BETA背后的基本原理已经在其他一些地方提出,如[10,11]。附录中给出了BETA的简短摘要3.1映射到Java的BETA程序示例Beta有一个主要的抽象机制,称为模式。模式统一,例如,类和方法的概念来自其他语言,如Java和C#[8]。考虑以下描述计算器的BETA模式示例,该计算器可以添加一系列值:计算器:(# R:@integer;set:(#V:@integer enterVdoV->R#);add:(#V:@integer enterV do R + V->R exitR #)#);计算器模式有三个属性R、set和add。R是一个实例变量,保存计算器的当前值。属性set和add描述计算器上的操作。操作集用于将R的值设置为输入参数V的值。 add操作将输入参数V的值添加到R,并将R的值返回(退出)给调用者。下面的示例显示了Calculator的实例C、integer的实例X、使用输入参数12调用C.set以及使用输入参数5调用C.add,并将生成的exit-value赋给X。C:@计算器; X:@整数;12 -> C.set;5 -> C.add -> X;注意Calculator、set和add都是模式的例子14O.L. Madsen等人理论计算机科学电子笔记107(2004)73.2一个简单但不完整的映射在上一节的示例中,Calculator用作类,set和add用作方法。计算器模式的这种用法通过以下到Java类的简单映射来说明:int n { int n;voidset(intV){ R = V;}intadd(intV){R=R+V;returnR;}}上面显示的BETA声明和调用然后映射到Java中的以下声明和调用intx = new int x(); intx();X = C.add(5);3.3一个完整的映射上面的映射显示了BETA计算器模式的简单语义。要捕获Calculator模式的完整语义,需要一个更复杂的映射。例如,add是一个模式,这意味着可以将add用作一个类并创建add的实例,如下面的示例所示C:@Calculator; X:@integer;A:^C.add;&C.add[] -> A[];变量A可以引用C.add的实例。语句&C.add[] -> A[]创建模式C.add的一个实例,并将其引用赋给A。现在可以使用A为实例变量V赋值:17 -> A.V模式add还定义了一个do部分,当使用add时执行do部分作为一个程序。A的do部分可以直接由下面的语句执行(当下面描述计算器2 -> A -> X为了获得add模式的完整语义,它被映射到Calculator的以下内部类:int v {intV;public voidenter(int a){ V=a; } void do(){ R = R +V;} int exit(){returnR;}}另外,下面的方法被添加到类Calculator中:public int findDuplicate(intfindDuplicate){int n = new int n();O.L. Madsen等人理论计算机科学电子笔记107(2004)715A.enter(V);A.do);return A.exit();}BETA调用5 -> C.add ->X现在可以映射到相应的Java调用X= C.add(5)。计算器模式的完整映射的结构是:int n { int n;public int findDuplicate(int a){ }的情况;public int findDuplicate(int V){ 个文件夹class set extends Object {... }class add extends Object {. 个文件夹}可以看出,Calculator的每个内部模式(在本例中是set和add)都这反映了一个事实,即模式可以用作方法以及类。方法intadd(int)用于使用模式add作为方法。内部类add可用于将模式的实例创建为类。考虑创建模式add实例的BETA示例。这将映射到以下Java代码。CalculatorC = newCalculator();// C:@CalculatorCalculator.addA = C.new add();//A:^C.add; C.add[]->A[]A.V= 17;//17->A.VA.enter(2);// 2 ->A-> X; A.do();intX = A.exit();上面的示例说明了如何将BETA的子集映射到Java。在BETA的其余部分中,最具挑战性的映射是内部的,用作虚拟类的虚拟模式,离开和重新启动(基本的goto)嵌套方法调用,模式作为变量和协程,并发和同步。完整的映射在[1]中描述。 [1]还描述了到C#的映射,在语言级别上,它在结构上与到Java 的映射基本相同。一个主要的区别是,.NET/C#和C#不支持完整的内部类,这意味着嵌套类的映射必须包含对封闭对象的显式引用。在字节码级别上,JVM和JVM之间当然存在一些小的技术差异。3.4使用Beta中的Java类,反之亦然为了 将Java 类文 件导入 到BETA 程序 中,BETA 已经 扩展了 一个ExternalClass声明,允许导入外部类。已经实现了一个工具,可以将任何类文件转换为一组BETA外部类声明。通过这种方式,可以从16O.L. Madsen等人理论计算机科学电子笔记107(2004)7β的目前,该工具必须先在类文件上使用,然后才能从Beta中使用在未来,将有可能直接将Java类文件导入到BETA程序中,并将该工具与编译器集成。反过来-从Java使用BETA-立即工作。Beta类文件可以从任何Java程序导入和使用。JBeta从BETA模式生成Java包结构。从Java使用BETA的主要问题是缺少一个用于BETA类文件的浏览器,Java程序员使用。目前,Java程序员必须检查BETA代码并从中导出相应的Java类文件,或者从BETA类文件中反向工程Java源文件但是,开发浏览器工具应该很简单。4基于JVM的 Eclipse集成在第2节中,描述了如何使用JNI从插件中的Java访问用BETA编写的缩进库。有了JBeta,这就简单多了。Java类BetaAutoIndentStrategy现在可以替换为BETA模式继承自Java类DefaultAutoIndentStrategy:BetaAutoIndentStrategy:DefaultAutoIndentStrategy(#customizeDocumentCommand:(#d:^IDoCommand;c:^DocumentCommand;value:@integer;enter(d[],c[])做... 10 -> indentLine -> value(* CallBETA*)#)#)该模式直接调用缩进库,因此通过在JVM上实现 BETA,可以删除用于JNI的所有外部库请注意,该解决方案也可以保留BetaAutoIndentStrategy在Java中,并从那里访问BETA库。这要由程序员来决定.4.1调试到目前为止描述的BETA IDE为用户提供了编辑、编译、编译和运行BETA程序的可能性。IDE的另一个重要部分是调试器。如上所述,MjolnerTool有一个本机调试器,因此有两种解决方案可以将调试器添加到BETA插件:使用经典的BETA调试器或使用Eclipse Java-IDE中提供的Java调试器,称为JDT调试器。使用经典的BETA调试器需要以下几点:首先,O.L. Madsen等人理论计算机科学电子笔记107(2004)717现有的代码应该被重构,结构化它,这样UI和非UI代码就有了清晰的分离。其次,调试器的非UI部分必须进行修改,使其适合Eclipse启动/调试框架-使用JDT调试器是可能的,因为它对Java字节码进行操作,而Java字节码正是JBeta生成的。因此,我们的想法是使用JBeta编译BETA源代码,然后在调试时执行“JDT在调试时执行的任何操作”。4.2在Eclipse中实现BETA编译器Eclipse中的启动和调试,以及JDT中的启动和调试,是紧密相连的[14]。由于JBeta从BETA源代码生成Java字节码,因此BETA IDE中的扩展可以使用与Java相同的JDT类来处理、启动和调试。使用这个类可以立即启动Beta应用程序。然而,Eclipse有点复杂,因为Eclipse必须被指导如何设置断点,给定源代码。Eclipse 类 JDIgModel[17]8 是 Sun Microsystems 的 Java 平 台 编 程 器 架 构(JPDA)[ 16 ]中Java接口(JDI)的实现它包含用于向调试模型添加断点的静态方法。 这些方法接受的参数包括源文件的名称、行号以及要在其中设置断点的类型(类)的名称。有了这些信息,调试器就能够在运行时识别相应的字节码.在BETA源代码中设置断点的复杂性在于必须指定的类型名称如第3节所述,一个BETA源文件被编译成几个类文件,即许多类型。给定一个特定的BETA文件和一个行号,找到相应的生成的类文件并不容易。在未来的版本中,BETA编译器将能够为BETA插件9提供这些信息。Eclipse调试模型可以通过使用不那么严格的耦合,对BETA和许多其他针对JVM的语言更加友好[15到JPDA。由于Java类文件包含有关源文件名和行的信息,8 位于软件包org.eclipse.jdt.debug.core中9在构建BETA项目时,JBeta的激活是通过调用外部jbeta可执行文件18O.L. Madsen等人理论计算机科学电子笔记107(2004)7对于字节码的数字,调试器应该能够找到中断位置,只要给出源文件名和行号:对于已经加载的类,调试器可以检查是否有任何这些对应于给定的源文件,并设置断点。如果当前没有加载此类类,则调试器可以延迟断点设置,并在加载新类时重复分析。在BETA IDE的概念验证实现中,可以将行断点添加到BETA源10。也就是说,调试器可以停止特定BETA命令的执行。 可以执行单步执行,并且可以使用完整的源代码信息(包括类和变量的BETA名称)检查和修改对象[3]。 这种行为主要是JVM的一种属性,它具有给定程序的完整类型信息、符号名和源代码行号。然而,令人印象深刻的是,开发Eclipse和JVM这样的通用工具是可能的,因为生成JVM字节码的编译器可以支持像BETA这样相当不同的语言在图2中,一个简单的Beta程序正在调试中。调试器已停止执行,可以检查和更改对象字段。4.3JBeta集成与基于JNI的集成相比,基于JVM的Eclipse集成非常优雅。在JNI中有许多层代码,因为Java和BETA之间的调用必须通过C进行。对于JBeta,使用BETA模式或Java类没有什么区别,因此从BETA程序员的角度来看,它就像只使用BETA一样-而实际上它是一个插件的设计,必须语言障碍消失了。令人印象深刻的是,Eclipse中的JDT调试器足够通用,可以在符号级别调试BETA,尽管最初是针对Java的。除了必须实现的允许调试器启动的相对较小的扩展之外,唯一复杂的编程任务是断点的处理。如图所示,这种解决方案的缺点是,从BETA语言到JVM的映射并不简单。此外,像BETA Mjølner系统这样的系统包含大量的库,移植这些库涉及到将大量系统特定调用转换为相应Java10在写这篇文章的时候,我们只能在代码片段内部进行分解,因为我们还没有整合上面提到的程序分析来从源文件的位置确定O.L. Madsen等人理论计算机科学电子笔记107(2004)719图二. Eclipse中的Beta类库。4.4与Microsoft Visual Studio .NET集成的将 Beta 移 植 到 .NET 的 项 目 [1] 的 一 部 分 是 研 究 使 用 Microsoft VisualStudio .NET [12]作为支持Beta的IDE。Visual Studio.NET(VS)是一个功能强大的IDE,支持多种语言,因此它可能是Eclipse的替代品。正如其名称所示,此IDE支持Microsoft.NET平台的语言,该平台在许多方面类似于Java平台。与Java不同,.NET旨在支持多种编程语言。VS立即允许浏览和编辑Beta源文件。此外,多语言支持通过将Beta程序轻松导入VS并在其上进行几乎完整的源代码级调试来体现。要让VS做到这一点,所需要的就是包含源文件。11从图3的VS截图中可以看出,变量是以内部.NET语法显示的,例如,i变量显示为int类型。将其表示为BETA类型的整数是可以通过扩展调试器集成来完成的事情之一20O.L. Madsen等人理论计算机科学电子笔记107(2004)7和行号信息到生成的字节码为.NET/Linux,然后只需打开一个.exe文件生成的测试版在VS。从图3中的VS截图可以看出,这立即允许VS识别源文件,执行源代码级步进,插入断点,检查对象,甚至更改变量的值不需要对VS进行任何修改,就可以获得!图3.第三章。Visual Studio.NET中的测试版然而,为了获得更完整的语言集成,即语法着色,语义工具提示,BETA 编 译 器的 控 制 等 , 需 要付 出 艰 苦 的努 力 用 于执 行 此 操 作的APICOM[5]是微软.NET平台的前身,它使用完全不同的编程模型和运行时系统。 因此,它需要大量的非.NET工作来进行集成。然而,在撰写本文时,微软已经宣布了所谓的托管VSIP API的beta版本[13]。使用它,可以完全用BETA编写VS集成代码,并将此BETA代码编译为.NET字节码,即。使用与Eclipse集成完全相同的策略这项工作还没有完成,但VSIP承诺的功能,如处理项目;参与建设,调试和部署一个项目;创建一个自定义的调试器为您的语言;创建一个自定义的文本编辑器为您的语言;创建一个接口建设与代码生成在您的语言;智能感知(语义12VS整合计划的简称O.L. Madsen等人理论计算机科学电子笔记107(2004)721工具提示);语法着色;以及将您的徽标添加到VS启动屏幕。5结论在项目的这个阶段,已经获得了在Eclipse中集成BETA的概念验证。两个战略已经审查。一个基于JNI的集成,表明确实可以在BETA中编写插件的一部分-缩进器,并将其加载到Eclipse中。然而,这种技术存在许多缺点JNI并不容易使用--这更像是Java的问题而不是Eclipse的问题--应该有可能提供一个即使使用改进的JNI,从Java到C的BETA的距离也太长了,这严重地使调试复杂化,并使代码可读性降低另一方面,基于JVM的集成工作得很好。通过从BETA生成Java类文件用Java或Beta编写插件之间的区别。此外,JVM集成使得在与Java相同的符号级别上对BETA使用Eclipse调试器成为可能。但是JDT的设计还有改进的余地,例如,断点设置可以更通用地处理- JDT基于Java语言的JPDA模型,但也可以更改以支持其他语言。与VS进行相应的集成是可能的,尽管初始集成(浏览、编辑和调试)需要的工作比Eclipse中少,但要获得完整的语言集成,如果使用预发布的托管API,预计需要进行类似的工作,而如果使用旧风格的COM接口,则需要进行更繁琐的工作。使用VS的一个缺点是,它是一个商业产品,Eclipse是免费的。此外,VS只运行在Windows上,只要Java可用,Eclipse就可用。然而,我们的经验是,Eclipse不能在某些UnixSun Solaris等平台。很明显,BETA与Eclipse和VS紧密集成的主要原因是这些集成基于BETA for JVM和Eclipse的BETA实现。JVM和Java的体系结构已经证明,现代虚拟机具有完整的符号信息,可以获得对像BETA这样的新语言的支持。BETA在JVM/JVM上的实现也证明了BETA和Java/C#之间的语言互操作性是可能的。从BETA开始,使用Java和/或C#类(包括继承)变得简单直接。反过来22O.L. Madsen等人理论计算机科学电子笔记107(2004)7Java和/或C#也可以工作。 在这个阶段,它是未知的,BETA程序员将在主要项目中使用Java/C#库和框架,反之亦然。目前,主要的例子程序,包括小程序已经编写。毫不奇怪,语言互操作性适用于为之设计的Java/.NET。令人惊讶的是,它在JVM上也能很好地工作。讨论JVM和JVM在支持BETA语言方面的质量超出了本文的范围-确实可以找到BETA到JVM/JVM的映射。从逻辑和效率的角度来看,BETA的某些部分并没有很好地映射。像JVM/JVM这样的平台使语言开发人员编写编译器变得容易。然而,有人可能会说,JVM和JVM只是早期通用虚拟机的代表。在一般性方面有明确的改进余地。在项目的这个阶段,主要重点是语言互操作性问题,以便能够在BETA中编写插件。因此,现在可以在BETA中编写Eclipse插件,并且可以使用MjolnerTool当前使用的现有BETA库创建更Eclipse中的BETA IDE已经被一个小团队用于浏览、文本编辑、缩进和编译。这是一个有前途的经验,在未来增加使用Eclipse作为一个IDE的测试版是可以预期的。此外,当完全集成到Visual Studio中时,也可以在Visual Studio中使用BETA。时间会告诉我们这两个中的哪一个将成为Windows上的首选IDE到目前为止的主要结论是,本文所讨论的语言互操作性在一定程度上确实是可能的。现代虚拟机(如JVM和JVM)能够支持其他语言,包括支持对于IDE中的工具,如Eclipse和Visual Studio。然而,语言互操作性应该持保留态度。JVM和JVM支持具有类似结构的语言家族。一种语言与家族的差异越大,到虚拟机的映射就越复杂。然而,作者确实相信,在JVM/JVM这样的平台和标准微处理器这样的通用平台之间有足够的空间来支持与JVM和JVM相同级别的更广泛的语言。O.L. Madsen等人理论计算机科学电子笔记107(2004)723引用[1] P. Andersen,O.L. Madsen:Implementing BETA on Java Virtual Machine and .NET[2] Eclipse项目主页:http://www.eclipse.org[3] M. B. Enevoldsen:面向对象语言互操作性-Eclipse中BETA支持的案例研究,奥尔胡斯大学计算机科学系,即将发表的硕士论文,2004年。[4] Arnold,Gosling,Holmes:Java编程语言,第三版,Addison-Wesley,Boston 2000,ISBN:0201704331[5] Dale Rogerson:Inside COM,Microsoft Press,February 1997 ISBN:1572313498[6] Microsoft.NET:http://www.microsoft.com/net[7] Microsoft .NET公共语言教程:http://msdn.microsoft.com/library/en-us/cpguide/html/cpconCommonWebageRuntimeOverview.asp[8] C#主页:http://msdn.microsoft.com/vcsharp/language[9] Mjølner系统,Mjølner Informatics A/S:http://www.mjolner.dk/mjolner-system[10] O.L.马德森湾Møller-Pedersen:Virtual Classes - A Powerful Mechanism in Object OrientedProgramming,in:Proceedings of OOPSLA[11] O.L.马德森湾Møller-Pedersen,K. Nygaard:BETA编程语言中的面向对象编程。ACMPress/Addison Wesley,Addison-Wesley,June 1993,ISBN 0-201-62430-3,350页。绝版http://www.mjolner.com/mjolner-system/books[12] Microsoft Visual Studio主页:http://msdn.microsoft.com/vstudio[13] Microsoft Visual Studio工业合作伙伴(以前的Microsoft Visual Studio集成计划):http://www.vsipdev.com[14] J. Szurszewski:我们有Lift-o框架:Eclipse中的启动框架,2003http://www.eclipse.org/articles/Article-Launch-Framework/launch.html[15] Java虚拟机的编程语言http://grunge.cs.tu-berlin.de/~tolk/vmlanguages.html[16] Java平台编程器架构:http://java.sun.com/j2se/1.4.2/docs/guide/jpda[17] Eclipse在线文档:http://help.eclipse.org/help21/index.jsp?topic=/org.eclipse.jdt。doc.isv/reference/api/org/eclipse/jdt/debug/core/JDIDebugModel.html6阑尾 Beta的简短概述在BETA中,类、类型、过程、方法、函数、协程、进程和异常等抽象机制被统一到一个抽象机制中--模式。除了模式,BETA还有子模式、虚拟模式和模式变量。抽象机制的这种统一给出了抽象机制的统一处理,24O.L. Madsen等人理论计算机科学电子笔记107(2004)7一些新的。大多数面向对象的语言都有类、子类和虚过程,有些还有过程变量。 由于一个模式是类、过程、函数的概括,子模式、虚拟模式、嵌套模式和模式变量的概念也适用于这些抽象机制。子模式覆盖了大多数其他语言中的子类此外,过程可以按照子过程层次结构来组织,就像类可以按照子类层次结构来组织一样。由于模式也可以用来描述函数、协程、并发进程和异常,这些也可以组织在模式层次结构中虚拟模式的概念涵盖了Simula、Java和C#中的虚拟过程此外,虚拟模式还包括虚拟类、虚拟协同程序、虚拟并发进程和虚拟异常。虚拟类提供了一个更通用的替代泛型类,如Ei类或模板,如C++。嵌套模式是在另一个模式中以文本形式定义的模式嵌套过程从Algol和Pascal已知。除了嵌套的过程模式,BETA还支持类模式的嵌套。Java支持内部类形式的嵌套类.在C++和C#中,支持嵌套类的受限形式,但不能从内部类引用封闭对象中的数据项。BETA包含模式变量的概念。这意味着pat是第一个类值,可以作为参数传递给其他模式。通过使用模式变量而不是虚拟模式,可以在对象生成后动态地更改对象的行为。模式变量覆盖过程变量(即,可以被分配给不同过程的变量)。由于模式可以用作类,因此也可以具有可以被分配不同类的变量等。对象可以是单数的,这意味着它是直接描述的,而不是作为类的实例。在Java中,这相当
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功