хорошие ссылки для сравнения языков? - PullRequest
2 голосов
/ 30 сентября 2011

Я знаком с несколькими компьютерными языками (Java, C, C ++, Python, Scheme, Javascript), но не совсем понимаю терминологию их анализа и сравнения (такие как динамическое / статическое связывание, динамические / статические типы, проход -по-значению против передачи по ссылке, замыкания, перегрузка операторов и т. д.).

Существует ли официальный документ или легко читаемая книга, в которой достаточно подробно обсуждаются эти темы, чтобы я мог взглянуть на незнакомый компьютерный язык и сказать себе: «О, у него динамическое связывание и статические типы», и сказать "Это отличается от C ++, потому что ... но похоже, потому что ..."?

Ответы [ 2 ]

4 голосов
/ 02 октября 2011

Если вам нравится учиться на примерах, Rosetta Code - отличный ресурс.Его Сравнительная таблица языков может быть хорошим местом для начала.

Я нашел его полезным как для теоретических сравнений («Чем отличаются C ++ и соответствующие системы обработки исключений Java?») Идля практической работы («Я знаю, как сделать foreach () в PHP; каков синтаксис эквивалентной операции в PERL?»).

2 голосов
/ 30 сентября 2011

Эта бесплатная электронная книга может быть несколько тяжелее, чем вы ищете, но она всеобъемлющая:

Практические основы для языков программирования (pdf 1.5Mb)

Вот выдержка из оглавления:

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 
...