It's like buying a Volkswagen Bug. Once you own one, you start to see them everywhere. That's true for dialects as well. And, even better, once you know what they are, you start to add them to your code and use them to gain greater programming leverage in writing applications.

You use dialects a lot in REBOL, even though you may not realize it. For example, when you write:

sum: func [num1 [number!] num2 [number!]] [num1 + num2]

The block that follows the func word is actually a dialect. It is not "normal REBOL code" (also called the Do dialect), it is a special little language that is used for defining the arguments of functions.

Similarly, when you create GUI you often write it in VID, the visual interface dialect. A snip of VID might look like this:

The definition of a dialect in REBOL is very simple: any loadable expression is a dialect.

That is, for a dialect to be valid, you must be able to use the load function to load it into REBOL. The dialect must be a valid lexical expression of REBOL. If a string cannot be loaded, then it is not a dialect (it might be a valid language of some kind, but it is just not a dialect).

For example, this code shows that a given string is a valid dialect of REBOL because it can be loaded:

Dialects are not only useful for code expressions, they are equally productive for data storage (and data exchange over the net).

It is important to recognize that a dialect does not require that you write a parser or any other complex method to interpret the meaning of the data. Even a block as simple as this is considered to be a dialect:

"Bob" 21 bob@example.com $100

This is a dialect because it is a loadable REBOL string. The way you interpret it is up to you, but it can be as simple as using a multivariable assignment:

Here is a more complex data dialect that is used for holding data about students in a REBOL-based class reunion program. This is a single record, but we've broken it into separate lines so you can see the details: