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