> ## Content Index
> Fetch the complete content index at: https://dsl-consultancy.ghost.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# Aspect of MyFPL
- URL: https://dsl-consultancy.ghost.io/aspect-of-myfpl/
- Published: 2026-08-21T13:26:08.000Z
- Updated: 2026-09-24T08:28:25.000Z
- Author: Meinte Boersma

💡

This is post 03 in my blog series on MyFPL — see [the index/table of contents](https://codeberg.org/dslmeinte/my-fpl/src/branch/main/blogs/index.adoc?ref=dsl-consultancy.ghost.io).  
  
The code in this and previous blog posts can also be found [here, on Codeberg](https://codeberg.org/dslmeinte/my-fpl?ref=dsl-consultancy.ghost.io). Check out the repo at the commit marked “blog 03”.

Before I actually – really!, finally! – start implementing something, I want to set the stage a little bit. This should help with understanding what all the various bits of the implementation are supposed to achieve — especially as we’ll be evolving and adding to the implementation by tiny bits across the whole landscape.

In my book [*Building User-Friendly DSLs*](https://www.manning.com/books/building-user-friendly-dsls?ref=dsl-consultancy.ghost.io), I identify **four key aspects** of any DSL:

### Structure

Governs the structure of ASTs representing DSL content — AKA the *metamodel*.

### Notation

The *concrete syntax* – or multiple syntax**es**! — used to represent such ASTs.

### Constraints

Rules that determine whether a given AST is concerned to be *valid* — including sensible and helpful messages reported back to the DSL’s users when these rules are violated. This aspect typically also involves defining and implementing a *type system* for the DSL.

### Meaning

What an AST in the DSL means in terms of it being executed some way — AKA the DSL’s *semantics*. (I have a sort-of “laissez-faire” relation with that word, by the way, so don’t expect anything formal there. I’ll get into that a little more below.)

I’ll explain these aspects in a lot more detail in the course of this blog. Here’s a diagram of the key aspects described above:

![](https://storage.ghost.io/c/eb/4d/eb4df6b9-0e4f-4d29-b975-4075848c0001/content/images/2026/08/key-aspects.png)

Diagram of the four key aspect of MyFPL, and their relations

This diagram also hints at a couple of relations between some of these aspects that weren’t explained in the enumeration above:

- DSL content gets *executed* in an *Execution environment*, either through direct interpretation, or after generating code and deploying that generated code somewhere and somehow.
- The behavior of this execution is what I deem to be the DSL’s semantics — AKA its meaning.  
I’m aware this is a non-standard way of thinking about semantics. “Usually,” there’s some formalism to define a language’s semantics upfront, after which we proceed to implement that definition — hopefully faithfully and completely! Here, I effectively take an implementation of the semantics – in the form of the “execute” arrow in the diagram –, run it against DSL content, and declare whatever behavior it has as being the semantics of the DSL.  
That also means that as soon as the implementation of the semantics changes – or is swapped out for another one – the DSL’s semantics might change! If we have *multiple* implementations of the semantics, those semantics might actually be different — hopefully intentionally so! In the case of MyFPL, we’ll have just one implementation of the semantics.

💡

By the way: the above remains true when we substitute “DSL” with the more general term “**software language*”. That term encompasses both DSLs, modeling languages, and any programming language including any FPL.

Most of the implementation of MyFPL will be directly part of exactly one of these key aspects. A small part of the implementation will not be part of any of these key aspects, such as:

1. Entrypoints for a front- and backend.
2. Configuration of the development environment, and building the FPL in the sense of “compiling” — or “transpiling” as it’s supposed to be called for TypeScript.
3. Unit tests — (insofar I actually care to write those…)

(If we want to be fancy, we could say that part consists of “orthogonal boilerplate (code)”.) We’ll write most this during the setup phase, after which it will remain largely unaltered for the rest of the journey.

💡

In this blog post, I’ve explained the four key aspects of MyFPL. In the next blog post, we’ll set up the development environment to implement MyFPL with.

© 2026 Meinte Boersma (DSL Consultancy)