<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xml:base="https://specificlanguages.com/">
  <channel>
    <title>Concepts on Specific Languages</title>
    <link>https://specificlanguages.com/categories/concepts/</link>
    <description>Recent content in Concepts on Specific Languages</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>sergej@specificlanguages.com (Sergej Koščejev)</managingEditor>
    <webMaster>sergej@specificlanguages.com (Sergej Koščejev)</webMaster>
    <lastBuildDate>Mon, 24 Jan 2022 10:18:53 +0100</lastBuildDate>
    
    <atom:link href="https://specificlanguages.com/categories/concepts/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Two kinds of MPS plugins</title>
      <link>https://specificlanguages.com/posts/2022-01/24-two-kinds-of-plugins/</link>
      <pubDate>Mon, 24 Jan 2022 10:18:53 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2022-01/24-two-kinds-of-plugins/</guid>
      <description>&lt;p&gt;MPS can be extended using plugins. There are multiple plugins available on the Marketplace, for example Kolja Dummann&amp;rsquo;s
&lt;a href=&#34;https://coolya.github.io/Durchblick/&#34;&gt;&lt;em&gt;Durchblick&lt;/em&gt;&lt;/a&gt; or
&lt;a href=&#34;https://blog.logv.ws/2020/12/22/introducing-fernsprecher-for-intellij-ides/&#34;&gt;&lt;em&gt;Fernsprecher&lt;/em&gt;&lt;/a&gt;, &lt;a href=&#34;https://specificlanguages.com/build-script-notifier/&#34;&gt;&lt;em&gt;Build Script
Notifier&lt;/em&gt;&lt;/a&gt; from yours truly, or &lt;a href=&#34;http://mbeddr.com/files/gc-sle.pdf&#34;&gt;grammar
cells&lt;/a&gt; (&lt;em&gt;de.itemis.mps.grammarcells&lt;/em&gt;) from itemis.&lt;/p&gt;
&lt;p&gt;One of these is not like the others.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you have all of these plugins installed in your MPS and are developing your language. You use grammar cells to
save on the effort of writing editors, Durchblick to have a better view of generators, Fernsprecher to view MPS logs,
and Build Script Notifier to remember to update build script dependencies.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2022-01/24-two-kinds-of-plugins/"><![CDATA[ <p>MPS can be extended using plugins. There are multiple plugins available on the Marketplace, for example Kolja Dummann&rsquo;s
<a href="https://coolya.github.io/Durchblick/"><em>Durchblick</em></a> or
<a href="https://blog.logv.ws/2020/12/22/introducing-fernsprecher-for-intellij-ides/"><em>Fernsprecher</em></a>, <a href="https://specificlanguages.com/build-script-notifier/"><em>Build Script
Notifier</em></a> from yours truly, or <a href="http://mbeddr.com/files/gc-sle.pdf">grammar
cells</a> (<em>de.itemis.mps.grammarcells</em>) from itemis.</p>
<p>One of these is not like the others.</p>
<p>Let&rsquo;s say you have all of these plugins installed in your MPS and are developing your language. You use grammar cells to
save on the effort of writing editors, Durchblick to have a better view of generators, Fernsprecher to view MPS logs,
and Build Script Notifier to remember to update build script dependencies.</p>
<p>Now the time comes to distribute your language to the users. Which plugins do you need to include in the final package
so that the consumers will be able to use the language?</p>
<p>The answer is: only grammar cells.</p>
<p>All the other plugins improve your &ldquo;working conditions&rdquo; by <em>enhancing the development environment</em>. Whether you used
those plugins or not, generating and compiling your language produces the same result. Your users do not need these
plugins to use your language.</p>
<p>With grammar cells it is a different story. This plugin is a <em>reusable library</em>. The language you write is tied to it
and will not work without the library available.</p>
<p>It is not important whether the language was developed with version X or Y of Durchblick or Fernsprecher. On the other
hand, knowing and using a specific version of grammar cells can be very important. Version Y may contain a fix for a
particular bug or a feature you want to use that is not part of version X.</p>
<p>Automatically updating the IDE-enhancement plugins is usually desirable. Automatically updating the libraries? Usually
not.</p>
<p>In the world of non-meta IDEs this distinction is quite clear: you get a JSON file plugin from JetBrains Marketplace
but you get Gson or Jackson JSON parser library from a Maven repository.</p>
<p>In the world of MPS this distinction is unfortunately less clear, and it is made worse by the fact that MPS-extensions
are available on JetBrains Marketplace.</p>
<p>I recommend you avoid using library plugins from the JetBrains Marketplace, except for initial small experiments or
demos (a single person trying out things on a single machine). As soon as you need to distribute your language to
others, even if it is just a proof of concept, consider setting up a Maven or Gradle build to download the specific
versions of libraries from a package repository. This investment will save you some headaches.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Making distinctions</title>
      <link>https://specificlanguages.com/posts/2022-01/21-making-distinctions/</link>
      <pubDate>Fri, 21 Jan 2022 08:53:10 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2022-01/21-making-distinctions/</guid>
      <description>&lt;p&gt;One of the most important skills for a language developer is &lt;em&gt;making distinctions&lt;/em&gt; between similar terms. This involves
several sub-skills:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understanding the difference between two similar terms. If a domain expert uses &lt;em&gt;parameter&lt;/em&gt; once and &lt;em&gt;configuration
variable&lt;/em&gt; next, are they the same thing or are they different?&lt;/li&gt;
&lt;li&gt;Using the proper terms in each situation. If a &lt;em&gt;parameter&lt;/em&gt; and a &lt;em&gt;configuration variable&lt;/em&gt; are indeed the same thing,
use only one of the terms consistently. If they are different, use the correct term each time.&lt;/li&gt;
&lt;li&gt;Realizing when the other side is not using the terms correctly and dealing with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why is it important? This ties in with one of the reasons why we develop languages in the first place: help our users
speed up their work by making fewer mistakes and spending less time correcting them. Misunderstandings about terms are a
major source of errors, both for our language users and for ourselves as language developers. At the same time,
misunderstandings are fairly easy to correct once you tune yourself to looking for them.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2022-01/21-making-distinctions/"><![CDATA[ <p>One of the most important skills for a language developer is <em>making distinctions</em> between similar terms. This involves
several sub-skills:</p>
<ul>
<li>Understanding the difference between two similar terms. If a domain expert uses <em>parameter</em> once and <em>configuration
variable</em> next, are they the same thing or are they different?</li>
<li>Using the proper terms in each situation. If a <em>parameter</em> and a <em>configuration variable</em> are indeed the same thing,
use only one of the terms consistently. If they are different, use the correct term each time.</li>
<li>Realizing when the other side is not using the terms correctly and dealing with it.</li>
</ul>
<p>Why is it important? This ties in with one of the reasons why we develop languages in the first place: help our users
speed up their work by making fewer mistakes and spending less time correcting them. Misunderstandings about terms are a
major source of errors, both for our language users and for ourselves as language developers. At the same time,
misunderstandings are fairly easy to correct once you tune yourself to looking for them.</p>
<p>How can one develop the skill of making distinctions? I believe it is mostly about strengthening your intuition. You
might get a feeling that something is &ldquo;a bit off&rdquo; in whatever you are hearing or reading. This feeling may be weak,
irrational and easy to dismiss. Instead, take it seriously and reflect on it. Try rephrasing what you read or hear in
your own words, see what terms you are inclined to use naturally, and if they are different from the original terms,
what is the difference in meaning?</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>MPS is not a (relational) database</title>
      <link>https://specificlanguages.com/posts/2022-01/12-mps-is-not-a-relational-database/</link>
      <pubDate>Wed, 12 Jan 2022 09:00:00 +0100</pubDate>
      <author>sergej@specificlanguages.com (Sergej Koščejev)</author>
      <guid>https://specificlanguages.com/posts/2022-01/12-mps-is-not-a-relational-database/</guid>
      <description>&lt;p&gt;From time to time I see people asking questions like &amp;ldquo;how can I make MPS remove all references to my thing after I
remove the thing&amp;rdquo;, or &amp;ldquo;how can I make MPS remove my thing after I remove all references to it&amp;rdquo;. This feels to me as if
the person wanted to use MPS as sort of a relational database. After all, in relational databases this question has an
easy answer: use foreign key constraints with cascading deletes.&lt;/p&gt;</description>
      <content:encoded xml:base="https://specificlanguages.com/posts/2022-01/12-mps-is-not-a-relational-database/"><![CDATA[ <p>From time to time I see people asking questions like &ldquo;how can I make MPS remove all references to my thing after I
remove the thing&rdquo;, or &ldquo;how can I make MPS remove my thing after I remove all references to it&rdquo;. This feels to me as if
the person wanted to use MPS as sort of a relational database. After all, in relational databases this question has an
easy answer: use foreign key constraints with cascading deletes.</p>
<p>Some modeling tools work like this, too. They manage a relational database of &ldquo;things&rdquo; and relationships between them
(often called a repository), and when you remove a thing, all relationships that refer to it are removed as well.</p>
<p>However, MPS is closer in spirit to an IDE (or perhaps to a NoSQL database). Your Java IDE does not remove a class after
you stopped using it in your code, nor does it remove all references to a class if you delete it.</p>
<p>A Java IDE provides <em>refactorings</em> and can search for <em>usages</em> of a given class and highlight unused program elements.
MPS can do both, too. But referential integrity is not something that MPS can provide out of the box.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
