是否有权威的编程语言功能列表?

时间:2010-08-04 08:13:50

标签: programming-languages language-features

我正在寻找动态打字,静态打字,弱打字和强打字等内容。

以及OO功能,如多态性,继承,嵌套类,内部类,抽象类,纯虚函数。

还有反射,静态绑定,动态绑定等等。

但是,我并不是在寻找控制流,内置类型或语法糖等等。 A [5] vs A.get(5)。虽然,它不会受到伤害。

如果这样的事情存在并将这些概念映射到特定语言,那将是非常棒的。

我知道许多这些功能已在维基百科上解释,但除非我已经知道这些功能是什么(我记得)或恰好找到相互关联的链接,否则无法快速访问。事实上,我唯一一次使用维基百科来做这样的事情,就好像我碰巧看到有人引用了一个想法,我需要查阅。

我的主要目标是让我有机会快速发现或了解我对这些概念的了解,这样的权威列表会非常有用。

如果这样的事情不存在,为什么?

是不是因为不同的编程语言决定以不同的方式命名这些东西但实际上做同样的事情? (即纯虚函数(C ++)与抽象方法(Java))虽然其他人可能会命名相同的东西,但做一些略有不同的事情? (Java与C ++中的Protected关键字)另一个原因可能是语言只是没有足够的共同特征来编译这样的列表而且学习一种语言并且它的功能一次更好?在这种情况下,当我学习语言时,我可能会编译自己的“功能列表”......

感谢阅读! :)

2 个答案:

答案 0 :(得分:20)

编辑范式的非常好的解释以及构建这些范例的编程概念可以在Peter van Roy的作品中找到。特别是在书Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi中。 (Here's the companion wiki.)CTM(正如业内众所周知的那样)使用multi-paradigm Distributed Oz programming language来介绍所有主要的编程范例。

彼得范罗伊也提出this amazing poster that shows the 34 major paradigms and their relations and positions on various axis。这张海报基本上是一个令人难以置信的压缩版CTM。有关该海报的更全面的解释载于文章Programming Paradigms for Dummies: What Every Programmer Should Know,该文章作为由G. Assayag和A. Gerzso编辑的计算机音乐新计算范例<一书中的一章出现。它解释了例如非常简洁和易于理解的,编程范例实际上是 ,编程概念是什么,以及两者是如何相关的。

另一本演示几种主要编程范例的好书是Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman。几十年来,本书是麻省理工学院编程入门(6.001)的基础。 A course taught by Abelson and Sussman themselves was recorded at a corporate training for Hewlett-Packard in 1986

您可以找到video recordings and course materials from the Spring 2005 course on MIT's OpenCourseWare websiteAnother recording of the course from MIT's short-lived ArsDigita University project。事实上,其他大学也教过SICP the 2010 course at Berkeley has just finished

SICP,因为它俗称,可能是 有史以来最好的编程书之一。

SICP和CTM之间的主要区别在于教学方法:CTM使用非常强大的多范式语言演示了大多数主要范例,已经支持它们(主要是分布式Oz,还有其他一些)。 SICP OTOH通过本地支持它们的语言(Scheme的子集)实现来演示它们。 IOW:CTM会教OO通过在Scheme中实现OO系统来展示用OO语言编写的程序SICP。看到以十几行代码实现的面向对象是非常棒的。

Design Concepts in Programming Languages (by Franklyn A. Turbak and David K. Gifford with Mark A. Sheldon)是另一本很好的相关书籍。

Concepts of Programming Languages (by Robert W. Sebesta)解释,编程语言的概念,从Konrad Zuse的Plankalkül开始,继续使用第一个真正的编程语言,如Fortran,Lisp,Cobol,Algol,BASIC等等。 C,C ++,Java和Ada。

Concepts in Programming Languages (by John C. Mitchell)是另一本经常被引用的书,但不幸的是,我还没有读过自己。

同上Essentials of Programming Languages(由Daniel P. Friedman和Mitchell Wand编辑)又名 EoPL <​​/ em>。

Programming Language Pragmatics (by Michael L. Scott)更多的是关于实现编程语言概念,但它也以一种据说非常容易访问的方式讨论关于它们。 (再说一次,我还没读过这篇文章。)

因为你问过很多关于打字的问题,所以我不会提及Types and Programming Languages(由Benjamin C. Pierce提供)或 TaPL ,因为它通常被称为。这基本上是关于类型理论的 书,因为它与编程语言有关。但请注意,它对类型的看法并不是无可争议的:例如,它几乎完全否定了动态类型的存在。

为了平衡皮尔斯非常严格的定义,你一定要阅读Luca Cardelli的精彩Typeful Programming。在论文中,他认为使用类型作为建模和结构构造而不仅仅是安全网的编程本身就是一种编程范式。 (例如,这与Peter van Roy的海报和书籍形成鲜明对比,后者故意完全忽略打字。)

一个非常好的资源是Lambda the Ultimate博客(实际上,在几乎所有上述阅读材料中都被引入了。)

答案 1 :(得分:1)

如果您知道如何使用它,维基百科可以用相对较少的搜索工作提供相对较多的信息 - 在这种情况下,手动浏览类别是必要的。通常,如果某些着名的语言在不同的名称下具有相同的概念,反之亦然,则会在页面上注明。

OO的概念以及其他范例的概念可以在http://en.wikipedia.org/wiki/Category:Programming_paradigms

的相应子类别中找到

http://en.wikipedia.org/wiki/Category:Programming_constructs包含许多与编程相关的术语。

同样地,http://en.wikipedia.org/wiki/Category:Type_theory包含诸如静态/动态/弱/强类型等众所周知的术语,以及您感兴趣的更多内容。

等等......