我是CS的初级学生,我的课程主要是Java。我目前正在通过“Little Schemer”作为自学,并且在找到如何做到这一点的过程中,我发现了许多对Scheme的“实现”的引用。我的问题是,实施是什么?
他们是Scheme的子方言,还是其他东西(DrScheme似乎允许该语言的不同“风味”)?它只是包含IDE,解释器,交互式工具等的任何给定生态系统的名称吗?
所有其他语言(例如Java)是否也有各种“实现”,还是保留为“开放”语言?
谢谢,
Joss Delage
答案 0 :(得分:7)
编程语言的实现是该语言的编译器或解释器。生态系统的其他组件(如IDE)可以是实施的一部分,但不是必需的。对于Scheme,有许多,例如DrScheme,Guile,Gambit。
许多编程语言具有不同的实现,但是某种语言的所有实现都应该实现(即,编译)完全相同的方言。如果有一个明确的官方语言规范,这是最简单的,就像Scheme的情况一样。当然,大多数语言规范都有很多版本,因此不同的实现可能支持不同版本的语言。
对于Java,有来自Sun,Oracle,IBM的实现,我认为是另一种。
答案 1 :(得分:6)
语言的实现表示运行或编译该特定语言的任何程序。
在Scheme中,具体来说,这是一个很好的问题,因为语言规范有多个主要版本。除此之外,有很多语言(包括原始的Scheme!)被称为Scheme,它们完全不遵循任何规范。 HTDP的初学者语言很小,以便对如何解决问题(以及可能由于其他原因)进行一些限制。直到最近,GIMP使用了一个名为SIOD的非标准Scheme解释器(一个方案中的方案或一天中的方案)。还有很多其他的例子;例如,请参阅Dialects Of Scheme,了解PLT Scheme对语言标准的支持。
答案 2 :(得分:1)
实现是特定供应商的版本/产品,它实现(符合,提供等)某个标准(类接口,API,语言规范等)。
为了简单地通过类比来理解,可口可乐和百事可乐都可以被认为是苏打的实现(或者,如果你是倾向于Pop的话)。 Soda / Pop是一般概念,可口可乐和百事可乐是符合这一概念的特殊产品。
同样,Mac OS X和Linux都是Single UNIX Specification的实现。 GNU C ++编译器和Intel C ++编译器是C ++编程语言的实现。 Sun Java 6 JDK,OpenJDK和GNU Compiler for Java(GCJ)都是Java的实现。
在Java中,正如您将很快发现的那样,当一个类提供在接口中声明的函数的具体定义时,“implements”一词用作关键字,因为通过提供具体定义,该类实现了这些要求接口体现的一般概念。
我希望这有助于提高您对“实施”含义的理解。
答案 3 :(得分:1)
实现是编程语言的编译器或解释器;它是一种将语言指令转换为行为的方法。今天多种实现的最常见语言可能是JavaScript。
当人们谈论实施时,通常是在必须处理由多个问题引起的问题的背景下。有好处 - 你最喜欢的一个会以你喜欢的方式做事 - 但问题可能令人沮丧。由于Chrome和Firefox以及IE和Safari在相同的JavaScript代码中表现略有不同,因此Web开发人员不得不花费大量时间在各种浏览器上测试代码,检测您正在使用的代码,并将代码调整到略有不同的库,错误等等。
有些语言是由标准实现(ruby,perl,python)定义的,而不是由文档定义的,这就是为什么你没有听到多个语言的实现。即使在这些语言中,您也会遇到各种版本具有不同行为的相关问题。
实施并不是一个新现象:例如,在高中时代,比尔盖茨开始编写许多BASIC实现中的一个。
使用Scheme比使用其他语言更糟糕的是,规范是故意的小 - 试图指定很少。好处是设计编程语言的人可以相对快速地创建具有整洁新属性的新实验Scheme实现。一旦他们完成了这项工作,他们就可以声称即使他们编写的小语言也是“有用的”,因为其他人已经展示了如何将小语言扩展为有用的语言。然而,在“简单的编程问题”中有很多工作,每个实现必须自己做出很多决定,因此实现之间的差异很大很多。因此,与更完全指定的语言相比,与多个实现相关联的问题在Scheme中是多种多样的。
Scheme社区承认这个问题,以及小规范的好处,并且正在积极研究如何使用新版本的标准从实验语言过渡到有用的语言。 http://scheme-reports.org/
目前(2010年),我个人建议新用户开始使用PLT计划,我很高兴你从那里开始。不要让许多实现问题吓到你:使用编程语言设计者为自己设计的语言工作有很多好处。 PLT拥有庞大的社区和一系列良好的图书馆,可以帮助您克服上述困难。
最佳, GREM