Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.forth    |    Forth programmers eat a lot of Bratwurst    |    117,927 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 117,548 of 117,927    |
|    Anton Ertl to All    |
|    0 vs. translate-none    |
|    17 Sep 25 16:53:05    |
      From: anton@mips.complang.tuwien.ac.at              This posting is a more general reflection about designing types in       Forth; it just uses recognizers as example.              The original proposal for recognizers had R:FAIL as the result of a       recognizer that did not recognize the input. Later that was renamed       to NOTFOUND; then there was a proposal where 0 would be used instead,       and Bernd Paysan changed all the uses of NOTFOUND in Gforth to 0.       Finally, on last Thursday the committee decided to go with       TRANSLATE-NONE for that result.              Bernd Paysan thought that it would be easy to change back to a non-0       value for TRANSLATE-NONE, by looking at the patch that changed       NOTFOUND to 0. However, in the meantime there has been more work       done, so it's not so easy.              E.g., there was a word              ?FOUND ( x -- x )              that would throw -13 if x=0. This word was used both with the result       of recognizers and with nt|0 or xt|0. Fortunately, in this case the       cases were easy to recognize, and they are now addressed by two words:       ?REC-FOUND (for recognizer results) and ?FOUND (for x|0).              What do we learn from this? Merging two previously separate types       such that they are dealt with (partly) the same words (e.g., 0= in       this case) is easy, as is mixing two kinds of sand. Separating two       previously (partly) merged types to use type-specific words is a lot       more work.              You can fake it by defining 0 CONSTANT TRANSLATE-NONE, but then you       never know if your code ports to other systems where TRANSLATE-NONE is       non-zero. For now Gforth does it this way, but I don't expect that to       be the final stage.              Should we prefer to separate types or merge them? Both approaches       have advantages:              * With separate words for dealing with the types, we can easily find        all uses of that type and do something about it. E.g., a while ago        I changed the cs-item (control-flow stack item) in Gforth from three        to four cells. This was relatively easy because there are only a        few words in Gforth that deal with cs items.              * With a merged approach, we can use the same words for dealing with        several types, with further words building upon these words (instead        of having to define the further words n times for n types). But        that makes the separation problem even harder.              Overall, I think that the merged approach is preferable, but only if       you are sure that you will never need to separate the types (whether       due to a committee decision or because some new requirement means that       you have to change the representation of the type).              - anton       --       M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html       comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html        New standard: https://forth-standard.org/       EuroForth 2025 CFP: http://www.euroforth.org/ef25/cfp.html       EuroForth 2025 registration: https://euro.theforth.net/              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca