The ABS Programing Language
Hello. Author of Next Generation Shell [1] here. I&#x27;ve skimmed ABS documentation and was surprised by the amount of similarities in thinking and reasoning between ABS and Next Generation Shell. Differences that popped into my head in limited amount of time follow:<p>* ABS has CLI and NGS does not <i>yet</i>, CLI of NGS will be written in NGS itself, so it takes time. The CLI in NGS will be radically different [3].<p>* ABS runs on Windows.<p>* ABS has decorators, NGS does not <i>yet</i>, still thinking how to do it right and more generic.<p>* ABS has some functions that NGS doesn&#x27;t and vice versa.<p>* Found inconsistently named functions in ABS (json() vs tsv() - json() parses JSON while tsv() generates tsv); given more eyeballs on NGS, such inconsistencies should come up.<p>* NGS has user defined types.<p>* NGS has many predefined types, ABS has few.<p>* NGS has multi-methods and multiple dispatch.<p>* NGS has exceptions.<p>* NGS has (partial but already very usable implementation of) Universal Pattern Matching [2]<p>Translating example in the docs:<p><pre><code>    # ABS

    res = `curl -s &#x27;https:&#x2F;&#x2F;api.ipify.org?format=json&#x27;`

    if !res.ok {
      exit(1, &quot;An error occurred: %s&quot;.fmt(res))
    }

    ip = res.json().ip
    total = ip.split(&quot;.&quot;).map(int).sum()
    if total &gt; 100 {
        echo(&quot;The sum of [$ip] is a large number, $total.&quot;)
    }

    # NGS

    ip = ``curl -s &#x27;https:&#x2F;&#x2F;api.ipify.org?format=json&#x27;``.ip
    total = ip.split(&#x27;.&#x27;).map(Int).sum()
    if total &gt; 100 {
        echo(&quot;The sum of [$ip] is a large number, $total.&quot;)
    }
</code></pre>
In NGS the double backtick syntax above runs external program and parses the output. The check of `ok` is not needed because on error exception will be thrown.<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;ngs-lang&#x2F;ngs" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ngs-lang&#x2F;ngs</a><p>[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;ngs-lang&#x2F;ngs&#x2F;wiki&#x2F;UPM-Design" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ngs-lang&#x2F;ngs&#x2F;wiki&#x2F;UPM-Design</a><p>[3] <a href="https:&#x2F;&#x2F;github.com&#x2F;ngs-lang&#x2F;ngs&#x2F;wiki&#x2F;UI-Design" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ngs-lang&#x2F;ngs&#x2F;wiki&#x2F;UI-Design</a>