9 comments

  • kristopolous2 hours ago
    I swear I remember using this. I even remember the syntax. I was able to compile it and just start writing in it. I have no idea how I know this syntax.<p>Did early linux have this? Maybe netbsd?<p>I actually found it. It was on simtel: <a href="https:&#x2F;&#x2F;archive.org&#x2F;details&#x2F;Simtel20_Sept92" rel="nofollow">https:&#x2F;&#x2F;archive.org&#x2F;details&#x2F;Simtel20_Sept92</a><p>I must have gotten it from there. I would routinely get any thing Walnut Creek would make.<p>I also realized a couple years ago I could navigate EDLIN without help and knew how to use masm. Somehow I had forgotten what I know but my fingers did not.
  • dvdkon11 hours ago
    Nice find. This looks like the best introduction to the language in the repo: <a href="https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;gvanrossum&#x2F;abc-unix&#x2F;refs&#x2F;heads&#x2F;main&#x2F;doc&#x2F;abcintro.doc" rel="nofollow">https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;gvanrossum&#x2F;abc-unix&#x2F;refs&#x2F;h...</a>
    • nuancebydefault10 hours ago
      Wow 2 * 1000 without rounding errors, 40 years ago this must have been super impressive, since I find that quite a feat of today&#x27;s python.
      • nick__m9 hours ago
        2 * 1000 is 2000 ;)<p>I think you meant 2**1000<p>the syntax for formatting ate your star <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;formatdoc">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;formatdoc</a>
        • swores8 hours ago
          For anyone else who, like me a moment ago, doesn&#x27;t know the meaning of ** but is curious: it&#x27;s how many (but not all) programming languages express &quot;to the power of&quot;, aka 2**1000 = 2^1000
          • pansa26 hours ago
            &gt; <i>2**1000 = 2^1000</i><p>The reason for using `**` is that `^` is widely used for bitwise exclusive-or. So commonly `2**1000 != 2^1000`!
            • kragen4 hours ago
              I think Fortran used ** because EBCDIC didn&#x27;t have ^ or uparrow. ABC and Python followed Fortran rather than C on this point. units(1) supports both.
              • shawn_w3 hours ago
                C uses ^ for bitwise xor and a function for exponentiation, though.
            • swores3 hours ago
              Interesting, thanks!
        • nuancebydefault9 hours ago
          Oh that&#x27;s why i did not get any upvotes &#x2F;i
        • Lucasoato7 hours ago
          Wow, I didn&#x27;t know that you could write<p><pre><code> like this for code blocks</code></pre>
          • jockm6 hours ago
            It’s been around since at least occam, maybe longer
      • doug-moen4 hours ago
        Lisp has had arbitrary precision arithmetic since the early 1970s. So did dc on Unix, also in the early 1970s. ABC didn&#x27;t arrive until 1987.
      • aidenn03 hours ago
        <p><pre><code> Python 3.11.13 (main, Jun 3 2025, 18:38:25) [GCC 14.3.0] on linux Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information. &gt;&gt;&gt; 2**1000 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376 &gt;&gt;&gt; _&#x2F;2**999 2.0</code></pre>
  • mg2 hours ago
    The first example in the lanuage introduction (<a href="https:&#x2F;&#x2F;homepages.cwi.nl&#x2F;~steven&#x2F;abc&#x2F;" rel="nofollow">https:&#x2F;&#x2F;homepages.cwi.nl&#x2F;~steven&#x2F;abc&#x2F;</a>):<p><pre><code> HOW TO RETURN words document: PUT {} IN collection FOR line IN document: FOR word IN split line: IF word not.in collection: INSERT word IN collection RETURN collection </code></pre> In Python it would be:<p><pre><code> def words(document): collection = set() for line in document: for word in line.split(): if word not in collection: collection.add(word) return collection </code></pre> I kept the splitting by line and &quot;if word not in collection:&quot; in there even though they don&#x27;t have an impact on the outcome. I have the feeling that even in the original example they have only been put there to show the language constructs, not to do anything useful. If one wanted to optimize it, it could all be collapsed to just &quot;return set(text.split())&quot;, but that would not show off the language features.<p>ABC uses 225 chars, Python 218 chars. 3% less.<p>So one could say Python is 3% more efficient than ABC.
    • volemo1 hour ago
      “HOW TO RETURN” for something as common as “def” is crazy!
      • mg4 minutes ago
        Well, not as bad as something like<p><pre><code> public static function words(string $document): array { </code></pre> which some languages these days are coming up with.
  • zahlman11 hours ago
    Extremely cool. Thanks, GvR.<p>For my own language design I&#x27;ve wanted to introduce some of this ABC syntax back into Python. Mainly for unpacking data and doing index&#x2F;slice assignments; a lot of beginners seem to get tripped up because assignments in Python use the same syntax as mutations, so maybe it&#x27;s better to write e.g. `a[&#x27;b&#x27;] = c` like `set b = c in a`, or `update a with {&#x27;b&#x27;: c}`, or ... who knows, exactly.
    • eru5 hours ago
      I agree that Python would benefit from separating mutation and assignment.<p>Especially when you are dealing with nested functions. You&#x27;d get around the whole need for &#x27;global&#x27; and &#x27;nonlocal&#x27; declarations. (Though your linter might still ask you for them for clarity.)<p>As a minimal syntax change, I would propose using perhaps = for introduction of a variable (the common case) and := for an explicit mutation of an existing variable.<p>But you could also use `let . = ..` and `. = ..` like Rust does.
  • layer87 hours ago
    The use of “HOW TO” for defining subroutines is kinda neat. Though “HOW TO RETURN” for functions doesn’t quite hit the mark. “HOW TO OBTAIN” or “HOW TO SUPPLY” would work with the same number of characters.
  • ahartmetz11 hours ago
    Interesting, seems like Python is a strict improvement over ABC though many things are very similar. The PUT ... IN ... and INSERT ... IN ... syntax looks quite clunky and un-composable, at least the examples never do more than one (high-level) operation per line. Also, I guess GvR&#x27;s English wasn&#x27;t that good at the time - it should be have been INTO, right?
    • zahlman11 hours ago
      &quot;in&quot; vs &quot;into&quot; is often just a matter of how casually you&#x27;re speaking.<p>The same sort of syntax was used in HyperTalk (with &quot;into&quot;): <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;HyperTalk#Description" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;HyperTalk#Description</a> I wouldn&#x27;t be surprised to hear of it in AppleScript, either, although I can&#x27;t recall.
  • dec0dedab0de10 hours ago
    The year says 91, but it looks like it was recently pushed to github, which is a notable event on its own.
  • nurettin4 hours ago
    It actually looks surprisingly usable <a href="https:&#x2F;&#x2F;homepages.cwi.nl&#x2F;~steven&#x2F;abc&#x2F;types.html" rel="nofollow">https:&#x2F;&#x2F;homepages.cwi.nl&#x2F;~steven&#x2F;abc&#x2F;types.html</a>
  • perrohunter11 hours ago
    Where is the GIL in this?
    • eru4 hours ago
      You only need the GIL in the first place, when you are doing multi-threading.<p>Python only got its own GIL in version 1.5 of CPython.