Scheme 方案实施——这意味着什么?

Scheme 方案实施——这意味着什么?,scheme,the-little-schemer,Scheme,The Little Schemer,我是CS的初学生,我的课程主要是Java。我目前正在自学“LittleSchemer”,在了解如何做到这一点的过程中,我发现了许多关于Scheme“实现”的参考资料。我的问题是,什么是实现 它们是Scheme的次方言,还是其他的东西(DrScheme似乎允许语言的不同“味道”?它仅仅是一个包含IDE、解释器、交互工具等的给定生态系统的名称吗 所有其他语言(如Java)是否也有各种“实现”,还是保留给“开放”语言 谢谢, Joss Delage一种语言的实现指运行或编译该特定语言的任何程序 具体来

我是CS的初学生,我的课程主要是Java。我目前正在自学“LittleSchemer”,在了解如何做到这一点的过程中,我发现了许多关于Scheme“实现”的参考资料。我的问题是,什么是实现

它们是Scheme的次方言,还是其他的东西(DrScheme似乎允许语言的不同“味道”?它仅仅是一个包含IDE、解释器、交互工具等的给定生态系统的名称吗

所有其他语言(如Java)是否也有各种“实现”,还是保留给“开放”语言

谢谢,


Joss Delage

一种语言的实现指运行或编译该特定语言的任何程序


具体来说,这是一个很好的问题,因为语言规范已经进行了多次重大修订。除此之外,还有许多称为Scheme的语言(包括原始Scheme!)并不完全遵循任何规范。HTDP的初学者语言很小,以便对如何解决问题有一点限制(可能还有其他原因)。直到最近,GIMP还使用了一种称为SIOD的非标准模式解释器(Scheme In One Defun或Scheme In One Day)。还有很多其他的例子;例如,请参见PLT Scheme对语言标准的支持。

编程语言的实现是该语言的编译器或解释器。生态系统的其他组件,如IDE,可以是实现的一部分,但不是必需的。对于方案有很多,例如DrScheme、Guile、Gambit

许多编程语言有不同的实现,但某一语言的所有实现都应该实现(即编译)完全相同的方言。如果有一个明确的官方语言规范,这是最简单的,就像Scheme一样。当然,大多数语言规范都有很多版本,因此不同的实现可能支持不同版本的语言


对于Java,有来自Sun、Oracle、IBM的实现,我认为还有其他的实现。

实现是特定供应商的版本/产品,它实现(符合、提供等)特定标准(类接口、API、语言规范等)

通过类比,让这一点更容易理解,可口可乐和百事可乐都可以被视为苏打饮料(或者,如果你愿意的话,也可以被视为流行音乐)的实现。汽水是一个普遍的概念,可口可乐和百事可乐是符合这个概念的特殊产品

类似地,Mac OS X和Linux都是单一UNIX规范的实现。GNU C++编译器和英特尔C++编译器是C++程序设计语言的实现。Sun Java 6 JDK、OpenJDK和GNU编译器for Java(GCJ)都是Java的实现

您很快就会发现,在Java中,当类提供接口中声明的函数的具体定义时,“implements”一词用作关键字,因为通过提供具体定义,该类实现了接口所体现的一般概念的要求


我希望这有助于提高您对“实现”含义的理解。

实现是编程语言的编译器或解释器;这是一种将语言指令转化为行为的方式。如今,具有多种实现的最常见语言可能是JavaScript

当人们谈论实现时,通常是在不得不处理由多个实现引起的问题的背景下。这是有好处的——你最喜欢的人会以你喜欢的方式做事——但问题可能令人沮丧。由于Chrome、Firefox、IE和Safari在使用相同的JavaScript代码时表现稍有不同,因此web开发人员必须花费大量时间在不同的浏览器上测试他们的代码,检测您使用的浏览器,并使代码适应稍有不同的库集、bug等

有些语言是由标准实现(ruby、perl、python)定义的,而不是由文档定义的,这就是为什么您没有听说过这些语言的多种实现。即使在这些语言中,您也会遇到不同版本具有不同行为的相关问题

实现并不是一个新现象:例如,早在高中时代,比尔·盖茨就开始编写许多基本实现之一

与其他语言相比,Scheme的问题更糟糕的是,规范故意很小——试图指定很少的内容。这样做的好处是,设计编程语言的人可以相对快速地创建一个新的实验方案实现,并具有简洁的新特性。一旦他们做到了这一点,他们就可以声称,即使是他们编写的小型语言也是“有用的”,因为其他人已经展示了如何将小型语言扩展到有用的语言。然而,在“简单的编程问题”中需要做大量的工作,每个实现都必须自己做出大量的决策,因此实现之间的差异很大。因此,与更完全指定的语言相比,在Scheme中与多个实现相关联的问题很多且很大

Scheme社区认识到了这个问题,以及一个小型规范的好处,并正在积极研究如何通过标准的新版本使从实验语言到有用语言的转换更加清晰。

现在(2010年),我个人建议新用户开始在PLT计划中工作,我很高兴你们从那个里开始。不要让很多实现问题吓到你:有很多