This document discusses programming languages and modeling. It notes that programming languages are not expressive, high-level, abstract, domain-specific, or modular enough. It proposes addressing this by using modeling with higher-level, domain-specific concepts and notations, and code generation from models. However, modeling and programming tools have traditionally been separate worlds. The document envisions a future where modeling and programming are integrated by mixing models and programs, and developing languages and tools that support programming at different levels of abstraction from different viewpoints. Enabling technologies could include advanced parser generators and projectional editing, while available tools mentioned include Eclipse Xtext and JetBrains' Meta Programming System for developing domain-specific languages.
5. Programming Languages are not expressive enough. Erlang C# C++ Python Java Ruby Groovy Fortran C
6. Programming Languages are not high-level enough. Erlang C# C++ Python Java Ruby Groovy Fortran C
7. Programming Languages are not abstract enough. Erlang C# C++ Python Java Ruby Groovy Fortran C
8. Programming Languages are not domain-specific enough. Erlang C# C++ Python Java Ruby Groovy Fortran C
9. Programming Languages are not enough. Erlang C# C++ Python Java Ruby Groovy Fortran C
10. Programming Languages Formats Erlang C# C++ Python Java Ruby Groovy Fortran json C HTML CSS yaml XML
11. Programming Languages Formats Frameworks Erlang C# C++ Python Java Django Ruby Groovy WPF Fortran json C JEE JMS HTML CSS Rails yaml XML lift
12. Programming Languages Formats Frameworks enough. are not Erlang C# C++ Python Java Django Ruby Groovy WPF Fortran json C JEE JMS HTML CSS Rails yaml XML lift
50. We don‘t want to model, we want to program! … at different levels of abstaction … from different viewpoints … integrated!
51. We don‘t want to model, we want to program! … with different degrees of domain-specificity … with suitable notations … with suitable expressiveness
52. We don‘t want to model, we want to program! And always: precise and tool processable
159. Projectional tree … to text-lookalike (editor) … to other trees … [*] … to text
160. Programming as Modeling … (Mostly) Graphical Notations … Abstract Syntax Storage … Projecting Editors … Different editable views for model
161. Programming as Modeling … (Mostly) Graphical Any kind of Notations … Abstract Syntax Storage … Projecting Editors … Different editable views for model
163. Flexible Notations Textual like ASCII treated the same } Graphical can be mixed box & line Semi-Graphical mathematical
164. Automatic IDE Extension tool support is inherent for languages build with projectional tools language definition implies IDE definition
165. Multiple Notations … for the same concepts e.g. in different contexts or for different tasks
166. Partial Projections … different views … for different roles/people … only a particular variant
167. Storage != Schema … store arbitraty meta data change log conflicting information variability annotations … independent of language schema! … „aspects“, overlay
168. Live Programs think: spreadsheet a change to one part of program can lead to (dependent) changes in other parts
169. Tree Editing … is different from editing text … try to make it feel like text … takes some gettingused to but: for more flexible notations a more general editing paradigm is needed
210. Build new standalone DSLs Build DSLs that reuse parts of other languages Java++ (MPS comes with BaseLanguage) extend base language
211. Build new standalone DSLs Build DSLs that reuse parts of other languages Java++ (MPS comes with BaseLanguage) extend base language build DSLs that reuse parts of BaseLanguage
226. Language Extension Example Translated to regular Java code based on the generator package jaxdemo.sandbox.sandbox; import java.util.concurrent.locks.Lock; public class DemoClass { private Lock lock; public DemoClass() { try { this.getLock().lock(); SharedResouce.instance().doSomething(); } finally { this.getLock().unlock(); } } private Lock getLock() { return this.lock; } }
255. A Journey… .coordinates web email skypexinglinkedin www.voelter.devoelter@acm.orgschogglad http://www.xing.com/profile/Markus_Voelter http://www.linkedin.com/pub/0/377/a31