Abstract
Programming languages are enormously diverse, both in their essential concepts and in their accidental aspects. This creates a problem when teaching programming. To let students experience the diversity of essential concepts, the students must also be exposed to an overwhelming variety of accidental and irrelevant detail: the accidental differences between the languages are likely to obscure the teaching point.
The dialect system of the Grace programming language allows instructors to tailor and vary the language to suit their courses, while staying within the same stylistic, syntactic and semantic framework, as well as permitting authors to define advanced internal domain-specific languages. The dialect system achieves this power though a combination of well-known language features: lexical nesting, lambda expressions, multi-part method names, optional typing, and pluggable checkers. Grace’s approach to dialects is validated by a series of case studies, including both extensions and restrictions of the base language.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
Augustsson, L., Mansell, H., Sittampalam, G.: Paradise: a two-stage DSL embedded in Haskell. In: ICFP 2008, pp. 225–228. ACM, New York (2008)
Bierman, G.M., Meijer, E., Torgersen, M.: Lost in translation: formalizing proposed extensions to C#. In: OOPSLA (2007)
Black, A.P., Bruce, K.B., Homer, M., Noble, J.: Grace: the absence of (inessential) difficulty. In: Onward!, pp. 85–98. ACM, New York (2012)
Black, A.P., Bruce, K.B., Homer, M., Noble, J., Ruskin, A., Yannow, R.: Seeking Grace: a new object-oriented language for novices. In: SIGCSE (2013)
Burmako, E., Odersky, M., Vogt, C., Zeiger, S., Moors, A.: Scala macros (April 2012), http://scalamacros.org
Culpepper, R., Tobin-Hochstadt, S., Flatt, M.: Advanced macrology and the implementation of Typed Scheme. In: ICFP Workshop on Scheme and Functional Programming (2007)
EPFL: Environment, universes, and mirrors - Scala documentation (2013), http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html
Findler, R.B., Clements, J., Flanagan, C., Flatt, M., Krishnamurthi, S., Steckler, P., Felleisen, M.: DrScheme: a programming environment for Scheme. J. Funct. Program. 12(2), 159–182 (2002)
Fowler, M.: Domain Specific Languages. AW (2011)
Gamma, E., Helm, R., Johnson, R.E., Vlissides, J.: Design Patterns. AW (1994)
Hoare, C.: Hints on programming language design. Tech. Rep. AIM-224, Stanford Artificial Intelligence Laboratory (1973)
Holt, R.C., Wortman, D.B.: A sequence of structured subsets of PL/I. SIGCSE Bull. 6(1), 129–132 (1974), http://doi.acm.org/10.1145/953057.810456
Homer, M.: Graceful Language Features and Interfaces. Ph.D. thesis, Victoria University of Wellington (2014)
Homer, M., Bruce, K.B., Noble, J., Black, A.P.: Modules as gradually-typed objects. In: Proceedings of the 7th Workshop on Dynamic Languages and Applications, DYLA 2013, pp. 1:1–1:8. ACM, New York (2013), http://doi.acm.org/10.1145/2489798.2489799
Homer, M., Noble, J., Bruce, K.B., Black, A.P., Pearce, D.J.: Patterns as objects in Grace. In: Dynamic Language Symposium. ACM, New York (2012)
Jones, M.P.: Experience report: playing the DSL card. In: ICFP (2008)
Lorenz, D.H., Rosenan, B.: Cedalion: a language for language oriented programming. In: OOPSLA, vol. 46 (October 2011)
Markstrum, S., Marino, D., Esquivel, M., Millstein, T.D., Andreae, C., Noble, J.: JavaCOP: Declarative pluggable types for Java. ACM Trans. Program. Lang. Syst. 32(2) (2010)
Meyer, B.: Eiffel: The Language. Prentice Hall (1992)
Odersky, M.: Contracts for scala. In: Barringer, H., Falcone, Y., Finkbeiner, B., Havelund, K., Lee, I., Pace, G., Roşu, G., Sokolsky, O., Tillmann, N. (eds.) RV 2010. LNCS, vol. 6418, pp. 51–57. Springer, Heidelberg (2010)
Odersky, M.: The Scala language specification. Tech. rep., Programming Methods Laboratory, EPFL (2011)
Papi, M.M., Ali, M., Correa, J. T.L., Perkins, J.H., Ernst, M.D.: Practical pluggable types for Java. In: ISSTA (2008)
Rompf, T., Odersky, M.: Lightweight modular staging: a pragmatic approach to runtime code generation and compiled DSLs. In: GPCE, New York, NY, USA, pp. 127–136 (2010)
Ross, D.T.: Uniform referents: An essential property for a software engineering language. In: Tou, J.T. (ed.) Software Engineering, vol. 1, pp. 91–101. Academic Press (1970)
Tobin-Hochstadt, S., St-Amour, V., Culpepper, R., Flatt, M., Felleisen, M.: Languages as libraries. In: PLDI (2011)
Voelter, M.: Embedded software development with projectional language workbenches. In: Petriu, D.C., Rouquette, N., Haugen, Ø. (eds.) MODELS 2010, Part II. LNCS, vol. 6395, pp. 32–46. Springer, Heidelberg (2010)
Wirth, N.: The programming language PASCAL. Acta Informatica 1(1) (1971)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
1 Electronic Supplementary Material
Rights and permissions
Copyright information
© 2014 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Homer, M., Jones, T., Noble, J., Bruce, K.B., Black, A.P. (2014). Graceful Dialects. In: Jones, R. (eds) ECOOP 2014 – Object-Oriented Programming. ECOOP 2014. Lecture Notes in Computer Science, vol 8586. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-662-44202-9_6
Download citation
DOI: https://doi.org/10.1007/978-3-662-44202-9_6
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-662-44201-2
Online ISBN: 978-3-662-44202-9
eBook Packages: Computer ScienceComputer Science (R0)