good references for comparing languages?
I'm familiar with several computer languages (Java, C, C++, Python, Scheme, Javascript) but am only vaguely with the terminology for analyzing and comparing them (things like dynamic/static binding, dynamic/static types, pass-by-value vs. pass-by-reference, closures, operator overloading, etc.).
Is there a whitep开发者_StackOverflowaper or easily-readable-book that discusses these topics in enough depth for me to be able to look at an unfamiliar computer language and say to myself, "Oh, it has dynamic binding and static types", and to say "That's different from C++ because ... but similar because ..."?
If you like learning by example, Rosetta Code is a great resource. Its Language Comparison Table might be a good place to start.
I've found it helpful both for theoretical comparisons ("How do C++ and Java's respective exception handling systems differ?") and for practical work ("I know how to do a foreach() in PHP; what's the syntax for the equivalent operation in PERL?").
This free ebook may be somewhat heavier than what you are looking for, but is comprehensive:
Practical Foundations for Programming Languages (pdf 1.5Mb)
Here is an extract of the TOC:
I Judgements and Rules 1 Syntactic Objects 2 Inductive Definitions 3 Hypothetical and General Judgements II Levels of Syntax 4 Concrete Syntax 5 Abstract Syntax III Statics and Dynamics 6 Statics 7 Dynamics 8 Type Safety 9 Evaluation Dynamics IV Function Types 10 Function Definitions and Values 11 Godel’s System T 12 Plotkin’s PCF V Finite Data Types 13 Product Types 14 Sum Types 15 Pattern Matching 16 Generic Programming VI Infinite Data Types 17 Inductive and Co-Inductive Types 18 Recursive Types VII Dynamic Types 19 The Untyped l-Calculus 20 Dynamic Typing 21 Hybrid Typing VIII Variable Types 22 Girard’s System F 23 Abstract Types 24 Constructors and Kinds IX Subtyping 25 Subtyping 26 Singleton Kinds X Classes and Meth 27 Dynamic Dispatch 28 Inheritance XI Control Effects 29 Control Stacks 30 Exceptions 31 Continuations XII Types and Propos 32 Constructive Logic 33 Classical Logic XIII Symbols 34 Symbols 35 Fluid Binding 36 Dynamic Classification XIV Storage Effects 37 Modernized Algol 38 Mutable Data Structures XV Laziness 39 Lazy Evaluation 40 Polarization XVI Parallelism 41 Nested Parallelism 42 Futures and Speculation XVII Concurrency 43 Process Calculus 45 Distributed Algol XVIII Modularity 46 Components and Linking 47 Type Abstractions and Type Classes 48 Hierarchy and Parameterization XIX Equivalence 49 Equational Reasoning 50 Equational Reasoning 51 Parametricity 52 Process Equivalence XX Appendices A Mathematical Preliminaries
精彩评论