Skip to content

Instantly share code, notes, and snippets.

@fogus
Created June 6, 2012 19:02
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fogus/2883931 to your computer and use it in GitHub Desktop.
Save fogus/2883931 to your computer and use it in GitHub Desktop.
influence graph of oo languages -- this is not meant to be a complete time line. I'm mostly concerned with the root and inner nodes.
digraph G {
ranksep=1.0;
ratio=0.6;
LISP [color=Blue, shape=box, label="LISPs"];
ALGOL [color=Blue, shape=box, label="ALGOL-like\nLanguages"];
Modula [color=Blue, shape=box, label="Wirth's\nPascal-likes"];
Smalltalk [color=Blue, shape=box, label="Smalltalk-like\nLanguages"];
FP [color=Blue, shape=box, label="Functional\nProgramming\nLanguages"];
P [label="Prototype-based\nLanguages", color=Blue, shape=box];
Prolog [label="Prolog-like\nLanguages", color=Blue, shape=box];
"Hoare records" [shape=hexagon];
GoF [label="GoF\nDesign\nPatterns", shape=hexagon];
"Z Notation" [shape=hexagon];
ACTOR [shape=hexagon, label="Hewitt's\nACTORs"];
/* Early influences */
ACTOR -> Scheme;
ACTOR -> Erlang;
ALGOL -> Simula;
ALGOL -> Modula -> "Object Pascal" -> Delphi;
ALGOL -> Ada -> Ada95;
ALGOL -> CLU;
ALGOL -> FP;
ALGOL -> C -> Perl -> Ruby;
ALGOL -> Python;
FORTRAN -> LISP;
FORTRAN -> ALGOL;
LISP -> Smalltalk;
LISP -> CLU;
LISP -> FP;
LISP -> Prolog;
LISP -> Python;
LISP -> Ruby;
LISP -> CLOS;
LISP -> Clojure;
FP -> ML;
ML -> OCaml;
Sketchpad -> Smalltalk;
"Burroughs B5000" -> Smalltalk;
SIMSCRIPT -> Simula;
"Hoare records" -> Simula;
Simula -> Eiffel;
Simula -> "Object Pascal";
Simula -> Smalltalk;
Simula -> CLOS;
Simula -> "C++";
Simula -> CLU;
Simula -> ACTOR;
Smalltalk -> Loops;
Smalltalk -> Flavors;
Smalltalk -> "Objective C";
Smalltalk -> Ruby;
Smalltalk -> Python;
Smalltalk -> Java;
Smalltalk -> GoF;
Smalltalk -> Self;
Smalltalk -> Logtalk;
/* The influenced */
Ada -> Eiffel;
Ada -> Java;
Ada -> Ruby;
"C++" -> GoF;
"C++" -> D;
"C++" -> Java;
"C#" -> D;
"C#" -> "F#";
C -> "C++";
C -> Go;
C -> "Objective C";
CLOS -> Dylan;
CLOS -> Java;
CLOS -> "COOL (CLIPS)";
CLOS -> Sather;
CLU -> "C++";
CLU -> Ruby;
CLU -> Ada;
CLU -> Sather;
Delphi -> "C#";
Dylan -> Python;
Dylan -> Ruby;
Dylan -> Clojure;
Eiffel -> Cobra;
Eiffel -> "C#";
Eiffel -> D;
Eiffel -> Java;
Eiffel -> Sather;
Eiffel -> Ruby;
Erlang -> Oz;
Erlang -> Clojure;
"F#" -> "C#";
Flavors -> CLOS;
FP -> Oz;
GoF -> Java;
GoF -> "C#";
Java -> "C#";
Java -> D;
Java -> Groovy;
Java -> Clojure;
Java -> JavaScript;
Java -> Scala;
Java -> Dart;
Java -> Oz;
JavaScript -> Dart;
Loops -> CLOS;
Modula -> "C#";
Modula -> OCaml;
Modula -> Python;
Modula -> Oberon;
Oberon -> Go;
"Object Lisp" -> CLOS;
"Object Lisp" -> Self;
"Object Pascal" -> Java;
"Object Pascal" -> "C#";
"Objective C" -> Java;
OCaml -> Scala;
OCaml -> "F#";
Perl -> PHP;
"C++" -> PHP;
Prolog -> Erlang;
Prolog -> Logtalk;
Prolog -> Oz;
Prolog -> "COOL (CLIPS)";
P -> JavaScript;
Python -> Cobra;
Python -> Ruby;
Python -> Perl;
Ruby -> Python;
Ruby -> Groovy;
Scheme -> Dylan;
Scheme -> T;
Self -> P
"Z Notation" -> Eiffel;
{ rank=same; LISP; ALGOL; "Hoare records"; Sketchpad; "Burroughs B5000"; }; // Roots
{ rank=same; ACTOR; "Z Notation"; Prolog; FP; Simula; }; // Foundations
{ rank=same; Ada; C; Smalltalk; ML; CLU; Modula; Scheme; } // 1970s
{ rank=same; Perl; Flavors; Loops; "Object Lisp"; "Object Pascal"; "C++"; Eiffel; Erlang; Oberon; "Objective C"; Self; } // 1980s
{ rank=same; CLOS; Dylan; GoF; Java; JavaScript; OCaml; Python; Ruby; PHP; } // 1990s
{ rank=same; "C#"; "F#"; Clojure; Scala; Go; } // 2000s
}
/*
Rust
Self + Object Lisp influences?
Deeper ObjC influence?
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment