My name is Jurgen Vinju; I am a professor in Automated Software Analysis and a research group leader of the SoftWare Analysis and Transformation (SWAT) group at CWI in Amsterdam.
TL;DR: I’m a metaprogramming enthusiast who has had the luck of making it my job, and also the luck of meeting many people that are also interested in building tools for software languages. I co-designed, implemented, maintain and support the Rascal metaprogramming language and language workbench. I’m personally recovering from some nasty health surprises; it’s getting better all the time.
Currently I’m most involved with the Rascal metaprogramming language and its associated Language Workbench and its community:
We do research on it and with in in PL (Programming Languages) and SE (Software Engineering);
Also we do quite some teaching (DSLs, Software Construction, Software Evolution);
We use it to commercially offer DSL designs and implementations and source code analysis tooling.
All the stuff I work(ed) on is open-source software: Rascal MPL, ASF+SDF Meta-Environment, Eclipse IMP. I’m an early adopter of continuous-integration systems and random specification based testing.
My personal coding experience of the last 20 years involves stuff like this:
Parsers and disambiguation (generating GLR, SGLR, GLL, DDGLL parsing algorithms from (data-dependent) context-free grammars;
Term rewriting (interpreters and compilers for algebraic specification formalisms, functional programming languages, matching and substition in abstract syntax trees)
High-fidelity (no loss of indentation and comments) for refactoring tools
Generating/instantiating IDEs from language descriptions (editors with syntax highlighting, outlines, type checking and inference)
Pretty printers and code formatters
Analyzing, refactoring and generating COBOL code, C code, C++ code, Java, PHP, and what not.
… and other stuff
Lately I’ve worked with other people (PhD candidates and other friends) on the following topics:
Reverse engineering C++ code
Mining software repositories for developer assistance and for software project quality assessment
Data-dependent context-free grammars and data-dependent GLL
Hash-array mapped tries for efficient multi-maps
DSLs for financial systems (model checking, testing and code generation of scalable transaction systems)
Generating Notebook interfaces for DSLs
AI for pretty printing and formatting
… probably some other things
I’m pretty deeply involved with academic communities around code tooling:
Welcome Jurgen and thank you for introducing yourself.
First of all I wish you a quick and complete recovery.
I think your experience is great because it touches three different aspects: research, teaching and commercial activities.
On the teaching I was thinking that it would be nice to have a list of universities where DSLs are taught. Also, while it is difficult to imagine DSLs be taught at the majority of universities in the near future, we as a community could help by proposing seminars/workshops on DSLs to universities where DSLs are not taught at all. What do you think?
Regarding your commercial experience, as someone who is living out of Language Engineering I would love to share experience with others. From time to time some freelancer writes me asking how it works for me, what my business model is, etc. I try to give an answer explaining what I am doing and what worked for me (and what did not). On the other hand it would be very useful for me to exchange ideas with other entrpreneurs and freelancers in this area, as we could learn from each other and provide better services to other potential clients. While in mature markets is easy to see each other as competitors, in this field I think we can work together to “create” the market, as my feeling is that it could be many times bigger than it is.
Also, I would be very curious about your experience with DSLs for financial systems. I keep thinking there is a huge potential there. I have worked on two different DSL projects on accounting/payroll systems based on DSLs, but I think some of those approaches could be used for financial systems, with probably better results.
On the teaching I was thinking that it would be nice to have a list of universities where DSLs are taught.
I suspect such a list must have been produced somewhere already. Let’s ask Benoît Combemale or Tijs van der Storm about this. I’ll ask Tijs, if you ask Benoît
Regarding your commercial experience, as someone who is living out of Language Engineering I would love to share experience with others. […] While in mature markets is easy to see each other as competitors, in this field I think we can work together to “create” the market, as my feeling is that it could be many times bigger than it is.
Agreed on that very point; there is no need for cold-blooded competitiveness in this DSL market; neither in research, nor in industry. However, some of our customers are in highly competitive and influential markets themselves and that sometimes has to spill over to us and be respected as such by us. Also there is a competition for talent; and if we ever meet in that arena I will be as competitive as I can be
Our business model is a mixture of design consulting, prototyping and product development, depending on the client’s structure and requirements and the status of the collaboration. I don’t believe there is a one-size-fits-all success formula here; but the whole concept of a DSL inevitably requires deeply contextual interaction with a client. That is for sure. Most of our DSL projects have had significant in-kind energy investments from our clients in order to provide the domain knowledge and feedback on our designs.
Also, I would be very curious about your experience with DSLs for financial systems
I understand; our research and open-source DSLs and tools are available online on github, but the commercial activities in this domain are not for sharing. Even between our respective clients we keep a tigh seal; as per law, regulations and business agreements.
True, many adopters of DSLs do not want to publicize that, which is understandable but unfortunate for the promotion of DSLs.
Regarding talent, yes, there is competition for that
Yes, very true. So far we have been making a little money from info-products (a book and a video-course), and most money from consulting on different language engineering things:
building complete DSLs using JetBrains MPS: so far we have been able to do so only on time & material basis. We have now started selling also maintenance packages but in the future we would like to have standard packages for analysis, prototyping, implementation, and maintenance
building parsers: this is something we are able to do for a fixed price. We have people asking for parsers for existing languages or languages they develop
legacy modernization: we build transpilers and interpreters to move people away from one platform and into another. For example we built a VBA to C++ transpiler and we are working on a JVM interpreter for RPG. The latter is open-source and we are working on an article on that
What we are not doing yet but we would like to do is building DSLs off-the-shelf. We think they would be easier to market and understand for clients, which would not need to get the generic concept of a DSL but just see a one they could use looks like. They would not be as “specific” as DSLs built for one single client, but they could be very tighted to one domain (not just one company).
I think different clients could look for different things: some may want something very rich built with MPS, while others may want something more lightweight built with textX (by @igor.dejanovic). Others may absolutely need a web-based editor (and I would not be sure what to suggest in that case). One may need someone able to speak Dutch, another one may need someone based in France. I think it would be interesting to understand more of what each other does to be able to understand how to direct people we cannot serve directly.
Also, another thing we realized is that for larger projects some companies want to work with someone larger, so maybe in some cases it could make sense to partner. Beside Itemis I am not sure who could put more than a couple language engineers on a single project.
Yes, I understand that. Many things have to stay confidential
Off-the-shelf DSLs sound like a good idea. For companies working in the domains that are well understood it might be a better option to adopt some battle tested DSL, which can help them to better understand the domain they operate in, than to build their own DSL from scratch. Standardization is sometimes a good thing :). Developing these DSLs in the open and offering services around them (e.g. customization, generators for different targets) might be a viable business model as well.
O yes; I was hospitalized 3 times in 2018 with holes in my intestines after old scar tissue started blocking them; and the nasty consequences of that. I won’t go into details. to make a long story short: I’m still alive! it takes a surprisingly long time to recover if you are down for over a year. I think in 2020 I’ll be back to full strength.