Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

It’s weird for sure. I was trying to give a best pitch based on my experiences and what engineers have told me over the years with an eye towards the HN audience. But they clearly could grow their pool of talent by opening up some.


Its “object” system was designed in the 1970s, as part of System/38. They decided to impose some limitations on generality - no inheritance, only IBM could define new classes. That could have been a justifiable engineering decision at the time, especially given how new OO was, and the fact that their design was already rather challenging given the limits of 1970s technology (and the market positioning of a “midrange” price point).

And maybe they originally intended to lift those limitations - but it never happened. And AS/400 (and now IBM i) was essentially “version 2” of System/38, with incompatible changes, but changes which were modest rather than expansive (e.g. increasing maximum object name length from 8 to 10 - I wonder why they bothered with such a small increase, why not 16 or 32?)


wild ass guess, they had two tag bytes(is the as/400 even a byte machine, perhaps it would be better to say two tag words) reserved and decided that they were never going to use them and it was a fairly trivial and safe update to merge them into the name field.


Turns out I'd garbled things in my memory. There was no change in max object name length from S/38 to AS/400 – both were 10 characters max. The change was actually from S/36 to AS/400, which went from 8 to 10 – but AS/400 is not a direct descendant of S/36, only of S/38. Apologies for the misinformation.

The biggest incompatibility between S/38 and AS/400 is still in the object name syntax, but not in the maximum length – rather, in how qualified names are written. In S/38, a qualified object name is of the form OBJECT.LIBRARY, whereas AS/400 changes it to LIBRARY/OBJECT. (A "library" is essentially what other platforms call a "directory", except it doesn't just contain files, actually any kind of object; and, there is no hierarchy, libraries cannot be nested – except for the special system library QSYS, which contains every other library).

The change in the separator from . to / was necessary for S/36 compatibility - unlike S/38, S/36 allowed dots in names, so for S/36 compatibility, dot was added to the allowed characters in object names. This meant dot could no longer be used to separate the object and library in a qualified name, so slash was used instead. The reversal of the order was not strictly necessary, but was likely motivated by the fact that it is more consistent with what most other major operating systems do (MVS dataset names; paths on Unix, DOS, OS/2 and Windows; OpenVMS; among others).


Minor correction: OpenVMS uses . not / as a path separator. / is for command switches.


I wasn’t saying OpenVMS uses slash. I was saying it puts the directory name before the file name instead of after it, as S/38 (effectively) does. (I also mentioned MVS dataset names, which use dot instead of slash as well.)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: