Hacker News new | past | comments | ask | show | jobs | submit login
Family spaghetti of programming languages (erkin.party)
52 points by grawprog on Feb 8, 2019 | hide | past | favorite | 42 comments



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.

- Curry is half Haskell and half Prolog.


Logo existed long before Scheme.

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.

LFE is not based on Clojure or Hy.

See also: https://www.dreamsongs.com/Files/Hopl2Slides.pdf


Seems very odd to exclude Java and C# entirely.

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.

https://www.folklore.org/StoryView.py?story=MacBasic.txt

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


There's an explanation for the missing Java (Python is not there either), but not having Java and having Eiffel is certainly odd.


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


> There's an explanation for the missing Java (

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


Python is there. About a fourth of the way in from the left, immediately left of the "Squeaky Family" (light blue box).


OK. I thought i was just going crazy when i couldnt find java & c#.


It's does feel odd to exclude C#, yet include F# and VB.NET.


Éric Lévénez has a pretty extensive family tree/genealogy of programming languages that he's maintained for a while: https://www.levenez.com/lang/

He also has a Unix history and Windows history timelines as well.


About the Windows history, he considers relevant and includes FreeDOS in that timeline but not ReactOS?


The only languages left appear to be Java, php, and ocaml


Is JavaScript really a direct descendant of First Order Logic?


JS is a descendant of Scheme, Self, and Java.


JavaScript is a descendant of Java in the same way that someone who changes their surname to Washington is related to the president.


The syntax was explicitly thrown away and reworked to look like Java, so, I’d say they’re related.


I think that's a joke, especially since INTERCAL preceded Javascript even though the former is listed as a descendant of the latter.


Seems unlikely, doesn't it? At least I'd say it inherits some syntax from the C-family of languages


That's a good one!


Erlang is Prolog derived, too, not just Smalltalk.


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.


Julia got its inspiration from more than Matlab and R. A lot came from lisp, and some from Perl, Python, and others currently eluding me.

Perl was also influenced by C


Array fortran, Numpy.


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.

https://www.yworks.com/yed-live/?file=https://gist.githubuse...

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):

https://www.yworks.com/yed-live/?file=https://gist.githubuse...


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.


- Modelica et. al. are missing

- Julia has a strong influence from lisp


I don't know Julia's history, but it sits right next to CommonLisp in my head.


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.


Matz has said he was influenced by Smalltalk and Perl when creating ruby, I don't think he's ever mentioned lisp(s).

On the other hand, Alan Kay was definitely influenced by Lisp when creating Smalltalk. (http://worrydream.com/EarlyHistoryOfSmalltalk/). So...

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!


Sure Matz mentioned Lisp.

He studied GNU Emacs and its Emacs Lisp implementation. He explains it:

https://www.slideshare.net/yukihiro_matz/how-emacs-changed-m...


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.


Julia deriving from only Matlab and R is pretty off: it was not influence by R at all; it was influenced by C, Fortran, Scheme, Pascal and Ruby.


Very cool. There should be an arrow from Simula to C++ though, as that's where C++ got its object oriented features from.


There's no language called Delphi. There's an IDE named Delphi for creating applications in Object Pascal.


The dialect of object orientation that Delphi compiles is different than object pascal. It's pretty safe to call Delphi a language.


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.


I found this post biased against javascript... good one though..


COBOL and SNOBOL are unrelated.


Sure, but COBOL:SNOBOL is like Java:Javascript


s{geneology}{genealogy}g;


Seems strange that Python isn't listed as a descendant of SmallTalk.


Ruby is more like SmallTalk than Python.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: