Ivan Towlson Mindscape. What are DSLs and why should I care? What are the Visual Studio DSL Tools? Building a DSL Vocabulary and grammar Spiffing.

Post on 17-Dec-2015

219 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

Transcript

BUILD YOUR OWN DESIGNERAN INTRODUCTION TO VISUAL STUDIO DSL TOOLS

Ivan TowlsonMindscape

Agenda What are DSLs and why should I care? What are the Visual Studio DSL Tools? Building a DSL

Vocabulary and grammar Spiffing it up

Using the DSL Distributing your DSL

Domain-Specific Languages A vocabulary and grammar tailored to a

particular field of use SQL – a DSL for manipulating relational data Regex notation – a DSL for text matching Mathematica – a DSL for symbolic mathematics BPMN – a DSL for business processes LINQ designer – a DSL for mapping SQL tables Windows Forms designer?! VS class diagrams?

UML!

Classifying DSLs Internal or external – a vocabulary

within the host language (e.g. fluent APIs) or a separate language

Textual or graphical Vertical or horizontal – a specific

business (e.g. a DSL for rail networks) or a technical area (e.g. SQL, regex)

“I was researching implementation techniques for graphical DSLs in vertical domains”

When Would You Create One? You are addressing a well-defined problem area The problem area supports a more concise

expression than “longhand” programming You need the flexibility to express a range of

problems, situations or solutions within that area

The people you expect to use your language have the analytical and technical skills to express their problems in a way a dumb computer can handle

Visual Studio DSL Tools A kit for hosting graphical DSLs within

Visual Studio

Consequences Users must have a Visual Studio licence Users must not freak out when they see

the Visual Studio UI Models must be hosted within Visual

Studio projects Therefore typically not aimed at end

users

Example: LightSpeed Domain modelling tool / object-

relational mapper User base: .NET developers

Core concepts: entities with attributes and associations between them

Convention over configuration Entity classes typically follow standard

formula Predictable mapping between objects and

tables

public class Contribution : Entity<int>{ private string _title;

public string Title { get { return _title; } set { Set(ref _title, value, "Title"); } }}

public class Contribution : Entity<int>{ private string _title;

public string Title { get { return _title; } set { Set(ref _title, value, "Title"); } }}

Enough talk! Show me code!

Using the Model At compile time – code generation At runtime – as just another object

Custom Tool .tt Files

Regenerated on save- Must be fast!- Largely transparent

Regenerated on request- User may forget (well, I often do)

All output in one file- Must all be in same language

One output file per .tt file- Mixed output possible- Nicer structure for e.g. diffs

Invisible to user- Avoids clutter in user project

.tt files in user project- Selective generation- User can tweak or create own

Tool must be registered- You might even have to write it

Already handled by VS

Code Generation Options

Distribution DSL and Package DLLs .vstemplate .xsd Optional custom tool No redistributables required for VS2008

Must install free redistributables for VS2005 DSL Tools includes rudimentary MSI

generator

Distribution Package load key

Free from VSIP program Attributes must match DLL – new version,

new PLK! “The most common cause of package load failures.”

Branding: register under InstalledPackages key

The curse of devenv /setup

Visual Studio Extensibility homepage:http://msdn.microsoft.com/en-us/vsx/

default.aspx

Thanks! Cook, Jones, Kent & Wills, “Domain

Specific Development with Visual Studio DSL Tools”

Same authors’ blogs on blogs.msdn.com

VSX developer centre on MSDN Clarius T4 Editor

ivan@hestia.cc http://hestia.typepad.com/flatla

nder

ivan@mindscape.co.nzhttp://www.mindscape.co.nz

top related