Here is the DOT source for earlier versions of the images on EveryLanguageFixesSomething. Remember, this is intended to show what got fixed with each new language, not simply the derivation, influence or descent.
[Save this copy as representing the current graph; edits should go on the copy below.]
digraph G { graph [rankdir=LR] node [fontname="luximbi",fontcolor="blue",fontsize=8] edge [fontname="luximbi",fontsize=8] "Fortran" -> "APL" [label="Not good\nwith arrays"] "Assembly" -> "Algol" [label="Too low-level"] "Fortran" -> "Basic" [label="Scary\nsyntax"] "Assembly" -> "C" [label="Too low-level"] "Java" -> "C#" [label="Controlled\nby Sun"] "C" -> "C++" [label="Too low-level"] "Fortran" -> "Cobol" [label="Scary\nsyntax"] "Lisp" -> "Common\nLisp" [label="Too many\ndialects"] "Scheme" -> "Dylan" [label="No libraries"] "Lisp" -> "Dylan" [label="Scary\nsyntax"] "Assembly" -> "Fortran" [label="Too low-level"] "APL" -> "J" [label="Weird character set"] "C++" -> "Java" [label="Kludge"] "Java" -> "Javascript" [label="Scary\nsyntax"] "Turing\nMachines" -> "Lisp" [label="Too awkward\nfor modelling\nprogramming"] "Pascal" -> "Modula" [label="Too wimpy\nfor systems\nprogramming"] "Fortran" -> "PL/1" [label="Lacking\ndata types",weight=5] "Algol" -> "Pascal" [label="Lacking\ndata types"] "AWK /\nSED /\nShell" -> "Perl" [label="Not a real\nlanguage"] "Modula" -> "Python" [label="Scary\nsyntax"] "Perl" -> "Python" [label="Kludge"] "Perl" -> "Ruby" [label="Kludge"] "Lisp" -> "Ruby" [label="Scary\nsyntax"] "MacLisp" -> "Scheme" [label="Kludge"] "Algol" -> "Simula" [label="Bad at\nsimulations"] "Simula" -> "Smalltalk" [label="Not everything\nis an object"] "Scheme" -> "T" [label="No libraries"] "Everything" -> "Ada" [label="Missing\nsomething"] "Everything" -> "Prolog" [label="Not enough\nlike Logic"] "Ada" -> "C++" [style=invis] }The following image is not guaranteed to have been produced from the above source:
It's probably a good idea to leave the original above, or leave it in sync with the current image, and make the edits below to a fresh copy.
Do people believe this more accurately reflects the reasons languages were designed/devised? Are these really the things being fixed? Should this be moved over to the EveryLanguageFixesSomething page?
Remember - the arrows point from the language being fixed to the language that fixes it!
digraph G { graph [rankdir=LR] node [fontname="luximbi",fontcolor="blue",fontsize=8] edge [fontname="luximbi",fontsize=8] "Fortran" -> "APL" [label="Not good\nwith arrays"] "Fortran" -> "Algol 60" [label="Lack of scoping"] "Fortran" -> "Basic" [label="Scary\nsyntax"] "Assembly" -> "C" [label="Too low-level"] "Java" -> "C#" [label="Controlled\nby Sun"] "C" -> "C++" [label="Too low-level\nObjects are good"] "C" -> "Objective C" [label="Too low-level\nObjects are good"] "Fortran" -> "Cobol" [label="Scary\nsyntax"] "Lisp" -> "Common\nLisp" [label="Too many\ndialects"] "Scheme" -> "Dylan" [label="No libraries"] "Smalltalk" -> "Objective C" [label="Need C syntax"] "Objective C" -> "Java" [label="Need to simplify"] "Lisp" -> "Dylan" [label="Scary\nsyntax"] "Assembly" -> "Fortran" [label="Too low-level"] "APL" -> "J" [label="Weird\ncharacter\nset"] "C++" -> "Java" [label="Kludge"] "Turing\nMachines" -> "Lisp" [label="Too awkward\nfor modelling\nprogramming"] "lambda\ncalculus" -> "Lisp" [label="No data types"] "Pascal" -> "Modula" [label="Too wimpy\nfor systems\nprogramming"] "Fortran" -> "PL/1" [label="Lacking\ndata types"] "Algol 60" -> "Pascal" [label="Lacking\ndata types"] "Algol 60" -> "Algol 68" [label="No formal\nsemantics"] "Lisp" -> "Algol 68" [label="No syntax"] "Algol 68" -> "Pascal" [label="Too complex"] "AWK /\nSED /\nShell" -> "Perl" [label="Not a real\nlanguage"] "Modula" -> "Python" [label="Scary\nsyntax"] "Perl" -> "Python" [label="Kludge"] "Perl" -> "Ruby" [label="No support\nfor Japanese"] "Smalltalk" -> "Ruby" [label="Not UNIX-based"] "MacLisp" -> "Scheme" [label="Kludge"] "Algol 60" -> "Simula" [label="Bad at\nsimulations"] "Simula" -> "Smalltalk" [label="Not everything\nis an object"] "Scheme" -> "T" [label="No libraries"] "Everything" -> "Ada" [label="Missing\nsomething"] "Everything" -> "Prolog" [label="Not enough\nlike Logic"] "Lisp" -> "Erlang" [label="Scary\nsyntax"] "Prolog" -> "Erlang" [label="No concurrency"] "Smalltalk" -> "Self" [label="Classes are\nunnecessary"] "Self" -> "Cecil" [label="Needs more\nDylan features"] "Dylan" -> "Cecil" [label="Not cool\nenough"] "Self" -> "Javascript" [label="Needs C syntax"] "Lisp" -> "Scheme" [label="Need simplicity,\nlexical scope"] "Lisp" -> "MacLisp" [label="Not enough\nfeatures for\nProject MAC"] "Dylan" -> "Goo" [label="Too complex"] "Dylan" -> "Needle" [label="Needs\ntype-inferencing"] "Common\nLisp" -> "Arc" [label="Too many warts\nNot UNIX based"] "Scheme" -> "Goo" [label="Needs objects"] "Lisp" -> "ML" [label="Not pure\nfunctional"] "ML" -> "Ocaml" [label="Needs objects"] "Ocaml" -> "Needle" [label="No multimethods"] "Ocaml" -> "Nemerle" [label="scary syntax\nno macros"] "C#" -> "Nemerle" [label="not functional\nno macros"] "ML" -> "Haskell" [label="Lazy evaluation\nis cool, y0"] "Lisp" -> "Smalltalk" [label="more support for\nmodeling real world"] "Python" -> "Ruby" [label="not enough OO"] }The arrows point from the language being "fixed" to the language that fixes the perceived problem.
The following image is not guaranteed to have been produced from the above source:
I think an arrow from Lisp to Smalltalk is needed, but I can't come up with a good name:). Also one from python2.0 to Ruby1.0 is needed ("not enough OO", quoting matz)
I'd recommend "Java" -> "Javascript" [label="Bad language, but\ncatchy name!"] to show that these are related in name only.
Contributors: PaulGraham (by virtue of an article on which EveryLanguageFixesSomething was based, http://www.paulgraham.com/fix.html), KevinKelleher?, DougMerritt, JonathanTang, AnonymousDonor(s)