archives

Historical or sociological studies of programming language evolution?

I have been reading Ostler's "Empires of the Word: A Language History of the World" with an eye towards making analogies between the spread and evolution of natural languages with engineered computer ones. While we prefer to discuss languages here based on 'technical' merits within the language (e.g., ability to reason about programs, performance and implementation implications, etc.), I'm curious about more contextual social factors. For example, one way to explain the creation of FrTime's variant of data flow / FRP is that Greg Cooper was a member of the PLT Scheme community (so it is Scheme based and has side effects), previously worked in embedded systems (so it emphasizes glitch-freedom), and is a member of the PL community / an hour or two from Yale (so influenced by Haskell-style FRP). As another, the recent discussion on LtU about the matlab vs S/R vs python for statistics ultimately was more about communities than technical merit, suggesting the human / societal / cultural element of language use is fundamental to the success of a programming language in terms of penetration.

I'm wondering if anyone has suggestions on papers or studies in a similar vein. For example, what was the canonical source breaking down 'generations' of language (first gen, second gen, etc.)? I think there was a neat diagram floating around the web showing a basic parent-child relationship between languages over time. Another relevant one (I believe in CTM) is Peter van Roy's language spectrum focusing on relationships between languages based on features. Another obvious relevant source is History of Programming Language style articles about the inception of particular languages. Paper citation chains hint at time and geographic relationships. If there happen to be linguists around, sharing reading lists about the natural language side of things as I break into this could be fun too :)

The Recruitment Theory of Language Origins

Leo Meyerovich recently started a thread on LtU asking about Historical or sociological studies of programming language evolution?. I've been meaning to post a paper on this topic to LtU for awhile now, but simply cherrypicking for the opportune time to fit it into forum discussion. With Leo's question at hand, I give you an interesting paper that models language evolution, by artificial intelligence researcher Luc Steels. Steels has spent over 10 years researching this area, and his recent paper, The Recruitment Theory of Language Origins, summarizes one of his models for dealing with language evolution:

The recruitment theory of language origins argues that language users recruit and try out different strategies for solving the task of communication and retain those that maximise communicative success and cognitive economy. Each strategy requires specific cognitive neural mechanisms, which in themselves serve a wide range of purposes and therefore may have evolved or could be learned independently of language. The application of a strategy has an impact on the properties of the emergent language and this fixates the use of the strategy in the population. Although neurological evidence can be used to show that certain cognitive neural mechanisms are common to linguistic and non-linguistic tasks, this only shows that recruitment has happened, not why. To show the latter, we need models demonstrating that the recruitment of a particular strategy and hence the mechanisms to carry out this strategy lead to a better communication system. This paper gives concrete examples how such models can be built and shows the kinds of results that can be expected from them.

Delimited Control in OCaml, Abstractly and Concretely, System Description

Delimited Control in OCaml, Abstractly and Concretely, System Description

We describe the first implementation of multi-prompt delimited control operators in OCaml that is direct in that it captures only the needed part of the control stack. The implementation is a library that requires no changes to the OCaml compiler or run-time, so it is perfectly compatible with existing OCaml source code and byte-code. The library has been in fruitful practical use for four years.

We present the library as an implementation of an abstract machine derived by elaborating the definitional machine. The abstract view lets us distill a minimalistic API, scAPI, sufficient for implementing multi-prompt delimited control. We argue that a language system that supports exception and stack-overflow handling supports scAPI. Our library illustrates how to use scAPI to implement multi-prompt delimited control in a typed language. The approach is general and can be used to add multi-prompt delimited control to other existing language systems.

Oleg was kind enough to send me an e-mail letting me know of this paper's existence (it appears not yet to be linked from the "Computation" page under which it is stored) and to include me in the acknowledgements. Since the paper in its current form has been accepted for publication, he indicated that it can be made more widely available, so here it is. In typical Oleg fashion, it offers insights at both the theoretical and implementation levels.

Operator precedence

Getting an expression grammar right is a core part of any language. Simple two-level (mult binds tighter than add) examples abound in texts and such. But how far should it be taken?

I'm looking at a grammar now (the lamented - by me - HyperTalk) that has ten levels. Is that going overboard? In particular, what do you get by separating equalities from inequalities like this:

( ) // bind tightest
unary operators
multiplicative
additive
inequality
equality
and
or // bind most globally

I'm constructing a grammar in which the equalities and inequalities have the same level of binding, i.e. it's left to associativity to sort out who goes first. Is there a gotcha waiting for me?

are rewrite systems really the bee's knees

I get the impression from reading about rewrite systems that in some sense we should all just give up on other approaches and simply do everything as rewrite rules. But of course I've never really used or learned such things, so I assume there are simple and good and probably quickly obvious reasons why s-exprs and c-style syntaxes are still around. I'd appreciate thoughts/experiences/summaries.