What you will learn in Building User-Friendly DSLs
Chapter by chapter
Concepts explained in this book
- attributeA named characteristic of a language concept whose type determines the kind of value or relation it can hold.
- Domain IDEAn integrated development environment tailored to a specific domain that enables domain experts to author domain-specific content and supports its software-development workflow.
- domain-specific languageA domain-specific language is a programming language designed for expressing concepts and operations within a particular application domain.
- binary expressionAn operator that governs an operation combining exactly two operands.
- attribute referenceA structured object that identifies an attribute as the target of a reference.
- abstract syntax treeA structured representation of language content in which nodes represent syntactic constructs independently of surface notation.
- constraintA constraint is a rule that evaluates domain-specific language content for patterns that violate semantic or operational requirements.
- reference relationA directed relation that lets one object refer to another without making the target part of the source object's containment hierarchy.
- operator precedenceThe precedence rules that determine the sequence in which multiple operations are evaluated.
- expressionA domain-specific-language syntactic construct whose instances evaluate to values of specified types.
- domain-specific language contentStructured domain-specific information, including the rules, structures, and expressions represented in a domain-specific language.
- code generationThe automated production of source code or executable artifacts from a higher-level representation.
- RuntimeThe complete desired business software system produced for domain stakeholders, distinct from a low-level execution environment such as the runtime of a programming language.
- business ruleA declarative statement expressing a policy, constraint, or decision condition for a business domain.
- initial valueAn initial value is an optional expression-specified value assigned to an attribute when a new record is created.
- containmentA directed relation expressing that a source object contains and owns a target object, with at most one incoming containment relation per target.
- object-relation diagram notationA graphical notation for representing structured data as objects with properties and relations.
- reference objectA structured object whose reference field identifies an AST object without making that target part of the source object's containment hierarchy.
- type inferenceType inference is the algorithmic determination of expression or value types from available constraints without requiring every type to be written explicitly.
- expression ASTAn abstract syntax tree representing an expression and its nested expression structure.
- meta-DSLA meta-DSL is a domain-specific language for specifying aspects of another domain-specific language or its tooling.
- edit stateA book-specific object stored outside the abstract syntax tree that tracks editing state, including the original value and update operation for a projected DSL value.
- type checking constraintA constraint that verifies that related attributes have compatible or equal types.
- depth-first tree traversalA tree traversal technique that visits a child subtree before later nodes at the same or higher level, then backtracks to continue.
- monetary amountA DSL type whose values represent monetary amounts.
- record typeA construct representing a named record with a collection of attributes in the domain-specific language.
- subexpressionAn expression contained within another expression as one of its component expressions.
- deserializationThe reconstruction of structured in-memory data from a stored or transferred representation.
- MPSJetBrains MPS (Meta Programming System) is a language workbench for creating domain-specific languages and their associated development environments.
- parenthesisA paired expression delimiter that explicitly groups an expression and can alter its structural interpretation.
- reference implementationA small, separate, functional software system that demonstrates the intended architecture, conventions, and representative functionality of a larger system.
- typeOfA book-specific function that computes the type of an expression represented by an AST object.
- observable functionAn observable function is a MobX API function that converts a value or object into state whose changes can be tracked reactively.
- data typeA specification of the kind of value or relation that a property can store.
- MobX actionA MobX action is a function or annotation that identifies an operation allowed to modify observable state.
- DSL editorAn interactive editor that assists users in authoring and modifying syntactically and semantically valid domain-specific language content.
- HandleFaultyContent strategyA book-specific fault-handling strategy that adapts or defaults invalid DSL content so processing can continue without crashing.
- topological sortAn algorithm that orders elements of a directed acyclic dependency graph so each element precedes the elements that depend on it.
- HTTP PUT methodAn HTTP request method that replaces or creates the representation of a resource with request-provided content.
- RESTA REST API is an HTTP-based interface whose resources and operations follow the constraints and conventions of Representational State Transfer.
- textual domain-specific languageA domain-specific language whose programs are represented as text and processed through textual syntax and parsing.
- identifierAn identifier is a value that uniquely distinguishes an AST object so it can be indexed and referenced during persistence operations.
- DSL structureThe organization and rules of a domain-specific language that define its concepts, properties, types, instances, relations, and permitted compositions.
- type computationThe process of determining the type produced by an expression from its syntax, operands, and context.
- operandA subexpression that supplies an input to an operation, such as the left or right input of a binary operation.
- concept labelThe label in an object-relation diagram object that identifies the concept of which the object is an instance.
- dsl-based approachA software development technique in which domain experts author precise domain knowledge as DSL content that contributes to software specification and implementation.
- ImposeConstraints strategyA book-specific validation strategy that detects and reports missing or invalid domain-specific language content rather than silently accepting it.
- abstract syntaxThe structural form of language content that represents its essential constructs without surface-level notation details.
- concrete syntaxThe notation-level form of language content, including its textual and visual presentation details.
- couplingA dependency relationship in which changes to one software component can require corresponding changes to another component.
- best-effort typeA provisional type produced when the obviously correct type of an expression cannot be determined but a sensible approximation is available.
- untypeA special type-system result indicating that no sensible type can be computed for an expression.
- AST migrationAn AST migration is a transformation that adapts an abstract syntax tree from one version of a domain-specific language implementation to another.
- side-transformA transformation of an abstract syntax tree that replaces a specified AST object with a binary operation containing that object as an operand.
- subject matter expertA domain expert is a person with specialized knowledge of the business domain that a software system or language represents.
- type objectA machine-processable structured representation of a specific type, including an identifying concept label and settings.
- business knowledgeBusiness knowledge is domain-specific information about rules, processes, and requirements relevant to an organization or application.
- notationA system of symbols and textual or visual conventions for representing information in a language.
- ExpressA Node.js web application framework for building HTTP servers and routing web requests.
- right-transformA side-transform that replaces an AST object with a binary operation in which the original object is the left operand and the right operand is initially unset.
- attribute dependencyAn attribute dependency is a relationship in which initializing one attribute requires the initialization of another attribute first.
- dependency orderingDependency order is an ordering of attributes in which no attribute precedes an attribute on which it depends.
- ambiguous grammarA grammar for which some text has more than one valid parse according to the grammar.
- error recoveryA parsing technique that continues analysis after syntactic errors by resynchronizing at a later point in the input.
- language serviceA software component that derives a particular kind of semantic or editing information from language content, typically represented by an abstract syntax tree.
- parse treeA tree-shaped representation of the syntactic structure recognized while parsing text.
- parser generatorA tool or framework that generates a parser from a grammar specification.
- build systemSoftware that automates the generation and construction of executable artifacts from source specifications or code.
- arithmetic operatorAn operator that performs a numerical arithmetic calculation such as multiplication, division, addition, or subtraction.
- ast-building processA procedure for constructing an expression abstract syntax tree by representing operands, parentheses, and operations in evaluation order.
- value kindA property indicating whether an attribute value is initially assigned or computed from an expression.
- referencedAttributesInValueOfA book-specific query function that returns the distinct attributes referenced anywhere in an attribute's value expression.
- metamodelA metamodel is a model that precisely specifies the permitted structure, contents, properties, and types of models in a language.
- version IDAn identifier associated with a DSL representation that specifies the structure version to which it conforms.
- software language engineeringSoftware language engineering is the engineering discipline concerned with designing, implementing, evolving, and tooling programming languages.
- real-time collaborative editingConcurrent editing in which multiple collaborators modify shared content and observe one another’s changes while working.
- operator associativityA binary operator whose equal-precedence sequences are grouped from left to right.
- assignment compatibilityA directional type relation in which every value of one type can be assigned as a value of another type.
- type compatibilityA relation between types specifying whether values of one type can be used where values of another type are expected.
- increment effectA DSL concept representing an operation that increases the value of an attribute by a numeric operand of the same type.
- AST objectAn individual structured object representing a node or element within an abstract syntax tree.
- operatorA language element that governs the operation performed by an expression concept on its contained subexpressions.
- language workbenchA software tool or environment for designing, implementing, and deploying programming languages and their development tools.
- DSL-aspecific codeCode needed by a software component that is neither specific to domain-specific languages nor generic DSL implementation framework code.
- DSL-generic codeCode that provides reusable implementation framework for domain-specific languages without depending on the specifics of one language.
- DSL-specific codeCode that is strongly dependent on one or more defining aspects of a particular domain-specific language.
- almost-astAn almost-AST is a tree representation nearly identical to an abstract syntax tree except that reference objects contain target identifiers instead of object references.
- computed valueA value specification that determines an attribute's value through an expression rather than by storing an initial value.
- serializationSerialization is the conversion of structured in-memory data into a storable or transferable representation.
- reference resolutionReference resolution is the process of replacing serialized reference representations with references to the corresponding in-memory AST objects.
- JSXA JavaScript syntax extension that permits XML-like markup to be embedded in JavaScript expressions.
- deltaA recorded atomic change to DSL content or to the abstract syntax tree representing it.
- branchA named sequence of version-control commits representing an independent line of work.
- client-server architectureA software architecture in which clients request services or data from a server that provides them.
- commitA version-control record representing the state of tracked content at a particular point in time.
- conflict-free replicated data typeA replicated data structure designed so that concurrent updates can be combined without conflicts.
- merge conflictA condition in which concurrent changes cannot be automatically combined by a version-control system.
- tagA named label associated with a particular version-control commit.
- versioningThe practice of recording and managing successive versions of files or other artifacts.
- deep observabilityAn observability property in which changes within an observable object’s nested contents are also observable.
- PreventPersistence strategyA validation strategy that prevents incomplete or invalid DSL content from being saved or processed by downstream generators and build steps.
- recursionA computation technique in which a procedure solves a problem by invoking itself on smaller or nested instances of that problem.
- simple settingA setting that assigns a simple value rather than an object or collection of objects to a property.
- simple valueA value that is not an object or a collection of objects, including text, numbers, Booleans, and null.
- parentheses expressionA DSL object or expression that explicitly groups a subexpression so it is processed as a unit and has the value and type of that subexpression.
- type equalityA type equality is a constraint asserting that two type expressions must denote the same type.
- event propagationEvent propagation is the process by which a DOM event is delivered from its originating element through surrounding elements in the DOM tree.
- RascalA programming language designed for metaprogramming tasks such as analyzing, transforming, and generating code.
- SiriusAn Eclipse-based language workbench for creating graphical domain-specific languages for desktop and web environments.
- XtextAn Eclipse-based language workbench for creating textual domain-specific languages and their development tooling.
- domainA bounded area of knowledge, activity, or business concern that a software system addresses.
- projectional editingAn editor that presents a structured representation of language content as a user interface for manipulating that content.
- virtual parenthesesProjection-only parentheses displayed to clarify an expression's AST grouping without being represented in the underlying expression AST.
- placeholderA temporary value that represents the intention to create a new abstract-syntax-tree object before its concept has been chosen.
- settingA value assigned on a language instance for a property from the concept it instantiates.
- constraint checkerA program component that evaluates domain-specific language content or an abstract syntax tree against constraints and returns the violations found.
- problemA diagnostic indicating that domain-specific language content violates a constraint.
- conceptA blueprint for a fundamental DSL construct that can be instantiated and given properties.
- affected attributeAn affected attribute is the attribute whose value is determined or changed by a business rule effect.
- unique constraintA constraint that detects sufficiently similar neighboring or related things whose names are too similar or equal.
- enumAn enumeration is a language construct that defines a fixed collection of permitted named values.
- consequenceThe part of a business rule that specifies how a value in the rule’s record type is set or changed.
- ancestor listAn array containing the AST objects that contain a currently projected AST object, ordered from the nearest parent to the root.
- build settingsConfiguration data that specifies how source inputs and generated artifacts are transformed into a runnable system.
- reference idA reference ID is an identifier stored in a serialized reference object to identify the referenced AST object.
- serialized reference objectA serialized reference object is a JSON object that represents an AST reference relation by storing the target object's identifier in a refId field.
- business logicThe rules and decision-making behavior that encode an organization’s business knowledge in software.
- software languageAn artificial language defined precisely through software, with a formal meaning, notation, and tools for writing and processing it.
- left-transformA side-transform that replaces an AST object with a binary operation extending the expression toward the left.
- template functionA function that generates source code from fixed text and information extracted from an abstract syntax tree.
- backendThe server-side part of a software system that provides services, storage, and processing for its frontend.
- execution modelA specification of how business rules expressed as DSL content interact and are executed.
- higher-order componentA React pattern in which a function accepts a component or component configuration and returns an enhanced or specialized component.
- specificationA formal description of the domain requirements and behavior that the DSL represents and from which working code is derived.
- MobXMobX is a JavaScript state-management library that tracks observable data and updates dependent computations or user-interface components when that data changes.
- template literalA JavaScript literal syntax delimited by backticks that can represent multiline strings and interpolate expressions.
- computed propertyA class property whose value is derived when accessed rather than stored as an independently assigned value.
- leaf objectAn AST object that has no child objects connected by outgoing containment relations.
- deprecated featureThe process of marking a language feature as discouraged or obsolete while retaining it temporarily for dependent content.
- arityThe number of subexpressions or operands that an expression concept instance can contain.
- conditionThe part of a business rule that specifies the circumstances under which the rule applies.
- nested stringA code-generation composition technique in which generated strings are embedded within other template strings.
- invalid abstract syntax treeAn abstract syntax tree that violates one or more constraints of its domain-specific language.
- encoded abstract syntax treeAn in-memory object encoding an abstract syntax tree so that software can inspect, alter, and traverse its concepts and settings.
- cycle detectionCycle detection is a graph-analysis technique that determines whether a path or dependency chain returns to a previously visited node.
- issue messageA textual description of a constraint violation and, ideally, the way to correct it.
- number literalA DSL AST object representing a numeric literal value whose rendering can depend on the enclosing attribute's type.
- booleanA value or type with one of two truth values, true or false.
- reference wrapperA JavaScript object containing a reference marker and target reference so that a reference can be distinguished from an encoded AST object.
- dereferencingObtaining the target object of a relation by following a direct object reference.
These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.
