That's ... actually pretty good! I'm usually quite frustrated by those, but this one is not so terrible.
Some remarks:
- Coq is not an ML at all, it's simply implemented in OCaml and has a vaguely similar syntax. I think dependently typed languages should have their own category, as they have a rich history (coming from type theory, obviously).
- Elm is almost certainly more an ML than an Haskell. The only link with Haskell is really the syntax.
- Speaking of Elm, you might want to add something on synchronous languages (You can start by looking up Lustre).
- ML languages with modules, and especially OCaml, took pretty direct inspiration from Modula 2's modules.
XLisp was an independent Lisp in 1983. It then migrated towards Common Lisp (until XLisp 2.X). XLisp 1.5 seems to be the base for Autolisp. XLisp 3 then was based on XScheme.
I'm also not at all sure how "MS BASIC for the Macintosh" is listed as a predecessor of Applesoft BASIC. Microsoft used the threat of pulling Apple's Applesoft license as a way to get the leverage required for their Macintosh BASIC to be released instead of MacBasic.
(That article also shows that Apple's Integer BASIC was an entirely separate implementation of BASIC from Applesoft, so the arrow from Integer BASIC to Applesoft is a little weird too. But some of this comes down to the fact that the meaning of the arrows on charts like this is a little loose to begin with.)
Python is just to the left of the Squeaky family. It has arrows from CLU and Perl.
I find it odd that Julia doesn't have an arrow from any of the Lisps. Also, C++ only has an arrow from C. I think Stroustrup cited work he did in Simula as a major inspiration for C++.
Yeah... I saw that. It's honestly part of why I thought the lack of Java was an odd choice. (There are least a few other languages that are on the chart that arguably have better claims to being called multi-paradigm. Common Lisp and C++ among them.)
I was trying to remember what influences Joe Armstrong et al have indicated. Although Smalltalk clearly shares some high-level concepts I’m not sure it’s fair to consider it a parent/child relationship.
I tried opening the source file in our own graph editor, in the hopes that our layout might improve a bit on Graphviz here. Somewhat, I guess. It's still a lot of edges that are hard to route well.
Tweaked a bit in our desktop application which allows a few more layout options, it gets a bit more compact. Still fairly confusing, sadly (and the Graphviz styles got lost in translation, I fear):
I like how he has "machine code", "Turing machines" and "first order logic" on top since it gives a bit of mathematical grounding to the classification - abstract, mathematical models of computation and logic came first and were formulated for generality so it's not surprising if language that might not even know about a given construct might barrow from it.
Still, I'd like to see a wider list of mathematical and other pre-existing models of computation. Maybe "Machine Code", "Turing Machine", "Church Recursive Functions", "Lambda Calculus", "First Order Logic" and "Natural Language Constructs".
APL, for example, seems more similar to abstract recursive functions than to first order logic, by quite a bit.
I'm also really fascinated with the lineage of programming languages, and have drawn up some trees myself. Though nothing this comprehensive! In my tree, I put a lot of the dynamic interpreted languages as lisp descendants. I think its reasonable to call lisp a major influence in the development of JavaScript, Ruby, Python, and even Perl (though it does draw harder on unix shell influences). I put Java and C# as C++ descendants, as I feel the C++ style of OOP (as opposed to the Smalltalk style) is a major part of those languages.
As the author in the OP notes, there's no way to get this perfect, even aside from just making mistakes and missing documented information, a new programming language can be "infuenced" by anything in the mind of it's creator(s).
But, hey, the chart gives us something to talk about!
I've seen several of these but I find it's not terribly useful to try to cast "influence of programming language X on programming language Y" to a boolean.
What I'd really like to see is how features travel between languages.
Furthermore I'd venture to say it's quite the opposite as in there is no programming language called Object Pascal, but only a paradigm and Delphi, FPC and Pascal For Windows are direct implementation of Pascal with Visual Object in mind.
Some remarks:
- Coq is not an ML at all, it's simply implemented in OCaml and has a vaguely similar syntax. I think dependently typed languages should have their own category, as they have a rich history (coming from type theory, obviously).
- Elm is almost certainly more an ML than an Haskell. The only link with Haskell is really the syntax.
- Speaking of Elm, you might want to add something on synchronous languages (You can start by looking up Lustre).
- ML languages with modules, and especially OCaml, took pretty direct inspiration from Modula 2's modules.
- Curry is half Haskell and half Prolog.