{"id":1421,"date":"2011-01-12T23:30:17","date_gmt":"2011-01-12T22:30:17","guid":{"rendered":"http:\/\/www.gamlor.info\/wordpress\/?p=1421"},"modified":"2022-03-15T16:30:59","modified_gmt":"2022-03-15T15:30:59","slug":"comparing-language-workbenches","status":"publish","type":"post","link":"https:\/\/www.gamlor.info\/wordpress\/2011\/01\/comparing-language-workbenches\/","title":{"rendered":"Comparing Language Workbenches"},"content":{"rendered":"<div id=\"attachment_1423\" style=\"width: 301px\" class=\"wp-caption alignright\"><a href=\"https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/language-workbenches.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1423\" class=\"size-medium wp-image-1423\" title=\"language-workbenches\" src=\"https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/language-workbenches-291x300.png\" alt=\"Language Workbenches\" width=\"291\" height=\"300\" srcset=\"https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/language-workbenches-291x300.png 291w, https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/language-workbenches-995x1024.png 995w, https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/language-workbenches.png 1024w\" sizes=\"(max-width: 291px) 100vw, 291px\" \/><\/a><p id=\"caption-attachment-1423\" class=\"wp-caption-text\">Language Workbenches<\/p><\/div>\n<p>For the \u2018Program Analysis and Transformation\u2019 seminar I compared three <a href=\"http:\/\/martinfowler.com\/articles\/languageWorkbench.html\">language workbenches<\/a>, namely <a href=\"http:\/\/www.jetbrains.com\/mps\/\">Jetbrains Meta Programming System (MPS)<\/a>, <a href=\"http:\/\/strategoxt.org\/Spoofax\">Spoofax<\/a> and <a href=\"http:\/\/www.actifsource.com\/\">Actifsource<\/a> (Although Actifsoure is not a language workbench but rather model driven development tools).<\/p>\n<p>This post is a short overview over the key strengths and weaknesses of these three tools. The more complete analysis with proper introduction of the tools, explanation of how they work and more detailed comparison can be read in <a href=\"https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/ComparingLanguageWorkbenches-Roman-Stoffel-2010-12-23.pdf\">my paper here<\/a>.<\/p>\n<h2>MPS<\/h2>\n<h3>Strengths<\/h3>\n<ul>\n<li>Excellent IDE support for the created languages. When you have built your language you already have a good IDE for it. But you can add more, like refactoring&#8217;s, code flow analysis etc.<\/li>\n<li>You cannot enter code which is not part of your language.<\/li>\n<\/ul>\n<ul>\n<li>It\u2019s easy to navigate through code. Even better, you can look up at anytime how a domain specific language is implemented, even for the MPS languages. This way you can learn from existing languages implementations.<\/li>\n<\/ul>\n<li>\n<ul>\n<li>It has module support: This allows you to include existing languages into your project. For example you can include the MPS \u2018Java\u2019-language. Later on you can include extension to that language, like closures etc. Or extend it yourself.<\/li>\n<\/ul>\n<\/li>\n<h3>Weaknesses<\/h3>\n<ul>\n<li>MPS is not text based and your code is not stored in text files. This creates a lot of issues. You cannot use text tools like text-editors, diff-tools, etc. Event worse, you cannot copy and paste code around etc. You need to go through extra steps to talk to external libraries and system.<\/li>\n<li>MPS is a standalone tool. It\u2019s not an Eclipse or IntelliJ plug-in. Therefore you cannot use and mix it with other tools.<\/li>\n<\/ul>\n<h2>Spoofax<\/h2>\n<h3>Strengths<\/h3>\n<ul>\n<li>Everything is text bases, no special files. It uses a classical approach with grammar definition and transformation rules to implement domain specific languages.<\/li>\n<li>The same transformation language is used for different purposes, like translating the domain specific language to the target platforms, for code completion, for reference lookups, error detection etc.<\/li>\n<li>Spoofax is an Eclipse plug-in. And you can export your domain specific language with the IDE support as Eclipse plug-in.<\/li>\n<\/ul>\n<h3>Weaknesses<\/h3>\n<ul>\n<li>For advances IDE features like refactoring you have to fall back to the Eclipse API\u2019s. Spoofax doesn\u2019t have direct support for such things.<\/li>\n<li>The IDE support for its own languages is quite disappointing. This also includes the navigation through the code.<\/li>\n<\/ul>\n<h2>Actifsource<\/h2>\n<p>Note that Actifsoure is not a language workbench, therefore it\u2019s not really comparable to the other two tools.<\/p>\n<h3>Strengths<\/h3>\n<ul>\n<li>Much easier to learn than the other two tools. Mainly because it only allows UML to model your programs.<\/li>\n<li>You can only enter elements which are part of your UML-dialect.<\/li>\n<li>It runs on Eclipse, so you can use and combine it with other tools.<\/li>\n<\/ul>\n<h3>Weaknesses<\/h3>\n<ul>\n<li>It only supports UML as modeling language.<\/li>\n<li>The models are not text based. Again you cannot use you\u2019re text based tools like diff-tools on it.<\/li>\n<\/ul>\n<h2>More more more\u2026<\/h2>\n<p><a href=\"https:\/\/www.gamlor.info\/wordpress\/wp-content\/uploads\/2011\/01\/ComparingLanguageWorkbenches-Roman-Stoffel-2010-12-23.pdf\">Read my paper <\/a>for a more complete comparison. Christopher Guntli also analyzed two other language workbenches Xtext and EMFText. You can find his paper <a href=\"http:\/\/wiki.ifs.hsr.ch\/SemProgAnTr\/ChristopherGuntli\">here<\/a>. All the publications of the seminar can be found <a href=\"http:\/\/wiki.ifs.hsr.ch\/SemProgAnTr\/PublicInvitationHS10\">here<\/a>.<\/p>\n<h2>Update.<\/h2>\n<p>Take a look at <a href=\"https:\/\/www.gamlor.info\/wordpress\/2011\/01\/comparing-language-workbenches\/#comment-23146\">the comments <\/a>for some clarifications about Actifsource and MPS:<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For the \u2018Program Analysis and Transformation\u2019 seminar I compared three language workbenches, namely Jetbrains Meta Programming System (MPS), Spoofax and Actifsource (Although Actifsoure is not a language workbench but rather&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[17,187,19],"tags":[208,185,204,206,205,207],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/posts\/1421"}],"collection":[{"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/comments?post=1421"}],"version-history":[{"count":6,"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/posts\/1421\/revisions"}],"predecessor-version":[{"id":3935,"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/posts\/1421\/revisions\/3935"}],"wp:attachment":[{"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/media?parent=1421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/categories?post=1421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gamlor.info\/wordpress\/wp-json\/wp\/v2\/tags?post=1421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}