2.3  Language Relatives.

The Mythryl codebase is a rewritten fork of the SML/NJ codebase so SML in general and SML/NJ in particular are Mythryl’s closest relatives.

The SML language is the largest member of the ML family which includes many research languages, of which the most-used is far and away Ocaml, which has a large and active userbase and has seen significant commercial application. The remaining members of the family are by and large the kind of language created as part of a doctoral project, with userbase largely limited to a few academics working on similar problems.

Pure-functional languages, of which by far the best-known and most-used is Haskell, form a separate language family closely related to the ML language family. Most researchers work primarily within one family or the other, but follow papers published about both families, as many tools, techniques and research problems are common to the two families. In particular, the type systems are broadly similar, have been a very active research area for several decades, and seem likely to continue to be so for decades to come.

Functional languages in general are derived from the typed lambda calculus which Alonzo Church developed in the 1930s. The Lisp family of languages is based upon his earlier untyped lambda calculus, developed in the 1920s. There two calculi are closely related, and consequently there are strong affinities between the Lisp language family and the functional programming language family. (Pure lisp is in fact arguably the first pure-functional programming language, although in practice most Lisp is written in the imperative style.)

This affinity is strongest between the Scheme end of the the Lisp family and the mostly-functional end of the functional programming language family; for example researchers working on Scheme and SML will often reference each other’s papers.

In the applied world programming languages are increasingly adopting ideas and techniques taken from the ML family. For example in the Perl world Perl6 is scheduled to use ML-style Hindley-Milner typechecking and to support various other ML-flavored constructs. The Java world offers languages like Scala; the .NET world languages like F#.

Among the most distant of Mythryl’s functional kindred are J and the rest of the APL language family. The APL programming style in general is in fact pure-functional in spirit, centering on computation via side-effect free expressions, and J in particular has taken on additional functional programming flavoring during its evolution.

Beyond this, Mythryl’s relatives blend indistinguishably into the broader world of programming languages. Many languages not normally thought of as functional have in fact a fairly strong functional element in their constitution. For example Perl (unlike C!) treats strings in an entirely pure fashion, always constructing new strings rather than modifying old strings.

Almost any language can be used in a mostly-functional style if one chooses, sometimes with significant gains in code maintainability and debuggability, just as the object-oriented approach to programming, once mastered, may be put to work in almost any language, independent of whether that language is officially "object oriented".

Comments and suggestions to: