Strategies, tips and tutorials on designing programming languages

Getting started with ANTLR: building a simple expression language

This post is part of a series. The goal of the series is to describe how to create a useful language and all the supporting tools. Building a lexer Building a parser Creating an editor with syntax highlighting Build an editor with autocompletion Mapping the parse tree to the abstract syntax tree Model to model […]

The Fun (and Madness) of Esoteric Programming Languages

The Fun (and Madness) of Esoteric Programming Languages

An esoteric programming language is a programming language designed to challenge the norms of language design. It is a language designed to make a point. The point could be anything: the challenge itself of creating something unusual, making an elaborate joke, creating a language as an artistic expression, testing promising ideas for programming, etc. This […]

68 Resources To Help You To Create Programming Languages

68 Resources To Help You To Create Programming Languages

Here it is a new guide, to collect and organize all the knowledge that you need to create your programming language from scratch. Creating a programming language is one of the most fascinating challenge you can dream of as a developer. The problem is that there are a lot of moving parts, a lot of […]

Building a language: tool support

Building a language: tool support

When building a language there is one aspect which is absolutely crucial: that is tool support. Tool support will determine if your language is usable at all, it will influence the reception from user and the usability. In this video I explain why and how you can build great tool support with a limited effort. […]

Building a compiler for your own language: validation

So you have parsed your code and built a clean AST for it. Now it is time to check if what the user has expressed make sense at all. We should perform validation, identifying semantical errors, to communicate together with lexical and syntactical errors (provided by the parser). This post is the part of a […]

What if sketching on a whiteboard was a form of programming_

What if sketching on a whiteboard was a form of programming?

There are different possible notations for languages: textual and graphical are the two larger families. We can define graphical notations for formal languages. For example we can define a graphical notation to define state machines. A Domain Specific Language for state machines can be defined using JetBrains MPS. However the user would have to edit […]

Raising the level of abstraction_ what if we tried to do that bottom up_

Raising the level of abstraction: what if we tried to do that bottom up?

It is clear that software development is going in the direction of raising the level of abstraction since it was born. The reason is simple: we can juggle with so many concepts in our mind. If we are busy thinking about what we stored in the EAX register it is difficult to think about the […]

Getting started with Jetbrains MPS: how to define a simple language (screencast)

I am blessed (or cursed) with having many different interests in software development. However my deepest love is with language engineering. There are different tools and techniques but Jetbrains MPS is particularly fascinating. To help people getting started or just get the feeling of how it is to develop with Jetbrains MPS I recorded this short screencast. […]

dynamic, static, optional, structural typing and engineering challenges

Dynamic, static, optional, structural typing and engineering challenges

How an engineer should NOT look at technical matters Dynamic versus static typing is one of those confrontations that seams to attracts zealots. It really sadden me to see how people tend to defend vehemently their side simply because they are not able to understand the other position. In my opinion if you do not get […]

Alternatives to global variables and passing the same value over a long chain of calls

  The old, good global variables are the wrong solution to a real problem: you want some information to be available in a large context. In Object-Oriented languages like Java we often do not have something we call a global variable. We instead lie to ourself using public static variables or singletons and denying they […]