
On 5/11/2010, at 4:03 AM, Dupont Corentin wrote:
Hello, reading this thread a question came to me: Is there a way of automatically deriving programming languages ascendancy?
According to www.oed.com, "ascendancy" means "The state or quality of being in the ascendant; [having] paramount influence, dominant control, domination, sway." I think you may have meant "descent", "ancestry", "phylogeny" or something like that. Automatically? Probably not.
Like biologist can determine the distance between two genotypes, and determine a hierarchy between species from that.
Until this year I taught some of that stuff. The distance between two sequences depends hugely on *what* you choose to measure (which particular features) and *how* you measure distances (there are similarity matrices people use, but you have to choose). Then there are algorithms that give optimal results but blow up for anything much past 15 species, and people arguing bitterly about what you should be optimising anyway ("parsimony" or "maximum likelihood"), and it's much fuzzier than people think. For that matter, some of the approaches are valued for providing *many* plausible trees, and people are advised not to place much trust in an inferred relationship unless it shows up in a lot of the trees. Then we turn to human designs, and suddenly THERE IS NO TREE. Let's take a language that I designed this year for a software engineering experiment. It includes ideas from - Algol 68 - a Lisp dialect described in BIT - Algol W - Ada 81 - MARY - Euclid - SETL - Fortran 77 - Mesa - Dijkstra's notation - SML - Pop-2 - Euler - APL - Matlab - Aleph (the one from CWI) Hmm. This might remind you of Larry Wall's explanation that PERL stands for Pathologically Eclectic Rubbish Lister, but in fact I've found the mélange to be pleasantly coherent. Some of the ideas come from more than one language, e.g., the idea of listing the variables that a procedure can read, write, and update just after its heading comes from Euclid *and* Dijkstra's notation *and* from SPlint and on the way into Chatterton got hybridised with an idea taken from Mary *and* Ada that got renamed from the Ada version because of a conflict with a keyword taken from SETL. *I* know which languages I was thinking about when I did the design, but I defy anyone else to look at it and figure out where *everything* came from. There's a *rich* history behind Python. I look at a lot of its features and say "I know older language XYZ that did this bit" and so on, but I'd hesitate to guess which ones were actually influential. By the way, phylogenetic reconstruction where you KNOW that it was just pure binary branching with no horizontal gene flow is a known NP-hard problem. Throw in arbitrary amounts of horizontal gene flow and I don't expect it to get easier.
Are you aware of researchs made in the field?
On the net I found interesting graphs but no comments on the methodology. http://www.levenez.com/lang/
That diagram leaves out the heavy influence of Lisp on Prolog. (Much of it indirect, but definitely there.) It seems a little odd to see JavaScript and ECMAScript treated as different languages.
That one omits the link from Lisp to Smalltalk. Smalltalk was VERY much influenced by Lisp. The best methodology is - ask the language designers - read what they have published in the History of Programming Languages (HOPL) conferences or elsewhere - check the ACM Oral History Interviews - similar things for BCS .. anything any historian of recent events would do, really
Cheers, Corentin
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe