Growing a Language


Guy L Steele Jr



In this invited talk, Guy Steele discusses the difference between small and large languages. He claims that while designing a language neither a small language is a good choice nor a large language, rather one should design a language that can grow. The smaller language will have too few primitives to be usable and the larger will take such a long time to design that users will go away to some other usable solution that is available even if it is sub-standard. He further argues using evolution (or lack thereof) of languages such APL, C, C++ and Java that the main goal of language design should be to plan for growth.


  • He focuses on Java being one of the lead designers of the language while being at Sun.
  • Smaller languages are easier to learn while larger languages are easier to use (over time).
  • Example of max function as a primitive thought in one’s head but not in a PL, so one needs to define it. This reminded me of my thoughts on C vs Java!
  • I love how this talk is humorous in the sense of using words such as “more large” until defining larger to make the larger point about language design. Guy Steele sure is The Great Quux.
  • Evolution of programming languages from B to C to C++ had to be this way; C++ couldn’t have spread if it was foisted all at once on the world.
  • Warts with a small language go away as the language grows, but important to let the users grow the language instead of a one-person in-charge of design
  • Two ways to grow a language:
    • vocabulary or libraries, but the key is that the words added through a library should look like language primitives
    • change the rules of meaning
  • Neither one person-in-charge nor no one in-charge works. Best is the middle, Linux as a good example. The Cathedral and the Bazaar expands on this.
  • Missing things in Java at the time
  • In a more meta sense, language design is a pattern for growth