Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Domain-specific language
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Examples== Examples of domain-specific programming languages include [[HTML]], [[Logo (programming language)|Logo]] for pencil-like drawing, [[Verilog]] and [[VHSIC hardware description language|VHDL]] hardware description languages, [[MATLAB]] and [[GNU Octave]] for matrix programming, [[Mathematica]], [[Maple (software)|Maple]] and [[Maxima (software)|Maxima]] for [[Computer algebra|symbolic mathematics]], [[Specification and Description Language]] for reactive and distributed systems, [[spreadsheet]] formulas and macros, [[SQL]] for [[relational database]] queries, [[Yacc|YACC]] grammars for creating [[parsers]], [[regular expressions]] for specifying [[Lexical analysis|lexers]], the [[Generic Eclipse Modeling System]] for creating diagramming languages, [[Csound]] for sound and music synthesis, and the input languages of [[GraphViz]] and [[GrGen]], software packages used for [[graph layout]] and [[graph rewriting]], [[Hashicorp Configuration Language]] used for [[Terraform (software)|Terraform]] and other [[HashiCorp|Hashicorp]] tools, [[Puppet (software)|Puppet]] also has its own [[configuration language]]. ===GameMaker Language=== The GML scripting language used by [[GameMaker Studio]] is a domain-specific language targeted at novice programmers to easily be able to learn programming. While the language serves as a blend of multiple languages including [[Delphi (programming language)|Delphi]], [[C++]], and [[BASIC]]. Most of functions in that language after compiling in fact calls runtime functions written in language specific for targeted platform, so their final implementation is not visible to user. The language primarily serves to make it easy for anyone to pick up the language and develop a game, and thanks to GM runtime which handles main game loop and keeps implementation of called functions, few lines of code is required for simplest game, instead of thousands. ===ColdFusion Markup Language=== [[ColdFusion]]'s associated scripting language is another example of a domain-specific language for data-driven websites. This scripting language is used to weave together languages and services such as Java, .NET, C++, SMS, email, email servers, http, ftp, exchange, directory services, and file systems for use in websites. The [[ColdFusion Markup Language]] (CFML) includes a set of tags that can be used in ColdFusion pages to interact with data sources, manipulate data, and display output. CFML tag syntax is similar to HTML element syntax. ===FilterMeister=== FilterMeister is a programming environment, with a programming language that is based on C, for the specific purpose of creating [[Photoshop]]-compatible image processing filter plug-ins; FilterMeister runs as a Photoshop plug-in itself and it can load and execute scripts or compile and export them as independent plug-ins. Although the FilterMeister language reproduces a significant portion of the C language and function library, it contains only those features which can be used within the context of Photoshop plug-ins and adds a number of specific features only useful in this specific domain. ===MediaWiki templates=== The ''Template'' feature of [[MediaWiki]] is an embedded domain-specific language whose fundamental purpose is to support the creation of [[MediaWiki#Templates|page templates]] and the [[transclusion]] (inclusion by reference) of MediaWiki pages into other MediaWiki pages. ===Software engineering uses=== There has been much interest in domain-specific languages to improve the productivity and quality of [[software engineering]]. Domain-specific language could possibly provide a robust set of tools for efficient software engineering. Such tools are beginning to make their way into the development of critical software systems. The Software Cost Reduction Toolkit<ref>{{cite book |first=C. |last=Heitmeyer |year=1999 |chapter=Using the SCR* toolset to specify software requirements |chapter-url=http://chacs.nrl.navy.mil/publications/CHACS/1998/1998heitmeyer-WIFT.pdf |title=Proceedings. 2nd IEEE Workshop on Industrial Strength Formal Specification Techniques |publisher=IEEE |isbn=0-7695-0081-1 |pages=12β13 |doi=10.1109/WIFT.1998.766290|s2cid=16079058 |archive-url=https://web.archive.org/web/20040719135712/http://chacs.nrl.navy.mil/publications/CHACS/1998/1998heitmeyer-WIFT.pdf |archive-date=2004-07-19 }}</ref> is an example of this. The toolkit is a suite of utilities including a specification editor to create a [[Software Requirements Specification|requirements specification]], a dependency graph browser to display variable dependencies, a [[consistency checker]] to catch missing cases in [[well-formed formula]]s in the specification, a [[model checker]] and a [[Automated theorem prover|theorem prover]] to check program properties against the specification, and an invariant generator that automatically constructs invariants based on the requirements. A newer development is [[language-oriented programming]], an integrated software engineering [[Methodology (software engineering)|methodology]] based mainly on creating, optimizing, and using domain-specific languages. ===Metacompilers=== {{Further|Metacompiler}} Complementing [[language-oriented programming]], as well as all other forms of domain-specific languages, are the class of compiler writing tools called [[metacompiler]]s. A metacompiler is not only useful for generating [[parser]]s and [[code generation (compiler)|code generators]] for domain-specific languages, but a [[metacompiler]] itself compiles a domain-specific [[metalanguage]] specifically designed for the domain of [[metaprogramming]]. Besides parsing domain-specific languages, metacompilers are useful for generating a wide range of software engineering and analysis tools. The meta-compiler methodology is often found in [[Program transformation|program transformation systems]]. Metacompilers that played a significant role in both computer science and the computer industry include [[META II|Meta-II]],<ref>{{cite book |last=Shorre |first=D. V. |title=Proceedings of the 1964 19th ACM national conference |chapter=META II a syntax-oriented compiler writing language |pages=41.301β41.3011 |year=1964 |doi=10.1145/800257.808896 |s2cid=43144779 }}</ref> and its descendant [[TREE-META|TreeMeta]].<ref>{{cite journal |first1=C. Stephen |last1=Carr |first2=David A. |last2=Luther |first3=Sherian |last3=Erdmann |date=1969 |title=The TREE-META Compiler-Compiler System: A Meta Compiler System for the Univac 1108 and General Electric 645 |journal=University of Utah Technical Report RADC-TR-69-83 |url=https://apps.dtic.mil/docs/citations/AD0855122 |archive-url=https://web.archive.org/web/20200201193225/https://apps.dtic.mil/docs/citations/AD0855122 |url-status=dead |archive-date=February 1, 2020 }}</ref> ===Unreal Engine before version 4 and other games=== [[Unreal (1998 video game)|Unreal]] and [[Unreal Tournament]] unveiled a language called [[UnrealScript]]. This allowed for rapid development of modifications compared to the competitor [[Quake (video game)|Quake]] (using the [[Id Tech 2]] engine). The Id Tech engine used standard [[C (programming language)|C]] code meaning C had to be learned and properly applied, while UnrealScript was optimized for ease of use and efficiency. Similarly, more recent games have introduced their own specific languages for development. One more common example is [[Lua (programming language)|Lua]] for scripting.{{Citation needed|date=December 2019}} ===Rules engines for policy automation=== Various [[business rules engine]]s have been developed for automating policy and business rules used in both government and private industry. [[ILOG]], [[Oracle Policy Automation]], DTRules, [[Drools]] and others provide support for DSLs aimed to support various problem domains. DTRules goes so far as to define an interface for the use of multiple DSLs within a rule set. The purpose of business rules engines is to define a representation of business logic in as human-readable fashion as possible. This allows both [[subject-matter expert]]s and developers to work with and understand the same representation of the business logic. Most rules engines provide both an approach to simplifying the control structures for business logic (for example, using declarative rules or [[decision table]]s) coupled with alternatives to programming syntax in favor of DSLs. ===Statistical modelling languages=== Statistical modelers have developed domain-specific languages such as [[R (programming language)|R]] (an implementation of the [[S (programming language)|S]] language), [[Bayesian inference using Gibbs sampling|Bugs]], [[Just another Gibbs sampler|Jags]], and [[Stan (software)|Stan]]. These languages provide a syntax for describing a Bayesian model and generate a method for solving it using simulation. ===Generate model and services to multiple programming Languages=== Generate object handling and services based on an [[Interface description language|Interface Description Language]] for a domain-specific language such as JavaScript for web applications, HTML for documentation, C++ for high-performance code, etc. This is done by cross-language frameworks such as [[Apache Thrift]] or [[Protocol Buffers|Google Protocol Buffers]]. === Gherkin === [[Cucumber (software)#Gherkin language|Gherkin]] is a language designed to define test cases to check the behavior of software, without specifying how that behavior is implemented. It is meant to be read and used by non-technical users using a natural language syntax and a [[Off-side rule|line-oriented design]]. The tests defined with Gherkin must then be implemented in a general programming language. Then, the steps in a Gherkin program acts as a syntax for method invocation accessible to non-developers. ===Other examples=== Other prominent examples of domain-specific languages include: * [[Game Description Language]] * [[OpenGL Shading Language]] * [[Gradle]] *[[ActionScript]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)