• Recognizer proposal

    From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Mon Feb 9 07:49:44 2026
    From Newsgroup: comp.lang.forth

    A more fleshed-out version of the current recognizer proposal is
    online: <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it). OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective. In either case, please report any
    feedback by clicking on the Reply button on the web page above.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Tue Feb 10 13:36:05 2026
    From Newsgroup: comp.lang.forth

    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online: <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it). OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective. In either case, please report any feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because this is
    a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed? What
    should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for
    plugging in functionality at various places in the text interpreter."

    To begin with: this is incorrect. If I define this word:

    : f%
    bl word count >float 0= abort" Bad float"
    state @ if postpone fliteral then
    ; immediate

    Floating point numbers are recognized without a problem. So - the claim
    one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use ForthrCOs.
    Every time you see a unique interpreter, it implies that there is
    something particularly awkward about the problem. And that is almost
    never the case."

    Which is the case here as well. You can easily extend the language
    without changing the interpreter.

    "If you write your own interpreter, the interpreter is almost certainly
    the most
    complex, elaborate part of your entire application. You have switched from solving a problem to writing an interpreter."

    It is obvious you needs LOTS of code to make this work. Simply because
    it doesn't come with any type information. It's clear that "F%" carries
    an implicit type. But a recognizer needs code to recognize the type it
    is supposed to convert. You may it is trivial, but it is code
    nontheless. Code that has to be designed, implemented, tested and
    maintained. Such code is not required with "F%".

    Or - as TF puts it - "To simplify, take advantage of whatrCOs available."

    Let's delve in a little deeper: "The difficulty of adding to the text interpreter may also have led to missed opportunities: E.g., for string literals the standard did not task the text interpreter with recognizing
    them, but instead introduced S" and S\" (and their complicated
    definition with interpretation and compilation semantics)."

    This is simply not true - and a disingenuous argument at best. Let's
    take another, related example:

    : .( [char] ) parse type ; immediate

    There is very little complexity here. So, the complexity is not in the
    PARSING of this word. The complexity lies in the (temporary) allocation
    of this word - and the lack of an interpreted version like "S(" - which
    would virtually completely eliminate "their complicated definition with interpretation and compilation semantics."

    In other words, the complexity doesn't lie within the problem itself,
    but in the atrocious design of the S" word - which had to be patched
    later on in order to function for the FILE wordset.

    Finally, in how far does this proposal fix the aforementioned problems
    of S"? It will still have to be allocated somewhere - and I don't see
    how it will alleviate "their complicated definition with interpretation
    and compilation semantics." They will only get worse, because one will
    have to add the recognition code.. Duh!

    Let's finish with some TF advise: "Anticipate things-that-may-change by organizing information, NOT by adding complexity. Add complexity only as necessary to make the current iteration work."

    It may be clear that this proposal only ADDS complexity. It doesn't
    alleviate the problem AT ALL. It makes it worse. Much worse. The only
    thing it does is add some "syntactic sugar" to those C programmers that couldn't live without locals.

    Now - you wan't hear me say that there wasn't some history here. Chuck
    should have refrained from adding double numbers to the interpreter.
    "D%" would have been fine. And sure - I can understand a dot in a number
    is a great self-documenting way to add "fractions" to fixed point number calculations.

    But from an architectural viewpoint, it is WRONG. Because it's a
    slippery slope as complex numbers, floating point numbers (IEEE, single precision, double precision - yeah, they come in different tastes) have proven. Single numbers - I get that. Forth would be awkward to work with
    when you need a thing like "S%" every single line.

    But this.. This is not the way to go.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From jkn@jkn+nin@nicorp.co.uk to comp.lang.forth on Tue Feb 10 17:48:15 2026
    From Newsgroup: comp.lang.forth

    On 10/02/2026 12:36, Hans Bezemer wrote:
    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online:
    <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it).-a OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective.-a In either case, please report any
    feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because this is
    a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed? What should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for
    plugging in functionality at various places in the text interpreter."

    To begin with: this is incorrect. If I define this word:

    : f%
    -a bl word count >float 0= abort" Bad float"
    -a state @ if postpone fliteral then
    ; immediate

    Floating point numbers are recognized without a problem. So - the claim
    one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use ForthrCOs. Every time you see a unique interpreter, it implies that there is
    something particularly awkward about the problem. And that is almost
    never the case."

    Which is the case here as well. You can easily extend the language
    without changing the interpreter.

    "If you write your own interpreter, the interpreter is almost certainly
    the most
    complex, elaborate part of your entire application. You have switched from solving a problem to writing an interpreter."

    It is obvious you needs LOTS of code to make this work. Simply because
    it doesn't come with any type information. It's clear that "F%" carries
    an implicit type. But a recognizer needs code to recognize the type it
    is supposed to convert. You may it is trivial, but it is code
    nontheless. Code that has to be designed, implemented, tested and maintained. Such code is not required with "F%".

    Or - as TF puts it - "To simplify, take advantage of whatrCOs available."

    Let's delve in a little deeper: "The difficulty of adding to the text interpreter may also have led to missed opportunities: E.g., for string literals the standard did not task the text interpreter with recognizing them, but instead introduced S" and S\" (and their complicated
    definition with interpretation and compilation semantics)."

    This is simply not true - and a disingenuous argument at best. Let's
    take another, related example:

    : .( [char] ) parse type ; immediate

    There is very little complexity here. So, the complexity is not in the PARSING of this word. The complexity lies in the (temporary) allocation
    of this word - and the lack of an interpreted version like "S(" - which would virtually completely eliminate "their complicated definition with interpretation and compilation semantics."

    In other words, the complexity doesn't lie within the problem itself,
    but in the atrocious design of the S" word - which had to be patched
    later on in order to function for the FILE wordset.

    Finally, in how far does this proposal fix the aforementioned problems
    of S"? It will still have to be allocated somewhere - and I don't see
    how it will alleviate "their complicated definition with interpretation
    and compilation semantics." They will only get worse, because one will
    have to add the recognition code.. Duh!

    Let's finish with some TF advise: "Anticipate things-that-may-change by organizing information, NOT by adding complexity. Add complexity only as necessary to make the current iteration work."

    It may be clear that this proposal only ADDS complexity. It doesn't alleviate the problem AT ALL. It makes it worse. Much worse. The only
    thing it does is add some "syntactic sugar" to those C programmers that couldn't live without locals.

    Now - you wan't hear me say that there wasn't some history here. Chuck should have refrained from adding double numbers to the interpreter.
    "D%" would have been fine. And sure - I can understand a dot in a number
    is a great self-documenting way to add "fractions" to fixed point number calculations.

    But from an architectural viewpoint, it is WRONG. Because it's a
    slippery slope as complex numbers, floating point numbers (IEEE, single precision, double precision - yeah, they come in different tastes) have proven. Single numbers - I get that. Forth would be awkward to work with when you need a thing like "S%" every single line.

    But this.. This is not the way to go.

    Hans Bezemer

    I have no skin in this game at all - I am basically an observer of both
    the language, and this newsgroup. But it seems strange to me that in a language that is so self-describedly flexible as Forth, the operation of
    the inner interpreter should not itself be open to flexibility.

    J^n

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Wed Feb 11 11:21:31 2026
    From Newsgroup: comp.lang.forth

    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention. Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94. Typically integration was achieved through hooks the system designer
    had purposely built into system. Forth-94 had already defined how the forth interpreter should handle fp numbers. Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable. It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history. Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it. It was 'a solution in search of a problem'. From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution. Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers. System-specific hooks remain.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From jkn@jkn+nin@nicorp.co.uk to comp.lang.forth on Wed Feb 11 09:05:03 2026
    From Newsgroup: comp.lang.forth

    On 11/02/2026 00:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so >> self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention. Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94. Typically integration was achieved through hooks the system designer
    had purposely built into system. Forth-94 had already defined how the forth interpreter should handle fp numbers. Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable. It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history. Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it. It was 'a solution in search of a problem'. From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution. Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers. System-specific hooks remain.


    From that came
    the idea that forth should be able to parse *anything* - however
    unlikely or little
    used.

    I was a bit surprised that "a space delimits 'symbols'" has not been
    made more flexible...

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Wed Feb 11 12:29:38 2026
    From Newsgroup: comp.lang.forth

    In article <nnd$1c958fc8$24a55a72@293ae8f8b50e0c83>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online:
    <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it). OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective. In either case, please report any
    feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because this is
    a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed? What
    should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for
    plugging in functionality at various places in the text interpreter."

    To begin with: this is incorrect. If I define this word:

    : f%
    bl word count >float 0= abort" Bad float"
    state @ if postpone fliteral then
    ; immediate


    Adding the simple prefix qualifier

    : f% .. ; IMMEDIATE PREFIX

    the floating point denotation does away the parsing objection.
    f%1.0E9 is a fp number, working in interpreter and compilation mode.

    Now it is insane orthogonality that you have to postpone these,
    (i.e. POSTPONE F%1.0E9 ).
    : ... ... [ F%1.0E9 ] postpone fliteral ... ;
    is accepted practice since ages.

    The ciforth solution is slightly more complicated, where the
    prefixes 0 1 2 .. 9 decide for themselves if the number is
    single, double or fp. This is a slight step up from
    discriminating between single and double.
    1 single
    2. double
    2E0 fp

    This eliminates the number branch in the lowest level interpreting,
    (in ciforth this is INTERPRET) effectively *simplifying* the Forth
    engine.

    Floating point numbers are recognized without a problem. So - the claim
    one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use ForthrCOs. >Every time you see a unique interpreter, it implies that there is
    something particularly awkward about the problem. And that is almost
    never the case."

    Hear hear.

    Recognizers are complexifying and uglifying Forth, going the route from
    the 70' to revector number.

    Note that the PREFIX addition to ciforth is a nett simplification of
    Forth.


    Hans Bezemer

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Wed Feb 11 12:46:17 2026
    From Newsgroup: comp.lang.forth

    In article <mv2v1vFqfu2U1@mid.individual.net>,
    jkn <jkn+nin@nicorp.co.uk> wrote:
    On 11/02/2026 00:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so
    self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention. Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94. Typically integration was achieved through hooks the system designer
    had purposely built into system. Forth-94 had already defined how the forth >> interpreter should handle fp numbers. Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable. It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history.
    Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it. It was 'a solution in search of a problem'. From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution. Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers. System-specific hooks remain.


    From that came
    the idea that forth should be able to parse *anything* - however
    unlikely or little
    used.

    I was a bit surprised that "a space delimits 'symbols'" has not been
    made more flexible...


    PREFIX addresses the problem that holding to the dogma about space delimiters present.

    In ciforth
    "

    handles any situation :
    ..... "########################## .....................

    including `` " a " '' which is a 3 letter string.

    " is just a word that sits in the basic wordlist,
    subject to regular search rules, e.g. observing wordlists search order.
    It is found irrespective of spaces in the #.
    The #-definition could be changed, omitted, hidden whatever.
    It can be overwritten as usual, put in a wordlist etc.

    Hiding " doesn't prevent S" to work.

    Totally separate from whatever other prefixes you may define.

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Wed Feb 11 13:36:13 2026
    From Newsgroup: comp.lang.forth

    On 11-02-2026 10:05, jkn wrote:
    On 11/02/2026 00:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of
    both the language,
    and this newsgroup. But it seems strange to me that in a language
    that is so
    self-describedly flexible as Forth, the operation of the inner
    interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention.-a Each forth, it was noted, had
    its own way
    of integrating floating-point into the system - fp being an 'optional
    extension'
    of Forth-94.-a Typically integration was achieved through hooks the
    system designer
    had purposely built into system.-a Forth-94 had already defined how the
    forth
    interpreter should handle fp numbers.-a Parsing words F# etc were not
    an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the
    interpreter could
    be made portable.-a It caught the imagination of sufficient users (in
    forth there's
    little distinction between user and system-designer) and the rest is
    history.
    Recognizers were sufficiently complicated prompting more justification
    than fp (1)
    in order to sell it.-a It was 'a solution in search of a problem'.
    From that came
    the idea that forth should be able to parse *anything* - however
    unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never
    a complete
    solution.-a Integrating fp into a system often requires more than
    simply making the
    interpreter recognize fp numbers.-a System-specific hooks remain.


    From that came
    the idea that forth should be able to parse *anything* - however
    unlikely or little
    used.

    I was a bit surprised that "a space delimits 'symbols'" has not been
    made more flexible...


    IMHO it has. PARSE allows you to parse for any delimiter. Some have
    PARSE-WORD that allows skipping leading delimiters. There is also a
    dedicated white-space parser called PARSE-NAME.

    4tH has a word called OMIT which only skips leading delimiters without
    parsing anything.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Wed Feb 11 13:54:09 2026
    From Newsgroup: comp.lang.forth

    On 10-02-2026 18:48, jkn wrote:
    On 10/02/2026 12:36, Hans Bezemer wrote:
    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online:
    <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it).-a OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective.-a In either case, please report any
    feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because this
    is a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed? What
    should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for
    plugging in functionality at various places in the text interpreter."

    To begin with: this is incorrect. If I define this word:

    : f%
    -a-a bl word count >float 0= abort" Bad float"
    -a-a state @ if postpone fliteral then
    ; immediate

    Floating point numbers are recognized without a problem. So - the
    claim one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use ForthrCOs.
    Every time you see a unique interpreter, it implies that there is
    something particularly awkward about the problem. And that is almost
    never the case."

    Which is the case here as well. You can easily extend the language
    without changing the interpreter.

    "If you write your own interpreter, the interpreter is almost
    certainly the most
    complex, elaborate part of your entire application. You have switched
    from
    solving a problem to writing an interpreter."

    It is obvious you needs LOTS of code to make this work. Simply because
    it doesn't come with any type information. It's clear that "F%"
    carries an implicit type. But a recognizer needs code to recognize the
    type it is supposed to convert. You may it is trivial, but it is code
    nontheless. Code that has to be designed, implemented, tested and
    maintained. Such code is not required with "F%".

    Or - as TF puts it - "To simplify, take advantage of whatrCOs available."

    Let's delve in a little deeper: "The difficulty of adding to the text
    interpreter may also have led to missed opportunities: E.g., for
    string literals the standard did not task the text interpreter with
    recognizing them, but instead introduced S" and S\" (and their
    complicated definition with interpretation and compilation semantics)."

    This is simply not true - and a disingenuous argument at best. Let's
    take another, related example:

    : .( [char] ) parse type ; immediate

    There is very little complexity here. So, the complexity is not in the
    PARSING of this word. The complexity lies in the (temporary)
    allocation of this word - and the lack of an interpreted version like
    "S(" - which would virtually completely eliminate "their complicated
    definition with interpretation and compilation semantics."

    In other words, the complexity doesn't lie within the problem itself,
    but in the atrocious design of the S" word - which had to be patched
    later on in order to function for the FILE wordset.

    Finally, in how far does this proposal fix the aforementioned problems
    of S"? It will still have to be allocated somewhere - and I don't see
    how it will alleviate "their complicated definition with
    interpretation and compilation semantics." They will only get worse,
    because one will have to add the recognition code.. Duh!

    Let's finish with some TF advise: "Anticipate things-that-may-change
    by organizing information, NOT by adding complexity. Add complexity
    only as necessary to make the current iteration work."

    It may be clear that this proposal only ADDS complexity. It doesn't
    alleviate the problem AT ALL. It makes it worse. Much worse. The only
    thing it does is add some "syntactic sugar" to those C programmers
    that couldn't live without locals.

    Now - you wan't hear me say that there wasn't some history here. Chuck
    should have refrained from adding double numbers to the interpreter.
    "D%" would have been fine. And sure - I can understand a dot in a
    number is a great self-documenting way to add "fractions" to fixed
    point number calculations.

    But from an architectural viewpoint, it is WRONG. Because it's a
    slippery slope as complex numbers, floating point numbers (IEEE,
    single precision, double precision - yeah, they come in different
    tastes) have proven. Single numbers - I get that. Forth would be
    awkward to work with when you need a thing like "S%" every single line.

    But this.. This is not the way to go.

    Hans Bezemer

    I have no skin in this game at all - I am basically an observer of both
    the language, and this newsgroup. But it seems strange to me that in a language that is so self-describedly flexible as Forth, the operation of
    the inner interpreter should not itself be open to flexibility.

    -a-a-a J^n


    Maybe because you have no idea how this thing works. The rules are simple:
    1. If it's a word, execute it;
    2. Otherwise convert it to a number;
    3. Not a number? Throw an error.

    That's it. Given that a word can do its own parsing - what's missing? If
    there was actually missing anything, you wouldn't be able to enter
    characters or strings. Given we have CHAR and S" that doesn't seem to be
    the case.

    FYI, this is a canonical implementation of that interpreter:

    : INTERPRET ( -- )
    BEGIN
    BL FIND IF EXECUTE
    ?STACK ABORT" Stack empty"
    ELSE NUMBER THEN
    AGAIN ;

    Begin, get the next token, if it's a command execute it, if not convert
    to a number, rinse and repeat. That's it. What this proposal does is implementing a hook in this loop in order to attach (multiple) pieces of
    code in what is a small, comprehensible and elegant piece of software.

    That's not good engineering in my book.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From jkn@jkn+nin@nicorp.co.uk to comp.lang.forth on Wed Feb 11 13:09:08 2026
    From Newsgroup: comp.lang.forth

    On 11/02/2026 12:54, Hans Bezemer wrote:
    On 10-02-2026 18:48, jkn wrote:
    On 10/02/2026 12:36, Hans Bezemer wrote:
    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online:
    <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be >>>> acted upon (but you might still want to give it).-a OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective.-a In either case, please report any >>>> feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because this
    is a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed?
    What should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for
    plugging in functionality at various places in the text interpreter."

    To begin with: this is incorrect. If I define this word:

    : f%
    -a-a bl word count >float 0= abort" Bad float"
    -a-a state @ if postpone fliteral then
    ; immediate

    Floating point numbers are recognized without a problem. So - the
    claim one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use ForthrCOs. >>> Every time you see a unique interpreter, it implies that there is
    something particularly awkward about the problem. And that is almost
    never the case."

    Which is the case here as well. You can easily extend the language
    without changing the interpreter.

    "If you write your own interpreter, the interpreter is almost
    certainly the most
    complex, elaborate part of your entire application. You have switched
    from
    solving a problem to writing an interpreter."

    It is obvious you needs LOTS of code to make this work. Simply
    because it doesn't come with any type information. It's clear that
    "F%" carries an implicit type. But a recognizer needs code to
    recognize the type it is supposed to convert. You may it is trivial,
    but it is code nontheless. Code that has to be designed, implemented,
    tested and maintained. Such code is not required with "F%".

    Or - as TF puts it - "To simplify, take advantage of whatrCOs available." >>>
    Let's delve in a little deeper: "The difficulty of adding to the text
    interpreter may also have led to missed opportunities: E.g., for
    string literals the standard did not task the text interpreter with
    recognizing them, but instead introduced S" and S\" (and their
    complicated definition with interpretation and compilation semantics)."

    This is simply not true - and a disingenuous argument at best. Let's
    take another, related example:

    : .( [char] ) parse type ; immediate

    There is very little complexity here. So, the complexity is not in
    the PARSING of this word. The complexity lies in the (temporary)
    allocation of this word - and the lack of an interpreted version like
    "S(" - which would virtually completely eliminate "their complicated
    definition with interpretation and compilation semantics."

    In other words, the complexity doesn't lie within the problem itself,
    but in the atrocious design of the S" word - which had to be patched
    later on in order to function for the FILE wordset.

    Finally, in how far does this proposal fix the aforementioned
    problems of S"? It will still have to be allocated somewhere - and I
    don't see how it will alleviate "their complicated definition with
    interpretation and compilation semantics." They will only get worse,
    because one will have to add the recognition code.. Duh!

    Let's finish with some TF advise: "Anticipate things-that-may-change
    by organizing information, NOT by adding complexity. Add complexity
    only as necessary to make the current iteration work."

    It may be clear that this proposal only ADDS complexity. It doesn't
    alleviate the problem AT ALL. It makes it worse. Much worse. The only
    thing it does is add some "syntactic sugar" to those C programmers
    that couldn't live without locals.

    Now - you wan't hear me say that there wasn't some history here.
    Chuck should have refrained from adding double numbers to the
    interpreter. "D%" would have been fine. And sure - I can understand a
    dot in a number is a great self-documenting way to add "fractions" to
    fixed point number calculations.

    But from an architectural viewpoint, it is WRONG. Because it's a
    slippery slope as complex numbers, floating point numbers (IEEE,
    single precision, double precision - yeah, they come in different
    tastes) have proven. Single numbers - I get that. Forth would be
    awkward to work with when you need a thing like "S%" every single line.

    But this.. This is not the way to go.

    Hans Bezemer

    I have no skin in this game at all - I am basically an observer of
    both the language, and this newsgroup. But it seems strange to me that
    in a language that is so self-describedly flexible as Forth, the
    operation of the inner interpreter should not itself be open to
    flexibility.

    -a-a-a-a J^n


    Maybe because you have no idea how this thing works.


    Somewhat cheeky; I have at least written a Forth myself, even it was
    some 35 years ago...


    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Wed Feb 11 14:34:05 2026
    From Newsgroup: comp.lang.forth

    On 11-02-2026 01:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so >> self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention. Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94. Typically integration was achieved through hooks the system designer
    had purposely built into system. Forth-94 had already defined how the forth interpreter should handle fp numbers. Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable. It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history. Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it. It was 'a solution in search of a problem'. From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution. Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers. System-specific hooks remain.


    Extending the functionality of already defined words (in previous
    wordsets) was always a weak point of ANS-94. I don't know if other
    language standards use this, but I don't feel comfortable with
    "redefining" or "extending" words.

    BTW, S" is one of the few examples of words that are not stateless
    (contrary to CHAR and [CHAR], ' and ['], ." and .( etc.).

    They could have spared us a lot of trouble defining S( - or whatever.
    But consistency has never been Forth's strong point, unfortunately. It's always trends that are aborted half way, because the maintenance efforts
    are getting out of hand.

    This discrepancy between pragmatism and "a brave new world" becomes
    painfully clear when reading section 12.3.7:

    "If the Floating-Point word set is present in the dictionary and the
    current base is DECIMAL, the input number-conversion algorithm shall be extended to recognize floating-point numbers."

    Which means you have to do an overhaul of the text interpreter. Which is
    a HORRIBLE requirement!

    And its rationale:

    "A.12.3.7 Text interpreter input number conversion. The Technical
    Committee has more than once received the suggestion that the text
    interpreter in Standard Forth systems should treat numbers that have an embedded decimal point, but no exponent, as floating-point numbers
    rather than double cell numbers. This suggestion, although it has merit,
    has always been voted down because it would break too much existing
    code; many existing implementations put the full digit string on the
    stack as a double number and use other means to inform the application
    of the location of the decimal point."

    It would have been better if such requirement had NOT existed and (as
    ugly as it is) S" 12.34e" >FLOAT had remained the only accepted way to
    enter an FP number - OR a word like F% or F# had been brought into
    existence for the time being.

    I still think that meddling with the text interpreter is a big no-no and
    an invitation to disaster. Never leave to a computer that which a
    programmer can signify as his intent. Although I'm still not dancing on
    the table, that is at least one of the characteristics of Alberts
    proposal (and it leaves the text interpreter largely intact!)

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Wed Feb 11 15:59:30 2026
    From Newsgroup: comp.lang.forth

    On 11-02-2026 14:09, jkn wrote:
    On 11/02/2026 12:54, Hans Bezemer wrote:
    On 10-02-2026 18:48, jkn wrote:
    On 10/02/2026 12:36, Hans Bezemer wrote:
    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online:
    <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be >>>>> acted upon (but you might still want to give it).-a OTOH, if you find >>>>> any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective.-a In either case, please report any >>>>> feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because this
    is a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed?
    What should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for
    plugging in functionality at various places in the text interpreter."

    To begin with: this is incorrect. If I define this word:

    : f%
    -a-a bl word count >float 0= abort" Bad float"
    -a-a state @ if postpone fliteral then
    ; immediate

    Floating point numbers are recognized without a problem. So - the
    claim one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use ForthrCOs. >>>> Every time you see a unique interpreter, it implies that there is
    something particularly awkward about the problem. And that is almost
    never the case."

    Which is the case here as well. You can easily extend the language
    without changing the interpreter.

    "If you write your own interpreter, the interpreter is almost
    certainly the most
    complex, elaborate part of your entire application. You have
    switched from
    solving a problem to writing an interpreter."

    It is obvious you needs LOTS of code to make this work. Simply
    because it doesn't come with any type information. It's clear that
    "F%" carries an implicit type. But a recognizer needs code to
    recognize the type it is supposed to convert. You may it is trivial,
    but it is code nontheless. Code that has to be designed,
    implemented, tested and maintained. Such code is not required with
    "F%".

    Or - as TF puts it - "To simplify, take advantage of whatrCOs available." >>>>
    Let's delve in a little deeper: "The difficulty of adding to the
    text interpreter may also have led to missed opportunities: E.g.,
    for string literals the standard did not task the text interpreter
    with recognizing them, but instead introduced S" and S\" (and their
    complicated definition with interpretation and compilation semantics)." >>>>
    This is simply not true - and a disingenuous argument at best. Let's
    take another, related example:

    : .( [char] ) parse type ; immediate

    There is very little complexity here. So, the complexity is not in
    the PARSING of this word. The complexity lies in the (temporary)
    allocation of this word - and the lack of an interpreted version
    like "S(" - which would virtually completely eliminate "their
    complicated definition with interpretation and compilation semantics." >>>>
    In other words, the complexity doesn't lie within the problem
    itself, but in the atrocious design of the S" word - which had to be
    patched later on in order to function for the FILE wordset.

    Finally, in how far does this proposal fix the aforementioned
    problems of S"? It will still have to be allocated somewhere - and I
    don't see how it will alleviate "their complicated definition with
    interpretation and compilation semantics." They will only get worse,
    because one will have to add the recognition code.. Duh!

    Let's finish with some TF advise: "Anticipate things-that-may-change
    by organizing information, NOT by adding complexity. Add complexity
    only as necessary to make the current iteration work."

    It may be clear that this proposal only ADDS complexity. It doesn't
    alleviate the problem AT ALL. It makes it worse. Much worse. The
    only thing it does is add some "syntactic sugar" to those C
    programmers that couldn't live without locals.

    Now - you wan't hear me say that there wasn't some history here.
    Chuck should have refrained from adding double numbers to the
    interpreter. "D%" would have been fine. And sure - I can understand
    a dot in a number is a great self-documenting way to add "fractions"
    to fixed point number calculations.

    But from an architectural viewpoint, it is WRONG. Because it's a
    slippery slope as complex numbers, floating point numbers (IEEE,
    single precision, double precision - yeah, they come in different
    tastes) have proven. Single numbers - I get that. Forth would be
    awkward to work with when you need a thing like "S%" every single line. >>>>
    But this.. This is not the way to go.

    Hans Bezemer

    I have no skin in this game at all - I am basically an observer of
    both the language, and this newsgroup. But it seems strange to me
    that in a language that is so self-describedly flexible as Forth, the
    operation of the inner interpreter should not itself be open to
    flexibility.

    -a-a-a-a J^n


    Maybe because you have no idea how this thing works.


    Somewhat cheeky; I have at least written a Forth myself, even it was
    some 35 years ago...



    But have you ever programmed in Forth? I mean - every student can write
    a Forth compiler - and many do - but in my experience appreciating the elegance of the system comes with using it. Not building it.

    Like appreciation of an apple pie recipe comes with eating it, not
    baking it.

    Hans Bezemer

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Wed Feb 11 16:30:46 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    Maybe because you have no idea how this thing works. The rules are simple:
    1. If it's a word, execute it;
    2. Otherwise convert it to a number;
    3. Not a number? Throw an error.

    Chuck Moore apparently did not have an idea how this thing works,
    either, because he added complications like a compilation state and
    immediacy.

    But you are right: Both of these complications are unnecessary, we can
    simplify the text interpreter by leaving them away. We just have to
    write the Forth code using appropriate parsing words, i.e. instead of

    : DIGIT ( n -- n )
    DUP 9 > IF 7 + THEN [CHAR] 0 + ;

    one would write the code as

    : DIGIT ( n -- n )
    COMPILE DUP 9 LITERAL COMPILE > IF
    7 LITERAL COMPILE + THEN
    [CHAR] 0 COMPILE + ;

    [Note that this COMPILE has to be a parsing word that compiles the
    following word, unlike fig-Forth's COMPILE , which relied on a text
    interpreter with a compilation state.]

    For a further simplification of the text interpreter, we should leave
    point 2 away and introduce S%, resulting in:

    : DIGIT ( n -- n )
    COMPILE DUP S% 9 LITERAL COMPILE > IF
    S% 7 LITERAL COMPILE + THEN
    [CHAR] 0 COMPILE + ;

    In addition, we can introduce [S%] to reduce the occurences of
    LITERAL, resulting in:

    : DIGIT ( n -- n )
    COMPILE DUP [S%] 9 COMPILE > IF
    [S%] 7 COMPILE + THEN
    [CHAR] 0 COMPILE + ;

    Admittedly, adding [S%] increases code size, but that's ok, because
    it's not in the text interpreter, right?

    FYI, this is a canonical implementation of that interpreter:

    : INTERPRET ( -- )
    BEGIN
    BL FIND IF EXECUTE
    ?STACK ABORT" Stack empty"
    ELSE NUMBER THEN
    AGAIN ;

    This is the canonical implementation? Where did you get that from?

    Begin, get the next token,

    Where do I find this in this code?

    if it's a command execute it, if not convert
    to a number, rinse and repeat. That's it.

    How does the loop terminate? Are you using the fig-Forth X approach
    for that?

    What this proposal does is
    implementing a hook in this loop in order to attach (multiple) pieces of >code in what is a small, comprehensible and elegant piece of software.

    Here's the current (untested) state of INTERPRET in the text
    interpreter:

    : interpret ( ... -- ... )
    begin
    parse-name dup while
    rec-forth state @ 2 + cells + @ execute
    repeat
    2drop ;

    Note that it deals with interpretation and compilation state (that's
    why there is the "state @ 2 + cells +" sequence; immediacy is handled elsewhere. The checking of the various recognizers happens inside
    REC-FORTH.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Wed Feb 11 18:37:10 2026
    From Newsgroup: comp.lang.forth

    jkn <jkn+nin@nicorp.co.uk> writes:
    I was a bit surprised that "a space delimits 'symbols'" has not been
    made more flexible...

    Lack of demand. For Forth source white space as delimiter is deeply
    rooted, and I have not seen any desire to change that. Bernd Paysan
    has used the text interpreter with appropriate recognizers for parsing
    other kinds of input (e.g., .ini files), but I have not heard any
    desire to change the parsing part of the text interpreter, either. In
    any case, the recognizers work with what comes out of the parsing
    part, so changing the parsing part would be a separate, mostly
    independent proposal.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From jkn@jkn+nin@nicorp.co.uk to comp.lang.forth on Wed Feb 11 20:46:49 2026
    From Newsgroup: comp.lang.forth

    On 11/02/2026 14:59, Hans Bezemer wrote:
    On 11-02-2026 14:09, jkn wrote:
    On 11/02/2026 12:54, Hans Bezemer wrote:
    On 10-02-2026 18:48, jkn wrote:
    On 10/02/2026 12:36, Hans Bezemer wrote:
    On 09-02-2026 08:49, Anton Ertl wrote:
    A more fleshed-out version of the current recognizer proposal is
    online:
    <https://forth-standard.org/proposals/recognizer-committee-
    proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to >>>>>> solid, so if you want major upheavals, I doubt that your input
    will be
    acted upon (but you might still want to give it).-a OTOH, if you find >>>>>> any mistakes, missing parts or unclear parts, now is the time when >>>>>> your input will be most effective.-a In either case, please report any >>>>>> feedback by clicking on the Reply button on the web page above.

    - anton


    Although I'm not gonna honor this proposal - for architectual and
    technical reasons - I'd like to give my opinion anyway. Because
    this is a mistake of Forth-83 like proportions.

    But let's begin at the beginning: why is is this proposal needed?
    What should it fix?

    "The classical text interpreter is inflexible: E.g., adding
    floating-point recognizers requires hardcoding the change; several
    systems include system-specific hooks (sometimes more than one) for >>>>> plugging in functionality at various places in the text interpreter." >>>>>
    To begin with: this is incorrect. If I define this word:

    : f%
    -a-a bl word count >float 0= abort" Bad float"
    -a-a state @ if postpone fliteral then
    ; immediate

    Floating point numbers are recognized without a problem. So - the
    claim one needs to change the interpreter is simply false.

    Now what does TF have to say about "changing the interpreter"?

    "DonrCOt write your own interpreter/compiler when you can use
    ForthrCOs. Every time you see a unique interpreter, it implies that >>>>> there is something particularly awkward about the problem. And that >>>>> is almost never the case."

    Which is the case here as well. You can easily extend the language
    without changing the interpreter.

    "If you write your own interpreter, the interpreter is almost
    certainly the most
    complex, elaborate part of your entire application. You have
    switched from
    solving a problem to writing an interpreter."

    It is obvious you needs LOTS of code to make this work. Simply
    because it doesn't come with any type information. It's clear that
    "F%" carries an implicit type. But a recognizer needs code to
    recognize the type it is supposed to convert. You may it is
    trivial, but it is code nontheless. Code that has to be designed,
    implemented, tested and maintained. Such code is not required with
    "F%".

    Or - as TF puts it - "To simplify, take advantage of whatrCOs
    available."

    Let's delve in a little deeper: "The difficulty of adding to the
    text interpreter may also have led to missed opportunities: E.g.,
    for string literals the standard did not task the text interpreter
    with recognizing them, but instead introduced S" and S\" (and their >>>>> complicated definition with interpretation and compilation
    semantics)."

    This is simply not true - and a disingenuous argument at best.
    Let's take another, related example:

    : .( [char] ) parse type ; immediate

    There is very little complexity here. So, the complexity is not in
    the PARSING of this word. The complexity lies in the (temporary)
    allocation of this word - and the lack of an interpreted version
    like "S(" - which would virtually completely eliminate "their
    complicated definition with interpretation and compilation semantics." >>>>>
    In other words, the complexity doesn't lie within the problem
    itself, but in the atrocious design of the S" word - which had to
    be patched later on in order to function for the FILE wordset.

    Finally, in how far does this proposal fix the aforementioned
    problems of S"? It will still have to be allocated somewhere - and
    I don't see how it will alleviate "their complicated definition
    with interpretation and compilation semantics." They will only get
    worse, because one will have to add the recognition code.. Duh!

    Let's finish with some TF advise: "Anticipate things-that-may-
    change by organizing information, NOT by adding complexity. Add
    complexity only as necessary to make the current iteration work."

    It may be clear that this proposal only ADDS complexity. It doesn't >>>>> alleviate the problem AT ALL. It makes it worse. Much worse. The
    only thing it does is add some "syntactic sugar" to those C
    programmers that couldn't live without locals.

    Now - you wan't hear me say that there wasn't some history here.
    Chuck should have refrained from adding double numbers to the
    interpreter. "D%" would have been fine. And sure - I can understand >>>>> a dot in a number is a great self-documenting way to add
    "fractions" to fixed point number calculations.

    But from an architectural viewpoint, it is WRONG. Because it's a
    slippery slope as complex numbers, floating point numbers (IEEE,
    single precision, double precision - yeah, they come in different
    tastes) have proven. Single numbers - I get that. Forth would be
    awkward to work with when you need a thing like "S%" every single
    line.

    But this.. This is not the way to go.

    Hans Bezemer

    I have no skin in this game at all - I am basically an observer of
    both the language, and this newsgroup. But it seems strange to me
    that in a language that is so self-describedly flexible as Forth,
    the operation of the inner interpreter should not itself be open to
    flexibility.

    -a-a-a-a J^n


    Maybe because you have no idea how this thing works.


    Somewhat cheeky; I have at least written a Forth myself, even it was
    some 35 years ago...



    But have you ever programmed in Forth? I mean - every student can write
    a Forth compiler - and many do - but in my experience appreciating the elegance of the system comes with using it. Not building it.

    Like appreciation of an apple pie recipe comes with eating it, not
    baking it.

    Hans Bezemer

    I wrote my Forth system in order to write an application, so yes, I have programmed in Forth.
    Have I fully groked "The Forth Way"? No, I indicate my position above.


    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From jkn@jkn+nin@nicorp.co.uk to comp.lang.forth on Wed Feb 11 20:49:23 2026
    From Newsgroup: comp.lang.forth

    On 11/02/2026 12:36, Hans Bezemer wrote:
    On 11-02-2026 10:05, jkn wrote:
    On 11/02/2026 00:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of
    both the language,
    and this newsgroup. But it seems strange to me that in a language
    that is so
    self-describedly flexible as Forth, the operation of the inner
    interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention.-a Each forth, it was noted,
    had its own way
    of integrating floating-point into the system - fp being an 'optional
    extension'
    of Forth-94.-a Typically integration was achieved through hooks the
    system designer
    had purposely built into system.-a Forth-94 had already defined how
    the forth
    interpreter should handle fp numbers.-a Parsing words F# etc were not
    an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the
    interpreter could
    be made portable.-a It caught the imagination of sufficient users (in
    forth there's
    little distinction between user and system-designer) and the rest is
    history.
    Recognizers were sufficiently complicated prompting more
    justification than fp (1)
    in order to sell it.-a It was 'a solution in search of a problem'.
    From that came
    the idea that forth should be able to parse *anything* - however
    unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never
    a complete
    solution.-a Integrating fp into a system often requires more than
    simply making the
    interpreter recognize fp numbers.-a System-specific hooks remain.


    From that came
    the idea that forth should be able to parse *anything* - however
    unlikely or little
    used.

    I was a bit surprised that "a space delimits 'symbols'" has not been
    made more flexible...


    IMHO it has. PARSE allows you to parse for any delimiter. Some have PARSE-WORD that allows skipping leading delimiters. There is also a dedicated white-space parser called PARSE-NAME.

    I was basing my comment from the wording of the proposal Anton linked to:

    """
    The recognizer proposal is a factorization of the central part of the
    text interpreter.

    As before the text interpreter parses a white-space-delimited string. ...
    """


    4tH has a word called OMIT which only skips leading delimiters without parsing anything.

    Hans Bezemer

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Thu Feb 12 11:35:39 2026
    From Newsgroup: comp.lang.forth

    On 12/02/2026 12:34 am, Hans Bezemer wrote:
    On 11-02-2026 01:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so
    self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention.-a Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94.-a Typically integration was achieved through hooks the system designer
    had purposely built into system.-a Forth-94 had already defined how the forth
    interpreter should handle fp numbers.-a Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable.-a It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history.
    Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it.-a It was 'a solution in search of a problem'.-a From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution.-a Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers.-a System-specific hooks remain.


    Extending the functionality of already defined words (in previous wordsets) was always a weak point of ANS-94. I don't know if other language standards use this, but I don't feel comfortable with "redefining" or "extending" words.

    BTW, S" is one of the few examples of words that are not stateless (contrary to CHAR and [CHAR], ' and ['], ." and .( etc.).

    They could have spared us a lot of trouble defining S( - or whatever. But consistency has never been Forth's strong point, unfortunately. It's always trends that are aborted half way, because the maintenance efforts are getting out of hand.

    This discrepancy between pragmatism and "a brave new world" becomes painfully clear when reading section 12.3.7:

    "If the Floating-Point word set is present in the dictionary and the current base is DECIMAL, the input number-conversion algorithm shall be extended to recognize floating-point numbers."

    Which means you have to do an overhaul of the text interpreter. Which is a HORRIBLE requirement!

    And its rationale:

    "A.12.3.7 Text interpreter input number conversion. The Technical Committee has more than once received the suggestion that the text interpreter in Standard Forth systems should treat numbers that have an embedded decimal point, but no exponent, as floating-point numbers rather than double cell numbers. This suggestion, although it has merit, has always been voted down because it would break too much existing code; many existing implementations put the full digit string on the stack as a double number and use other means to inform the application of the location of the decimal point."

    It would have been better if such requirement had NOT existed and (as ugly as it is) S" 12.34e" >FLOAT had remained the only accepted way to enter an FP number - OR a word like F% or F# had been brought into existence for the time being.

    I would say by the time ANS-TC began its deliberations the die had already been cast.
    The 'Standard Floating Point Extension' published in 1985 by the Forth Vendors Group
    (LMI and Micromotion with input from several vendors) required input in the form:

    If the floating point extension word set has been overlaid onto a
    83-Standard Forth system, a string of the following form will be
    compiled or interpreted as a real number:

    nnnn.nnnExx

    The "E" signifier is mandatory to force the conversion of a real
    number. The presence of numeric digits before or after the "E"
    is not required by this specification but may be mandatory in
    some implementations. A "-" sign may precede both the mantissa
    and the exponent, a leading "+" sign is also permissible on the
    exponent. A decimal point is optional and occur anywhere in the
    mantissa. For example, all of the following numbers are legal:

    -.0001E5
    100.0E+0
    1000.E-15

    After Forth-83 which split vendors, ANS-TC wasn't going to do anything that drew the
    ire of an existing user base. One only has to look at the flack Forth-94 received
    when a section of existing locals users didn't get what they were expecting.

    I still think that meddling with the text interpreter is a big no-no and an invitation to disaster. Never leave to a computer that which a programmer can signify as his intent. Although I'm still not dancing on the table, that is at least one of the characteristics of Alberts proposal (and it leaves the text interpreter largely intact!)

    I get it but IMO f/p isn't something one simply LOADs - even if Forth-94 sold it that
    way as a nod to minimalists. With the exception of folks like me (and perhaps you)
    who want to be able to load a variety of f/p packs, f/p is there when one boots forth.
    What the eyes don't see, the heart doesn't grieve.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Thu Feb 12 07:24:14 2026
    From Newsgroup: comp.lang.forth

    dxf <dxforth@gmail.com> writes:
    [reformatted to Usenet standards]

    I get it but IMO f/p isn't something one simply LOADs - even if
    Forth-94 sold it that way as a nod to minimalists. With the
    exception of folks like me (and perhaps you) who want to be able to
    load a variety of f/p packs, f/p is there when one boots forth.

    SwiftForth before 4.0 (which was only released on 22-Oct-2025) does
    not include the FP wordset by default. VFX Forth before release 5
    (released on 24 August 2018) does not include the FP wordset by
    default. SwiftForth 4.x and VFX 5.x include the FP wordset by
    default.

    Gforth, iForth, and lxf included the FP wordset by default in all
    versions that I have tested.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Thu Feb 12 07:35:28 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    Extending the functionality of already defined words (in previous
    wordsets) was always a weak point of ANS-94. I don't know if other
    language standards use this, but I don't feel comfortable with
    "redefining" or "extending" words.

    Most other standards don't try to cater to small implementations as
    much as the Forth standard does. It's pretty pointless, though: Big implementations implement almost everything, and small implementations
    pick and choose from the standard requirements anyway, even among the requirements for CORE words. The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.

    I still think that meddling with the text interpreter is a big no-no and
    an invitation to disaster. Never leave to a computer that which a
    programmer can signify as his intent.

    Recognizers provide additional ways for programmers to signify as
    their intent.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Thu Feb 12 10:55:47 2026
    From Newsgroup: comp.lang.forth

    On 12-02-2026 08:35, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    Extending the functionality of already defined words (in previous
    wordsets) was always a weak point of ANS-94. I don't know if other
    language standards use this, but I don't feel comfortable with
    "redefining" or "extending" words.

    Most other standards don't try to cater to small implementations as
    much as the Forth standard does. It's pretty pointless, though: Big implementations implement almost everything, and small implementations
    pick and choose from the standard requirements anyway, even among the requirements for CORE words. The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.

    I still think that meddling with the text interpreter is a big no-no and
    an invitation to disaster. Never leave to a computer that which a
    programmer can signify as his intent.

    Recognizers provide additional ways for programmers to signify as
    their intent.

    - anton

    I don't think that people who are "implementing Forth as an exercise"
    can be bothered to make it "a standard compiler". So I don't see a true argument here.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented. I
    mean - that it depends on other wordsets, I think that's unavoidable.
    But patching those wordsets? That's just bad engineering.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Thu Feb 12 10:59:16 2026
    From Newsgroup: comp.lang.forth

    On 12-02-2026 08:24, Anton Ertl wrote:
    dxf <dxforth@gmail.com> writes:
    [reformatted to Usenet standards]

    I get it but IMO f/p isn't something one simply LOADs - even if
    Forth-94 sold it that way as a nod to minimalists. With the
    exception of folks like me (and perhaps you) who want to be able to
    load a variety of f/p packs, f/p is there when one boots forth.

    SwiftForth before 4.0 (which was only released on 22-Oct-2025) does
    not include the FP wordset by default. VFX Forth before release 5
    (released on 24 August 2018) does not include the FP wordset by
    default. SwiftForth 4.x and VFX 5.x include the FP wordset by
    default.

    Gforth, iForth, and lxf included the FP wordset by default in all
    versions that I have tested.

    - anton

    Neither does 4tH. But that those are already included might be a logical result of recognizing FP numbers in the text interpreter. Think of it:
    why implement that in a CORE compiler? To what should it compile?
    Especially since that would require an FP stack (since other
    implementations have been outlawed since).

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Thu Feb 12 20:59:39 2026
    From Newsgroup: comp.lang.forth

    On 12/02/2026 6:24 pm, Anton Ertl wrote:
    dxf <dxforth@gmail.com> writes:
    [reformatted to Usenet standards]

    I get it but IMO f/p isn't something one simply LOADs - even if
    Forth-94 sold it that way as a nod to minimalists. With the
    exception of folks like me (and perhaps you) who want to be able to
    load a variety of f/p packs, f/p is there when one boots forth.

    SwiftForth before 4.0 (which was only released on 22-Oct-2025) does
    not include the FP wordset by default. VFX Forth before release 5
    (released on 24 August 2018) does not include the FP wordset by
    default.

    Yep. VFX supported three different f/p packs and SwiftForth's single
    (Win) f/p pack came with a variety of options. This was flexibility
    at the cost of the user knowing what he wanted. Users could save
    their choice to a new exe and have it available at bootup (though
    maybe not on the demo versions).

    SwiftForth 4.x and VFX 5.x include the FP wordset by
    default.

    These offer less options. VFX theoretically allows replacing the
    default pack with another but I had issues doing it on Win which
    I reported. I've not seen a fix/update for VFX for two years.

    SwiftForth f/p was rationalized down to one mode - 80 bits, hardware
    stack. As this made it possible to distribute my superior,
    VFX compatible, f/p output pack, I'm not complaining ;-)

    https://drive.google.com/file/d/1G8PYkEY73XPSygKlsWnM0XdZMx8ha7gb/view

    Gforth, iForth, and lxf included the FP wordset by default in all
    versions that I have tested.

    - anton

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Thu Feb 12 10:13:42 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:24, Anton Ertl wrote:
    Gforth, iForth, and lxf included the FP wordset by default in all
    versions that I have tested.
    ...
    Neither does 4tH. But that those are already included might be a logical >result of recognizing FP numbers in the text interpreter.

    Counterexample: Gforth 0.7 (before recognizers): Here the text
    interpreter for one word contains hard-coded stuff for dealing with
    words (FIND-NAME) and with single and double-cell numbers (SNUMBER?),
    but nothing for floating-point. Instead, there are hooks
    INTERPRETER-NOTFOUND1 and COMPILER-NOTFOUND1, and when float.fs is
    loaded, recognizing floating-point words is added to these hooks.

    \ called in interpretation state
    : interpreter1 ( c-addr u -- ... xt )
    2dup find-name dup
    if
    nip nip name>int
    else
    drop
    2dup 2>r snumber?
    IF
    2rdrop ['] noop
    ELSE
    2r> interpreter-notfound1
    THEN
    then ;

    \ called in compilation state
    : compiler1 ( c-addr u -- ... xt )
    2dup find-name dup
    if ( c-addr u nt )
    nip nip name>comp
    else
    drop
    2dup 2>r snumber? dup
    IF
    0>
    IF
    ['] 2literal
    ELSE
    ['] literal
    THEN
    2rdrop
    ELSE
    drop 2r> compiler-notfound1
    THEN
    then ;

    The decision to not have FP in the hard-coded part of the text
    interpreter was taken by Bernd Paysan, so I can only guess why he did
    that: My guess is that this text interpreter was originally also used
    for Gforth EC for small CPUs without hardware FP support where Gforth
    does not implement FP.

    Another reason might be (certainly for me) that the hard-coded text
    interpreter is in the cross-compiled part of Gforth, whereas float.fs
    (which includes the thing that plugs into the text interpreter) is in
    the part of Gforth that is compiled with Gforth's regular compiler. I
    found the latter always significantly easier to use than the
    cross-compiler and have always tried to keep the amount of code and
    changes in the cross-compiled portion of Gforth small.

    Counterexamples: Gforth (development), SwiftForth 4.x and VFX 5.x:
    Their text interpreters are recognizer-based, so recognizing FP is not hard-coded into the text interpreter at all (nor is recognizing words
    or integers).

    Concerning iForth and lxf, I don't know what they are doing, but I
    would not be surprised if FP is not hard-coded into their text
    interpreters.

    While I show the example above from Gforth 0.7, here are the
    corresponding recognizers REC-NAME and REC-NUMBER from in the current
    reference implementation of recognizers:

    : undefined-word ( -- )
    #-13 throw ;

    ' undefined-word dup dup translate: translate-none

    : nop ;

    : lit, ( n -- )
    postpone literal ;

    : litlit, ( n -- )
    lit, postpone lit, ;

    ' nop ' lit, ' litlit, translate: translate-cell

    : 2lit, ( n1 n2 -- )
    postpone 2literal ;

    : 2lit2lit, ( n1 n2 -- )
    2lit, postpone 2lit, ;

    ' nop ' 2lit, ' 2lit2lit, translate: translate-dcell

    : name-int ( ... nt -- ... )
    name>interpret execute ;

    : name-comp ( ... nt -- ... )
    name>compile execute ;

    : name-post ( nt -- )
    lit, postpone name-comp ;

    ' name-int ' name-comp ' name-post translate: translate-name

    : rec-name ( c-addr u -- translation )
    find-name dup if
    translate-name
    else
    drop translate-none
    then ;

    : rec-number ( c-addr u -- translation )
    snumber? case
    0 of translate-none endof
    -1 of translate-cell endof
    translate-dcell swap
    endcase ;

    Not shorter, but more factored, and supports postponing numbers.

    Think of it:
    why implement that in a CORE compiler?

    Are you just producing a counterargument for your claim above?

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Thu Feb 12 12:07:24 2026
    From Newsgroup: comp.lang.forth

    On 11-02-2026 17:30, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    Maybe because you have no idea how this thing works. The rules are simple: >> 1. If it's a word, execute it;
    2. Otherwise convert it to a number;
    3. Not a number? Throw an error.

    Chuck Moore apparently did not have an idea how this thing works,
    either, because he added complications like a compilation state and immediacy.

    But you are right: Both of these complications are unnecessary, we can simplify the text interpreter by leaving them away. We just have to
    write the Forth code using appropriate parsing words, i.e. instead of

    : DIGIT ( n -- n )
    DUP 9 > IF 7 + THEN [CHAR] 0 + ;

    one would write the code as

    : DIGIT ( n -- n )
    COMPILE DUP 9 LITERAL COMPILE > IF
    7 LITERAL COMPILE + THEN
    [CHAR] 0 COMPILE + ;

    [Note that this COMPILE has to be a parsing word that compiles the
    following word, unlike fig-Forth's COMPILE , which relied on a text interpreter with a compilation state.]

    For a further simplification of the text interpreter, we should leave
    point 2 away and introduce S%, resulting in:

    : DIGIT ( n -- n )
    COMPILE DUP S% 9 LITERAL COMPILE > IF
    S% 7 LITERAL COMPILE + THEN
    [CHAR] 0 COMPILE + ;

    In addition, we can introduce [S%] to reduce the occurences of
    LITERAL, resulting in:

    : DIGIT ( n -- n )
    COMPILE DUP [S%] 9 COMPILE > IF
    [S%] 7 COMPILE + THEN
    [CHAR] 0 COMPILE + ;

    Admittedly, adding [S%] increases code size, but that's ok, because
    it's not in the text interpreter, right?

    FYI, this is a canonical implementation of that interpreter:

    : INTERPRET ( -- )
    BEGIN
    BL FIND IF EXECUTE
    ?STACK ABORT" Stack empty"
    ELSE NUMBER THEN
    AGAIN ;

    This is the canonical implementation? Where did you get that from?

    Begin, get the next token,

    Where do I find this in this code?

    if it's a command execute it, if not convert
    to a number, rinse and repeat. That's it.

    How does the loop terminate? Are you using the fig-Forth X approach
    for that?

    What this proposal does is
    implementing a hook in this loop in order to attach (multiple) pieces of
    code in what is a small, comprehensible and elegant piece of software.

    Here's the current (untested) state of INTERPRET in the text
    interpreter:

    : interpret ( ... -- ... )
    begin
    parse-name dup while
    rec-forth state @ 2 + cells + @ execute
    repeat
    2drop ;

    Note that it deals with interpretation and compilation state (that's
    why there is the "state @ 2 + cells +" sequence; immediacy is handled elsewhere. The checking of the various recognizers happens inside
    REC-FORTH.

    - anton

    Single numbers - I get that. Forth would be awkward to work with when
    you need a thing like "S%" every single line.

    First I have to congratulate you with your textbook example of a
    "Reductio ad absurdum". And I don't mean that as "committing a logical
    falacy" - I do think you use it correctly.

    Thank you for reusing my "Single numbers - I get that. Forth would be
    awkward to work with when you need a thing like "S%" every single line."
    But I don't think it's appropriate. And there we come to the central point:

    Software doesn't fulfill a single requirement. It always has to fulfill
    A SET OF REQUIREMENTS. And yes, often these requirements contradict each other. "Many features" and "Small" can't be fulfilled at the same time.
    Every feature requires code. "Speed" and "Checks" - same thing. Every
    check requires time to execute. So - every programmer has to balance
    these requirements. In this case - it's no different.

    It's for that reason we don't have an "S%". It would make using Forth unnecessarily awkward. Note - in those days, late seventies, early
    eighties, floating point numbers were unheard of. At that time, 32-bit
    numbers were unheard of. IIRC Forth-83 even pinned down that all
    integers were 16-bit. Which made double numbers almost a necessity - and
    hence I can understand extending the text interpreter to support double numbers.

    For the same reason I can understand why Chuck chose a thing like STATE
    or a flag like IMMEDIATE. I suppose he could have chosen another
    approach - with one single immediate word ([) to shutdown the compiler
    and return to interpretation (] would already be executed anyway). Maybe
    the compiler and the interpreter would be vectored words. May be the interpreter would support macros. Who knows. Think of something clever
    and build it to prove your point. I know I did.

    Chuck was certainly open to other approaches, I quote: "LaFarr Stuart
    took this attitude when he redesigned Forth. He didnrCOt like the input buffer, so he implemented Forth without it, and discovered he didnrCOt
    really need an input buffer. If you can improve the problem, itrCOs a
    great situation to get into. ItrCOs much
    more fun redesigning the world than implementing it."

    No, my objections are mostly related to the research Bell Labs did in
    the late nineties "Does code decay?". Some of the conclusions of that
    report were:

    1. Accumulated Technical Debt: Constant, quick fixes or adding features without cleaning up the architecture makes the code complex and rigid.

    Ad 1. Oh, we got carloads of technical debt in Forth, because we think
    of a thing, implement it half - and then abandon it. Or - we make a
    lousy decision and then either have to live with it, or we have to
    correct it years later. Did anyone say "Forth-83"?

    2. Missing Maintenance: Unused, outdated, or undocumented code becomes difficult to understand, leading to bugs when changes are required.

    3. Increased Complexity: As software is modified, its entropy (disorder) increases, raising the cost and time required for future updates.

    Ad 3. Recognizers are a prime example of unnecessary complex code. Note
    that Brad Eckerts FP library came with an "F#" word, which just worked
    out of the box. No patches required.

    DO..LOOP is still not fixed. Or do you actually think that ?DO..LOOP
    fixes all of the problems? Sometimes I think, "maybe FOR..NEXT was a
    better solution."

    4. Bad, undocumented or violated architectures: All these make code more vulnerable and harder to maintain, because of the kludges applied to
    make things work.

    Ad 4. IMHO recognizers are a prime example of "violated architectures".
    BTW, so are local variables. Albert and Fred Behringer have proven -
    with working code - that the current implementation is needlessly complex.

    In short, if I have to balance the amount of code, the size of this intervention (changing the text interpreter) and the functionality (and
    other benefits) of this proposal, I think it's just a BAD ROI.

    Given the design errors of ANS-94, I can understand the path that has
    been taken. But I'm afraid we're just digging a deeper hole. Fix the
    errors. Yeah, that will cause a bit of pain. I know all about it, since
    I made errors too - and I was the one that had to go through sometimes hundreds of programs to correct them. Find them, patch them, test them.

    However, I was always happy I'd made that investment, because that code
    was no longer burdened by that technical debt. Yeah, Forth programmers
    are lazy (and call it pragmatism). "Let's just ignore it and invent some
    ugly patch to work around it. And then call it a standard."

    But like I said - I won't play ball. I can't. Unless I violate 4tH's architecture. Which I won't do.

    BTW, if you have questions about "INTERPRET", please direct them to
    Forth Inc. https://www.forth.com/starting-forth/11-forth-compiler-defining-words/

    I won't waste my time targeting an example - but that's just me. It's
    like pointing out a spelling error - as if that debunks the entire argument.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Lars Brinkhoff@lars.spam@nocrew.org to comp.lang.forth on Thu Feb 12 13:00:11 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer wrote:
    Forth would be awkward to work with when you need a thing like "S%"
    every single line."

    I worked professionally for a year or so with a Forth that required "#"
    before every number. It was indeed a little awkward, but mostly in the beginning before I got used to it.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Fri Feb 13 08:27:12 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:35, Anton Ertl wrote:
    [...] small implementations
    pick and choose from the standard requirements anyway, even among the
    requirements for CORE words. The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.
    ...
    I don't think that people who are "implementing Forth as an exercise"
    can be bothered to make it "a standard compiler".

    The point is not standard conformance, but a goalpost: To have
    something to direct the work, and also to have something that tells
    the implementor when the project is complete.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented.

    Who is "you" in this sentence? Given that you write "implemented",
    you seem to argue that the standard requires the system implementor to implement the base word, and then to patch it. This is not the case.
    The system implementor who has decided to implement the FILE words in
    addition to the CORE words can implement the FILE version of S" from
    the start, without any patching.

    Note also that the FILE version of S" conforms to the requirements for
    the CORE version of S", and that's generally the case for the extended
    versions of words. E.g., the specification of CORE's POSTPONE
    includes

    | An ambiguous condition exists if name is not found.

    so it does not specify what "POSTPONE 123" means. The proposed
    recognizer version of POSTPONE specifies that.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Fri Feb 13 12:25:49 2026
    From Newsgroup: comp.lang.forth

    In article <2026Feb11.193710@mips.complang.tuwien.ac.at>,
    Anton Ertl <anton@mips.complang.tuwien.ac.at> wrote:
    jkn <jkn+nin@nicorp.co.uk> writes:
    I was a bit surprised that "a space delimits 'symbols'" has not been
    made more flexible...

    Lack of demand. For Forth source white space as delimiter is deeply
    rooted, and I have not seen any desire to change that. Bernd Paysan
    has used the text interpreter with appropriate recognizers for parsing
    other kinds of input (e.g., .ini files), but I have not heard any
    desire to change the parsing part of the text interpreter, either. In
    any case, the recognizers work with what comes out of the parsing
    part, so changing the parsing part would be a separate, mostly
    independent proposal.

    I consider it a design error that word / parse are obliged
    to consume the end delimiter. Especially in view that parsing always
    skips leading delimiters. This makes both unusable as factor for the
    forth engine. This was a cute idea in the 70's where space delimiting
    17 12 GCD 1001 LCM
    was all the rage, before strings were invented.
    BASIC beats Forth in this respect.

    Combined with PREFIXes this change can dramatically simplify Forth.
    There is no need to chop the input in pieces.
    Kill the guy with the moustache! (from starting Forth).
    If you lookup DROP<white space> this doesn't match DROP-FLOAT.
    If DROP is a prefix. You have certainly a match.
    It matches glossary "DR" also, but you accept it only if the "DR"
    is a prefix. Else you discard it because in the input stream DR is not followed by white space. These exceptions are processed afterwards.

    What remains is a pointer in the input stream, much like normal
    languages. This diminishes stack depth where it is mostly needed.
    My FOUND uses (FIND) that in turn uses ~MATCH.

    In the ciforth model I can add a one-screen addition, vectoring TOKEN
    to NAME. Now you can parse lisp and pascal without changing the soul
    of the parsing part of Forth.
    I have demonstrated it with the gnu lisp interpreter. A large part
    was a parser that distracts from the lisp goal,
    leaving the impression that Forth is an awkward language.


    - anton

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Fri Feb 13 12:35:09 2026
    From Newsgroup: comp.lang.forth

    In article <698d205a$1@news.ausics.net>, dxf <dxforth@gmail.com> wrote:
    On 12/02/2026 12:34 am, Hans Bezemer wrote:
    On 11-02-2026 01:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so
    self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention.-a Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94.-a Typically integration was achieved through hooks the system designer
    had purposely built into system.-a Forth-94 had already defined how the forth
    interpreter should handle fp numbers.-a Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable.-a It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history.
    Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it.-a It was 'a solution in search of a problem'.-a From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution.-a Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers.-a System-specific hooks remain.


    Extending the functionality of already defined words (in previous wordsets) was always a weak point of ANS-94. I don't know if other language
    standards use this, but I don't feel comfortable with "redefining" or "extending" words.

    BTW, S" is one of the few examples of words that are not stateless (contrary to CHAR and [CHAR], ' and ['], ." and .( etc.).

    They could have spared us a lot of trouble defining S( - or whatever. But consistency has never been Forth's strong point, unfortunately.
    It's always trends that are aborted half way, because the maintenance efforts are getting out of hand.

    This discrepancy between pragmatism and "a brave new world" becomes painfully clear when reading section 12.3.7:

    "If the Floating-Point word set is present in the dictionary and the current base is DECIMAL, the input number-conversion algorithm shall be
    extended to recognize floating-point numbers."

    Which means you have to do an overhaul of the text interpreter. Which is a HORRIBLE requirement!

    And its rationale:

    "A.12.3.7 Text interpreter input number conversion. The Technical Committee has more than once received the suggestion that the text
    interpreter in Standard Forth systems should treat numbers that have an embedded decimal point, but no exponent, as floating-point numbers
    rather than double cell numbers. This suggestion, although it has merit, has always been voted down because it would break too much existing
    code; many existing implementations put the full digit string on the stack as a double number and use other means to inform the application of
    the location of the decimal point."

    It would have been better if such requirement had NOT existed and (as ugly as it is) S" 12.34e" >FLOAT had remained the only accepted way to
    enter an FP number - OR a word like F% or F# had been brought into existence for the time being.

    I would say by the time ANS-TC began its deliberations the die had already been cast.
    The 'Standard Floating Point Extension' published in 1985 by the Forth Vendors Group
    (LMI and Micromotion with input from several vendors) required input in the form:

    If the floating point extension word set has been overlaid onto a
    83-Standard Forth system, a string of the following form will be
    compiled or interpreted as a real number:

    nnnn.nnnExx

    The "E" signifier is mandatory to force the conversion of a real
    number. The presence of numeric digits before or after the "E"
    is not required by this specification but may be mandatory in
    some implementations. A "-" sign may precede both the mantissa
    and the exponent, a leading "+" sign is also permissible on the
    exponent. A decimal point is optional and occur anywhere in the
    mantissa. For example, all of the following numbers are legal:

    -.0001E5
    100.0E+0
    1000.E-15

    After Forth-83 which split vendors, ANS-TC wasn't going to do anything that drew the
    ire of an existing user base. One only has to look at the flack Forth-94 received
    when a section of existing locals users didn't get what they were expecting.

    I still think that meddling with the text interpreter is a big no-no and an invitation to disaster. Never leave to a computer that which a
    programmer can signify as his intent. Although I'm still not dancing on the table, that is at least one of the characteristics of Alberts
    proposal (and it leaves the text interpreter largely intact!)

    I get it but IMO f/p isn't something one simply LOADs - even if Forth-94 sold it that
    way as a nod to minimalists. With the exception of folks like me (and perhaps you)
    who want to be able to load a variety of f/p packs, f/p is there when one boots forth.
    What the eyes don't see, the heart doesn't grieve.


    With the diminishing importance of double integers, I would support
    the idea if requiring a decimal point as the start *and* end of a double precision number.
    .10000000000000000000.
    Now any number containing one decimal point can safely be considered a
    floating point number.
    Also E as the exponent is a design error. The twiggle is ideal,
    it support a 126 base. BASE 16 is ideal to eliminate rounding errors
    during transfers over asci channels.

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Fri Feb 13 13:07:25 2026
    From Newsgroup: comp.lang.forth

    In article <nnd$3eff7379$1c810e7c@faf68284076bf848>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    On 12-02-2026 08:24, Anton Ertl wrote:
    dxf <dxforth@gmail.com> writes:
    [reformatted to Usenet standards]

    I get it but IMO f/p isn't something one simply LOADs - even if
    Forth-94 sold it that way as a nod to minimalists. With the
    exception of folks like me (and perhaps you) who want to be able to
    load a variety of f/p packs, f/p is there when one boots forth.

    SwiftForth before 4.0 (which was only released on 22-Oct-2025) does
    not include the FP wordset by default. VFX Forth before release 5
    (released on 24 August 2018) does not include the FP wordset by
    default. SwiftForth 4.x and VFX 5.x include the FP wordset by
    default.

    Gforth, iForth, and lxf included the FP wordset by default in all
    versions that I have tested.

    - anton

    Neither does 4tH. But that those are already included might be a logical >result of recognizing FP numbers in the text interpreter. Think of it:
    why implement that in a CORE compiler? To what should it compile?
    Especially since that would require an FP stack (since other
    implementations have been outlawed since).

    In the context of loadable "recognizers" ( PREFIX )
    \--------------------8< linafp.frt --------
    WANT -fp-
    : Doit QUIT ;
    \--------------------8<----------------------
    # lina -c linafp.frt
    # linafp

    If you want linafp more to behave like a normal ciforth
    (automatically processing options), you can add :

    ' OPTIONS RESTORED
    ' ERROR RESTORED

    (A compiled program doesn't return to QUIT , all errors
    must be explicitly caught . Moreover the parsing of
    options must be explicitly invoked.)

    So there is no good reason to burden the

    \--------------------8<----------------------
    : ascii 1 ARG[] DROP C@ . ;
    \--------------------8<----------------------
    # lina -c ascii.frt
    # ascii A
    # 65

    with a full fp packet and an assembler.

    Groetjes Albert





    Hans Bezemer
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Fri Feb 13 13:28:04 2026
    From Newsgroup: comp.lang.forth

    In article <nnd$0bd8f009$4a43768d@e4e316720ccca85b>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    Single numbers - I get that. Forth would be awkward to work with when
    you need a thing like "S%" every single line.

    First I have to congratulate you with your textbook example of a
    "Reductio ad absurdum". And I don't mean that as "committing a logical >falacy" - I do think you use it correctly.

    I'm learning chinese. If a number is used as a counter a number has
    to be followed by a measure word. If a number is used as an ordinal
    is has to be preceded by 'di'. It makes things easier to understand.
    In my example of prime determination determination all huge numbers
    are h1 h2 h3333 to tell them apart from 1 2 3333.
    Not too awkward.


    Thank you for reusing my "Single numbers - I get that. Forth would be
    awkward to work with when you need a thing like "S%" every single line."
    But I don't think it's appropriate. And there we come to the central point:

    I don't think it is too bad. And replacing 'S% ' by the prefix 1 2 3 4 ..
    is essentially the idea of a PREFIX.

    <SNIP>

    Hans Bezemer
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Fri Feb 13 13:30:36 2026
    From Newsgroup: comp.lang.forth

    On 13-02-2026 12:35, albert@spenarnc.xs4all.nl wrote:
    In article <698d205a$1@news.ausics.net>, dxf <dxforth@gmail.com> wrote:
    On 12/02/2026 12:34 am, Hans Bezemer wrote:
    On 11-02-2026 01:21, dxf wrote:
    On 11/02/2026 4:48 am, jkn wrote:
    ...
    I have no skin in this game at all - I am basically an observer of both the language,
    and this newsgroup. But it seems strange to me that in a language that is so
    self-describedly flexible as Forth, the operation of the inner interpreter should
    not itself be open to flexibility.

    IIRC recognizers was a c.l.f invention.-a Each forth, it was noted, had its own way
    of integrating floating-point into the system - fp being an 'optional extension'
    of Forth-94.-a Typically integration was achieved through hooks the system designer
    had purposely built into system.-a Forth-94 had already defined how the forth
    interpreter should handle fp numbers.-a Parsing words F# etc were not an option.

    WIBN (wouldn't it be nice) it was argued if these hooks into the interpreter could
    be made portable.-a It caught the imagination of sufficient users (in forth there's
    little distinction between user and system-designer) and the rest is history.
    Recognizers were sufficiently complicated prompting more justification than fp (1)
    in order to sell it.-a It was 'a solution in search of a problem'.-a From that came
    the idea that forth should be able to parse *anything* - however unlikely or little
    used.

    (1) While fp integration prompted recognizers, recognizers were never a complete
    solution.-a Integrating fp into a system often requires more than simply making the
    interpreter recognize fp numbers.-a System-specific hooks remain.


    Extending the functionality of already defined words (in previous wordsets) was always a weak point of ANS-94. I don't know if other language
    standards use this, but I don't feel comfortable with "redefining" or "extending" words.

    BTW, S" is one of the few examples of words that are not stateless (contrary to CHAR and [CHAR], ' and ['], ." and .( etc.).

    They could have spared us a lot of trouble defining S( - or whatever. But consistency has never been Forth's strong point, unfortunately.
    It's always trends that are aborted half way, because the maintenance efforts are getting out of hand.

    This discrepancy between pragmatism and "a brave new world" becomes painfully clear when reading section 12.3.7:

    "If the Floating-Point word set is present in the dictionary and the current base is DECIMAL, the input number-conversion algorithm shall be
    extended to recognize floating-point numbers."

    Which means you have to do an overhaul of the text interpreter. Which is a HORRIBLE requirement!

    And its rationale:

    "A.12.3.7 Text interpreter input number conversion. The Technical Committee has more than once received the suggestion that the text
    interpreter in Standard Forth systems should treat numbers that have an embedded decimal point, but no exponent, as floating-point numbers
    rather than double cell numbers. This suggestion, although it has merit, has always been voted down because it would break too much existing
    code; many existing implementations put the full digit string on the stack as a double number and use other means to inform the application of
    the location of the decimal point."

    It would have been better if such requirement had NOT existed and (as ugly as it is) S" 12.34e" >FLOAT had remained the only accepted way to
    enter an FP number - OR a word like F% or F# had been brought into existence for the time being.

    I would say by the time ANS-TC began its deliberations the die had already been cast.
    The 'Standard Floating Point Extension' published in 1985 by the Forth Vendors Group
    (LMI and Micromotion with input from several vendors) required input in the form:

    If the floating point extension word set has been overlaid onto a
    83-Standard Forth system, a string of the following form will be
    compiled or interpreted as a real number:

    nnnn.nnnExx

    The "E" signifier is mandatory to force the conversion of a real
    number. The presence of numeric digits before or after the "E"
    is not required by this specification but may be mandatory in
    some implementations. A "-" sign may precede both the mantissa
    and the exponent, a leading "+" sign is also permissible on the
    exponent. A decimal point is optional and occur anywhere in the
    mantissa. For example, all of the following numbers are legal:

    -.0001E5
    100.0E+0
    1000.E-15

    After Forth-83 which split vendors, ANS-TC wasn't going to do anything that drew the
    ire of an existing user base. One only has to look at the flack Forth-94 received
    when a section of existing locals users didn't get what they were expecting. >>
    I still think that meddling with the text interpreter is a big no-no and an invitation to disaster. Never leave to a computer that which a
    programmer can signify as his intent. Although I'm still not dancing on the table, that is at least one of the characteristics of Alberts
    proposal (and it leaves the text interpreter largely intact!)

    I get it but IMO f/p isn't something one simply LOADs - even if Forth-94 sold it that
    way as a nod to minimalists. With the exception of folks like me (and perhaps you)
    who want to be able to load a variety of f/p packs, f/p is there when one boots forth.
    What the eyes don't see, the heart doesn't grieve.


    With the diminishing importance of double integers, I would support
    the idea if requiring a decimal point as the start *and* end of a double precision number.
    .10000000000000000000.
    Now any number containing one decimal point can safely be considered a floating point number.
    Also E as the exponent is a design error. The twiggle is ideal,
    it support a 126 base. BASE 16 is ideal to eliminate rounding errors
    during transfers over asci channels.

    Groetjes Albert

    When I designed 4tH, I got rid of double numbers (and consequently,
    mixed numbers as well). Yeah, they have their use in the 16 bit era -
    but not anymore. FYI - that was 1994.

    In the 64-bit era, I think we could get rid of double numbers
    altogether. Dump the whole thing in a separate wordset and be done with
    it. Clean up CORE.

    "Yeah, but don't you know how much code would get broken?" Yeah, I've
    heard that song before. Let's keep dragging all that old stuff along
    till eternity. You can never have enough technical depth, can you.

    What about a wordset "OBSOLETE", where we can dump all that stuff. Like
    WORD, QUERY, EXPECT, CONVERT? So people can still compile their old
    stuff without lifting a finger?

    Hans Bezemer

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Fri Feb 13 13:44:17 2026
    From Newsgroup: comp.lang.forth

    In article <nnd$11632ec1$4065bb35@f854684003bd1681>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    <SNIP>

    When I designed 4tH, I got rid of double numbers (and consequently,
    mixed numbers as well). Yeah, they have their use in the 16 bit era -
    but not anymore. FYI - that was 1994.

    In the 64-bit era, I think we could get rid of double numbers
    altogether. Dump the whole thing in a separate wordset and be done with
    it. Clean up CORE.

    "Yeah, but don't you know how much code would get broken?" Yeah, I've
    heard that song before. Let's keep dragging all that old stuff along
    till eternity. You can never have enough technical depth, can you.

    What about a wordset "OBSOLETE", where we can dump all that stuff. Like
    WORD, QUERY, EXPECT, CONVERT? So people can still compile their old
    stuff without lifting a finger?

    ciforth (meaning i.a. close to iso forth) avoids all deviations from
    the standard, at the expense of conciseness and elegance.
    That goes a long way to running most portable programs.
    One example of a deviation is the mapping of Linux exception numbers
    to supposedly portable numbers. I use the exception numbers itself.


    Hans Bezemer

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Fri Feb 13 13:43:13 2026
    From Newsgroup: comp.lang.forth

    On 13-02-2026 09:27, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:35, Anton Ertl wrote:
    [...] small implementations
    pick and choose from the standard requirements anyway, even among the
    requirements for CORE words. The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.
    ...
    I don't think that people who are "implementing Forth as an exercise"
    can be bothered to make it "a standard compiler".

    The point is not standard conformance, but a goalpost: To have
    something to direct the work, and also to have something that tells
    the implementor when the project is complete.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented.

    Who is "you" in this sentence? Given that you write "implemented",
    you seem to argue that the standard requires the system implementor to implement the base word, and then to patch it. This is not the case.
    The system implementor who has decided to implement the FILE words in addition to the CORE words can implement the FILE version of S" from
    the start, without any patching.

    Note also that the FILE version of S" conforms to the requirements for
    the CORE version of S", and that's generally the case for the extended versions of words. E.g., the specification of CORE's POSTPONE
    includes

    | An ambiguous condition exists if name is not found.

    so it does not specify what "POSTPONE 123" means. The proposed
    recognizer version of POSTPONE specifies that.

    - anton

    I could have used "one" - wouldn't have changed the meaning. Nice "Whataboutism"! The argument was (and is) what use has a standard for a
    toy compiler? Things are done when "one" says they're done. You (like
    "Anton") overestimate the authority of a standards body greatly.
    Especially when the language concerned is almost dead. There are more
    people implementing that compiler than writing programs for it!

    And yes - it often happens (I speak from my own experience) that "one"
    (now clear for you? :) thinks - "that's as far as I want/need to go" and consider otherwise later. And yeah, then "one" has to patch it. Because
    the word *IS* already defined "one" has to extend its functionality.

    "An ambiguous condition exists if name is not found."
    That's not a point I addressed. (Not "one").

    Hans Bezemer

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Fri Feb 13 14:17:54 2026
    From Newsgroup: comp.lang.forth

    On 12-02-2026 13:55, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 11-02-2026 17:30, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    FYI, this is a canonical implementation of that interpreter:

    : INTERPRET ( -- )
    BEGIN
    BL FIND IF EXECUTE
    ?STACK ABORT" Stack empty"
    ELSE NUMBER THEN
    AGAIN ;

    This is the canonical implementation? Where did you get that from?

    Begin, get the next token,

    Where do I find this in this code?

    if it's a command execute it, if not convert
    to a number, rinse and repeat. That's it.

    How does the loop terminate? Are you using the fig-Forth X approach
    for that?

    [reordered]
    BTW, if you have questions about "INTERPRET", please direct them to
    Forth Inc.
    https://www.forth.com/starting-forth/11-forth-compiler-defining-words/

    I won't waste my time targeting an example - but that's just me. It's
    like pointing out a spelling error - as if that debunks the entire argument.

    It was you who claimed that it is "a canonical implementation of that interpreter", without even giving a source.

    But reading further, it becomes clear why this INTERPRET deals only
    with interpretation mode: because there is another text interpreter
    for compilation mode, which the book shows slightly further down, but
    which you failed to show:

    : ] ( -- )
    BEGIN
    BL FIND DUP IF
    -1 = IF EXECUTE ?STACK ABORT" Stack empty"
    ELSE , THEN
    ELSE DROP (NUMBER) POSTPONE LITERAL THEN
    AGAIN ;

    Looks a bit messier already, with a triple-nested control structure.
    And again, the parsing part is missing, and in addition it does not
    compile double numbers correctly. It's interesting that [COMPILE] is replaced by POSTPONE in this code, which definitely does not run on
    any Forth-94 system (because BL and FIND do not work that way in
    Forth-94).

    Compared to (tested in the meantime, and works):

    : interpret ( ... -- ... )
    begin
    parse-name dup while
    rec-forth state @ 2 + cells + @ execute
    repeat
    2drop ;

    Note that it deals with interpretation and compilation state (that's
    why there is the "state @ 2 + cells +" sequence; immediacy is handled
    elsewhere. The checking of the various recognizers happens inside
    REC-FORTH.

    Single numbers - I get that. Forth would be awkward to work with when
    you need a thing like "S%" every single line.

    And likewise, requiring F% or F# for FP or D% for doubles etc. would
    make Forth awkward. That's why we recognize floats and doubles in the
    text interpreter.

    BTW, your F% implementation tries to cover both interpretation and compilation modes, which you rightly criticise S" for. That's one of
    the pitfalls of using parsing words.

    Note - in those days, late seventies, early
    eighties, floating point numbers were unheard of.

    To counter your misconceptions, read <https://en.wikipedia.org/wiki/Floating-point_arithmetic#History>.

    Even the PDP-11, on which Forth ran, could be bought with
    floating-point hardware.

    At that time, 32-bit
    numbers were unheard of.

    The Manchester Baby used a 32-bit architecture in 1948. The IBM
    S/360, a mainframe with 32-bit machine words came out in 1964. The
    VAX, a minicomputer with 32-bit machine words came out in 1977. The
    68000, a microprocessor with 32-bit machine words came out in 1980.
    And these machines followed the 36-bit machines, such as the IBM 701
    and Univac 1103 from 1953.

    For the same reason I can understand why Chuck chose a thing like STATE
    or a flag like IMMEDIATE. I suppose he could have chosen another
    approach - with one single immediate word ([) to shutdown the compiler
    and return to interpretation (] would already be executed anyway).

    He actually replaced STATE with two text interpretation loops similar
    to the ones shown above, i.e., INTERPRET for interpretation mode and ]
    for compilation mode. This change probably at some point between
    microForth and polyForth.

    But there were still two modes, and immediate words and all the
    complications they implied. And yes, they make Forth less awkward to
    use. I am glad that you admit that reducing complexity is not the
    be-all and end-all of Forth.

    So at the bottom line it's just a question of whether the benefit is
    worth the cost. You want a Forth that needs F% or F# for FP literals,
    and D% for double literals, the Forth standard committees, and, for
    doubles, also Chuck Moore, have decided that the benefits of
    recognized numbers were worth the costs.

    - anton

    Anton:
    "And likewise, requiring F% or F# for FP or D% for doubles etc. would
    make Forth awkward. That's why we recognize floats and doubles in the
    text interpreter."

    Lars:
    "I worked professionally for a year or so with a Forth that required "#"
    before every number. It was indeed a little awkward, but mostly in the beginning before I got used to it."

    The point is - "awkward" is in the eye of the beholder. It is a
    "secondary quality" according to Locke - i.e. one that depends on
    "taste" rather than "measurement". And hence, can never be resolved in
    an objective way. So, it's not much of an argument.

    Your argument on FP is disingenuous. I'm talking about Forth, not
    hardware. I think that's pretty obvious. In no contemporary book on
    Forth, floating point is discussed. Floating point is not a part of any contemporary Forth standard.

    As a matter of fact, the methods and benefits of fixed point arithmetic
    are discussed in great length in "Starting Forth". Not a word on
    floating point. Worse (in your case) - fixed point calculation is
    actively promoted:

    "Certain principles which FORTH programmers adhere to religiously are considered foolhardy by the proponents of more traditional languages.
    One such controversy is the question of "fixed-point" versus
    "floating-point representation".

    There is also the overhead of floating all the input data and fixing all
    the output data, approximately equal to one floating-point addition
    each. When these operations are performed thousands or millions of
    times, the overall saving by remaining in integer form is enormous."

    -- Starting Forth, the philosophy of fixed point, Leo Brodie

    Later, in FD he actually elaborates on this method, although I agree it
    only became feasable to actually use in the 64-bit era. I did a video on
    it, and I must admit I've applied this method more often than using one
    of my floating point libraries.

    So - no, Forth-wise it only became widespread after ANS-94.

    And then "the committee" and "Chuck Moore". Without their arguments it's
    just a "Call to authority" logical fallacy. What were their arguments?
    Which options have they actually considered? Where is the rationale? Or
    was it just "we love that it looks just like C"?

    And frankly, if you REALLY don't like STATE and IMMEDIATE, get to work,
    make an implementation and write a nice paper about it - instead of incessantly whining about it.

    I didn't like the Forth architecture, I set down, I wrote a compiler.
    And every year it is more and more capable to process vanilla Forth. You
    won't hear me whine. I'm much too busy for that.

    Hans Bezemer

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Sat Feb 14 01:23:22 2026
    From Newsgroup: comp.lang.forth

    On 13/02/2026 11:28 pm, albert@spenarnc.xs4all.nl wrote:
    In article <nnd$0bd8f009$4a43768d@e4e316720ccca85b>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    Single numbers - I get that. Forth would be awkward to work with when
    you need a thing like "S%" every single line.

    First I have to congratulate you with your textbook example of a
    "Reductio ad absurdum". And I don't mean that as "committing a logical
    falacy" - I do think you use it correctly.

    I'm learning chinese.

    I feel enough of a robot as it is.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Gerry Jackson@do-not-use@swldwa.uk to comp.lang.forth on Fri Feb 13 23:50:56 2026
    From Newsgroup: comp.lang.forth

    On 13/02/2026 12:43, Hans Bezemer wrote:
    On 13-02-2026 09:27, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:35, Anton Ertl wrote:
    [...] small implementations
    pick and choose from the standard requirements anyway, even among the
    requirements for CORE words.-a The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.
    ...
    I don't think that people who are "implementing Forth as an exercise"
    can be bothered to make it "a standard compiler".

    The point is not standard conformance, but a goalpost: To have
    something to direct the work, and also to have something that tells
    the implementor when the project is complete.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented.

    Who is "you" in this sentence?-a Given that you write "implemented",
    you seem to argue that the standard requires the system implementor to
    implement the base word, and then to patch it.-a This is not the case.
    The system implementor who has decided to implement the FILE words in
    addition to the CORE words can implement the FILE version of S" from
    the start, without any patching.

    Note also that the FILE version of S" conforms to the requirements for
    the CORE version of S", and that's generally the case for the extended
    versions of words.-a E.g., the specification of CORE's POSTPONE
    includes

    | An ambiguous condition exists if name is not found.

    so it does not specify what "POSTPONE 123" means.-a The proposed
    recognizer version of POSTPONE specifies that.

    - anton

    I could have used "one" - wouldn't have changed the meaning. Nice "Whataboutism"! The argument was (and is) what use has a standard for a
    toy compiler?

    There's another point I think you're missing. I just looked on at my
    Forth test suite on GitHub and 78 people have found it useful enough to
    give it a star. I've no idea whether they are all developing their own
    "toy" system but I would guess most are, and their system has to have
    some testing. I suggest that the easiest way is to use an existing test
    suite. As far as I know there is only one, so that automatically leads
    them to make their system (at least partially) standard compliant. An unexpected (and unintended) consequence of having a test suite.

    Things are done when "one" says they're done. You (like
    "Anton") overestimate the authority of a standards body greatly.
    Especially when the language concerned is almost dead. There are more
    people implementing that compiler than writing programs for it!

    And yes - it often happens (I speak from my own experience) that "one"
    (now clear for you? :) thinks - "that's as far as I want/need to go" and consider otherwise later. And yeah, then "one" has to patch it. Because
    the word *IS* already defined "one" has to extend its functionality.

    "An ambiguous condition exists if name is not found."
    That's not a point I addressed. (Not "one").I just looked on GitHub

    Hans Bezemer

    --
    Gerry
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Sat Feb 14 12:53:01 2026
    From Newsgroup: comp.lang.forth

    On 14/02/2026 10:50 am, Gerry Jackson wrote:
    On 13/02/2026 12:43, Hans Bezemer wrote:
    On 13-02-2026 09:27, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:35, Anton Ertl wrote:
    [...] small implementations
    pick and choose from the standard requirements anyway, even among the >>>>> requirements for CORE words.-a The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.
    ...
    I don't think that people who are "implementing Forth as an exercise"
    can be bothered to make it "a standard compiler".

    The point is not standard conformance, but a goalpost: To have
    something to direct the work, and also to have something that tells
    the implementor when the project is complete.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented.

    Who is "you" in this sentence?-a Given that you write "implemented",
    you seem to argue that the standard requires the system implementor to
    implement the base word, and then to patch it.-a This is not the case.
    The system implementor who has decided to implement the FILE words in
    addition to the CORE words can implement the FILE version of S" from
    the start, without any patching.

    Note also that the FILE version of S" conforms to the requirements for
    the CORE version of S", and that's generally the case for the extended
    versions of words.-a E.g., the specification of CORE's POSTPONE
    includes

    | An ambiguous condition exists if name is not found.

    so it does not specify what "POSTPONE 123" means.-a The proposed
    recognizer version of POSTPONE specifies that.

    - anton

    I could have used "one" - wouldn't have changed the meaning. Nice "Whataboutism"! The argument was (and is) what use has a standard for a toy compiler?

    There's another point I think you're missing. I just looked on at my Forth test suite on GitHub and 78 people have found it useful enough to give it a star. I've no idea whether they are all developing their own "toy" system but I would guess most are, and their system has to have some testing. I suggest that the easiest way is to use an existing test suite. As far as I know there is only one, so that automatically leads them to make their system (at least partially) standard compliant. An unexpected (and unintended) consequence of having a test suite.

    Cart before horse but I agree. First-time creators will generally pick some standard or system because it's the easiest way. All the thinking has been done for one and there's a wealth of existing source from which to choose or use as a guide. It's a rare lion that hasn't undertaken internship as a camel. Moore appears to have been a rebel, lone wolf, from the beginning for whom conformity was anathema, stagnation.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Sun Feb 15 13:33:44 2026
    From Newsgroup: comp.lang.forth

    In article <698fd57e$1@news.ausics.net>, dxf <dxforth@gmail.com> wrote:
    On 14/02/2026 10:50 am, Gerry Jackson wrote:
    On 13/02/2026 12:43, Hans Bezemer wrote:
    On 13-02-2026 09:27, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:35, Anton Ertl wrote:
    [...] small implementations
    pick and choose from the standard requirements anyway, even among the >>>>>> requirements for CORE words.-a The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.
    ...
    I don't think that people who are "implementing Forth as an exercise" >>>>> can be bothered to make it "a standard compiler".

    The point is not standard conformance, but a goalpost: To have
    something to direct the work, and also to have something that tells
    the implementor when the project is complete.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented.

    Who is "you" in this sentence?-a Given that you write "implemented",
    you seem to argue that the standard requires the system implementor to >>>> implement the base word, and then to patch it.-a This is not the case. >>>> The system implementor who has decided to implement the FILE words in
    addition to the CORE words can implement the FILE version of S" from
    the start, without any patching.

    Note also that the FILE version of S" conforms to the requirements for >>>> the CORE version of S", and that's generally the case for the extended >>>> versions of words.-a E.g., the specification of CORE's POSTPONE
    includes

    | An ambiguous condition exists if name is not found.

    so it does not specify what "POSTPONE 123" means.-a The proposed
    recognizer version of POSTPONE specifies that.

    - anton

    I could have used "one" - wouldn't have changed the meaning. Nice "Whataboutism"! The argument was (and is) what use has a standard for a
    toy compiler?

    There's another point I think you're missing. I just looked on at my Forth test suite on GitHub and 78 people have found it useful enough to
    give it a star. I've no idea whether they are all developing their own "toy" system but I would guess most are, and their system has to have
    some testing. I suggest that the easiest way is to use an existing test suite. As far as I know there is only one, so that automatically leads
    them to make their system (at least partially) standard compliant. An unexpected (and unintended) consequence of having a test suite.

    Cart before horse but I agree. First-time creators will generally pick some >standard or system because it's the easiest way. All the thinking has been >done for one and there's a wealth of existing source from which to choose or >use as a guide. It's a rare lion that hasn't undertaken internship as a camel.
    Moore appears to have been a rebel, lone wolf, from the beginning for whom >conformity was anathema, stagnation.


    You have to test also the words you define yourself. The best is to
    come up with complete test for each word, in combination with the
    specification and the definition.
    This is an example from ciforth:

    worddoc( {LOGIC},{0=},{zero_equals},{n --- ff},{ISO,FIG},
    {Leave a true flag forthvar({ff}) is the number forthvar({n})
    is equal to zero, otherwise leave a false flag.
    It may be aliased to forthcode({NOT}) , which inverts a flag.
    },{{=},{0<}},
    { {0 0= .},{_T_},
    { 1 0= .},{0},
    { -1 0= .},{0} },
    enddoc)
    CODE_HEADER({0=},{ZEQU}) dnl ZEQU is the name used in the assembler file.
    POP AX _C{S2}
    AND AX,AX
    SETZ AL
    MOVZX AX,AL
    NEG AX
    _PUSH
    _C

    Stack effect, properties, specifications, also's , tests and
    code.

    (Macro _PUSH has inside a _NEXT. )

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Krishna Myneni@krishna.myneni@ccreweb.org to comp.lang.forth on Mon Feb 16 22:07:48 2026
    From Newsgroup: comp.lang.forth

    On 2/12/26 5:07 AM, Hans Bezemer wrote:
    On 11-02-2026 17:30, Anton Ertl wrote:
    ...
    BTW, if you have questions about "INTERPRET", please direct them to
    Forth Inc. https://www.forth.com/starting-forth/11-forth-compiler- defining-words/


    A simple search on "Swift Forth recognizers" returns this

    https://www.forth.com/recognizers/

    Make what you will about it. In my experience, for-profit companies tend
    to be conservative about introducing new features, especially if they
    think customers won't want it.

    Revisions to the kForth-64 code to support recognizers are in progress.

    --
    Krishna Myneni

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Tue Feb 17 21:25:06 2026
    From Newsgroup: comp.lang.forth

    On 17/02/2026 3:07 pm, Krishna Myneni wrote:
    On 2/12/26 5:07 AM, Hans Bezemer wrote:
    On 11-02-2026 17:30, Anton Ertl wrote:
    ...
    BTW, if you have questions about "INTERPRET", please direct them to Forth Inc. https://www.forth.com/starting-forth/11-forth-compiler- defining-words/


    A simple search on "Swift Forth recognizers" returns this

    https://www.forth.com/recognizers/

    Make what you will about it. In my experience, for-profit companies tend to be conservative about introducing new features, especially if they think customers won't want it.
    ...

    OTOH had FI been dead against it for whatever reason it's doubtful the
    proposal would have gotten as far as it has. Some proposals end up
    permanently on death row never quite reaching the chopping block. Long
    ago I put up a draft proposal on c.l.f for UPC >UPPER to gauge its chance
    of success. The response from vendors present could be summed up as 'not interested'. By now most everyone understands what's involved and lobbies privately and strategically or not at all. I say 'most' because watching
    the ones that don't can be quite amusing ;-)



    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Stephen Pelc@stephen@vfxforth.com to comp.lang.forth on Tue Feb 17 14:13:02 2026
    From Newsgroup: comp.lang.forth

    On 17 Feb 2026 at 05:07:48 CET, "Krishna Myneni" <krishna.myneni@ccreweb.org> wrote:

    Make what you will about it. In my experience, for-profit companies tend
    to be conservative about introducing new features, especially if they
    think customers won't want it.

    Revisions to the kForth-64 code to support recognizers are in progress.

    --
    Krishna Myneni

    We are not really conservative about new features, but we are really, really conservative about breaing clients' existing code. In other words, changing
    how things work is much more dangerous than adding new operations.

    Breaking client code leads to screams and immediate angry calls and
    emails. We make great efforts not to break an app with over one million
    lines of Forth source code. We do not have access to most client code.

    Stephen
    --
    Stephen Pelc, stephen@vfxforth.com
    Wodni & Pelc GmbH
    Vienna, Austria
    Tel: +44 (0)7803 903612, +34 649 662 974 http://www.vfxforth.com/downloads/VfxCommunity/
    free VFX Forth downloads
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Krishna Myneni@krishna.myneni@ccreweb.org to comp.lang.forth on Tue Feb 17 08:16:43 2026
    From Newsgroup: comp.lang.forth

    On 2/17/26 4:25 AM, dxf wrote:
    On 17/02/2026 3:07 pm, Krishna Myneni wrote:
    On 2/12/26 5:07 AM, Hans Bezemer wrote:
    On 11-02-2026 17:30, Anton Ertl wrote:
    ...
    BTW, if you have questions about "INTERPRET", please direct them to Forth Inc. https://www.forth.com/starting-forth/11-forth-compiler- defining-words/


    A simple search on "Swift Forth recognizers" returns this

    https://www.forth.com/recognizers/

    Make what you will about it. In my experience, for-profit companies tend to be conservative about introducing new features, especially if they think customers won't want it.
    ...

    OTOH had FI been dead against it for whatever reason it's doubtful the proposal would have gotten as far as it has. Some proposals end up permanently on death row never quite reaching the chopping block. Long
    ago I put up a draft proposal on c.l.f for UPC >UPPER to gauge its chance
    of success. The response from vendors present could be summed up as 'not interested'. By now most everyone understands what's involved and lobbies privately and strategically or not at all. I say 'most' because watching
    the ones that don't can be quite amusing ;-)



    I'll qualify my statement about companies being conservative as mostly applicable to small companies. Obviously companies like Microsoft,
    Apple, and Google will simply force large scale changes on users. But
    smaller companies can't do that.

    Regarding advancing the proposal process, one has to stay with it for an extended time. The recognizer proposal is now greater than 10 years old
    before it is getting close to a call for votes. My IEEE fp proposal was retired by the committe, partly due to me not having time to pursue it,
    but I recently changed its status back to informal proposal with the
    intent to improve the rationale and strengthen it.

    --
    KM

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Tue Feb 17 20:21:43 2026
    From Newsgroup: comp.lang.forth

    In article <10n1t1e$1qn3f$1@dont-email.me>,
    Stephen Pelc <stephen@vfxforth.com> wrote:
    On 17 Feb 2026 at 05:07:48 CET, "Krishna Myneni" <krishna.myneni@ccreweb.org> >wrote:

    Make what you will about it. In my experience, for-profit companies tend
    to be conservative about introducing new features, especially if they
    think customers won't want it.

    Revisions to the kForth-64 code to support recognizers are in progress.

    --
    Krishna Myneni

    We are not really conservative about new features, but we are really, really >conservative about breaing clients' existing code. In other words, changing >how things work is much more dangerous than adding new operations.

    Breaking client code leads to screams and immediate angry calls and
    emails. We make great efforts not to break an app with over one million
    lines of Forth source code. We do not have access to most client code.

    I introduced PREFIX (mini recognizers) and nobody could notice.
    It changed implementation of numbers, and made possible a $ prefix,
    and normal strings. However all previous programs kept on working.

    Giving out day by day updates, where a serious client is obliged to
    validate the whole compiler again, is a nono by my book.


    Stephen

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Wed Feb 18 13:08:00 2026
    From Newsgroup: comp.lang.forth

    On 18/02/2026 1:13 am, Stephen Pelc wrote:
    On 17 Feb 2026 at 05:07:48 CET, "Krishna Myneni" <krishna.myneni@ccreweb.org> wrote:

    Make what you will about it. In my experience, for-profit companies tend
    to be conservative about introducing new features, especially if they
    think customers won't want it.

    Revisions to the kForth-64 code to support recognizers are in progress.

    --
    Krishna Myneni

    We are not really conservative about new features, but we are really, really conservative about breaing clients' existing code. In other words, changing how things work is much more dangerous than adding new operations.
    ...

    But surely you have broken clients' code e.g. floating-point output. Presumably
    it was justified as 'short-term pain for long-term gain'. Similarly Forth-94, dual-xt etc etc. AFAICS it comes down to what one personally feels to be the right thing. If the will exists, customer reaction is a matter of management.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From minforth@minforth@gmx.net to comp.lang.forth on Wed Feb 18 11:14:11 2026
    From Newsgroup: comp.lang.forth

    Am 09.02.2026 um 08:49 schrieb Anton Ertl:
    A more fleshed-out version of the current recognizer proposal is
    online: <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it). OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective. In either case, please report any feedback by clicking on the Reply button on the web page above.


    Thank you for your editorial review of the proposal!

    This is not the time or place for criticism. Everyone must decide for themselves whether this flavour of recognisers is useful for their applications.

    At least it shows that things are moving again in Forth!
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Wed Feb 18 12:33:05 2026
    From Newsgroup: comp.lang.forth

    In article <2026Feb9.084944@mips.complang.tuwien.ac.at>,
    Anton Ertl <anton@mips.complang.tuwien.ac.at> wrote:
    A more fleshed-out version of the current recognizer proposal is
    online: ><https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be
    acted upon (but you might still want to give it). OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective. In either case, please report any >feedback by clicking on the Reply button on the web page above.

    After the header Solution:
    "As before the text interpreter parses a white-space-delimited string. "
    2]

    What does that mean in the context of:

    "We gaan naar Rome" TYPE

    ?
    Are there one or four delimiters in this string?

    In section 3.4.1 parsing

    "
    And the number in >IN is changed to index immediately past that
    delimiter, thus removing the parsed characters and the delimiter from
    the parse area."

    S'"1 2 DROP" EVALUATE
    runs into problems with this.
    This requires moving >IN moved past the non-existing delimiter.

    Wouldn't it be better to simplify this to :

    "
    And the number in >IN is changed to index immediately past the word parsed"
    1]

    In view of the requirement that WORD / PARSE-NAME is required to skip
    leading delimiters this change is harmless in my opinion.

    In other parsing situations (recognizers) it is no use to restrict
    those recognizers to take care of a delimiter that is not relevant.
    For strings only the " delimiter is relevant:

    "crc.frt" R/W OPEN-FILE

    Naturally the string recognizer returns the filename, and leaves >IN
    pointer after the " , instead of after the first blank character after
    " .


    P.S.
    1] Maybe still including the clarification
    "thus removing the parsed characters"
    but it is now largely superfluous.
    2] I would rather see:
    "
    A recognizer leaves >N pointing after the part of the input stream
    that has been recognized. "
    How logical does that sound!
    (It is in fact a tautology. The position of >IN defines for all
    practical purposes what has been recognized.)

    - anton
    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Thu Feb 19 13:42:57 2026
    From Newsgroup: comp.lang.forth

    On 14-02-2026 02:53, dxf wrote:
    On 14/02/2026 10:50 am, Gerry Jackson wrote:
    On 13/02/2026 12:43, Hans Bezemer wrote:
    On 13-02-2026 09:27, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:35, Anton Ertl wrote:
    [...] small implementations
    pick and choose from the standard requirements anyway, even among the >>>>>> requirements for CORE words.-a The CORE wordset has only been a
    goalpost for peoplle who implement Forth as an exercise.
    ...
    I don't think that people who are "implementing Forth as an exercise" >>>>> can be bothered to make it "a standard compiler".

    The point is not standard conformance, but a goalpost: To have
    something to direct the work, and also to have something that tells
    the implementor when the project is complete.

    And although wordsets build modularity (which I welcome) it becomes
    useless when it requires you to patch wordsets already implemented.

    Who is "you" in this sentence?-a Given that you write "implemented",
    you seem to argue that the standard requires the system implementor to >>>> implement the base word, and then to patch it.-a This is not the case. >>>> The system implementor who has decided to implement the FILE words in
    addition to the CORE words can implement the FILE version of S" from
    the start, without any patching.

    Note also that the FILE version of S" conforms to the requirements for >>>> the CORE version of S", and that's generally the case for the extended >>>> versions of words.-a E.g., the specification of CORE's POSTPONE
    includes

    | An ambiguous condition exists if name is not found.

    so it does not specify what "POSTPONE 123" means.-a The proposed
    recognizer version of POSTPONE specifies that.

    - anton

    I could have used "one" - wouldn't have changed the meaning. Nice "Whataboutism"! The argument was (and is) what use has a standard for a toy compiler?

    There's another point I think you're missing. I just looked on at my Forth test suite on GitHub and 78 people have found it useful enough to give it a star. I've no idea whether they are all developing their own "toy" system but I would guess most are, and their system has to have some testing. I suggest that the easiest way is to use an existing test suite. As far as I know there is only one, so that automatically leads them to make their system (at least partially) standard compliant. An unexpected (and unintended) consequence of having a test suite.

    Cart before horse but I agree. First-time creators will generally pick some standard or system because it's the easiest way. All the thinking has been done for one and there's a wealth of existing source from which to choose or use as a guide. It's a rare lion that hasn't undertaken internship as a camel.
    Moore appears to have been a rebel, lone wolf, from the beginning for whom conformity was anathema, stagnation.


    Read what you're saying: "SOME standard or system". Not necessarily an ANS-kind of system. I think a newbie will rather rip something from the
    web that works and use that as a template than take a paper standard and
    try to replicate that one.

    If I dig into my own history - I took the Forth-79 standard, took the
    most essential parts from it and started from there - AKA it wasn't even
    a FULL Forth-79 system. The move to ANS started several versions later.

    So no - I don't swallow the argument "a CORE wordset is useful for bare implementations". I even wonder if they take a look at all. Or if they
    even care. If I may believe the presentations of recent Forth
    experiments, not at all.

    Hans Bezemer

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Thu Feb 19 14:38:07 2026
    From Newsgroup: comp.lang.forth

    In article <nnd$0ad3ab77$499f67d9@7973d9f3cc5a9d2e>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    On 14-02-2026 02:53, dxf wrote:
    Cart before horse but I agree. First-time creators will generally pick some >> standard or system because it's the easiest way. All the thinking has been >> done for one and there's a wealth of existing source from which to choose or >> use as a guide. It's a rare lion that hasn't undertaken internship as a camel.
    Moore appears to have been a rebel, lone wolf, from the beginning for whom >> conformity was anathema, stagnation.


    Read what you're saying: "SOME standard or system". Not necessarily an >ANS-kind of system. I think a newbie will rather rip something from the
    web that works and use that as a template than take a paper standard and
    try to replicate that one.

    Maybe, maybe not. If you don't know anything about Forth and want to
    learn e.g. Haskell, and consider Forth as an exercise it is possible
    that you start with the CORE description.


    If I dig into my own history - I took the Forth-79 standard, took the
    most essential parts from it and started from there - AKA it wasn't even
    a FULL Forth-79 system. The move to ANS started several versions later.

    I was used to fig-Forth, and scanned the fig-Forth documentation and
    ocr-ed it. Contributed to Z80, using blocks-in-files for CPM, later MSDOS. These were used for real programs. Around 1990 for a campaign of the
    socialist party (SP), millions of addresses where printed for personal
    letters, based on street databases. Pallets of chain printing stickers.

    So no - I don't swallow the argument "a CORE wordset is useful for bare >implementations". I even wonder if they take a look at all. Or if they
    even care. If I may believe the presentations of recent Forth
    experiments, not at all.

    So once the ISO93 came along, I adapted an MSDOS Forth, then evolved
    it to 32 bits, then ported to Windows and linux, then evolved it to 64 bits. Practical additions are the file wordset, and standard in/standard out,
    the latter not guided by a standard.
    All the way I was concerned with compatibility and programs keep running.
    In practice that meant all the stuff from fig-Forth needed for
    programming in practice, was kept.
    It was accidental that the CORE set was a part of this.

    The DEC Alpha came along. This means changing the assembler source, to
    wit only the pieces written in assembly, not the headers, not the documentation, not the test. That was done within 14 days wall clock
    time (not 8 working hours!).

    All programs that work in this model, kept working on the DEC Alpha.

    Willem Ouwerkerk c.s. developed many Forths for small SBC (8051, etc.)
    This was done with a so called metacompiler. Once you get used to
    this tool, it is comparitively easy to port to new microprocessors.
    In this development path, the first thing you do is to write a
    Forth assembler for the new processor, then insert the uP-dependant
    stuff into the metacompiler tool.
    In this way the meta sources determine what is present, possibly
    a bit idiosyncratic.

    I consider my assembler sources more valuable than an open source
    metacompiler system, so I choose that route.



    Hans Bezemer


    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Fri Feb 20 12:33:23 2026
    From Newsgroup: comp.lang.forth

    On 20/02/2026 12:38 am, albert@spenarnc.xs4all.nl wrote:
    ...
    Willem Ouwerkerk c.s. developed many Forths for small SBC (8051, etc.)
    This was done with a so called metacompiler. Once you get used to
    this tool, it is comparitively easy to port to new microprocessors.
    In this development path, the first thing you do is to write a
    Forth assembler for the new processor, then insert the uP-dependant
    stuff into the metacompiler tool.
    In this way the meta sources determine what is present, possibly
    a bit idiosyncratic.

    I consider my assembler sources more valuable than an open source metacompiler system, so I choose that route.

    Not only was native assembler easier for me as I mentioned, it was
    considerably faster. Running the F83 metacompiler on a 4MHz Z80 was
    painfully slow. On top of this I'd have needed to modify it to do
    dictionary segmenting - my prime motivation in creating a forth.
    Even the ubiquitous M80 CP/M assembler proved too slow and I invested
    in an SLR Systems assembler. Given the number of compiles I did in
    development it was easily the best money I ever spent on software.
    Not that I wasn't forced to learn new stuff. Macros, code segmentation,
    etc gave me enough headaches. Looking back it seems crazy. No regrets
    however as I began to realize this was more my niche than writing
    applications. That said, if one doesn't write apps there's no way to
    evaluate the effectiveness of a given forth. How many forths never got
    past creation because the author's interest waned. For these the list
    of words in ANS etc suffices. But the forth one uses is something else.
    It's the difference between a living tree and what comprises trees.
    Standards are an obsession with the latter and kind of misses the point.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Thu Feb 12 12:55:21 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 11-02-2026 17:30, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    FYI, this is a canonical implementation of that interpreter:

    : INTERPRET ( -- )
    BEGIN
    BL FIND IF EXECUTE
    ?STACK ABORT" Stack empty"
    ELSE NUMBER THEN
    AGAIN ;

    This is the canonical implementation? Where did you get that from?

    Begin, get the next token,

    Where do I find this in this code?

    if it's a command execute it, if not convert
    to a number, rinse and repeat. That's it.

    How does the loop terminate? Are you using the fig-Forth X approach
    for that?

    [reordered]
    BTW, if you have questions about "INTERPRET", please direct them to
    Forth Inc. >https://www.forth.com/starting-forth/11-forth-compiler-defining-words/

    I won't waste my time targeting an example - but that's just me. It's
    like pointing out a spelling error - as if that debunks the entire argument.

    It was you who claimed that it is "a canonical implementation of that interpreter", without even giving a source.

    But reading further, it becomes clear why this INTERPRET deals only
    with interpretation mode: because there is another text interpreter
    for compilation mode, which the book shows slightly further down, but
    which you failed to show:

    : ] ( -- )
    BEGIN
    BL FIND DUP IF
    -1 = IF EXECUTE ?STACK ABORT" Stack empty"
    ELSE , THEN
    ELSE DROP (NUMBER) POSTPONE LITERAL THEN
    AGAIN ;

    Looks a bit messier already, with a triple-nested control structure.
    And again, the parsing part is missing, and in addition it does not
    compile double numbers correctly. It's interesting that [COMPILE] is
    replaced by POSTPONE in this code, which definitely does not run on
    any Forth-94 system (because BL and FIND do not work that way in
    Forth-94).

    Compared to (tested in the meantime, and works):

    : interpret ( ... -- ... )
    begin
    parse-name dup while
    rec-forth state @ 2 + cells + @ execute
    repeat
    2drop ;

    Note that it deals with interpretation and compilation state (that's
    why there is the "state @ 2 + cells +" sequence; immediacy is handled
    elsewhere. The checking of the various recognizers happens inside
    REC-FORTH.

    Single numbers - I get that. Forth would be awkward to work with when
    you need a thing like "S%" every single line.

    And likewise, requiring F% or F# for FP or D% for doubles etc. would
    make Forth awkward. That's why we recognize floats and doubles in the
    text interpreter.

    BTW, your F% implementation tries to cover both interpretation and
    compilation modes, which you rightly criticise S" for. That's one of
    the pitfalls of using parsing words.

    Note - in those days, late seventies, early
    eighties, floating point numbers were unheard of.

    To counter your misconceptions, read <https://en.wikipedia.org/wiki/Floating-point_arithmetic#History>.

    Even the PDP-11, on which Forth ran, could be bought with
    floating-point hardware.

    At that time, 32-bit
    numbers were unheard of.

    The Manchester Baby used a 32-bit architecture in 1948. The IBM
    S/360, a mainframe with 32-bit machine words came out in 1964. The
    VAX, a minicomputer with 32-bit machine words came out in 1977. The
    68000, a microprocessor with 32-bit machine words came out in 1980.
    And these machines followed the 36-bit machines, such as the IBM 701
    and Univac 1103 from 1953.

    For the same reason I can understand why Chuck chose a thing like STATE
    or a flag like IMMEDIATE. I suppose he could have chosen another
    approach - with one single immediate word ([) to shutdown the compiler
    and return to interpretation (] would already be executed anyway).

    He actually replaced STATE with two text interpretation loops similar
    to the ones shown above, i.e., INTERPRET for interpretation mode and ]
    for compilation mode. This change probably at some point between
    microForth and polyForth.

    But there were still two modes, and immediate words and all the
    complications they implied. And yes, they make Forth less awkward to
    use. I am glad that you admit that reducing complexity is not the
    be-all and end-all of Forth.

    So at the bottom line it's just a question of whether the benefit is
    worth the cost. You want a Forth that needs F% or F# for FP literals,
    and D% for double literals, the Forth standard committees, and, for
    doubles, also Chuck Moore, have decided that the benefits of
    recognized numbers were worth the costs.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Fri Feb 13 13:22:05 2026
    From Newsgroup: comp.lang.forth

    On 12-02-2026 11:13, Anton Ertl wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    On 12-02-2026 08:24, Anton Ertl wrote:
    Gforth, iForth, and lxf included the FP wordset by default in all
    versions that I have tested.
    ...
    Neither does 4tH. But that those are already included might be a logical
    result of recognizing FP numbers in the text interpreter.

    Counterexample: Gforth 0.7 (before recognizers): Here the text
    interpreter for one word contains hard-coded stuff for dealing with
    words (FIND-NAME) and with single and double-cell numbers (SNUMBER?),
    but nothing for floating-point. Instead, there are hooks INTERPRETER-NOTFOUND1 and COMPILER-NOTFOUND1, and when float.fs is
    loaded, recognizing floating-point words is added to these hooks.

    \ called in interpretation state
    : interpreter1 ( c-addr u -- ... xt )
    2dup find-name dup
    if
    nip nip name>int
    else
    drop
    2dup 2>r snumber?
    IF
    2rdrop ['] noop
    ELSE
    2r> interpreter-notfound1
    THEN
    then ;

    \ called in compilation state
    : compiler1 ( c-addr u -- ... xt )
    2dup find-name dup
    if ( c-addr u nt )
    nip nip name>comp
    else
    drop
    2dup 2>r snumber? dup
    IF
    0>
    IF
    ['] 2literal
    ELSE
    ['] literal
    THEN
    2rdrop
    ELSE
    drop 2r> compiler-notfound1
    THEN
    then ;

    The decision to not have FP in the hard-coded part of the text
    interpreter was taken by Bernd Paysan, so I can only guess why he did
    that: My guess is that this text interpreter was originally also used
    for Gforth EC for small CPUs without hardware FP support where Gforth
    does not implement FP.

    Another reason might be (certainly for me) that the hard-coded text interpreter is in the cross-compiled part of Gforth, whereas float.fs
    (which includes the thing that plugs into the text interpreter) is in
    the part of Gforth that is compiled with Gforth's regular compiler. I
    found the latter always significantly easier to use than the
    cross-compiler and have always tried to keep the amount of code and
    changes in the cross-compiled portion of Gforth small.

    Counterexamples: Gforth (development), SwiftForth 4.x and VFX 5.x:
    Their text interpreters are recognizer-based, so recognizing FP is not hard-coded into the text interpreter at all (nor is recognizing words
    or integers).

    Concerning iForth and lxf, I don't know what they are doing, but I
    would not be surprised if FP is not hard-coded into their text
    interpreters.

    While I show the example above from Gforth 0.7, here are the
    corresponding recognizers REC-NAME and REC-NUMBER from in the current reference implementation of recognizers:

    : undefined-word ( -- )
    #-13 throw ;

    ' undefined-word dup dup translate: translate-none

    : nop ;

    : lit, ( n -- )
    postpone literal ;

    : litlit, ( n -- )
    lit, postpone lit, ;

    ' nop ' lit, ' litlit, translate: translate-cell

    : 2lit, ( n1 n2 -- )
    postpone 2literal ;

    : 2lit2lit, ( n1 n2 -- )
    2lit, postpone 2lit, ;

    ' nop ' 2lit, ' 2lit2lit, translate: translate-dcell

    : name-int ( ... nt -- ... )
    name>interpret execute ;

    : name-comp ( ... nt -- ... )
    name>compile execute ;

    : name-post ( nt -- )
    lit, postpone name-comp ;

    ' name-int ' name-comp ' name-post translate: translate-name

    : rec-name ( c-addr u -- translation )
    find-name dup if
    translate-name
    else
    drop translate-none
    then ;

    : rec-number ( c-addr u -- translation )
    snumber? case
    0 of translate-none endof
    -1 of translate-cell endof
    translate-dcell swap
    endcase ;

    Not shorter, but more factored, and supports postponing numbers.

    Think of it:
    why implement that in a CORE compiler?

    Are you just producing a counterargument for your claim above?

    - anton

    Frankly, you find the same kind of setup in 4tH's "interprt.4th" library routine:

    \ Define ABORT routine, simply print offending word
    defer NotFound
    :noname type [char] ? emit space ; is NotFound

    However, this one is used to define custom interpreters - not to define
    a REPL as front end for the language. It doesn't compile anything
    either. Usually "NotFound" is used to define custom error handling.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Fri Feb 20 11:58:48 2026
    From Newsgroup: comp.lang.forth

    In article <6997b9e1$1@news.ausics.net>, dxf <dxforth@gmail.com> wrote:
    On 20/02/2026 12:38 am, albert@spenarnc.xs4all.nl wrote:
    ...
    Willem Ouwerkerk c.s. developed many Forths for small SBC (8051, etc.)
    This was done with a so called metacompiler. Once you get used to
    this tool, it is comparitively easy to port to new microprocessors.
    In this development path, the first thing you do is to write a
    Forth assembler for the new processor, then insert the uP-dependant
    stuff into the metacompiler tool.
    In this way the meta sources determine what is present, possibly
    a bit idiosyncratic.

    I consider my assembler sources more valuable than an open source
    metacompiler system, so I choose that route.

    Not only was native assembler easier for me as I mentioned, it was >considerably faster. Running the F83 metacompiler on a 4MHz Z80 was >painfully slow. On top of this I'd have needed to modify it to do
    dictionary segmenting - my prime motivation in creating a forth.
    Even the ubiquitous M80 CP/M assembler proved too slow and I invested
    in an SLR Systems assembler. Given the number of compiles I did in >development it was easily the best money I ever spent on software.
    Not that I wasn't forced to learn new stuff. Macros, code segmentation,
    etc gave me enough headaches. Looking back it seems crazy. No regrets >however as I began to realize this was more my niche than writing >applications. That said, if one doesn't write apps there's no way to >evaluate the effectiveness of a given forth. How many forths never got
    past creation because the author's interest waned. For these the list
    of words in ANS etc suffices. But the forth one uses is something else.
    It's the difference between a living tree and what comprises trees.
    Standards are an obsession with the latter and kind of misses the point.


    All tools running on windows/linux are fast,
    The metacompilers do not run on the sbc and take at most seconds.

    Especially assemblers, building ciforth is in the milliseconds.
    (What they say in a blink of an eye).

    ~/PROJECT/ciforths/ciforth: time fasm ci86.lina64.fas -m256000
    flat assembler version 1.70.02 (256000 kilobytes memory)
    2 passes, 56376 bytes.

    real 0m0.030s
    user 0m0.014s
    sys 0m0.012s

    fasm eliminates a separate link step, that make no sense anyway
    for assemblers.
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Sat Feb 21 16:35:33 2026
    From Newsgroup: comp.lang.forth

    On 20-02-2026 02:33, dxf wrote:
    On 20/02/2026 12:38 am, albert@spenarnc.xs4all.nl wrote:
    ...
    Willem Ouwerkerk c.s. developed many Forths for small SBC (8051, etc.)
    This was done with a so called metacompiler. Once you get used to
    this tool, it is comparitively easy to port to new microprocessors.
    In this development path, the first thing you do is to write a
    Forth assembler for the new processor, then insert the uP-dependant
    stuff into the metacompiler tool.
    In this way the meta sources determine what is present, possibly
    a bit idiosyncratic.

    I consider my assembler sources more valuable than an open source
    metacompiler system, so I choose that route.

    Not only was native assembler easier for me as I mentioned, it was considerably faster. Running the F83 metacompiler on a 4MHz Z80 was painfully slow. On top of this I'd have needed to modify it to do
    dictionary segmenting - my prime motivation in creating a forth.
    Even the ubiquitous M80 CP/M assembler proved too slow and I invested
    in an SLR Systems assembler. Given the number of compiles I did in development it was easily the best money I ever spent on software.
    Not that I wasn't forced to learn new stuff. Macros, code segmentation,
    etc gave me enough headaches. Looking back it seems crazy. No regrets however as I began to realize this was more my niche than writing applications. That said, if one doesn't write apps there's no way to evaluate the effectiveness of a given forth. How many forths never got
    past creation because the author's interest waned. For these the list
    of words in ANS etc suffices. But the forth one uses is something else.
    It's the difference between a living tree and what comprises trees.
    Standards are an obsession with the latter and kind of misses the point.


    You're hitting the nail on the head: if making a Forth compiler is the
    only goal, then what use is it to make it "standards compatible". A
    Forth compiler is no different from any other program: if the goal is
    "just making it work" then essentially the purpose is fulfilled once
    it's done.

    But useful programs (if only in the eye of the beholder) are USED. They
    live. They fail. They develop (as you stated - often beyond standards).

    IMHO opinion standards are only useful if they have to be transferred -
    from person to person or from platform to platform. I can't say I
    haven't benefited from that idea in one way or another. But like you
    said - let's keep its true value realistic and pragmatic.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Sat Feb 21 15:32:05 2026
    From Newsgroup: comp.lang.forth

    Krishna Myneni <krishna.myneni@ccreweb.org> writes:
    I'll qualify my statement about companies being conservative as mostly >applicable to small companies. Obviously companies like Microsoft,
    Apple, and Google will simply force large scale changes on users. But >smaller companies can't do that.

    From what I read about Microsoft, they have (or had, at earlier times)
    a lot of red tape in their process for applying changes to the Windows
    kernel, in order to avoid breaking existing software from ISVs. They
    may not be particularly concerned with little-used software by one
    ISV, but they want (or wanted?) to avoid breaking widely-used software
    at all costs. It's the ecosystem that keeps Windows going. Of
    course, these days Microsoft seems to focus more on cloud and AI, and
    they may be less interested in the Windows Ecosystem.

    Apple apparently can rely on a dedicated user base that even is
    willing to put up with stuff like "You are holding it wrong". So they
    can be and have been much more adventurous in breaking old stuff;
    their users will always find reasons to praise such behaviour.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Sat Feb 21 15:40:21 2026
    From Newsgroup: comp.lang.forth

    minforth <minforth@gmx.net> writes:
    This is not the time or place for criticism.

    I think it is time for criticism, particularly meaning 2 of <https://en.wiktionary.org/wiki/criticism> (meaning 1 is not clear to
    me). Concerning the place, giving your feedback on <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1623>
    would be ideal, because that provides the versions of the proposal and
    the feedback in one place.

    Everyone must decide for
    themselves whether this flavour of recognisers is useful for their >applications.

    Yes, and system implementors have to decide whether the want to
    implement it.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Sat Feb 21 15:48:10 2026
    From Newsgroup: comp.lang.forth

    albert@spenarnc.xs4all.nl writes:
    In article <2026Feb9.084944@mips.complang.tuwien.ac.at>,
    Anton Ertl <anton@mips.complang.tuwien.ac.at> wrote:
    A more fleshed-out version of the current recognizer proposal is
    online: >><https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1614>

    After many years this proposal is in transition from being fluid to
    solid, so if you want major upheavals, I doubt that your input will be >>acted upon (but you might still want to give it). OTOH, if you find
    any mistakes, missing parts or unclear parts, now is the time when
    your input will be most effective. In either case, please report any >>feedback by clicking on the Reply button on the web page above.

    After the header Solution:
    "As before the text interpreter parses a white-space-delimited string. "
    2]

    What does that mean in the context of:

    "We gaan naar Rome" TYPE

    ?
    Are there one or four delimiters in this string?

    '"We' is parsed by the text interpreter and passed to a recognizer.
    The committee has decided not to standardize the string recognizer,
    but if it had, the specification would probably have been that
    REC-STRING recognizes '"We' as the beginning of a string and returns a translation with the translation token SCAN-TRANSLATE-STRING. The
    various actions of SCAN-TRANSLATE-STRING parse (right away) until the corresponding closing " is found; in this case they would parse 'gaan
    naar Rome"'. At run-time a descriptor for the string 'We gaan naar
    Rome' is pushed.

    For more details, look at

    https://net2o.de/gforth/Default-recognizers.html#index-rec_002dstring-_0028-c_002daddr-u-_002d_002d-translation-_0029-gforth_002dexperimental

    and the follow the links to TRANSLATE-STRING and SCAN-TRANSLATE-STRING

    In section 3.4.1 parsing

    "
    And the number in >IN is changed to index immediately past that
    delimiter, thus removing the parsed characters and the delimiter from
    the parse area."

    S'"1 2 DROP" EVALUATE
    runs into problems with this.

    I have no idea what this code is supposed to mean (it's not standard
    code), and what problems you see with this code.

    This requires moving >IN moved past the non-existing delimiter.

    Wouldn't it be better to simplify this to :

    "
    And the number in >IN is changed to index immediately past the word parsed" >1]

    The result would be that after parsing

    s" foo"

    IN would point to the second ", not behind it. After parsing

    ( a comment )

    IN would point to the ), not behind it.

    In view of the requirement that WORD / PARSE-NAME is required to skip
    leading delimiters this change is harmless in my opinion.

    If you had pointed that out when PARSE-NAME was proposed for
    standardization, one could have changed the proposal such that it
    would not consume the trailing delimiter. Unfortunately, nobody
    pointed it out at the time, and if you wanted to propose such a change
    now, you would have to provide very good arguments that there are no
    programs around that rely on this behaviour.


    "crc.frt" R/W OPEN-FILE

    Naturally the string recognizer returns the filename, and leaves >IN
    pointer after the " , instead of after the first blank character after
    " .

    In this case, the string recognizer does no parsing at all, and
    returns a translation where the actions do not parse (the translation
    coming out of rec-string performs parsing in its translation actions).

    The text interpreter parses and consumes the space after the ".

    A recognizer leaves >N pointing after the part of the input stream
    that has been recognized. "
    How logical does that sound!
    (It is in fact a tautology. The position of >IN defines for all
    practical purposes what has been recognized.)

    Actually it has been discussed whether recognizers should change >IN,
    and the consensus among the participants was that recognizers should
    not change >IN. There have been suggestions of specifying that in the standard, but given that nobody would want to enforce it, it was
    decided that this should go into the rationale (note to myself: put it
    in the rationale). I don't remember the exact reason (I bowed out of
    that discussion), but IIRC it has to do with using recognizers in
    various other tools.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Tue Feb 24 10:45:17 2026
    From Newsgroup: comp.lang.forth

    On 20/02/2026 9:58 pm, albert@spenarnc.xs4all.nl wrote:
    In article <6997b9e1$1@news.ausics.net>, dxf <dxforth@gmail.com> wrote:
    On 20/02/2026 12:38 am, albert@spenarnc.xs4all.nl wrote:
    ...
    Willem Ouwerkerk c.s. developed many Forths for small SBC (8051, etc.)
    This was done with a so called metacompiler. Once you get used to
    this tool, it is comparitively easy to port to new microprocessors.
    In this development path, the first thing you do is to write a
    Forth assembler for the new processor, then insert the uP-dependant
    stuff into the metacompiler tool.
    In this way the meta sources determine what is present, possibly
    a bit idiosyncratic.

    I consider my assembler sources more valuable than an open source
    metacompiler system, so I choose that route.

    Not only was native assembler easier for me as I mentioned, it was
    considerably faster. Running the F83 metacompiler on a 4MHz Z80 was
    painfully slow. On top of this I'd have needed to modify it to do
    dictionary segmenting - my prime motivation in creating a forth.
    Even the ubiquitous M80 CP/M assembler proved too slow and I invested
    in an SLR Systems assembler. Given the number of compiles I did in
    development it was easily the best money I ever spent on software.
    Not that I wasn't forced to learn new stuff. Macros, code segmentation,
    etc gave me enough headaches. Looking back it seems crazy. No regrets
    however as I began to realize this was more my niche than writing
    applications. That said, if one doesn't write apps there's no way to
    evaluate the effectiveness of a given forth. How many forths never got
    past creation because the author's interest waned. For these the list
    of words in ANS etc suffices. But the forth one uses is something else.
    It's the difference between a living tree and what comprises trees.
    Standards are an obsession with the latter and kind of misses the point.


    All tools running on windows/linux are fast,
    The metacompilers do not run on the sbc and take at most seconds.

    Especially assemblers, building ciforth is in the milliseconds.
    (What they say in a blink of an eye).

    Metacompilers have an air of cleverness but come with so many hurdles that frankly if there's an alternate tool I'll use that. I don't blame William Payne (8051 FigForth) in the least for hiring Nautilus Systems to write his metacompilers, or C.H. Ting for translating Bill Muench's metacompiler-based eForth to MASM. I figure there's enough masochism in Forth already without looking for more ;-)


    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Tue Feb 24 13:13:51 2026
    From Newsgroup: comp.lang.forth

    On 22/02/2026 2:35 am, Hans Bezemer wrote:
    ...
    IMHO opinion standards are only useful if they have to be transferred - from person to person or from platform to platform. I can't say I haven't benefited from that idea in one way or another. But like you said - let's keep its true value realistic and pragmatic.

    The standard is useful to me to the extent there's a bunch of words I don't have to adjust or translate in order to get some code I encounter working without having to tear my hair out. OTOH were I follower that depended on standards for features and portability in the way users of other languages
    do, I would be less satisfied. The standard Forth offers is akin to a Swiss cheese whose holes increase in size as individual forths attempt to fill the gaps.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Krishna Myneni@krishna.myneni@ccreweb.org to comp.lang.forth on Tue Feb 24 02:43:54 2026
    From Newsgroup: comp.lang.forth

    On 2/21/26 9:40 AM, Anton Ertl wrote:
    minforth <minforth@gmx.net> writes:
    This is not the time or place for criticism.

    I think it is time for criticism, particularly meaning 2 of <https://en.wiktionary.org/wiki/criticism> (meaning 1 is not clear to
    me). Concerning the place, giving your feedback on <https://forth-standard.org/proposals/recognizer-committee-proposal-2025-09-11?hideDiff#reply-1623>
    would be ideal, because that provides the versions of the proposal and
    the feedback in one place.

    Everyone must decide for
    themselves whether this flavour of recognisers is useful for their
    applications.

    Yes, and system implementors have to decide whether the want to
    implement it.


    My initial study of the recognizer proposal, and first steps to
    implement it in kForth-64, have led to a few observations:

    1. To first order, implementing essential recognizers, minus the ability
    to set them, amounted to a refactoring of existing code in the Forth interpreter/compiler. I began by factoring out the word INTERPRET, which appeared in Starting Forth by Brodie, from the interpreter/compiler code
    and, from there, identifying the parts of it which mapped to REC-NAME, REC-NUMBER, and REC-FLOAT.

    2. It was a simple matter to factor words, REC-NAME, REC-NUMBER, and
    REC-FLOAT (kForth doesn't have locals so REC-LOCAL wasn't necessary at
    the present time) from INTERPRET though the return values aren't yet consistent with the proposal. One has to first understand the non-obviously-named TRANSLATE-XXX words.

    3. It took me a little while to wrap my head around what TRANSLATE-XXX
    words were doing, but finally figured out that they were data structures providing execution semantics for different values of STATE. For
    recognizing words, TRANSLATE-NAME mapped to code used by the kForth interpreter called ExecutionMethod(), changed recently to GetExecutionSemantics().

    The next step is to replace GetExecutionSemantics() by TRANSLATE-NAME.
    This is a bit more complex in kForth, which allows deferred execution (essentially noname compilation) during interpretation, but it is
    possible for the recognizer REC-NAME to provide a TRANSLATE-NAME
    compatible with the recognizer proposal.


    This is where I stand after a week of studying and gradually
    transforming kForth to implement recognizers. For me, the process
    requires repeating all system tests prior to each commit. It's a tedious process but necessary to keep a working Forth system while the revisions
    are made -- I could use a stable older version of kForth-64 for running
    my applications, but the applications provide additional checks on
    whether the revisions have broken anything.

    --
    Krishna

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Wed Feb 25 14:11:35 2026
    From Newsgroup: comp.lang.forth

    In article <2026Feb21.164810@mips.complang.tuwien.ac.at>,
    Anton Ertl <anton@mips.complang.tuwien.ac.at> wrote:
    albert@spenarnc.xs4all.nl writes:
    <SNIP>
    "We gaan naar Rome" TYPE

    ?
    Are there one or four delimiters in this string?

    '"We' is parsed by the text interpreter and passed to a recognizer.
    Okay nice deflection. The answer is there are four space delimiters.
    IMHO pretty insane. None of them has the function of a delimiter.

    With prefixes this is done:
    Get `` "We ''. The prefix " is found. " takes care of all else,
    and leaves >IN at the space after the second " or at the
    character after that, what is pretty inconsequential.
    The reason that we cut at the space is, that no word, and therefore no
    prefix can contain blank space. So the first space is a preliminary
    delimiter. Once PREFIX-" executes takes over the second " is the
    actual delimiter. Whether you demand PREFIX-" to skip a blank delimiter
    is in fact inconsequential.

    <SNIP>
    S" 1 2 DROP" EVALUATE
    runs into problems with this.

    I have no idea what this code is supposed to mean (it's not standard
    code), and what problems you see with this code.
    You commented on the first erroneous code.
    I have corrected it, now.

    This requires moving >IN moved past the non-existing delimiter.

    Note that there is no delimiter in the evaluate string after DROP.
    The primitive description of parsing has to be lawyered up to
    keep correct.


    Wouldn't it be better to simplify this to :

    "
    And the number in >IN is changed to index immediately past the word parsed" >>1]

    The result would be that after parsing

    s" foo"

    IN would point to the second ", not behind it. After parsing

    ( a comment )

    IN would point to the ), not behind it.

    In view of the requirement that WORD / PARSE-NAME is required to skip >>leading delimiters this change is harmless in my opinion.

    If you had pointed that out when PARSE-NAME was proposed for
    standardization, one could have changed the proposal such that it
    would not consume the trailing delimiter. Unfortunately, nobody
    pointed it out at the time, and if you wanted to propose such a change
    now, you would have to provide very good arguments that there are no
    programs around that rely on this behaviour.

    WORD suggest that it be used in the implementation of Forth itself.
    Now you suggest that PARSE-NAME is used in the implementation of Forth
    itself. For the objective observer it is just another word that can be implemented as described. That PARSE-NAME eats a space is inconsequential.
    In ciforth both WORD and PARSE-NAME are loadable extensions and follow the standard to a t.



    "crc.frt" R/W OPEN-FILE

    Naturally the string recognizer returns the filename, and leaves >IN >>pointer after the " , instead of after the first blank character after
    " .

    In this case, the string recognizer does no parsing at all, and
    returns a translation where the actions do not parse (the translation
    coming out of rec-string performs parsing in its translation actions).

    Okay, the recognizer does no parsing at all, so it is of no use
    handling strings that contains spaces. The most important issue since
    BASIC did beat Forth in the 80's remains unresolved.


    The text interpreter parses and consumes the space after the ".

    A recognizer leaves >N pointing after the part of the input stream
    that has been recognized. "
    How logical does that sound!
    (It is in fact a tautology. The position of >IN defines for all
    practical purposes what has been recognized.)

    Actually it has been discussed whether recognizers should change >IN,
    and the consensus among the participants was that recognizers should
    not change >IN. There have been suggestions of specifying that in the >standard, but given that nobody would want to enforce it, it was
    decided that this should go into the rationale (note to myself: put it
    in the rationale). I don't remember the exact reason (I bowed out of
    that discussion), but IIRC it has to do with using recognizers in
    various other tools.

    You evaded the subject, that is fine. It has no real world consequences,
    so is the position of >IN after parsing a word/token.
    That would mean that we can change the standard to
    "
    Whether >IN, after "not-recognizing" a token, points to or after the
    delimiter name/token is implementation defined.
    "
    You will discover that this has no consequence for portable programs.
    This is not the first time the standard does prescribe a particular
    behaviour that cannot be investigated by a conforming program, but
    instead describe what was in ancient implementations.
    (remember POSTPONE? The requirement that TO must parse has no consequence.)
    An good alternative would be to move this informal discussion of parsing
    to annex E, indeed.

    I have a horse in this race. If that is approved I can simplify the
    INTERPRET loop to a single IF within a BEGIN WHILE REPEAT.
    Not that the INTERPRET loop is overly complicated in ciforth (two IF's).

    Background information:
    ciforth kernels don't accommodate hex, decimal, binary, strings and fp.
    All expressions can be added separately and under control of wordlists.
    $DEADBEAF %1111000 #65536 "we gaan naar Rome" 1.001E9
    using the PREFIX mechanism
    : $ .... ; PREFIX IMMEDIATE

    An addition of a single screen morphs QUIT in a lexical analyser for
    e.g. Pascal.


    - anton

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.forth on Wed Feb 25 20:25:12 2026
    From Newsgroup: comp.lang.forth

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    I still think that meddling with the text interpreter is a big no-no
    and an invitation to disaster.

    Yes, S" 12.34e" >FLOAT is quite horrible, but having the behaviour of
    "123.45" change depending on whether the floating point wordset is
    loaded is also horrible. Probably best to leave things as they are, and
    maybe suggest a nonstandard extension to treat 123.45 as a float. To
    get a double cell you'd use

    It does seem to me that with 32-bit systems widespread, double ints have
    gotten less important. I wouldn't want the standard behaviour to
    change, but I'd probably use the nonstandard extension if it existed.
    With the extension turned on, to get the double int, you'd use 12345 0
    or maybe something like "D# 123 45" .

    Double ints are maybe still useful on 8 bit systems with 16 bit cells.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Thu Feb 26 06:53:27 2026
    From Newsgroup: comp.lang.forth

    Paul Rubin <no.email@nospam.invalid> writes:
    Probably best to leave things as they are, and
    maybe suggest a nonstandard extension to treat 123.45 as a float.

    Actually, if the proposal is accepted as-is, there will be a
    semi-standardized way to switch the Forth system to accept 123.45 as a
    float: REC-FLOAT is allowed (but not required) to recognize "123.45",
    and by putting REC-FLOAT ahead of REC-NUMBER in the recognizer
    sequence REC-FORTH, the user can eliminate the shadowing of "123.45"
    by REC-NUMBER.

    Alternatively, the user can define REC-NUMBER1, which only recognizes
    doubles with a prefix (i.e., not "123.45"), and replace occurrences of REC-NUMBER with REC-NUMBER1 in REC-FORTH. This also eliminates the
    shadowing. Or, if you really never want doubles, define REC-CELL
    which does not recognize doubles at all, and replace REC-NUMBER by
    REC-CELL.

    This all works in Gforth, we will see what REC-FLOAT recognizes in
    other systems.

    It does seem to me that with 32-bit systems widespread, double ints have >gotten less important.

    Even with 64-bit cells, doubles are important for mixed-length
    arithmetics, which is important for building multi-precision
    arithmetics, used for cryptography and various mathematical
    applications.

    With the extension turned on, to get the double int, you'd use 12345 0
    or maybe something like "D# 123 45" .

    #12345. and $DEADBEEF. are standard ways to write a double that is not recognized by REC-FLOAT.

    Concerning group separators, Gforth (development) ignores _ as a group separator, including in singles:

    18_446_744_073_709_551_615

    Many Forth systems accept multiple dots in numbers, which can be used
    as group separators, but the result then is a double; some also accept
    comma as double indicator as well as multiple double indicators, so
    you can write numbers with "," as group separator and "." as decimal
    mark, or with "." as group separator and "," as decimal mark; but
    again, the result is a double. Given the sizes of some singles in
    32-bit and 64-bit systems, a way to provide group separators
    without turning the number into a double is useful.

    Gforth does not have a convenient way to produce the group separator
    on output, yet.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Thu Feb 26 13:09:21 2026
    From Newsgroup: comp.lang.forth

    In article <87qzq8b07r.fsf@nightsong.com>,
    Paul Rubin <no.email@nospam.invalid> wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    I still think that meddling with the text interpreter is a big no-no
    and an invitation to disaster.

    Yes, S" 12.34e" >FLOAT is quite horrible, but having the behaviour of >"123.45" change depending on whether the floating point wordset is
    loaded is also horrible. Probably best to leave things as they are, and >maybe suggest a nonstandard extension to treat 123.45 as a float. To
    get a double cell you'd use

    Offically 123.45 is not a double number. It should end with a decimal point.

    How is the support for a proposal:

    Double numbers should start and end with a dot.
    Now any numbers containing a single dot are automatically fp

    A program that uses single dots to indicate doubles, should
    declare an environmental dependancy. The default behaviour it
    that they are floats.

    In this way most programs that uses fp and use single dots are
    fully compliant.

    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.
    You could do this with recognizers (I suppose).


    It does seem to me that with 32-bit systems widespread, double ints have >gotten less important. I wouldn't want the standard behaviour to
    change, but I'd probably use the nonstandard extension if it existed.
    With the extension turned on, to get the double int, you'd use 12345 0
    or maybe something like "D# 123 45" .

    Double ints are maybe still useful on 8 bit systems with 16 bit cells.

    I have published yourforth, an altenative to jonesforth. It is 32 bits
    and I have eliminated all double precision crap, contributing to
    it pedagogical value.

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Krishna Myneni@krishna.myneni@ccreweb.org to comp.lang.forth on Thu Feb 26 07:32:40 2026
    From Newsgroup: comp.lang.forth

    On 2/25/26 10:25 PM, Paul Rubin wrote:
    ...
    It does seem to me that with 32-bit systems widespread, double ints have gotten less important. ...
    Double numbers are still useful on 64-bit systems, in physics,
    chemistry, and number theory. For example, consider factorials, which
    occur in evaluating quantities of fundamental importance in areas like
    atomic and molecular physics and quantum chemistry.

    https://github.com/mynenik/kForth-64/blob/master/forth-src/fsl/extras/cg.4th

    In particular, notice this limitation for 32-bit systems (using single
    length numbers) in the above file:

    13 INTEGER ARRAY fac_table{
    1 1 2 6 24 120 720 5040 40320 362880
    3628800 39916800 479001600
    13 fac_table{ }iput


    With double-length integers, the code becomes useful over a wider range
    of systems. I haven't yet converted it to use double length integers,
    but it is something on my list of tbd.

    --
    Krishna

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Fri Feb 27 20:24:19 2026
    From Newsgroup: comp.lang.forth

    On 26/02/2026 11:09 pm, albert@spenarnc.xs4all.nl wrote:
    In article <87qzq8b07r.fsf@nightsong.com>,
    Paul Rubin <no.email@nospam.invalid> wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    I still think that meddling with the text interpreter is a big no-no
    and an invitation to disaster.

    Yes, S" 12.34e" >FLOAT is quite horrible, but having the behaviour of
    "123.45" change depending on whether the floating point wordset is
    loaded is also horrible. Probably best to leave things as they are, and
    maybe suggest a nonstandard extension to treat 123.45 as a float. To
    get a double cell you'd use

    Offically 123.45 is not a double number. It should end with a decimal point.

    How is the support for a proposal:

    Double numbers should start and end with a dot.
    Now any numbers containing a single dot are automatically fp

    A program that uses single dots to indicate doubles, should
    declare an environmental dependancy. The default behaviour it
    that they are floats.

    In this way most programs that uses fp and use single dots are
    fully compliant.

    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.

    And those who see it as a vulnerability:

    garbage in --> valid number out

    You could do this with recognizers (I suppose).

    Given the cost of recognizers one hopes it can do better :)

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Gerry Jackson@do-not-use@swldwa.uk to comp.lang.forth on Fri Feb 27 09:25:55 2026
    From Newsgroup: comp.lang.forth

    On 26/02/2026 12:09, albert@spenarnc.xs4all.nl wrote:
    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.
    You could do this with recognizers (I suppose).

    It's better to use the ISO 8601 format YYYY-MM-DD where your example
    date is 2003-01-02 which is unambiguous and easy to sort.
    --
    Gerry
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Fri Feb 27 14:48:59 2026
    From Newsgroup: comp.lang.forth

    Gerry Jackson <do-not-use@swldwa.uk> writes:
    On 26/02/2026 12:09, albert@spenarnc.xs4all.nl wrote:
    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.
    You could do this with recognizers (I suppose).

    It's better to use the ISO 8601 format YYYY-MM-DD where your example
    date is 2003-01-02 which is unambiguous and easy to sort.

    You can recognize both, plus "2.1.2003". The benefit compared to the
    bad old solution of just treating all of them as a double number is
    that the recognizer can determine year, month, and day based on the
    separator used, as well as identifying the correct day and month
    irrespective of whether they are written with one or with two digits. Unfortunately, I have seen some people use the wrong order-separator combination, so better give some feedback on what date has been
    understood.

    - 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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Fri Feb 27 19:21:10 2026
    From Newsgroup: comp.lang.forth

    On 26-02-2026 13:09, albert@spenarnc.xs4all.nl wrote:
    In article <87qzq8b07r.fsf@nightsong.com>,
    Paul Rubin <no.email@nospam.invalid> wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    I still think that meddling with the text interpreter is a big no-no
    and an invitation to disaster.

    Yes, S" 12.34e" >FLOAT is quite horrible, but having the behaviour of
    "123.45" change depending on whether the floating point wordset is
    loaded is also horrible. Probably best to leave things as they are, and
    maybe suggest a nonstandard extension to treat 123.45 as a float. To
    get a double cell you'd use

    Offically 123.45 is not a double number. It should end with a decimal point.

    How is the support for a proposal:

    Double numbers should start and end with a dot.
    Now any numbers containing a single dot are automatically fp

    A program that uses single dots to indicate doubles, should
    declare an environmental dependancy. The default behaviour it
    that they are floats.

    In this way most programs that uses fp and use single dots are
    fully compliant.

    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.
    You could do this with recognizers (I suppose).


    It does seem to me that with 32-bit systems widespread, double ints have
    gotten less important. I wouldn't want the standard behaviour to
    change, but I'd probably use the nonstandard extension if it existed.
    With the extension turned on, to get the double int, you'd use 12345 0
    or maybe something like "D# 123 45" .

    Double ints are maybe still useful on 8 bit systems with 16 bit cells.

    I have published yourforth, an altenative to jonesforth. It is 32 bits
    and I have eliminated all double precision crap, contributing to
    it pedagogical value.

    Groetjes Albert

    Although I can understand the technical, historical and pragmatic
    reasons of Chuck for (a) signifying a double number by a dot and (b) the inclusion of a double number recognizer in the text interpreter, I never followed suit.

    Double number support was NEVER part of the 4tH core - and frankly, the initial idea was even to never support double numbers AT ALL. The
    rationale behind that one was that integers at that time were 32bit
    anyway - the identical precision that double numbers covered - so.. why?

    The range of 64bit numbers covers just about everything under the sun,
    so I agree fullheartedly with the idea that double numbers are close to complete obsolescence. The last time I used triple numbers was when I
    wrote several IBAN related utilities on a 32-bit platform. Which most
    double number applications boils down to nowadays.

    But.. I've been around here for a while and I think given there are
    still people using WORD and vanilla counted strings that the 22nd
    century Forths will still support double numbers - resulting in 1024 bit double numbers.

    Hans Bezemer
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From dxf@dxforth@gmail.com to comp.lang.forth on Sat Feb 28 10:15:28 2026
    From Newsgroup: comp.lang.forth

    On 28/02/2026 5:21 am, Hans Bezemer wrote:
    ...
    The range of 64bit numbers covers just about everything under the sun, so I agree fullheartedly with the idea that double numbers are close to complete obsolescence. The last time I used triple numbers was when I wrote several IBAN related utilities on a 32-bit platform. Which most double number applications boils down to nowadays.

    But.. I've been around here for a while and I think given there are still people using WORD and vanilla counted strings that the 22nd century Forths will still support double numbers - resulting in 1024 bit double numbers.

    If the hardware, the OS and its applications still specify doubles then
    surely Forth has no option but to follow, and Moore's suggestion in his
    1989 speech to the ANS-TC that doubles words might be scrapped, somewhat short-sighted? On this forum itself, I recall reading posts talking of
    crypto apps which apparently requires such numbers and calculations.

    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Sat Feb 28 15:34:54 2026
    From Newsgroup: comp.lang.forth

    In article <nnd$73692009$4971d447@b0f461aaf5ef0059>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    On 26-02-2026 13:09, albert@spenarnc.xs4all.nl wrote:
    In article <87qzq8b07r.fsf@nightsong.com>,
    Paul Rubin <no.email@nospam.invalid> wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    I still think that meddling with the text interpreter is a big no-no
    and an invitation to disaster.

    Yes, S" 12.34e" >FLOAT is quite horrible, but having the behaviour of
    "123.45" change depending on whether the floating point wordset is
    loaded is also horrible. Probably best to leave things as they are, and >>> maybe suggest a nonstandard extension to treat 123.45 as a float. To
    get a double cell you'd use

    Offically 123.45 is not a double number. It should end with a decimal point. >>
    How is the support for a proposal:

    Double numbers should start and end with a dot.
    Now any numbers containing a single dot are automatically fp

    A program that uses single dots to indicate doubles, should
    declare an environmental dependancy. The default behaviour it
    that they are floats.

    In this way most programs that uses fp and use single dots are
    fully compliant.

    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.
    You could do this with recognizers (I suppose).


    It does seem to me that with 32-bit systems widespread, double ints have >>> gotten less important. I wouldn't want the standard behaviour to
    change, but I'd probably use the nonstandard extension if it existed.
    With the extension turned on, to get the double int, you'd use 12345 0
    or maybe something like "D# 123 45" .

    Double ints are maybe still useful on 8 bit systems with 16 bit cells.

    I have published yourforth, an altenative to jonesforth. It is 32 bits
    and I have eliminated all double precision crap, contributing to
    it pedagogical value.

    Groetjes Albert

    Although I can understand the technical, historical and pragmatic
    reasons of Chuck for (a) signifying a double number by a dot and (b) the >inclusion of a double number recognizer in the text interpreter, I never >followed suit.

    Double number support was NEVER part of the 4tH core - and frankly, the >initial idea was even to never support double numbers AT ALL. The
    rationale behind that one was that integers at that time were 32bit
    anyway - the identical precision that double numbers covered - so.. why?

    The range of 64bit numbers covers just about everything under the sun,
    so I agree fullheartedly with the idea that double numbers are close to >complete obsolescence. The last time I used triple numbers was when I
    wrote several IBAN related utilities on a 32-bit platform. Which most
    double number applications boils down to nowadays.

    If you want to have a serious mature Forth (gforth, ciforth) Anton Ertl
    has explained that you need to have double precisions support for
    multi precision, cryptography, crc and the like.
    That doesn't mean that you have to build number display around the
    <# #S #> wordset.



    But.. I've been around here for a while and I think given there are
    still people using WORD and vanilla counted strings that the 22nd
    century Forths will still support double numbers - resulting in 1024 bit >double numbers.

    Users of ciforth discover that WORD is a loaded extension, and they get educated as soon as they complain about this.


    Hans Bezemer

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From Hans Bezemer@the.beez.speaks@gmail.com to comp.lang.forth on Sat Feb 28 17:56:12 2026
    From Newsgroup: comp.lang.forth

    On 28-02-2026 15:34, albert@spenarnc.xs4all.nl wrote:
    In article <nnd$73692009$4971d447@b0f461aaf5ef0059>,
    Hans Bezemer <the.beez.speaks@gmail.com> wrote:
    On 26-02-2026 13:09, albert@spenarnc.xs4all.nl wrote:
    In article <87qzq8b07r.fsf@nightsong.com>,
    Paul Rubin <no.email@nospam.invalid> wrote:
    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    I still think that meddling with the text interpreter is a big no-no >>>>> and an invitation to disaster.

    Yes, S" 12.34e" >FLOAT is quite horrible, but having the behaviour of
    "123.45" change depending on whether the floating point wordset is
    loaded is also horrible. Probably best to leave things as they are, and >>>> maybe suggest a nonstandard extension to treat 123.45 as a float. To
    get a double cell you'd use

    Offically 123.45 is not a double number. It should end with a decimal point.

    How is the support for a proposal:

    Double numbers should start and end with a dot.
    Now any numbers containing a single dot are automatically fp

    A program that uses single dots to indicate doubles, should
    declare an environmental dependancy. The default behaviour it
    that they are floats.

    In this way most programs that uses fp and use single dots are
    fully compliant.

    There are people who are font of 01/02/03 date (2003 januari 2 )
    indications that are examples in Starting Forth.
    You could do this with recognizers (I suppose).


    It does seem to me that with 32-bit systems widespread, double ints have >>>> gotten less important. I wouldn't want the standard behaviour to
    change, but I'd probably use the nonstandard extension if it existed.
    With the extension turned on, to get the double int, you'd use 12345 0 >>>> or maybe something like "D# 123 45" .

    Double ints are maybe still useful on 8 bit systems with 16 bit cells.

    I have published yourforth, an altenative to jonesforth. It is 32 bits
    and I have eliminated all double precision crap, contributing to
    it pedagogical value.

    Groetjes Albert

    Although I can understand the technical, historical and pragmatic
    reasons of Chuck for (a) signifying a double number by a dot and (b) the
    inclusion of a double number recognizer in the text interpreter, I never
    followed suit.

    Double number support was NEVER part of the 4tH core - and frankly, the
    initial idea was even to never support double numbers AT ALL. The
    rationale behind that one was that integers at that time were 32bit
    anyway - the identical precision that double numbers covered - so.. why?

    The range of 64bit numbers covers just about everything under the sun,
    so I agree fullheartedly with the idea that double numbers are close to
    complete obsolescence. The last time I used triple numbers was when I
    wrote several IBAN related utilities on a 32-bit platform. Which most
    double number applications boils down to nowadays.

    If you want to have a serious mature Forth (gforth, ciforth) Anton Ertl
    has explained that you need to have double precisions support for
    multi precision, cryptography, crc and the like.
    That doesn't mean that you have to build number display around the
    <# #S #> wordset.



    But.. I've been around here for a while and I think given there are
    still people using WORD and vanilla counted strings that the 22nd
    century Forths will still support double numbers - resulting in 1024 bit
    double numbers.

    Users of ciforth discover that WORD is a loaded extension, and they get educated as soon as they complain about this.


    Hans Bezemer

    Groetjes Albert

    Sure, if you dig deep enough you will always find applications for ANY feature. That doesn't necessarily mean they're essential. I mean - even
    in C you don't find too many "long long long long long long long long
    int" declarations.

    But I'm sure there are libs for that. If you need 'em, you load 'em.
    Like I did with my triple libs for my IBAN utilities.

    And where <# #S #> are concerned - in 4tH they have always been cell
    sized. For the double version I have a double version. Lo and behold:
    for the triple wordset I even have a TRIPLE version. I'm quite confident
    I can even pull off a QUADRO version if need be.

    /hold 3 * constant /thold
    /thold string tholdbuf
    tholdbuf /thold + constant tholdend
    variable hld

    : thold hld -1 over +! @ c! ;
    : <t# tholdend hld ! ;
    : t#> 3drop hld @ tholdend over - ;
    : tsign >r >r >r 0< if [char] - thold then r> r> r> ;
    : t# base @ tu/mod >r >r >r digit>c thold r> r> r> ;
    : t#s begin t# 3dup t0= until ;
    : (tsigned) dup >r -rot r> tabs ;

    Hans Bezemer

    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.forth on Sat Feb 28 22:45:10 2026
    From Newsgroup: comp.lang.forth

    albert@spenarnc.xs4all.nl writes:
    If you want to have a serious mature Forth (gforth, ciforth) Anton Ertl
    has explained that you need to have double precisions support for
    multi precision, cryptography, crc and the like.

    It's not clear that you'd need particular syntax for double-cell
    literals though. You'll rarely want double arithmetic per se. You'd
    possibly use it as a building block for multi precision.

    In practice, multi precision arithmetic would likely be written as asm primitives.
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From anton@anton@mips.complang.tuwien.ac.at (Anton Ertl) to comp.lang.forth on Sun Mar 1 07:54:43 2026
    From Newsgroup: comp.lang.forth

    Paul Rubin <no.email@nospam.invalid> writes:
    In practice, multi precision arithmetic would likely be written as asm >primitives.

    That's what GMP does, but only for certain operations, while other
    code may be more efficient for combinations of these operations (e.g., three-input addition).

    In the history of programming, we usually started out with assembly
    language, but over time, that has given way to programming in
    higher-level languages. In the case of multi-precision arithmetics,
    the support from high-level languages has been:

    1) Double-precision types such as uint128_t in C, allowing to express
    double-precision arithmetics and mixed single/double-precision
    addition and multiplication.

    2) Double-precision (D+) and mixed single/double precision words (UM*
    M*) in Forth (M+ is not quite there, UM+ would be helpful for
    multi-precision).

    3) Add-with-carry builtins (compiler-specific) and intrinsics
    (architecture-specific) in C compilers.

    4) Arbitrary-precision arithmetics in a number of higher-level
    langyages. The size depends on the data, which results in boxing
    and unboxing overhead, which makes that feature really slow in all
    implementations I know. Also, in most languages the usual case is
    single-precision, so the incentives for making the multi-precision
    ase fast are small. It's just an insurance against overflow.

    5) _Bitint() in C23. gcc-15.1 supports numbers up to 65,535 bits, and
    clang-20.1 supports numbers up to 8,388,608bits. The code produced
    for now is mediocre, but that can change.

    I have compared assembly language, 1), 3), and 5) [ertl25-carry2].
    One can get C compilers to produce quite good code with 1) and 3),
    but, depending on the architecture, sometimes 1) is better, and
    sometimes 3). Ideally the compilers should produce the optimal code
    with 5), but for now, they don't.

    As long as we do not add something like 5) to Forth, 2) (close to C's
    1) is the way to go if we want to express this stuff in Forth. Not
    everyone wants Forth to be able to express such things with ease and
    efficiency competetive with C (before _Bitint()), though.

    - anton

    @InProceedings{ertl25-carry2,
    author = {M. Anton Ertl},
    title = {Multi-precision integer arithmetics},
    booktitle = {Tagungsband des Jahrestreffens 2025 der
    GI-Fachgruppe ``Programmiersprachen und
    Rechenkonzepte''},
    year = {2025},
    series = {INSIGHTS --- Schriftenreihe der Fakult\"at Technik},
    pages = {15--25},
    url = {https://www.complang.tuwien.ac.at/papers/ertl25-carry2.pdf},
    slides-url = {https://www.complang.tuwien.ac.at/papers/ertl25-carry2-slides.pdf},
    url-proceedings = {https://www.dhbw-stuttgart.de/fileadmin/dateien/Forschung/Forschungsschwerpunkte_Technik/DHBW_Stuttgart_INSIGHTS_1_2025_Tagungsband_Jahrestreffen_GI-Fachgruppe_Programmiersprachen_und_Rechenkonzepte_2025.pdf},
    abstract = {Multi-precision integer arithmetics is widely used,
    among other things in public-key cryptography and
    when computing many digits of transcendental
    numbers. The present paper discusses
    multi-precision addition and multiplication:
    architectural support and its use in hand-written
    assembly language, libraries that use such
    assembly-language code, and programming language
    support and how close the code generated by Clang
    and GCC is to the hand-written assembly language.}
    }
    --
    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 proceedings: http://www.euroforth.org/ef25/papers/
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.forth on Sun Mar 1 14:17:19 2026
    From Newsgroup: comp.lang.forth

    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    author = {M. Anton Ertl},
    title = {Multi-precision integer arithmetics},

    This paper and the linked one about adding carry bits to the RISC-V
    machine registers are interesting. Someone recently mentioned that the
    RISC-V vector extension has ADC so it might be worth evaluating that in
    future versions of the paper.

    IDK if it's in the spirit of Forth to have anything like _Bitint() and
    I'm surprised to hear about it in C (I didn't know about it before). I
    doubt it but your judgment is better than mine on such questions.

    I think variable sized bignum arithmetic like 4096 bits is fading out of
    public key cryptography these days, as algorithms like RSA are being
    replaced by elliptic curve algorithms with fixed key sizes, typically
    256 bits.
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.forth on Mon Mar 2 00:17:04 2026
    From Newsgroup: comp.lang.forth

    Anton Ertl <anton@mips.complang.tuwien.ac.at> wrote:
    Paul Rubin <no.email@nospam.invalid> writes:
    In practice, multi precision arithmetic would likely be written as asm >>primitives.

    That's what GMP does, but only for certain operations, while other
    code may be more efficient for combinations of these operations (e.g., three-input addition).

    In the history of programming, we usually started out with assembly
    language, but over time, that has given way to programming in
    higher-level languages. In the case of multi-precision arithmetics,
    the support from high-level languages has been:

    1) Double-precision types such as uint128_t in C, allowing to express
    double-precision arithmetics and mixed single/double-precision
    addition and multiplication.

    2) Double-precision (D+) and mixed single/double precision words (UM*
    M*) in Forth (M+ is not quite there, UM+ would be helpful for
    multi-precision).

    3) Add-with-carry builtins (compiler-specific) and intrinsics
    (architecture-specific) in C compilers.

    4) Arbitrary-precision arithmetics in a number of higher-level
    langyages. The size depends on the data, which results in boxing
    and unboxing overhead, which makes that feature really slow in all
    implementations I know. Also, in most languages the usual case is
    single-precision, so the incentives for making the multi-precision
    ase fast are small. It's just an insurance against overflow.

    5) _Bitint() in C23. gcc-15.1 supports numbers up to 65,535 bits, and
    clang-20.1 supports numbers up to 8,388,608bits. The code produced
    for now is mediocre, but that can change.

    I have compared assembly language, 1), 3), and 5) [ertl25-carry2].
    One can get C compilers to produce quite good code with 1) and 3),
    but, depending on the architecture, sometimes 1) is better, and
    sometimes 3). Ideally the compilers should produce the optimal code
    with 5), but for now, they don't.

    As long as we do not add something like 5) to Forth, 2) (close to C's
    1) is the way to go if we want to express this stuff in Forth. Not
    everyone wants Forth to be able to express such things with ease and efficiency competetive with C (before _Bitint()), though.

    - anton

    @InProceedings{ertl25-carry2,
    author = {M. Anton Ertl},
    title = {Multi-precision integer arithmetics},
    booktitle = {Tagungsband des Jahrestreffens 2025 der
    GI-Fachgruppe ``Programmiersprachen und
    Rechenkonzepte''},
    year = {2025},
    series = {INSIGHTS --- Schriftenreihe der Fakult\"at Technik},
    pages = {15--25},
    url = {https://www.complang.tuwien.ac.at/papers/ertl25-carry2.pdf},
    slides-url = {https://www.complang.tuwien.ac.at/papers/ertl25-carry2-slides.pdf},
    url-proceedings = {https://www.dhbw-stuttgart.de/fileadmin/dateien/Forschung/Forschungsschwerpunkte_Technik/DHBW_Stuttgart_INSIGHTS_1_2025_Tagungsband_Jahrestreffen_GI-Fachgruppe_Programmiersprachen_und_Rechenkonzepte_2025.pdf},
    abstract = {Multi-precision integer arithmetics is widely used,
    among other things in public-key cryptography and
    when computing many digits of transcendental
    numbers. The present paper discusses
    multi-precision addition and multiplication:
    architectural support and its use in hand-written
    assembly language, libraries that use such
    assembly-language code, and programming language
    support and how close the code generated by Clang
    and GCC is to the hand-written assembly language.}
    }
    --
    Waldek Hebisch
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.forth on Mon Mar 2 00:21:08 2026
    From Newsgroup: comp.lang.forth

    Paul Rubin <no.email@nospam.invalid> wrote:
    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    author = {M. Anton Ertl},
    title = {Multi-precision integer arithmetics},

    This paper and the linked one about adding carry bits to the RISC-V
    machine registers are interesting. Someone recently mentioned that the RISC-V vector extension has ADC so it might be worth evaluating that in future versions of the paper.

    IDK if it's in the spirit of Forth to have anything like _Bitint() and
    I'm surprised to hear about it in C (I didn't know about it before). I
    doubt it but your judgment is better than mine on such questions.

    I think variable sized bignum arithmetic like 4096 bits is fading out of public key cryptography these days, as algorithms like RSA are being
    replaced by elliptic curve algorithms with fixed key sizes, typically
    256 bits.

    Elliptic curve algorithms can use significanty smaller primes than
    RSA, but IIUC 256 bits is deemed to be dangerously low.
    --
    Waldek Hebisch
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From albert@albert@spenarnc.xs4all.nl to comp.lang.forth on Mon Mar 2 12:36:44 2026
    From Newsgroup: comp.lang.forth

    In article <10o2l5i$1u2r0$2@paganini.bofh.team>,
    Waldek Hebisch <antispam@fricas.org> wrote:
    Paul Rubin <no.email@nospam.invalid> wrote:
    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    author = {M. Anton Ertl},
    title = {Multi-precision integer arithmetics},

    This paper and the linked one about adding carry bits to the RISC-V
    machine registers are interesting. Someone recently mentioned that the
    RISC-V vector extension has ADC so it might be worth evaluating that in
    future versions of the paper.

    IDK if it's in the spirit of Forth to have anything like _Bitint() and
    I'm surprised to hear about it in C (I didn't know about it before). I
    doubt it but your judgment is better than mine on such questions.

    If you take Forth as a serious programming language, the paper about multi precision is valuable.


    I think variable sized bignum arithmetic like 4096 bits is fading out of
    public key cryptography these days, as algorithms like RSA are being
    replaced by elliptic curve algorithms with fixed key sizes, typically
    256 bits.

    Elliptic curve algorithms can use significanty smaller primes than
    RSA, but IIUC 256 bits is deemed to be dangerously low.

    Moreover the USA NSA pushes towards elliptic curves. Maybe they have
    a backdoor. Otoh RSA 4096 is well established.

    --
    Waldek Hebisch

    Groetjes Albert
    --
    The Chinese government is satisfied with its military superiority over USA.
    The next 5 year plan has as primary goal to advance life expectancy
    over 80 years, like Western Europe.
    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From Stephen Pelc@stephen@vfxforth.com to comp.lang.forth on Mon Mar 2 13:23:05 2026
    From Newsgroup: comp.lang.forth

    On 26 Feb 2026 at 05:25:12 CET, "Paul Rubin" <no.email@nospam.invalid> wrote:

    Hans Bezemer <the.beez.speaks@gmail.com> writes:
    It does seem to me that with 32-bit systems widespread, double ints have gotten less important. I wouldn't want the standard behaviour to
    change, but I'd probably use the nonstandard extension if it existed.
    With the extension turned on, to get the double int, you'd use 12345 0
    or maybe something like "D# 123 45" .

    Double ints are maybe still useful on 8 bit systems with 16 bit cells.

    We (Wodni & Pelc GmbH) have clients using a 32 bit host who depend
    on 128 bit integers. They have in excess of 10,000 users of their
    application.

    Even if they converted to a 64 bit host Forth, they would still need
    double numbers.

    Stephen
    --
    Stephen Pelc, stephen@vfxforth.com
    Wodni & Pelc GmbH
    Vienna, Austria
    Tel: +44 (0)7803 903612, +34 649 662 974 http://www.vfxforth.com/downloads/VfxCommunity/
    free VFX Forth downloads
    --- Synchronet 3.21d-Linux NewsLink 1.2