<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: John Didion</title>
    <description>The latest articles on DEV Community by John Didion (@jdidion).</description>
    <link>https://dev.to/jdidion</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1213726%2F044008b2-ac53-45d6-8322-3b1c2ea2af21.jpeg</url>
      <title>DEV Community: John Didion</title>
      <link>https://dev.to/jdidion</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jdidion"/>
    <language>en</language>
    <item>
      <title>Announcing WDL 1.1.1</title>
      <dc:creator>John Didion</dc:creator>
      <pubDate>Wed, 06 Dec 2023 17:58:35 +0000</pubDate>
      <link>https://dev.to/openwdl/announcing-wdl-111-ccj</link>
      <guid>https://dev.to/openwdl/announcing-wdl-111-ccj</guid>
      <description>&lt;p&gt;The &lt;a href="https://openwdl.org/" rel="noopener noreferrer"&gt;OpenWDL&lt;/a&gt; community is pleased to announce the release of &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md" rel="noopener noreferrer"&gt;Workflow Description Language (WDL) 1.1.1&lt;/a&gt;! This post highlights the most important changes in this release.&lt;/p&gt;

&lt;h2&gt;
  
  
  About WDL
&lt;/h2&gt;

&lt;p&gt;If you're new to WDL, it is an open standard for describing data processing workflows with a human-readable and writeable syntax. It is designed for accessibility, portability, and efficiency. There are several &lt;a href="https://github.com/openwdl/wdl/tree/wdl-1.1#execution-engines-and-platforms" rel="noopener noreferrer"&gt;implementations&lt;/a&gt; to choose from that run in a variety of environments, including HPC systems and cloud platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new?
&lt;/h2&gt;

&lt;p&gt;This patch release addresses many issues with the clarity of the specification that have been raised by the community, and also adds some improvements to its readability and utility. Note that this release does &lt;em&gt;not&lt;/em&gt; introduce any new features or change any existing functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example or Test Case? Why Not Both?
&lt;/h3&gt;

&lt;p&gt;The biggest improvement introduced in this release is to the examples. Every example has been reviewed (and updated if necessary) to ensure that it is valid, executable WDL. In addition, nearly every example has been converted to a &lt;a href="https://github.com/openwdl/wdl-tests/blob/main/docs/MarkdownTests.md" rel="noopener noreferrer"&gt;standardized format&lt;/a&gt; that enables it to be used as a test case. If you see an arrow (►) next to the title of an example, you can click it to view inputs that can be used to run the example, as well as the expected outputs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuunb0rmmnrx16co71wz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuunb0rmmnrx16co71wz5.png" alt="An example that is also a test case"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We invite the community to contribute additional test cases to the &lt;a href="https://github.com/openwdl/wdl-tests" rel="noopener noreferrer"&gt;WDL Tests&lt;/a&gt; repository. Our eventual goal is to curate the specification-derived and the contributed tests into a compliance suite that can be used to validate implementations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hidden Types
&lt;/h3&gt;

&lt;p&gt;WDL is a strongly typed language - every variable, function parameter, and return value has a &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#types" rel="noopener noreferrer"&gt;type&lt;/a&gt;, and implementations perform static analysis to ensure that assigned values are of the correct type. However, the WDL type system has some &lt;a href="https://github.com/openwdl/wdl/issues/373" rel="noopener noreferrer"&gt;quirks and inconsistencies&lt;/a&gt; that the community has been working to address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#hidden-types" rel="noopener noreferrer"&gt;Hidden Types&lt;/a&gt; are a new concept added in this release to better explain some existing behavior that many users have found confusing. A hidden type is one that may only be instantiated by the execution engine, and cannot be used in a declaration within a WDL file.&lt;/p&gt;

&lt;p&gt;Currently, there is only one hidden type, &lt;code&gt;Union&lt;/code&gt;, that represents a value that may have any one of several concrete types. A &lt;code&gt;Union&lt;/code&gt; value must always be coerced to a concrete type. There are two places where the &lt;code&gt;Union&lt;/code&gt; type is used:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It is the type of the special &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#optional-types-and-none" rel="noopener noreferrer"&gt;&lt;code&gt;None&lt;/code&gt;&lt;/a&gt; value, which can be assigned to an &lt;code&gt;Optional&lt;/code&gt; of any type.&lt;/li&gt;
&lt;li&gt;It is the return type of the &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#read_json" rel="noopener noreferrer"&gt;&lt;code&gt;read_json&lt;/code&gt;&lt;/a&gt; standard library function, which returns a different type of value depending on the contents of the JSON file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the next major version of WDL (2.0), the &lt;code&gt;Object&lt;/code&gt; type will also become hidden. Previously, the &lt;code&gt;Object&lt;/code&gt; type - as well as all functions that took an &lt;code&gt;Object&lt;/code&gt; parameter and/or had an &lt;code&gt;Object&lt;/code&gt; return type - were marked as deprecated. Since an &lt;code&gt;Object&lt;/code&gt;'s contents are determined at runtime, it is opaque to static analysis. It is better to instead use &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#custom-types-structs" rel="noopener noreferrer"&gt;structs&lt;/a&gt; in which the names and types of members are declared explicitly. However, we came to recognize that &lt;code&gt;Object&lt;/code&gt; and the related standard library functions still offers utility. Thus, in WDL 1.1.1, those standard library functions have been "un-deprecated" and will remain in the standard library going forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  A More Organized Standard Library
&lt;/h3&gt;

&lt;p&gt;WDL has a &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#standard-library" rel="noopener noreferrer"&gt;standard library&lt;/a&gt; of nearly 50 functions to perform some of the most commonly needed operations in data processing workflows. Previously, the specification simply presented all of these functions in a big list without much rhyme or reason to its organization, and it was difficult to find the right function if you didn't already know its name. In WDL 1.1.1, the functions have been ordered by argument type to make it easier to find what you need.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Branch for Every Version
&lt;/h3&gt;

&lt;p&gt;In addition to specification changes, the organization of the GitHub repository is also changing. The current version of the repository (the &lt;code&gt;main&lt;/code&gt; branch, also tagged as &lt;a href="https://github.com/openwdl/wdl/tree/legacy" rel="noopener noreferrer"&gt;&lt;code&gt;legacy&lt;/code&gt;&lt;/a&gt;) is now read-only. Going forward, each version of the specification will have it's own permanent branch (beginning with &lt;a href="https://github.com/openwdl/wdl/tree/wdl-1.1" rel="noopener noreferrer"&gt;&lt;code&gt;wdl-1.1&lt;/code&gt;&lt;/a&gt;). On GitHub, the default branch (the one you see when you go to &lt;a href="https://github.com/openwdl/wdl" rel="noopener noreferrer"&gt;&lt;code&gt;https://github.com/openwdl/wdl&lt;/code&gt;&lt;/a&gt;) will always be set to the branch for the current version of the specification.&lt;/p&gt;

&lt;p&gt;If you compare the legacy and current branches, you'll notice that the organization of files and directories has also changed. Some folders (&lt;code&gt;highlighters&lt;/code&gt;, &lt;code&gt;runners&lt;/code&gt;, &lt;code&gt;scripts&lt;/code&gt;) were largely vestigial and have been removed completely, with any still-relevant content moved to the &lt;a href="https://github.com/openwdl/wdl/blob/wdl-1.1/README.md" rel="noopener noreferrer"&gt;&lt;code&gt;README&lt;/code&gt;&lt;/a&gt;. The grammars and parsers now have &lt;a href="https://github.com/openwdl/wdl-parsers" rel="noopener noreferrer"&gt;their own repository&lt;/a&gt;. And there is no longer a &lt;code&gt;versions&lt;/code&gt; directory; instead, each branch is specific to a single version of the specification, which lives in the root directory (older versions of the specification are preserved in the &lt;code&gt;main&lt;/code&gt; branch).&lt;/p&gt;

&lt;p&gt;These changes to the repository have implications for linking and for submitting pull requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The WDL community is already hard at work on &lt;a href="https://github.com/openwdl/wdl/discussions/473" rel="noopener noreferrer"&gt;WDL 1.2&lt;/a&gt;, which is planned for release in 2024. Importantly, this release includes all non-breaking changes from the development version of the specification. Stay tuned for another post highlighting those upcoming changes.&lt;/p&gt;

&lt;p&gt;The community is also working on &lt;a href="https://github.com/openwdl/wdl/blob/main/versions/development/SPEC.md" rel="noopener noreferrer"&gt;WDL 2.0 (also called &lt;code&gt;development&lt;/code&gt;)&lt;/a&gt;. This is the next major version of the specification and will introduce some breaking changes intended to improve the language for the long-term. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reach out!
&lt;/h2&gt;

&lt;p&gt;The WDL community depends on your involvement to thrive. You are encouraged to ask questions, help other users, and make contributions where you can. Interactions occur primarily on &lt;a href="https://github.com/openwdl/wdl" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and &lt;a href="https://join.slack.com/t/openwdl/shared_invite/zt-ctmj4mhf-cFBNxIiZYs6SY9HgM9UAVw" rel="noopener noreferrer"&gt;Slack&lt;/a&gt;. Please see the &lt;a href="https://github.com/openwdl/wdl/tree/wdl-1.1#community-and-support" rel="noopener noreferrer"&gt;README&lt;/a&gt; for the full list of community resources.&lt;/p&gt;

</description>
      <category>wdl</category>
      <category>bioinformatics</category>
      <category>workflows</category>
    </item>
  </channel>
</rss>
