• Viswath & Charmaigne (vector-wide scalar-word and character machines)

    From Ross Finlayson@3:633/10 to All on Mon Jul 27 11:43:23 2026
    Hello, here I'll post some design notes and a panel discussion with some chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 11:44:23 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 11:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    [ viswath-charmaigne.txt ]



    Widesword: SIMD/SWAR patterns/primitives

    For parsing and binary data, patterns of algorithms and their
    primitive functions upon arrays of items and about bit-fields
    of their contents.

    text
    sets (Unicode, ...)
    encodings (ASCII, UTF-8, ...)
    classes (Latin1, ...)
    glyph-maps


    binary
    structured
    compression
    encryption

    parsing/scanning
    blocks/sections
    nesting/indentations
    brackets/groupings
    commas/joinings

    predicates
    predicates for parsers and scanners to compute and collect for items


    SIMD/SWAR
    emulated/specialized




    Widesword or "wide-word", the "vari-parallel"

    The usual architecture makes for interrupts and DMA,
    and then the super-scalar the vector architectures. The
    idea is that the fundamental interface should be in terms
    of the super-scalar, with the scalar as a limited case.



    access/mutate
    load/store
    gather/scatter
    move/move
    pack/unpack

    match
    exists

    find
    find-first
    find-all



    apply

    translate/decode



    Mostly about arithmetizations and algebraizations, is to figure out what instructions are branchless to result the carriage, then combinatorially enumerate those, and those are thusly their own sorts "normal forms"
    for arithmetic machines or automata, then to compose those.


    The accessors and mutators reflect upon that the data is in memory,
    while the processing is on registers, access-patternry is "load" from
    memory, and mutate-patterny is "store" to memory.

    stripe <- contiguous
    stride <- modular
    striqe <- patternry, aperiodic
    stribe <- patternry, periodic


    For matters of alignment, there are these sorts native alignments and sizes.

    PAGE_SIZE page size, usually 4KiB, operating-system
    LINE_SIZE cache-line size, usually 512 bits / 64 bytes, chip

    SWORD_SIZE scalar-word size, usually "64 bits", 8 bytes, on 64-bit chips VWORD_SIZE vector-word size, eg 128, 256, 512 bits (16, 32, 64 bytes)

    Then, the processor has a given assortment of scalar and vector registers,
    and various accounts of addressing the low and high portions of those
    on the scalar registers and as they've been extended, and about the
    vector operations on the vector registers.

    The accounts of alignment and protection then get involved, about
    the access-patternry, and the offsets, and alignment of the data to
    words, or the pre-amble and post-amble or entry and exit of loops,
    that the usual account of "apply" or "find" or "match", is as like a
    loop, then as with regards to vectorization, then as well concurrency,
    and the incremental and side-effects, then to define algorithms (functions)
    as by those.


    The vector registers are in banks of 8 or 16, then there are sometimes
    multiple banks of vector registers, for example the Intel "MMX" vis-a-vis "AVX512".


    Algorithms will basically have inputs, constants and lookups,
    and outputs, designations of the vector registers.


    The modeling of higher level code to the operations upon the
    registers is as of mathematical models.

    algebraization <- relating to algebras/magmas generally
    arithmetization <- relating to arithmetic
    geometrization <- relating to geometry, for example a grid lattice

    Then the relation of higher-level code to these models is
    according to acts of "expression" and "interpretation".


    Items, Predicates, and Indicators

    A usual idea for "find" is to evaluate predicates (true/false functions)
    on items, to result indicators, then to "find-first-set" or
    "find-first-clear"
    for "find-first" return a found offset, and to return a count and array of found offsets for "find-all".


    The "wide-internal" and "wide-external" reflect whether predicates
    are within the representation on the registers, i.e., "register-internal"
    and "register-external", about whether function calls (external) are
    involved to evaluate predicates. A "function" as internal results
    the evaluation of the predicate as indicators on a register.


    When loading items, for example characters as bytes or in a character
    encoding like Unicode or UTF-8, then a usual idea is to load a register,
    then for the branchless computation of the offsets of the items,
    when for example UTF-8 codes have variable length, then the evaluation
    of predicates on those, whether for example a null-termination of a usual
    C string is to be computing strlen, to find the offset, and compute the length.


    Code Sequences and Scanning

    The textual and character data or otherwise codes of fixed or variable
    width make for the idea of character set designation or detection,
    then the scanning or searching of character data, where Unicode
    is ubiquitous while historical codepages are extant, then for usually
    enough either UTF-8 generally or ASCII as Unicode's Latin1 Basic
    Multilingual
    Plane, with Microsoft's CP-1252 changing out a handful of characters
    from that,
    then with regards to various organizations of UCS-2 or BE and LE and with regards to byte order marker BOM, then to make for usually enough the
    automatic assignment of character classes and implementing regular
    expressions
    and grammar productions along items, predicates, indicators, as tabulated
    at compile-time in tables of constants derived from the specifications.

    The binary codes are not dissimilar, with regards to encoding and decoding
    or compression and decompression or encryption and decryption,
    about the "vari-parallel" in codes.


    Commodity Architectures

    The two primary targets are Intel/AMD and ARM. They each have various
    counts of scalar registers, then various considerations of vector registers.

    Intel/AMD

    MMX/SSE (Pentium)
    SSE2
    SSE3/SSE4

    AVX/AVX2
    AVX512
    AVX10

    ARM

    NEO

    SVE

    The SVE ("scale-able vector extensions") notably doesn't have a fixed
    word width of the vector registers.

    Then, the targets would be

    SSE4 + SSE3 + SSE2 + SSE/MMX: SSE2 + SSE4.2
    NEO (ARM)

    AVX/AVX2
    AVX512/AVX10
    SVE (ARM)

    or profiles into

    SSE2
    SSE4.2
    AVX2
    AVX512

    then with regards to ARM vis-a-vis Intel/AMD what profiles match.

    The target here is mostly (or entirely) integer operations not
    floating-point,
    while both the vertical and horizontal operations get involved.




    Calling Conventions and Wide-External


    About register allocation and for something like "register coloring
    normal forms",
    there are basically cases where registers are to be preserved and when
    they are
    scratch. The idea is that as scope accumulates, that registers are to
    be preserved,
    so that basically according to scope depth and stack accumulation,
    various accounts
    of the registers, for example according to an accumulating mask, get preserved,
    i.e. pushed to the stack then popped off the stack, or context-restored,
    with the
    idea then to make it for the compiler for sub-routines, to compile to a reduced set
    of registers, toward establishing what are "scoped" and what are "scratch",
    and about the allocation of registers in the hard-code both vertically
    and horizontally,
    adding a new dimension to otherwise usual accounts of graph coloring,
    instead to
    make an account in the calling conventions.

    Then, the usual idea of passing arguments from the higher-level language as parameters in registers is that they are scratch ("volatile").

    scoped (required preserved)
    scratch (dont-care)

    volatile
    nonvolatile

    caller-saved
    callee-saved

    https://en.wikipedia.org/wiki/X86_calling_conventions https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64)


    Then the idea is that wide-internal routines are entirely compiled as
    blocks
    and have zero-overhead abstraction, while wide-external routines get
    described
    the conventions of how item-predicate-indicators are organized in terms of
    the histograms and input-output.



    Capabilities and Initialization

    The processors have a common instruction "cpuid" to query capabilities
    and profiles of the vector instructions in the instruction sets. Then initialization is system-wide, while yet various accounts of the statically-linked
    or libraries would make for initialization of the routines before their organization
    and layout.

    It's figured that the blocks of routine would be combinatorially enumerated into making a single binary for a given architecture, then that
    initialization
    would set the entry points into the widest routine.

    So, besides linking would be involved for this sort "wide binary"
    (vis-a-vis,
    "fat binary"), then also for the statically-linked, that initialization
    would
    set the offsets and install the offsets (if not, "self-modifying code",
    with
    regards to code segment protections),


    Stack Machines and State Machines

    Implementing text algorithms then finite formal automata and state
    machines,
    is for making an account of how to employ the wide-words for the
    vari-parallel
    to implement state machines for scanning and parsing and the evaluation of regular expressions.

    Elementary and Novel Vectorization Approaches


    Considering the vectorization of general purpose computing,
    then there's an idea that the elementary are what building blocks
    are possible, then that the novel is to make algorithms on the
    vectors that would be inefficient in the scalar, particularly about
    the branchless and non-stalling, about what can result in effect
    are machines or models of computing, according to SIMD/SIMT,
    given that then the elementary machines are composable.


    The basic idea is to implement "stack machines" and "state machines",
    according to various organizations of what makes for finite automata,
    and models of computing, then to make the arithmetization of those
    according to states and transitions, then that an upper bound of
    computing is determined that guarantees arriving at a solution,
    then that's un-rolled and figured to run in-place towards the
    "branch-less" and "stall-less".



    The basic idea is that stack-machines are implemented in integers,
    then about using prime rings to indicate transitions, then that
    the finite-state-machines are built out with multiple equivalent states, vis-a-vis unique states, then that the arithmetic carries through either
    way equivalently, or for pushdown-automata and finite-state-machines,
    here "stack machines" and "state machines".


    Bit-Sets and Prime-Multisets

    The bit-set is a most usual notion of the arithmetization of a set,
    by a dictionary of codes to offsets, an indicator bit indicates membership
    in a set of a code, where the bit-set has a maximum size the word-width.

    The prime-multiset is after a dictionary of codes to primes, then the divisibility test indicates membership, and multiplicity indicates count
    in the multi-set. The prime-multiset has size varying according to
    word-width
    (unsigned integers their range) and that more common codes get assigned
    smaller primes and more rare codes get assigned larger primes, as much
    like the Huffman coding.

    In vectorization and bit-methods, accounts of the like of "Digit Summation Congruence" make for divisibility tests in binary for a subset of the
    primes
    that are tractable to Digit Summation Congruence, then that trial division follows for multiplicity of factors (count in the multi-set).


    Parameterized Dimensions and Instruction Classes

    The instructions are as of the instructions and their prefixes and
    their operands in the instruction sets and the assembly languages,
    then that they fall into classes of equivalent behavior, and according
    to dimensions as so parameterize their sizes.


    Ttastm/ttasl Mnemonics

    After the parameterized dimensions and instruction classes,
    are these sorts mnemonics and syntax.


    mov, push/pop, load-effective-address:

    lod < (dst, src)
    cpy = (dst, src)
    sto > (src, dst)

    adr @ (load-effective-address)

    psh ^>
    pop ^<

    It's figured that "copy" (assignment), is a reg/reg or reg/imm operation,
    while then the above are the only reg/mem, mem/reg, operations.


    arithmetic:

    binary (with target destination):

    and &
    ior |
    xor ^


    add +
    sub -
    mul *
    div /

    unary (and in-place):

    inv ~ (unsigned)
    neg ~ (signed)
    rev <>

    inc ++
    dec --

    ror }}
    rol {{
    shr >>
    shl <<

    Unary operation act in-place on a register the destination,
    binary (or dyadic) operators vary on whether the destination
    is one of the operands (for example running-sums on x86) or
    a separate operand (multiplication and division on x86 and
    arithmetic usually on ARM).



    So, the usual idea is that each usual instruction has a three-letter
    mnemonic,
    and a given syntactic construct, then the arrows (angle-brackets) indicate directionality, for usual constructs:

    b < [location] # stores location's value in b
    a = b # assigns a to b.
    a > [location] # stores a in location

    It's figured that thusly "mov" is distinguished between memory-moves and register-moves,

    binary:

    a = b + c

    unary:
    a++
    a--
    a << 3
    a }} 3

    The '#' is used to indicate comment to end-of-line,
    then also ';' can be for comments.

    Un-used characters include:

    !
    $
    (
    )
    [
    ]
    _
    :
    ,
    .


    Further usual operations have mnemonics yet not syntax symbols,
    then for a usual idea of defining or overriding symbols.

    bsf (bit-scan forward/reverse, find-first-set)
    bsr

    ffs
    ffc

    btt (bit-test/bit-test-complement/bit-test-reset/bit-test-set)
    btc
    btr
    btr
    bts




    cnt (population count, set bit count)


    pushall
    popall


    byteswap



    spread (reorganize: widen registers)
    shrink (reorganize: narrow registers)


    Declarations of types with data-type and data-size,
    have that the default type is unsigned int,
    then that the default size is the scalar word width.

    quar
    half
    doub
    quad


    siz
    len



    swap


    shuffle


    pack
    unpack


    sum
    prd



    Targets:

    State Machines / Automata
    Character-Set Conversions
    Regular Expression Matchers
    Huffman coding
    Deflate algorithm
    Parser/Scanners


    State machines as "plants" and "arcs" for "states" and "transitions":
    always starting or continuing an "arc".

    The "offtables and "noptables" that have that "noptables" make
    for the deductive elimination, while the "offtables" have the
    inductive carry.

    Then the usual idea of the parallel is that each sequence of possible
    arcs is a long-ish table, that point to a list of inferred plants,
    and the next arc.


    The "arc" for the scalar, for the vector, and for vector-lookup.

    byte
    scalar
    vector
    vector-lookup


    Correctness, Diagnosibility, and Performance


    Modes


    States and Transitions
    Arcs and Plants


    codes in -> symbols out

    Decoder vis-a-vis Encoder

    windows
    duplicate detection / histogram


    off-tables and nop-tables

    rejecter/accepter


    Then, the idea is that a usual function call gets the input on the
    registers, with a
    usual signature like so:

    ret_t f(
    const char* input,
    unsigned int input_length,
    const char* output,
    unsigned int output_length
    );


    then that the idea is that a stride over the input is for the vector
    register, loaded
    as an unsigned integer, then to make for the bit-wise or byte-wise
    processing of
    the input and generation of the output.

    The input is variously fixed-length or variable-length, bit-wise or
    byte-wise, with
    the byte being the least addressable unit of memory byte-offset and the
    bit being a fungible
    value bit-offset, the registers being here considered the integer values
    and of the un-interpreted
    bit-sequences vis-a-vis their sequences as uninterpreted byte-sequences,
    which in
    the C library is according to the constant CHAR_BIT which is almost universally 8
    (bits per byte).

    The half-byte then is called the nybble, two-bytes is called a short, four-bytes is
    called an int, and 8-bytes called a long, or for short/int/long as
    16/32/64 bits.

    Then, the vector units implement an instruction called shuffle, which
    makes a
    lookup: it looks up nybbles for nybbles (vector-wide, in one
    instruction, from
    the codes and what results offsets in the off-table or jmp-table).

    So, for each of the four bytes in the 32-bit word, the idea is that each
    of the
    possible combinations get a mapping, then the off-table is consulted after
    the shuffle lookup, and then 0-4 tokens are recognized, else extending
    the bounds
    of the token.


    The idea is to make the lookup-table index/offset, that is
    generated/compiled,
    that given the codes, results the symbols.


    So, the idea is that a few different shuffling constants produce the
    nybbles
    for each byte, that are zero for a usual missing case, and get composed to
    make a tree-traversal, among the possible next states of the parser or
    the arc,
    within the limits of the nybbles, then that if it works out beyond the
    limits of
    the nybbles, to start afresh within the register word, within the limits of
    the nybbles their range of codes, making for bytes or characters, how they continue the arcs and make the plants.

    0001 0001 -> continue, most likely mode

    0100
    0101
    0111 -> second most likely mode

    1000
    1001
    1011 -> third most likely mode

    Thus, using a prefix-property of the nybbles, makes it possible for up to
    three codes/characters, their second and third most likely modes, or arcs, while when there are predictable modes, or arcs, then there is a continuing
    arc or up to four plants (output symbols, tokens).

    Since the nybbles are in pairs to make a byte: is for that to determine
    the
    upper and lower making a compatible code, is the contingency of the
    high nybble and low nybble, what results an unambiguous byte.

    This is for making permutations and then rotating through them until
    it's invariant, making a check that the two nybbles agree on the byte.


    So, for reducing the alphabet size, is about fitting the alphabet into
    less bits.

    2^5: 32-many, [a-z] + 6
    2^6: 64-many, [A-Za-z] + 12

    Then, building codes can work in the lowercase, in the case-insensitive,
    then the idea is that usually a character is a char or a byte,
    yet, it's two nybbles, so, all the productions of the grammar,
    start reducing to those, then, as well, for UTF-8 and so on, that's a
    higher production, and then for fixed-width Unicode and so on,
    also as like a higher production.


    Shake-Sort

    The idea for shake-sort is to use horizontal compare to simply
    enough by making transpositions, then computing the masks
    of blends/shuffles, and resulting then that a word its segments
    gets sorted, then for sorting words, to interleave them then
    apply the un-rolled shake-sort, which will shake out the order,
    in a branchless and arithmetic way.


    Huffman Tables and Huffman Coding

    The idea is to automatically make a population histogram,
    of the vari-parallel or varallel, then to make alphabets of
    that to get related the coding, so then the codes are small
    and can be put through a dictionary to result making the
    matching and the scanning of the symbols from the codes.


    Character Classes

    digit
    alpha
    punct
    space

    digit:
    arabic
    hex

    alpha:
    upper
    lower



    punct:
    comma
    colon
    semicolon
    ampersand

    unscore
    vpipe
    bslash
    slash

    period
    qmark
    xmark

    paren
    bracket
    curly
    angle

    quote:
    single
    double
    curly

    arith:
    add
    sub
    mul
    div
    mod


    asterisk
    tilde


    unicode:
    block: https://www.unicode.org/Public/UCD/latest/ucd/Blocks.txt


    So, the idea is to make the "available and significant indicators", that
    thusly result predicates organized in bits, then to make that a usual
    first account of scanning, is to make a lookup for the printable ASCII,
    then to go about the notions of the composable grammars.

    0001b white
    0010b punct
    0100b alnum
    1000b other


    Then, "other" begins to include both un-printable control characters,
    and, basically everything above 7-bit ASCII.

    Then, these classes are usually exclusive, then about cases among
    them when they cross.

    punct
    inner
    outer
    affix

    For example comma is inner, brackets are outer, and hash-tag is
    an affix, yet in usual accounts, period is both an inner (when used
    as "dot"), and an affix (when used as "stop"),


    white
    vert
    nl
    cr
    vt
    horz
    space
    tab



    alnum
    alpha
    digit


    So, the first nybble is as above, then the second nybble is to work
    into those.

    white:
    0001b vert
    0010b horz
    0100b ligature
    1000b other

    vert:
    0001b nl
    0010b cr
    0100b vt

    horz:
    0001b sp
    0010b tb


    Then, it looks that the constants table for ASCII is at least three
    nybbles,
    then to make for various ways then that when loading a register of
    character data, is to be making that then the scatter/gather makes to
    gather the constants from the table, 16-bits for each 8-bits, for example
    into two registers.

    r1: char-data
    r2: preds-1
    r3: preds-2

    Another notion is to have that white-space is simplified

    white:
    0001b sp
    0010b tb
    0100b nl
    1000b cr

    then that 0000b is "other".

    The main idea is that there are various uses of text.

    source (and data)
    spoken (natural language)

    Then, the various predications, are to reflect positive predications
    of closed classes. Then, 0000b is reserved for non-predicated (un-closed).


    0001b punct
    0010b alnum
    0100b white
    1000b coded

    Then the idea is that bytes with the high-bit set are UTF-8 encoded,
    and that control characters are also "coded".

    256 characters

    loading onto a register

    scalar
    access item-wise
    vectorized without scatter/gather

    vectorized with scatter/gather


    Then it seems that the gather instruction in x86 starts with AVX2
    about floating point values, though that it could just load the
    values as literals and then treat the registers as being integers.

    Then, for four of those being in a register, the idea is to load up
    the entries from the table, then merge/broadcast those together,
    to make the bytes/shorts with the flags into the registers.

    op set:8:32(index)
    op clear:8:32(index)


    op place:8:32(index)
    32 = 8 << (#8 * index)

    op pick:8:32(index)
    8 = 32 >> (#8 * index && 0xFF)

    The suggestion here is that 32 and 8 are built-in types,
    and number literals are prefixed with #. Then, these
    would be specialized like templates for each of the types.

    op gather:8(indices, table): output
    output[0..7] = load(indices[0..7])

    The idea here is that there's a range notation, that only
    8, 16, 32, 64 are "types", and other numbers are offsets
    or with ".." making "ranges", then that to result an un-rolled
    loop.

    Ranges range with the values, using .. to indicate connecting
    the start and end increments inclusive, and comma to indicate
    particular values, then for example named classes like 'even'
    and 'odd'.

    [0..3] # 0, 1, 2, 3
    [1,3] # 1, 3
    [even] # 0, 2, 4, ....
    [odd] # 1, 3, 5, ....


    The syntax construct with brackets (square-brackets) in
    C-language is usually enough an array "dereference", the value in the
    array at the offset, while in A-language is usually a dereference under
    the pointer, then here in "TT-language" the idea is that it is like the mathematical interval, inclusive.

    The index and offset are about variously the bit-wise and byte-wise,
    about the ordinal offset of the bits, and, the ratios and fractions of
    the bytes, in the bit-sequences the words.


    Then, a usual notion is to nest the intervals, that byte-offsets
    are indicated in ranges by [], and bit-offsets by [[]].

    [3] # byte 3
    [3[1]] # byte 3, bit 1

    The bits are generally considered msb-to-lsb, most-significant-bit
    to least-significant-bit, also the numbering, about bit and byte endianness
    and MSB-to-LSB like network order and msb-to-lsb bit order. Since architectures
    may be little-endian or LSB-to-MSB, gets involved that the logical (or, "abstracted")
    addressing is big-endian.

    The the operations as accept ranges basically have indicated that
    these would be as of loops of fixed size, then fully un-rolled, or,
    the relevant vectorized instructions, one instruction.



    o lay v8 > v32
    v32 = v32 | 0xFF

    o clear v8 > v32(i4)

    o set v8 > v32 ([32/8])
    v32 =

    o place v8 > v32 ([0..3])
    v32 |


    Here the point is to indicate that when placing a value into
    a register, that if it's already initialized to zero, then it's simplified
    to OR in a value, else about indicating that the result is to clear
    the byte, then place the byte.

    fill
    flush

    pick
    place

    Here these would be logical operations, with the idea that
    they're eliminable according to the context and the concrete,
    or the physical operations.


    Then, with regards to the register allocation, is the idea to
    indicate for the operations o what are the

    scope
    scratch
    saved

    logically, then physically aside.

    o fill vN cN

    vN: generic vX for width N
    cN: byte-count
    iN: byte-index


    o fill # within a vector, fill a byte or range of bytes with all 1-bits
    o flush # within a vector, clear a byte or range of bytes with all 0-bits
    o pick # from a vector, pick a byte or range of bytes
    o place # within a vector, place a byte or range of bytes



    For the register allocation, there's according to the architecture and
    the operations, about the dyadic functions (binary functions, two inputs
    one output logically) what happens to the operands their value from the
    place when the instruction is invoked afterward, whether the operation
    is "destructive" or "non-destructive" to the operands, and whether the operation is thusly need "saves" of the values, if they need be "saved".

    o add()
    o accrue() # accumulate a sum,
    o sub()
    o decrual()


    o add()

    Then, since operations are small, yet various specializations of them
    as templates will make use of various registers and have varying
    numbers of instructions in the resulting assembler, is about that
    then the register-plan will have that like "lanes" in the vectors for
    data, are "tracks" for the registers, about a usual idea that data that
    is re-used is kept on a track, and for example saved on the stack or on
    heap,
    while then registers that are scratch are rotated to basically exercise the registers in rotation, thusly that the processor will as likely find no dependencies
    or hazards, in rotating the fresh registers.

    o keep() # either make a track, or save, the contents of the registers


    It's figured that all the sources are compiled together, then there
    not being any scoping, while within the operations, all the variables
    are local, so there's automatic scoping, then though to indicate in
    the signature what registers are tracked, thus preserved, so that
    the caller can make assignments of it, on it.

    v32 a = 1
    a = a + a

    o add("+"):
    v32 lhs
    v32 rhs
    instruction add lhs, rhs


    Here the idea is that the "instruction" keyword is like the "command"
    keyword, indicating that it's the literal instruction in the resulting assembler.
    The operator overload is indicated in the "signature".

    v32 a = 1
    a = add a a

    v32 a = 1
    a = a + a


    o add (v lhs, v rhs, v ret)
    o "+" add

    o add (v32, v32, v ret):
    # 32-bit values, registers, overflow, ....
    instruction add

    o add (v64, v64, v ret):
    instruction add


    Then, it's figured for values v as unsigned, then perhaps for unsigned u.
    As well it'll conflict less with "v" for vector.

    u32 n = 1 # unsigned, default
    s32 z = 1 # signed
    f32 x = 1.0 # float


    u32 a = 1

    a = a + a


    o "+" add(lhs, rhs -> ret)

    o add(u32 lhs, u32 rhs -> u32 ret)
    instruction add lhs, rhs
    ret = lhs

    o add(s32 lhs, s32 rhs -> s32 ret)
    o add<u32>

    o add(f32 lhs, f32 rhs, f32 ret)
    instruction fadd lhs, rhs
    ret = lhs

    Then, to infer what implementation gets inline then to be generating
    an assembly listing, works backward from the assignment of the return
    value, and forward from assignment of the input operands / parameters.


    exclamation
    composition
    transliteration

    There is a general notion of writing and re-writing rules.

    fill-in-the-blank
    connect-the-dots

    What's figured is to make for matchers to result then that

    enumerate possible combinations
    eliminate impossible combinations

    with the idea then that there's a very free composition,
    with that what's like matches then what's unlike deletes,
    for then what results of the exclamations their composition,
    to be transliterated, then for file-system organization,
    and as of structures.

    Spontaneous Compiler

    There's much to be made of "simple data files" then
    for what make for structure and schema, about the block
    and stream of text, and about the dictionaries and the
    symbols, as to what's to make result from templates: forms.



    "For Viswath and Charmaigne"

    The idea for text predicates is that there are the two basic
    modes: "source" and "spoken".

    Then, for the source mode, there is an array of bytes matching
    each byte of a character or partial character.

    These matching bytes are pairs of nybbles, primary/secondary.

    1a: punct white alnum coded
    1b: according to class

    2a: interpretation primary
    2b: interpretation alternate


    Then, the most usual and common sorts of character classes
    for regex and EBNF have quite regular forms.

    [A-Z]: alnum/alpha upper/
    [a-z]: alnum/alpha lower/
    [1-9]: alnum/digit whole/
    [0]: alnum/digit zero/

    space: white/horz pad/space
    tab \t: white/horz pad/tab
    nl \n: white/vert line/nl
    cr \r: white/vert line/cr

    bell \b: coded/ctrl


    It's figured that these are _exclusive_ classes, then about
    when there is the overlapping or _inclusive_ classes, about
    for example "is_ascii", "is_graphical" and so on, or POSIX
    character classes, it's figured that would be into the
    "POSIX character classes predicates".


    Then, according to whether the character set encoding is
    Unicode with UTF-8, then the primary predicate will be
    that it is according to the character set "cset", while
    then the secondary will be for the detected or specified
    character set.

    UTF-8 byte 1 length 2: coded/cset utf8/len2
    UTF-8 byte 1 length 3: coded/cset utf8/len3
    UTF-8 byte 1 length 4: coded/cset utf8/len4
    UTF-8 bytes 2-4: coded/cset utf8/body

    Then, it's figured that every character in any relevant character
    set has a specific relevant character in Unicode, while, it's generally
    so that all "source" texts may be ASCII-only, where that Unicode representations are as of literals and the like.

    The puncutation "punct" then gets broken out variously, about
    that various modes will either have predicates about the left
    and right of the joiners and groupers.



    Then, about _commas_ or _joiners_, and _parens_ or groupers,
    and _affixes_ or markers, then is that source generally applies
    these usually, then as with regards to differences between
    arithmetic (eg, l.t. as left angle bracket, g.t. as right angle bracket),
    and as with regards to where arithmetic operators are joiners
    or affixes, for example negation.

    In the alphanumeric, then for numeric literals, is another example
    of where the syntax for floating point numbers involves the exponent
    and base and radix or significand and mantissa, and +/-, and so on.
    Similarly the literals for numbers may include alphabetical flags,
    prefixes, and segment separators, for example _ in source text
    and commas/stops according to locale in "spoken" (natural) text.

    Then, it's figured that in the implementation of parsers or matchers,
    or tokenizers or scanners, then the relevant predicates for the classes
    have various canonical forms, then specific relevant forms, of the
    predicates so pre-computed, so that as a registers of characters is
    loaded (C-many bytes), then a gather lookup results that populates
    a register of the same-length with the relevant predicates, then
    that matching of the patterns according to matching of the bits,
    can result from bit-masks and generally about the infrastructure
    of determining the bounds of productions, and what among other
    productions are relevant.


    Here it's figured that the vector registers will be employed as the
    constant and the lookup, then that the built

    "abstract syntax tree"
    "abstract syntax sequence"
    "abstract syntax graph"

    is working off of the general registers.


    A most usual idea is "greedy matching" after Kleene star and Kleene plus
    or the Kleene notation for formal languages, then about that the
    algorithm gets involved about computing bit-masks matching the
    predicates, then ranges of those, to result computing the offsets
    of a next match, or when there's the likely and less-likely and un-likely,
    in the likely, to find the bounds of multiple matches in the register.

    For example, when greedy-matching, starting at an offset, one might
    simply AND together successive bits, non-branching, then the first set
    bit and the first clear bit after that are at the bounds.

    find-first-toggle-bit(off_t from)


    Then, besides usual accounts of greedy matching, get involved in
    parsing, the accounts of comments, quoting, and escapes.

    The escape is used within the text to indicate characters of values
    of literals or entities, most usually in source text the back-slash.

    The idea then when parsing the like of quoted-CSV or JSON, that
    all the strings are in pairs of double-quotes, then that quotes within
    the strings are preceded by a backslash to indicate a literal double-quote within the string.

    Then, when there are escapes in the language, the idea is that it's a
    different sort of match, since it changes the punctuation character
    to a word character.

    So, the idea in this case is to detect escapes in parallel across the word, finding any escape character, then in that production mode changing
    those to "coded/escape" of what are the gather predicates, then that
    the algorithm can proceed finding the bounds of the productions in
    the grammar, then later the semantic reading of the text, can re-interpret those as from the literals again.

    About loading the predicates, is the idea that there's a 256-entry lookup
    table for the 2^8 possible bit-sequences in a byte, or for example, a
    lookup
    table with 2^16 entries or 64KiB, then to gather those two at a time, where
    a 2^32 table or 4GiB would generally be considered too large, yet that as
    a facility that 64KiB tables of source/spoken predicates are small and
    fit in
    the cache, about whether parallel-gather or cache-coherency is improved.

    About the likely/less-likely/un-likely, is to reflect that these could
    be any
    sorts of modes and alternatives and the rest, then that fitting into those
    few categories makes for that the matching can be very greatly improved,
    where for example pshufb will make lookups of nybbles, then that the "un-likely" basically starts with the matching among alternative
    productions.


    Combinations of predicates like accepter/rejecter and intersection/union,
    then get into how to compile predicates and represent them as computed byte-sequences, then that the machinery of predicate matching, finds
    the bounds and emits the bounds and matched term.

    So, it's a usual account of building "abstract syntax sequences", or where
    the productions butt together, starts with disambiguating the "coded" predications, then for example to handle UTF 8/16/32 or variable-length
    codes, overall oriented toward bytes, then with the idea that the
    predicates
    are to be computed into the case-specific bits the lookup tables and case-specific
    bits the productions, then the machine always works the same way, in a multi-pass sort of approach, or in the "lifting" of the layers of the
    abstract
    syntax sequences, which are nested bounds of the contents the literals
    of the productions.

    Then "abstract syntax trees" or "abstract syntax graphs" can be built from that, with the usual notions of comments and quoting, and where the
    locators point to the original text with its original offsets, from the abstract syntax sequence the source text itself.

    https://en.wikipedia.org/wiki/Affix_grammar https://en.wikipedia.org/wiki/Extended_affix_grammar


    Detecting and Decoding the Text

    So, it's figured that the source text is in its natural layout.

    ASCII
    ISO8859-15 / CP-1252
    UTF-8

    ASCII and ISO8859 are fixed-length one-byte, to represent
    0-127 and 0-255 respectively, UTF-8 is variable-length 1-4-byte,
    to represent all the characters in Unicode.

    The above are the most common encodings of source text.
    Then, the "detecting" the text would most often have that
    be a fixed parameter to the algorithm, since "sniffing" and
    the like then would get involved.

    UCS-2 (BE)
    UCS-2 (LE)

    The usual fixed-length two-byte encoding of Unicode
    as from "wide character" then may have the "Byte Order Marker BOM",
    or "thorn y-diaresis", as an example of a "comment" character.



    Then, detecting and decoding starts with the coded/ctrl and
    coded/utf8 characters, as would be common to all algorithms,
    then gets into "quoting" and "comments", and "invalidation"
    and "well-formedness", which vary on syntax.


    Starting thusly with the source text, then the idea is that
    the higher Unicode codepoints in UTF-8 are "immediate
    productions", then that their contributions to character
    classes are considered, when for example POSIX character
    classes include some Unicode in their definitions of whitespace
    or about punctuation, yet that mostly there are never found
    source languages where non-ASCII is in the keywords or the syntax.

    Then "invalidation" and "nonwellformedness" are to make for that
    the "wellformed" is according to the data format, and the
    "invalidation" is according to schema or otherwise rules.
    These are negative conditions, meaning that a document
    is never "validated" nor "well-formed", just not "invalidated"
    and not "nonwellformed".


    Then, un Unicode, there are properties of characters, these
    then relate to the basic properties the initial categorization
    of characters.

    https://en.wikipedia.org/wiki/Unicode_character_property


    So, this sort of plan starts looking like code like this, for example
    for the 16-bit or 2-byte case, in SWAR.

    mov ax, [input + offset]

    xor ah, al # bswap
    xor al, ah
    xor ah, al

    mov bh, [table_source_primary + ah + 0]
    mov bl, [table_source_primary + al + 1 ]

    # ...
    mov [ptr_offset], offset + 2


    Then, the input bytes are on register 'ax' after byte-swapping from
    the little-endian representation of a 16-bit integer as was loaded,
    and the relevant table entries are in the matching bytes in 'bx'.

    Then, it's similar for 32-bit or 64-bit loads.

    32-bit:

    mov eax, [input + offset]

    bswap eax

    mov ebx, 0
    or ebx, [table_source_primary + (eax && (0xff << 8 * 0 )) ]
    or ebx, [table_source_primary + (eax && (0xff << 8 * 1 )) ]
    or ebx, [table_source_primary + (eax && (0xff << 8 * 2 )) ]
    or ebx, [table_source_primary + (eax && (0xff << 8 * 3 )) ]

    # ...
    mov [ptr_offset], offset + 4


    64-bit:

    mov rax, [input + offset]

    bswap rax

    mov rbx, 0
    or rbx, [table_source_primary + (rax && (0xff << 8 * 0 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 1 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 2 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 3 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 4 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 5 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 6 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 7 )) ]

    # ...
    mov [ptr_offset], offset + 8

    Using the MMX registers these are much alike the 64-bit case.


    movq mm0, [input_base + input_offset]

    mov mm1, 0
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 0 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 1 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 2 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 3 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 4 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 5 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 6 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 7 )) ]


    # ...
    mov [ptr_offset], offset + 8


    About the various masks starting to get introduced, is where
    it's figured they would make a lookup table, figuring the cache
    would be warm, or as to whether instead it's better to interleave
    them among the remaining registers, their computations.


    mov mm1, 0

    mov mm7, 0xFF


    shl mm7, 8
    mov mm6, 0
    por mm6, mm7
    por mm1, [table_source_primary + (mm0 && (0xff << 8 * 0 )) ]

    About the register allocation, is the idea to either make the
    locals first and temporaries last or temporaries first and locals
    last, which seems preferable, since sometimes the default instruction
    works on the lower registers, making sense to have that on temporaries.

    About the memory address offset, it's a usual sort of temporary,
    then about computing offsets that they go either on the general
    registers or the (later) extended registers, while it seems that the
    MMX instructions are limited about the "parallel" instructions,
    with regards to that movd/movq are perhaps for simply pushing
    the lookups onto the call stack, then loading relative the call-stack.

    https://community.intel.com/t5/Intel-ISA-Extensions/Software-consequences-of-extending-XMM-to-YMM/td-p/872131

    This suggests that MMX is simply obsolete, yet, there's also the idea
    that it's still an available execution unit, and runs at the chip's speed, about making the general purpose and mmx registers work together,
    then about altogether separately the sse/avx xmm/ymm/zmm registers.
    Then, while MMX registers are independent moves and have no push/pop,
    yet there is "PSHUFB" on MMX registers. There are MOVD and MOVQ.
    So, the MMX registers can be useful for PSHUFB about the general registers,
    and PCMP*B, then that PMOVMSKB will result an 8-bit sequence from
    8-byte PCMP*B.

    Then, the targets for x86-64 appear along the lines of:

    1) G.P. + MMX r*x + mm (64, 64 bits, 7, 8 many)
    2) SSE xmm (128 bits, 8 many)
    3) AVX ymm -> zmm (256, 512 bits wide, 8, 16 many)

    Similarly for ARM:

    1) G.P. + NEON
    2) SVE



    Then, the idea here is that there are to be approaches
    for the

    1) solid (a constant block, length known at run-time)
    2) stream (a constant block, length un-known at runt-time)

    then as with regards to "incremental approaches" or changes,
    that being in terms of those.

    The usual corpus is either the

    1) source (code and data)
    2) spoken (natural language)

    as that being text among the

    1) text
    2) binary.


    The basic machines are as of "match" and "find",

    1) match-next
    2) find-first

    about that the accepters/rejecters are to make for
    both the alternatives of a "next" and signature of a "first".

    Then, the usual idea is that "findings" are "found",
    and "matchings" are "made".


    The usual idea then is that finding and matching make
    for that finding is the process, and matching is the productions.

    Matching a mis-match and made-match: the usual meaning
    of "mis-match" means a false positive, yet here it aligns with
    the accepters and rejecters, or acceptors and rejectors,
    with the idea that finding is a parallel algorithm along
    the lines of:

    find-longest-match
    find-nearest-exit

    with the idea that any kind of finding has both continuing
    and terminating conditions, then that accepters and rejecters
    are to be run in parallel, for example, with starting to find the
    longest match and working backward (on the input register),
    and starting to find the nearest exit and working forward
    (on the input register).

    The predicates off the properties are to be computed, here
    for a usual account of

    1)intersections,
    2) unions

    about the ranges and range calculus of characters that
    comprise a class, alike

    1) simple classes (word, space, digit, punctuation),
    2) POSIX classes
    3) Unicode classes

    as built-in classes, then the user-defined classes as made
    of combinations of those spaces, and, specific combinations
    of characters, and + and - and Union and Intersection and Setminus.

    The find-longest-match, then, is about making bitmasks of
    long length to the predicates, then working those backward,
    the accepters.

    The find-nearest-exit, is about making bitmasks of matching
    _not_ the predicate, then working that forward, the rejecters.


    There are distinguished
    the character "properties" computed
    and the finder/matcher ("match-finder", "match-maker")
    the "predicates" computed, then about making so that
    usually it's AND and OR for the conjunctive and disjunctive
    and as about XOR and NAND, then about bits that are "care"
    and bits that are "don't care", to result then that a loop of
    evaluations in a linear-constant constant time in a branchless
    manner make arithmetic that accumulates then what can be
    tested for made-matches or mis-matches (acceptance, rejection).



    Much like the "layers" are about the

    abstract syntax sequence
    abstract syntax lattice (grid)

    abstract syntax tree
    abstract syntax graph (links)

    then as well the finder and matcher have "layers" involved
    about default semantics for counting and summary, where
    the finder automatically makes counts and summary, like
    average and "clear modes", when there are obvious modes,
    while the matcher is to be building "catalog" and "dictionary".

    So, the "layers" are as of the state machine, the idea that any
    state machine of "matchings" is many, many loops of "findings",
    then a given matching gets the accumulated finding as metadata,
    besides also being the location down the layers in the lattice and the grid.



    The layers develop the properties or prop-bits, in the variable-length encoding, of the codes/text, in-place.


    byte-props (the bytes, which are chars in ASCII)
    char-props (chars in UTF-8)
    ...
    esc-props (the escapement and literals)
    lig-props (ligatures, accents, ..., locale collation)

    Besides these default properties (binary properties)
    then each character in each character-set has its code-point,
    or code-points, that are numeric value (an unsigned integer).


    Then, for particular classes (character classes) that are either derived
    from the common props, when they are exclusive or indicative, those
    are common and byte-props and char-props are always computed
    (via lookup and decoding), then the idea is that otherwise the character classes are defines by ranges and points, then about that there's logic involved that takes the literal codepoint values of the characters,
    and derives/computes their presence in ranges (of spaces) or
    membership in sets of points.


    So, the general idea is that for a given scanning/tokenization/lexing,
    that the relevant character classes are decomposed from the expression
    or grammar, then the arithmetic is defined that according to the numeric
    values in the ranges and of the points of the characters, that the
    indicators
    for all the characters are derived from the prop-layers and the characters.

    expr-1-props (expression properties)
    expr-2-props
    ...

    gram-1-props (grammar properties)
    gram-2-props
    ...


    Then, the scanner has states, about what it's expecting to scan, and the
    idea
    above about the coded likely/less-likely/un-likely current and next
    states of
    the scanner, then that scanning proceeds with its char-props,
    expr-props, gram-props,
    figuring those are computed all the time, and then arithmetic follows,
    where thusly
    it results that AND/OR and CMP result deriving the findings and matchings.

    A fixed value (a la "grep --fixed") or a constant string to match, is
    its own sort of
    case, instead of having simply an expression/grammar with each of the characters
    of the string literal in order, makes for making a mask directly off the codepoints
    and matching off that (longest-match and nearest-exit).


    Making bitmasks that are aligned down the bytes, gets involved the variable-length
    when the characters are variable-length, and besides "stitching" when
    the characters
    their bytes cross or "straddle" boundaries, stitching the straddlings.
    The point here
    is that the bit masks gets rotated or shifted or grown, for greedy
    match, and then
    when those go over variable length characters, need get "smeared" across
    the
    variable-length, and when rotating or shifting, the relevant pattern
    needs get
    smeared and un-smeared, so that the care/dontcare bits line up, that the word-wide
    AND/OR in effect indicates the findings and thusly matchings.


    The java.util.regex.Pattern class is considered a good design for
    regular expressions.
    The java.lang.Character describes many relevant predicates, or their properties.

    https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html

    The javadoc well-describes how UTF-16 makes a variable-length encoding
    of otherwise what are usually called "wide characters" or two-byte fixed-length,
    when the high-low surrogates beyond the Basic Multilingual Plane (> 0xFFFF) make either 2-bytes or 4-bytes each character.

    When the characters have 2-bytes instead of 1-byte, yet the masks are organized
    their indices and offsets character-wise, then like "smearing" is
    "smashing", basically
    doubling out the bits, thus that "smashing" for wide characters and
    "smearing" for
    variable-length characters is how to make bitmasks that then the properties/predicates
    are derived and computed with arithmetic, and the findings and matchings
    are products
    of arithmetic of the properties/predicates, then that the
    indices/offsets are maintained
    by the smashing/smearing.


    Then, since the machine itself (or the framework) makes the smashing and smearing,
    then the crafters or generators of the patterns for the findings and arcs/plants for
    the matchings, can do so agnostic the character-set encoding (as long as
    it's Unicode,
    where other character-sets relate various symbols and glyphs in their glyph-maps to
    their code-points, then that those would have their own craftings or generators of
    what computes the predicates from the properties).

    About the fixed case, is that it can operate on the codepoints
    themselves, that it's
    not agnostic the character set, instead the string representation has a conversion
    loaded to the character set on a register, then that's simply XOR'ed
    with the codepoints
    and results testing for zero (instead of the overall approach of
    arithmetic on the
    properties and predicates and then after CMP to make something like MOVMSKB which moves a mask of the bits out then to make find-first-set, find-first-clear,
    or as with regards to bit-scan-forward, finding the offsets where the
    findings
    begin and end, to make matchings the productions. So, keywords and search strings can make find-longest-match find-nearest exit in a constant
    time, then
    for straddling and splitting when crossing the boundaries of the loaded
    word.



    So, in the layers and layers, then both the char-props and code-points
    get involved,
    where the text data is in its own character set in its own layout. Both
    get involved
    in all cases, since the coded/* primary byte-props stick out what makes
    to derive
    the extents of the code-points, and, there may be multiple code-points
    in a "character".

    https://en.wikipedia.org/wiki/Code_point


    About then the algorithms and the machine, it's figured that the

    find-longest-match
    find-nearest-exit

    has that there are many alternatives to be checked for their initial
    segments,
    with the idea of matching the "constant/fixed" and the "variable/greedy" productions,
    about that all the alternatives are making findings in the usual course
    of exhibiting
    the same behavior as the "L*" parsers, LL and LR parsers, and with
    regards to
    look-ahead. The idea is to address a superset of context-free grammars as
    the "context-local" or "context-bracketd" grammars, where for example cases
    of ambiguity like matching brackets vis-a-vis '>>' and '<<', make for
    that there's
    nesting of brackets or alike a depth-stack, vis-a-vis the plain space of expressions.



    Then, when "combining matches", is about either bit-flags or primes as
    for the bit-sets or prime-multisets, about figuring the queue/lists of
    finders their bitmasks, and when evaluating those about how to accumulate
    which ones make or might-be matches, and then how to sort among those, basically that when a match is made the finder is promoted, then
    figuring that
    among the array/queue/list of possible finders, of which there may be more
    than fit on registers, that they are to be gone through. Here, where
    mostly
    with the mind to be avoiding "conditional jumps" or branches, then also
    is the notion to avoid "memory references" or stalls, about the stall-less after the branch-less, and figuring that a "linear-constant constant time",
    has that the CPU has all day if there are no branches and less stalls.


    char* strtok(
    char* _Nullable restrict str,
    const char* restrict delim
    )

    char* strtok_r(
    char* _Nullable restrict str,
    const char* restrict delim,
    char** restrict saveptr
    );

    https://www.pcre.org/current/doc/html/

    Register Plan

    So, there are these sorts registers.

    gp: general purpose
    ga: general auxiliary (MMX)
    rv: vector registers

    Then, on ARM, there are more general purpose registers,
    figuring that the machine on x86 will be using the gp and ga,
    and on ARM similarly dividing the registers into gp and ga,
    and that on both ARM and x86 then there are vector registers.

    x86
    gp: 6-7 many
    ga: 8 many
    rv: 8 many (SSE 4.2) 16 many (AVX) 32 many AVX 512

    ARM
    gp + ga: 31 many
    rv: 32 many


    Then, it's figured that the machine thusly has:

    gp + ga: 14-15 many
    rv: 8-many

    registers to be planned. Then, on the gpga registers,
    it's figured to maintain the state of the machine, as
    with regards to the stack, and on the rv registers,
    it's figured to make the data, then that the algorithms
    run on the machine on the data.

    rv1: the text, the bytes
    rv2: primary props (2-nybble)
    rv3: secondary props (2-nybble)
    rv4: unicode props (2-nybble)


    Then, "the algorithms", of, "the machine" are to be figured
    out, for what is the state of the machine, of, the states of
    the machines, given by the inputs and the tables.


    The usual idea is that the state of the machine accumulates
    offsets and what are the emittings of the matchings of the
    productions, so that mostly it's the states of the offsets,
    and the partial accounts of the splitting and stitching,
    above the smearing and smashing. These are on the
    gp+ga registers, and the instructions there are mostly
    spinning the machine.

    Then the entries (table entries) and algorithm is to load
    or construct a bit-mask, then for general sorts of the recognizers,
    then the routine of the algorithm, derives with logical operations,
    what results the findings.


    Examples then begin to suggest themselves.

    match \s+, one or more space characters

    The predicate is aligned with the property white/*,
    thus any of those bits set is a match. Then, the idea
    is that the vector registers have "saturating/clamped
    integer arithmetic". So, the predicate has any matching bits,
    when AND'ed together, results a non-zero byte, then multiplying that
    by 0x7F, will result 0xFF, that the high-bit is set. Then, PMOVMSKB
    will make a bit-sequence of that, then for find-first-set.

    match "cat", the fixed work "cat"

    The matching is on the code-points. The idea is to construct
    the "predicate" by first loading "cat" onto a register, otherwise
    zeros. Then, XOR that with the code-points. Since it's figured
    that the code-points aren't usually zero, then only the bytes
    matching in sequence will be "cat". Then, applying the saturation/clamp
    to those, then a sequence of 3 0 bit's after MOVMSKB is the what would
    be "cat", with the non-matching characters being 1's, then for find-first-clear
    and find-first-set, or finding three consecutive 0 bits for the first
    match.


    The idea is that these sorts of tests are independent the position,
    that each of the offsets in the word (when un-split/un-straddled),
    can be tested by rotating the mask and testing the rotated mask.

    Then, it looks like there's packed-byte saturate subtract, yet
    not seeing packed-byte saturate mul, ..., there are PADDUSB
    and PSUBUSB, ....

    Since not all the bits are expected to be set, another notion
    is to use PSHUFB, on the nybbles, about which nybbles are
    relevant, then that PSHUFB will result unambiguously the
    high-bit set, then for bsf/ffs.


    There's an idea then to take the bytes and make two products
    and then blend those together, or as with regards to shuffle,
    about going out to 16-bit space and then resulting back in
    with packing to 8-bit saturated.

    https://fgiesen.wordpress.com/2024/10/26/why-those-particular-integer-multiplies/
    https://fgiesen.wordpress.com/2026/06/21/pivco-huffman-merge-operations/



    About parsing and grammars and their complexity, is the idea
    that when there is a brief account of "quoting" and "bracketing",
    then it's possible to maintain a stack of the depth of various
    quotes and brackets according to their nesting and escapements,
    about the rules of quoting and the balancing of brackets.

    Then, it's figured that some kinds of parsers are thusly able to
    parse grammars with otherwise ambiguities, about the context
    of the state machine of the parser.


    The parser basically starts with a notion of "modes", about when
    the parser is to be "invalidating" or "recognizing" or about how and
    when it's to emit its productions, and about "debug/diagnostic" mode,
    and these sorts of things.

    What gets involved in the establishment and maintenance of state,
    is about how much memory is on the side, and whether it's a brief
    amount, or whether it's on the order of the input size, which is
    the usual idea of building the layers.


    So, the machine is to be having a variety of finders and matchers,
    their forms of "properties".

    1) bit-flags: closed categories, one or more, refining category
    2) range-ends: ranges of code-points, a pair, base and extent
    3) code-points: the code-points themselves, a list of lists


    The bit-flags matcher is according to 1-many matches, where
    the patterns in the bit-flags are templates to match runs of characters,
    1-bits indicating.

    The range-ends matcher would be a bound then positive or negative
    offset, with regards to the difference of the value and base compared
    to the range, then similarly for patterns in those.

    The code-points themselves are for exact match, with the xor and
    0-bits indicating.


    Then, the matching will have offsets or the context of the straddling,
    and about a stack of packed accumulators, then the bounds within
    the word where the match is tried, and then that the bounds of the
    match is what results the finding.

    Then, for defining the "machine", is the idea that there's a reference implementation in the higher-level language, then that it models
    the operation in the lower-level language, then that the facility
    will be available and use the resources available.


    About matching fixed-strings, may be for matching arbitrary
    strings or words, then after that, matching for the fixed-strings,
    for example having a length table and matching shorter fixed-strings,
    like keywords in the language.

    Then, about "attribute grammars" and "affix grammars", is about
    the quoting and comments, and the sub-languages, about that
    "language is built of languages", then as with regards to the
    states (or modes) of the state machine, and about the finding-machines
    and matching-machines, about making a standard algorithm that
    efficiently results matches (then productions).



    https://man7.org/linux/man-pages/man5/locale.5.html


    The locale in the C and POSIX environments makes for
    conventions about collation (sorting) and formatting,
    and language and character-set encoding.

    https://man7.org/linux/man-pages/man7/charsets.7.html

    https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07

    So, "vector-wide scalar word" ("Viswath") and "character machines" ("Charmaigne") is being defined in these ways.

    Then, the POSIX and C/libc accounts of locale get involved,
    for providing implementations of same.

    The localedef brings an interesting example that it may define
    its own comment and escape characters, then to be in effect,
    a similar example is in SQL, where some commands indicate
    their own escapes (of wildcards). Then another case is the
    triple quotes: single quotes like in the shell, double quotes
    like in Java, or backticks in Markdown, when the matching
    would work down from the triple quotes.

    The "Common Locale Data Repository", https://cldr.unicode.org/ ,
    makes available data from Unicode.

    About lookup-tables then lookup-trees as to be backed by
    lookup-files, is about an idea that when lookups occur,
    they're most direct when small enough to fit in 2^8 or so,
    about that 2^10 is about 1024 then 2^20 is about a megabyte
    and 2^30 is about a gigabyte. Then the idea of a lookup-trie
    or lookup-tree is alike a hash-trie then for an LRU-eviction
    policy to populate it with common values, and fall-back to
    the lookup-file. Then that would be part of vwsw.


    About collation then, is about what rules make exceptions
    to otherwise the rule of that the code-points are already
    the default lexicographic (sorting) order. The idea is to
    make a lookup of exceptions, then for those to give the
    base character which is its neighbor and in the default ordering,
    then that the comparator for the sort operates on either that,
    or the comparator to the base character, or the difference among
    similar derived characters.


    About the jump tables, one idea is to use lea according to
    the various registers sizes, about making multiples of 2, 4, 8
    in one instruction along with an add, about btree logic,
    that the paths into the btree get computing with a dedicated
    instruction, that happens to be lea/leaq, or the variations
    among the registers what are the constant multiples,
    instead of immediates.


    Then, the goal is to make a low-level implementation, that
    also has a high-level implementation, and that the interface
    is the same, with that there are built-ins for the most usual
    sorts of finders and matchers, and then that the machines
    are of a flexible connectivity, where the high-level can use
    the same routines, of the jump-tables and nop-fields, that
    the low level uses, and that in the low-level, that the configurations
    are made intrinsics, about making for the:

    call-less
    branch-less
    stall-less

    in the low-level, yet the logic in a high-level reference implementation,
    is as well using the same data structures for the machines, according
    to the offsets computed, and the instruction executed, and the
    way that the routine is implemented, to be portable in the high-level,
    and performant in the low-level, and from the same artifacts,
    of what are the compilations of the regular expressions and grammars.
    In the high level this could be lists of functions then invoking them,
    where the next function to be invoked is computed like the offset
    in the jump table (the branch table of the compiled instructions).

    https://eli.thegreenplace.net/2012/07/12/computed-goto-for-efficient-dispatch-tables


    About the base character class (or "ascii" class), with

    alnum/
    punct/
    white/
    coded/

    then ideas include that the coded section includes that
    for the terminal codes there are basically unbounded regions
    following, indicating terminal escape, then that for UTF-8,
    a secondary/auxiliary class would maintain the length of
    the code and the offset of the code

    length: 1|2|3|4 bit
    offset: 1|2|3|4 bit, or 4|3|2|1 for "bytes remaining"

    while the properties for the character itself would be
    duplicated under each of the bytes, as above about
    "smearing" and "smashing" the properties and predicates.

    About the base character class and whether "punctuation"
    or "symbols" is the idea, is that abstractly they're punctuation
    and match the POSIX punctuation class, then that "symbols"
    are not only the codes themselves of any sort, then that among
    classes of symbols (eg, playing cards, chess pieces, musical notes, mathematical formulary, ...) is that those have their own classes.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 11:45:07 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 11:44 AM, Ross Finlayson wrote:
    On 07/27/2026 11:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    [ viswath-charmaigne.txt ]



    Widesword: SIMD/SWAR patterns/primitives

    For parsing and binary data, patterns of algorithms and their
    primitive functions upon arrays of items and about bit-fields
    of their contents.

    text
    sets (Unicode, ...)
    encodings (ASCII, UTF-8, ...)
    classes (Latin1, ...)
    glyph-maps


    binary
    structured
    compression
    encryption

    parsing/scanning
    blocks/sections
    nesting/indentations
    brackets/groupings
    commas/joinings

    predicates
    predicates for parsers and scanners to compute and collect for items


    SIMD/SWAR
    emulated/specialized




    Widesword or "wide-word", the "vari-parallel"

    The usual architecture makes for interrupts and DMA,
    and then the super-scalar the vector architectures. The
    idea is that the fundamental interface should be in terms
    of the super-scalar, with the scalar as a limited case.



    access/mutate
    load/store
    gather/scatter
    move/move
    pack/unpack

    match
    exists

    find
    find-first
    find-all



    apply

    translate/decode



    Mostly about arithmetizations and algebraizations, is to figure out what instructions are branchless to result the carriage, then combinatorially enumerate those, and those are thusly their own sorts "normal forms"
    for arithmetic machines or automata, then to compose those.


    The accessors and mutators reflect upon that the data is in memory,
    while the processing is on registers, access-patternry is "load" from
    memory, and mutate-patterny is "store" to memory.

    stripe <- contiguous
    stride <- modular
    striqe <- patternry, aperiodic
    stribe <- patternry, periodic


    For matters of alignment, there are these sorts native alignments and
    sizes.

    PAGE_SIZE page size, usually 4KiB, operating-system
    LINE_SIZE cache-line size, usually 512 bits / 64 bytes, chip

    SWORD_SIZE scalar-word size, usually "64 bits", 8 bytes, on 64-bit chips VWORD_SIZE vector-word size, eg 128, 256, 512 bits (16, 32, 64 bytes)

    Then, the processor has a given assortment of scalar and vector registers, and various accounts of addressing the low and high portions of those
    on the scalar registers and as they've been extended, and about the
    vector operations on the vector registers.

    The accounts of alignment and protection then get involved, about
    the access-patternry, and the offsets, and alignment of the data to
    words, or the pre-amble and post-amble or entry and exit of loops,
    that the usual account of "apply" or "find" or "match", is as like a
    loop, then as with regards to vectorization, then as well concurrency,
    and the incremental and side-effects, then to define algorithms (functions) as by those.


    The vector registers are in banks of 8 or 16, then there are sometimes multiple banks of vector registers, for example the Intel "MMX" vis-a-vis "AVX512".


    Algorithms will basically have inputs, constants and lookups,
    and outputs, designations of the vector registers.


    The modeling of higher level code to the operations upon the
    registers is as of mathematical models.

    algebraization <- relating to algebras/magmas generally
    arithmetization <- relating to arithmetic
    geometrization <- relating to geometry, for example a grid lattice

    Then the relation of higher-level code to these models is
    according to acts of "expression" and "interpretation".


    Items, Predicates, and Indicators

    A usual idea for "find" is to evaluate predicates (true/false functions)
    on items, to result indicators, then to "find-first-set" or "find-first-clear"
    for "find-first" return a found offset, and to return a count and array of found offsets for "find-all".


    The "wide-internal" and "wide-external" reflect whether predicates
    are within the representation on the registers, i.e., "register-internal"
    and "register-external", about whether function calls (external) are
    involved to evaluate predicates. A "function" as internal results
    the evaluation of the predicate as indicators on a register.


    When loading items, for example characters as bytes or in a character encoding like Unicode or UTF-8, then a usual idea is to load a register,
    then for the branchless computation of the offsets of the items,
    when for example UTF-8 codes have variable length, then the evaluation
    of predicates on those, whether for example a null-termination of a usual
    C string is to be computing strlen, to find the offset, and compute the length.


    Code Sequences and Scanning

    The textual and character data or otherwise codes of fixed or variable
    width make for the idea of character set designation or detection,
    then the scanning or searching of character data, where Unicode
    is ubiquitous while historical codepages are extant, then for usually
    enough either UTF-8 generally or ASCII as Unicode's Latin1 Basic
    Multilingual
    Plane, with Microsoft's CP-1252 changing out a handful of characters
    from that,
    then with regards to various organizations of UCS-2 or BE and LE and with regards to byte order marker BOM, then to make for usually enough the automatic assignment of character classes and implementing regular expressions
    and grammar productions along items, predicates, indicators, as tabulated
    at compile-time in tables of constants derived from the specifications.

    The binary codes are not dissimilar, with regards to encoding and decoding
    or compression and decompression or encryption and decryption,
    about the "vari-parallel" in codes.


    Commodity Architectures

    The two primary targets are Intel/AMD and ARM. They each have various
    counts of scalar registers, then various considerations of vector
    registers.

    Intel/AMD

    MMX/SSE (Pentium)
    SSE2
    SSE3/SSE4

    AVX/AVX2
    AVX512
    AVX10

    ARM

    NEO

    SVE

    The SVE ("scale-able vector extensions") notably doesn't have a fixed
    word width of the vector registers.

    Then, the targets would be

    SSE4 + SSE3 + SSE2 + SSE/MMX: SSE2 + SSE4.2
    NEO (ARM)

    AVX/AVX2
    AVX512/AVX10
    SVE (ARM)

    or profiles into

    SSE2
    SSE4.2
    AVX2
    AVX512

    then with regards to ARM vis-a-vis Intel/AMD what profiles match.

    The target here is mostly (or entirely) integer operations not floating-point,
    while both the vertical and horizontal operations get involved.




    Calling Conventions and Wide-External


    About register allocation and for something like "register coloring
    normal forms",
    there are basically cases where registers are to be preserved and when
    they are
    scratch. The idea is that as scope accumulates, that registers are to
    be preserved,
    so that basically according to scope depth and stack accumulation,
    various accounts
    of the registers, for example according to an accumulating mask, get preserved,
    i.e. pushed to the stack then popped off the stack, or context-restored,
    with the
    idea then to make it for the compiler for sub-routines, to compile to a reduced set
    of registers, toward establishing what are "scoped" and what are "scratch", and about the allocation of registers in the hard-code both vertically
    and horizontally,
    adding a new dimension to otherwise usual accounts of graph coloring,
    instead to
    make an account in the calling conventions.

    Then, the usual idea of passing arguments from the higher-level language as parameters in registers is that they are scratch ("volatile").

    scoped (required preserved)
    scratch (dont-care)

    volatile
    nonvolatile

    caller-saved
    callee-saved

    https://en.wikipedia.org/wiki/X86_calling_conventions https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64)


    Then the idea is that wide-internal routines are entirely compiled as
    blocks
    and have zero-overhead abstraction, while wide-external routines get described
    the conventions of how item-predicate-indicators are organized in terms of the histograms and input-output.



    Capabilities and Initialization

    The processors have a common instruction "cpuid" to query capabilities
    and profiles of the vector instructions in the instruction sets. Then initialization is system-wide, while yet various accounts of the statically-linked
    or libraries would make for initialization of the routines before their organization
    and layout.

    It's figured that the blocks of routine would be combinatorially enumerated into making a single binary for a given architecture, then that initialization
    would set the entry points into the widest routine.

    So, besides linking would be involved for this sort "wide binary"
    (vis-a-vis,
    "fat binary"), then also for the statically-linked, that initialization
    would
    set the offsets and install the offsets (if not, "self-modifying code",
    with
    regards to code segment protections),


    Stack Machines and State Machines

    Implementing text algorithms then finite formal automata and state
    machines,
    is for making an account of how to employ the wide-words for the vari-parallel
    to implement state machines for scanning and parsing and the evaluation of regular expressions.

    Elementary and Novel Vectorization Approaches


    Considering the vectorization of general purpose computing,
    then there's an idea that the elementary are what building blocks
    are possible, then that the novel is to make algorithms on the
    vectors that would be inefficient in the scalar, particularly about
    the branchless and non-stalling, about what can result in effect
    are machines or models of computing, according to SIMD/SIMT,
    given that then the elementary machines are composable.


    The basic idea is to implement "stack machines" and "state machines", according to various organizations of what makes for finite automata,
    and models of computing, then to make the arithmetization of those
    according to states and transitions, then that an upper bound of
    computing is determined that guarantees arriving at a solution,
    then that's un-rolled and figured to run in-place towards the
    "branch-less" and "stall-less".



    The basic idea is that stack-machines are implemented in integers,
    then about using prime rings to indicate transitions, then that
    the finite-state-machines are built out with multiple equivalent states, vis-a-vis unique states, then that the arithmetic carries through either
    way equivalently, or for pushdown-automata and finite-state-machines,
    here "stack machines" and "state machines".


    Bit-Sets and Prime-Multisets

    The bit-set is a most usual notion of the arithmetization of a set,
    by a dictionary of codes to offsets, an indicator bit indicates membership
    in a set of a code, where the bit-set has a maximum size the word-width.

    The prime-multiset is after a dictionary of codes to primes, then the divisibility test indicates membership, and multiplicity indicates count
    in the multi-set. The prime-multiset has size varying according to word-width
    (unsigned integers their range) and that more common codes get assigned smaller primes and more rare codes get assigned larger primes, as much
    like the Huffman coding.

    In vectorization and bit-methods, accounts of the like of "Digit Summation Congruence" make for divisibility tests in binary for a subset of the
    primes
    that are tractable to Digit Summation Congruence, then that trial division follows for multiplicity of factors (count in the multi-set).


    Parameterized Dimensions and Instruction Classes

    The instructions are as of the instructions and their prefixes and
    their operands in the instruction sets and the assembly languages,
    then that they fall into classes of equivalent behavior, and according
    to dimensions as so parameterize their sizes.


    Ttastm/ttasl Mnemonics

    After the parameterized dimensions and instruction classes,
    are these sorts mnemonics and syntax.


    mov, push/pop, load-effective-address:

    lod < (dst, src)
    cpy = (dst, src)
    sto > (src, dst)

    adr @ (load-effective-address)

    psh ^>
    pop ^<

    It's figured that "copy" (assignment), is a reg/reg or reg/imm operation, while then the above are the only reg/mem, mem/reg, operations.


    arithmetic:

    binary (with target destination):

    and &
    ior |
    xor ^


    add +
    sub -
    mul *
    div /

    unary (and in-place):

    inv ~ (unsigned)
    neg ~ (signed)
    rev <>

    inc ++
    dec --

    ror }}
    rol {{
    shr >>
    shl <<

    Unary operation act in-place on a register the destination,
    binary (or dyadic) operators vary on whether the destination
    is one of the operands (for example running-sums on x86) or
    a separate operand (multiplication and division on x86 and
    arithmetic usually on ARM).



    So, the usual idea is that each usual instruction has a three-letter mnemonic,
    and a given syntactic construct, then the arrows (angle-brackets) indicate directionality, for usual constructs:

    b < [location] # stores location's value in b
    a = b # assigns a to b.
    a > [location] # stores a in location

    It's figured that thusly "mov" is distinguished between memory-moves and register-moves,

    binary:

    a = b + c

    unary:
    a++
    a--
    a << 3
    a }} 3

    The '#' is used to indicate comment to end-of-line,
    then also ';' can be for comments.

    Un-used characters include:

    !
    $
    (
    )
    [
    ]
    _
    :
    ,
    .


    Further usual operations have mnemonics yet not syntax symbols,
    then for a usual idea of defining or overriding symbols.

    bsf (bit-scan forward/reverse, find-first-set)
    bsr

    ffs
    ffc

    btt (bit-test/bit-test-complement/bit-test-reset/bit-test-set)
    btc
    btr
    btr
    bts




    cnt (population count, set bit count)


    pushall
    popall


    byteswap



    spread (reorganize: widen registers)
    shrink (reorganize: narrow registers)


    Declarations of types with data-type and data-size,
    have that the default type is unsigned int,
    then that the default size is the scalar word width.

    quar
    half
    doub
    quad


    siz
    len



    swap


    shuffle


    pack
    unpack


    sum
    prd



    Targets:

    State Machines / Automata
    Character-Set Conversions
    Regular Expression Matchers
    Huffman coding
    Deflate algorithm
    Parser/Scanners


    State machines as "plants" and "arcs" for "states" and "transitions":
    always starting or continuing an "arc".

    The "offtables and "noptables" that have that "noptables" make
    for the deductive elimination, while the "offtables" have the
    inductive carry.

    Then the usual idea of the parallel is that each sequence of possible
    arcs is a long-ish table, that point to a list of inferred plants,
    and the next arc.


    The "arc" for the scalar, for the vector, and for vector-lookup.

    byte
    scalar
    vector
    vector-lookup


    Correctness, Diagnosibility, and Performance


    Modes


    States and Transitions
    Arcs and Plants


    codes in -> symbols out

    Decoder vis-a-vis Encoder

    windows
    duplicate detection / histogram


    off-tables and nop-tables

    rejecter/accepter


    Then, the idea is that a usual function call gets the input on the
    registers, with a
    usual signature like so:

    ret_t f(
    const char* input,
    unsigned int input_length,
    const char* output,
    unsigned int output_length
    );


    then that the idea is that a stride over the input is for the vector register, loaded
    as an unsigned integer, then to make for the bit-wise or byte-wise
    processing of
    the input and generation of the output.

    The input is variously fixed-length or variable-length, bit-wise or byte-wise, with
    the byte being the least addressable unit of memory byte-offset and the
    bit being a fungible
    value bit-offset, the registers being here considered the integer values
    and of the un-interpreted
    bit-sequences vis-a-vis their sequences as uninterpreted byte-sequences, which in
    the C library is according to the constant CHAR_BIT which is almost universally 8
    (bits per byte).

    The half-byte then is called the nybble, two-bytes is called a short, four-bytes is
    called an int, and 8-bytes called a long, or for short/int/long as
    16/32/64 bits.

    Then, the vector units implement an instruction called shuffle, which
    makes a
    lookup: it looks up nybbles for nybbles (vector-wide, in one
    instruction, from
    the codes and what results offsets in the off-table or jmp-table).

    So, for each of the four bytes in the 32-bit word, the idea is that each
    of the
    possible combinations get a mapping, then the off-table is consulted after the shuffle lookup, and then 0-4 tokens are recognized, else extending
    the bounds
    of the token.


    The idea is to make the lookup-table index/offset, that is generated/compiled,
    that given the codes, results the symbols.


    So, the idea is that a few different shuffling constants produce the
    nybbles
    for each byte, that are zero for a usual missing case, and get composed to make a tree-traversal, among the possible next states of the parser or
    the arc,
    within the limits of the nybbles, then that if it works out beyond the
    limits of
    the nybbles, to start afresh within the register word, within the limits of the nybbles their range of codes, making for bytes or characters, how they continue the arcs and make the plants.

    0001 0001 -> continue, most likely mode

    0100
    0101
    0111 -> second most likely mode

    1000
    1001
    1011 -> third most likely mode

    Thus, using a prefix-property of the nybbles, makes it possible for up to three codes/characters, their second and third most likely modes, or arcs, while when there are predictable modes, or arcs, then there is a continuing arc or up to four plants (output symbols, tokens).

    Since the nybbles are in pairs to make a byte: is for that to determine
    the
    upper and lower making a compatible code, is the contingency of the
    high nybble and low nybble, what results an unambiguous byte.

    This is for making permutations and then rotating through them until
    it's invariant, making a check that the two nybbles agree on the byte.


    So, for reducing the alphabet size, is about fitting the alphabet into
    less bits.

    2^5: 32-many, [a-z] + 6
    2^6: 64-many, [A-Za-z] + 12

    Then, building codes can work in the lowercase, in the case-insensitive,
    then the idea is that usually a character is a char or a byte,
    yet, it's two nybbles, so, all the productions of the grammar,
    start reducing to those, then, as well, for UTF-8 and so on, that's a
    higher production, and then for fixed-width Unicode and so on,
    also as like a higher production.


    Shake-Sort

    The idea for shake-sort is to use horizontal compare to simply
    enough by making transpositions, then computing the masks
    of blends/shuffles, and resulting then that a word its segments
    gets sorted, then for sorting words, to interleave them then
    apply the un-rolled shake-sort, which will shake out the order,
    in a branchless and arithmetic way.


    Huffman Tables and Huffman Coding

    The idea is to automatically make a population histogram,
    of the vari-parallel or varallel, then to make alphabets of
    that to get related the coding, so then the codes are small
    and can be put through a dictionary to result making the
    matching and the scanning of the symbols from the codes.


    Character Classes

    digit
    alpha
    punct
    space

    digit:
    arabic
    hex

    alpha:
    upper
    lower



    punct:
    comma
    colon
    semicolon
    ampersand

    unscore
    vpipe
    bslash
    slash

    period
    qmark
    xmark

    paren
    bracket
    curly
    angle

    quote:
    single
    double
    curly

    arith:
    add
    sub
    mul
    div
    mod


    asterisk
    tilde


    unicode:
    block: https://www.unicode.org/Public/UCD/latest/ucd/Blocks.txt


    So, the idea is to make the "available and significant indicators", that thusly result predicates organized in bits, then to make that a usual
    first account of scanning, is to make a lookup for the printable ASCII,
    then to go about the notions of the composable grammars.

    0001b white
    0010b punct
    0100b alnum
    1000b other


    Then, "other" begins to include both un-printable control characters,
    and, basically everything above 7-bit ASCII.

    Then, these classes are usually exclusive, then about cases among
    them when they cross.

    punct
    inner
    outer
    affix

    For example comma is inner, brackets are outer, and hash-tag is
    an affix, yet in usual accounts, period is both an inner (when used
    as "dot"), and an affix (when used as "stop"),


    white
    vert
    nl
    cr
    vt
    horz
    space
    tab



    alnum
    alpha
    digit


    So, the first nybble is as above, then the second nybble is to work
    into those.

    white:
    0001b vert
    0010b horz
    0100b ligature
    1000b other

    vert:
    0001b nl
    0010b cr
    0100b vt

    horz:
    0001b sp
    0010b tb


    Then, it looks that the constants table for ASCII is at least three
    nybbles,
    then to make for various ways then that when loading a register of
    character data, is to be making that then the scatter/gather makes to
    gather the constants from the table, 16-bits for each 8-bits, for example into two registers.

    r1: char-data
    r2: preds-1
    r3: preds-2

    Another notion is to have that white-space is simplified

    white:
    0001b sp
    0010b tb
    0100b nl
    1000b cr

    then that 0000b is "other".

    The main idea is that there are various uses of text.

    source (and data)
    spoken (natural language)

    Then, the various predications, are to reflect positive predications
    of closed classes. Then, 0000b is reserved for non-predicated (un-closed).


    0001b punct
    0010b alnum
    0100b white
    1000b coded

    Then the idea is that bytes with the high-bit set are UTF-8 encoded,
    and that control characters are also "coded".

    256 characters

    loading onto a register

    scalar
    access item-wise
    vectorized without scatter/gather

    vectorized with scatter/gather


    Then it seems that the gather instruction in x86 starts with AVX2
    about floating point values, though that it could just load the
    values as literals and then treat the registers as being integers.

    Then, for four of those being in a register, the idea is to load up
    the entries from the table, then merge/broadcast those together,
    to make the bytes/shorts with the flags into the registers.

    op set:8:32(index)
    op clear:8:32(index)


    op place:8:32(index)
    32 = 8 << (#8 * index)

    op pick:8:32(index)
    8 = 32 >> (#8 * index && 0xFF)

    The suggestion here is that 32 and 8 are built-in types,
    and number literals are prefixed with #. Then, these
    would be specialized like templates for each of the types.

    op gather:8(indices, table): output
    output[0..7] = load(indices[0..7])

    The idea here is that there's a range notation, that only
    8, 16, 32, 64 are "types", and other numbers are offsets
    or with ".." making "ranges", then that to result an un-rolled
    loop.

    Ranges range with the values, using .. to indicate connecting
    the start and end increments inclusive, and comma to indicate
    particular values, then for example named classes like 'even'
    and 'odd'.

    [0..3] # 0, 1, 2, 3
    [1,3] # 1, 3
    [even] # 0, 2, 4, ....
    [odd] # 1, 3, 5, ....


    The syntax construct with brackets (square-brackets) in
    C-language is usually enough an array "dereference", the value in the
    array at the offset, while in A-language is usually a dereference under
    the pointer, then here in "TT-language" the idea is that it is like the mathematical interval, inclusive.

    The index and offset are about variously the bit-wise and byte-wise,
    about the ordinal offset of the bits, and, the ratios and fractions of
    the bytes, in the bit-sequences the words.


    Then, a usual notion is to nest the intervals, that byte-offsets
    are indicated in ranges by [], and bit-offsets by [[]].

    [3] # byte 3
    [3[1]] # byte 3, bit 1

    The bits are generally considered msb-to-lsb, most-significant-bit
    to least-significant-bit, also the numbering, about bit and byte endianness and MSB-to-LSB like network order and msb-to-lsb bit order. Since architectures
    may be little-endian or LSB-to-MSB, gets involved that the logical (or, "abstracted")
    addressing is big-endian.

    The the operations as accept ranges basically have indicated that
    these would be as of loops of fixed size, then fully un-rolled, or,
    the relevant vectorized instructions, one instruction.



    o lay v8 > v32
    v32 = v32 | 0xFF

    o clear v8 > v32(i4)

    o set v8 > v32 ([32/8])
    v32 =

    o place v8 > v32 ([0..3])
    v32 |


    Here the point is to indicate that when placing a value into
    a register, that if it's already initialized to zero, then it's simplified
    to OR in a value, else about indicating that the result is to clear
    the byte, then place the byte.

    fill
    flush

    pick
    place

    Here these would be logical operations, with the idea that
    they're eliminable according to the context and the concrete,
    or the physical operations.


    Then, with regards to the register allocation, is the idea to
    indicate for the operations o what are the

    scope
    scratch
    saved

    logically, then physically aside.

    o fill vN cN

    vN: generic vX for width N
    cN: byte-count
    iN: byte-index


    o fill # within a vector, fill a byte or range of bytes with all 1-bits
    o flush # within a vector, clear a byte or range of bytes with all 0-bits
    o pick # from a vector, pick a byte or range of bytes
    o place # within a vector, place a byte or range of bytes



    For the register allocation, there's according to the architecture and
    the operations, about the dyadic functions (binary functions, two inputs
    one output logically) what happens to the operands their value from the
    place when the instruction is invoked afterward, whether the operation
    is "destructive" or "non-destructive" to the operands, and whether the operation is thusly need "saves" of the values, if they need be "saved".

    o add()
    o accrue() # accumulate a sum,
    o sub()
    o decrual()


    o add()

    Then, since operations are small, yet various specializations of them
    as templates will make use of various registers and have varying
    numbers of instructions in the resulting assembler, is about that
    then the register-plan will have that like "lanes" in the vectors for
    data, are "tracks" for the registers, about a usual idea that data that
    is re-used is kept on a track, and for example saved on the stack or on
    heap,
    while then registers that are scratch are rotated to basically exercise the registers in rotation, thusly that the processor will as likely find no dependencies
    or hazards, in rotating the fresh registers.

    o keep() # either make a track, or save, the contents of the registers


    It's figured that all the sources are compiled together, then there
    not being any scoping, while within the operations, all the variables
    are local, so there's automatic scoping, then though to indicate in
    the signature what registers are tracked, thus preserved, so that
    the caller can make assignments of it, on it.

    v32 a = 1
    a = a + a

    o add("+"):
    v32 lhs
    v32 rhs
    instruction add lhs, rhs


    Here the idea is that the "instruction" keyword is like the "command" keyword, indicating that it's the literal instruction in the resulting assembler.
    The operator overload is indicated in the "signature".

    v32 a = 1
    a = add a a

    v32 a = 1
    a = a + a


    o add (v lhs, v rhs, v ret)
    o "+" add

    o add (v32, v32, v ret):
    # 32-bit values, registers, overflow, ....
    instruction add

    o add (v64, v64, v ret):
    instruction add


    Then, it's figured for values v as unsigned, then perhaps for unsigned u.
    As well it'll conflict less with "v" for vector.

    u32 n = 1 # unsigned, default
    s32 z = 1 # signed
    f32 x = 1.0 # float


    u32 a = 1

    a = a + a


    o "+" add(lhs, rhs -> ret)

    o add(u32 lhs, u32 rhs -> u32 ret)
    instruction add lhs, rhs
    ret = lhs

    o add(s32 lhs, s32 rhs -> s32 ret)
    o add<u32>

    o add(f32 lhs, f32 rhs, f32 ret)
    instruction fadd lhs, rhs
    ret = lhs

    Then, to infer what implementation gets inline then to be generating
    an assembly listing, works backward from the assignment of the return
    value, and forward from assignment of the input operands / parameters.


    exclamation
    composition
    transliteration

    There is a general notion of writing and re-writing rules.

    fill-in-the-blank
    connect-the-dots

    What's figured is to make for matchers to result then that

    enumerate possible combinations
    eliminate impossible combinations

    with the idea then that there's a very free composition,
    with that what's like matches then what's unlike deletes,
    for then what results of the exclamations their composition,
    to be transliterated, then for file-system organization,
    and as of structures.

    Spontaneous Compiler

    There's much to be made of "simple data files" then
    for what make for structure and schema, about the block
    and stream of text, and about the dictionaries and the
    symbols, as to what's to make result from templates: forms.



    "For Viswath and Charmaigne"

    The idea for text predicates is that there are the two basic
    modes: "source" and "spoken".

    Then, for the source mode, there is an array of bytes matching
    each byte of a character or partial character.

    These matching bytes are pairs of nybbles, primary/secondary.

    1a: punct white alnum coded
    1b: according to class

    2a: interpretation primary
    2b: interpretation alternate


    Then, the most usual and common sorts of character classes
    for regex and EBNF have quite regular forms.

    [A-Z]: alnum/alpha upper/
    [a-z]: alnum/alpha lower/
    [1-9]: alnum/digit whole/
    [0]: alnum/digit zero/

    space: white/horz pad/space
    tab \t: white/horz pad/tab
    nl \n: white/vert line/nl
    cr \r: white/vert line/cr

    bell \b: coded/ctrl


    It's figured that these are _exclusive_ classes, then about
    when there is the overlapping or _inclusive_ classes, about
    for example "is_ascii", "is_graphical" and so on, or POSIX
    character classes, it's figured that would be into the
    "POSIX character classes predicates".


    Then, according to whether the character set encoding is
    Unicode with UTF-8, then the primary predicate will be
    that it is according to the character set "cset", while
    then the secondary will be for the detected or specified
    character set.

    UTF-8 byte 1 length 2: coded/cset utf8/len2
    UTF-8 byte 1 length 3: coded/cset utf8/len3
    UTF-8 byte 1 length 4: coded/cset utf8/len4
    UTF-8 bytes 2-4: coded/cset utf8/body

    Then, it's figured that every character in any relevant character
    set has a specific relevant character in Unicode, while, it's generally
    so that all "source" texts may be ASCII-only, where that Unicode representations are as of literals and the like.

    The puncutation "punct" then gets broken out variously, about
    that various modes will either have predicates about the left
    and right of the joiners and groupers.



    Then, about _commas_ or _joiners_, and _parens_ or groupers,
    and _affixes_ or markers, then is that source generally applies
    these usually, then as with regards to differences between
    arithmetic (eg, l.t. as left angle bracket, g.t. as right angle bracket),
    and as with regards to where arithmetic operators are joiners
    or affixes, for example negation.

    In the alphanumeric, then for numeric literals, is another example
    of where the syntax for floating point numbers involves the exponent
    and base and radix or significand and mantissa, and +/-, and so on.
    Similarly the literals for numbers may include alphabetical flags,
    prefixes, and segment separators, for example _ in source text
    and commas/stops according to locale in "spoken" (natural) text.

    Then, it's figured that in the implementation of parsers or matchers,
    or tokenizers or scanners, then the relevant predicates for the classes
    have various canonical forms, then specific relevant forms, of the
    predicates so pre-computed, so that as a registers of characters is
    loaded (C-many bytes), then a gather lookup results that populates
    a register of the same-length with the relevant predicates, then
    that matching of the patterns according to matching of the bits,
    can result from bit-masks and generally about the infrastructure
    of determining the bounds of productions, and what among other
    productions are relevant.


    Here it's figured that the vector registers will be employed as the
    constant and the lookup, then that the built

    "abstract syntax tree"
    "abstract syntax sequence"
    "abstract syntax graph"

    is working off of the general registers.


    A most usual idea is "greedy matching" after Kleene star and Kleene plus
    or the Kleene notation for formal languages, then about that the
    algorithm gets involved about computing bit-masks matching the
    predicates, then ranges of those, to result computing the offsets
    of a next match, or when there's the likely and less-likely and un-likely,
    in the likely, to find the bounds of multiple matches in the register.

    For example, when greedy-matching, starting at an offset, one might
    simply AND together successive bits, non-branching, then the first set
    bit and the first clear bit after that are at the bounds.

    find-first-toggle-bit(off_t from)


    Then, besides usual accounts of greedy matching, get involved in
    parsing, the accounts of comments, quoting, and escapes.

    The escape is used within the text to indicate characters of values
    of literals or entities, most usually in source text the back-slash.

    The idea then when parsing the like of quoted-CSV or JSON, that
    all the strings are in pairs of double-quotes, then that quotes within
    the strings are preceded by a backslash to indicate a literal double-quote within the string.

    Then, when there are escapes in the language, the idea is that it's a different sort of match, since it changes the punctuation character
    to a word character.

    So, the idea in this case is to detect escapes in parallel across the word, finding any escape character, then in that production mode changing
    those to "coded/escape" of what are the gather predicates, then that
    the algorithm can proceed finding the bounds of the productions in
    the grammar, then later the semantic reading of the text, can re-interpret those as from the literals again.

    About loading the predicates, is the idea that there's a 256-entry lookup table for the 2^8 possible bit-sequences in a byte, or for example, a
    lookup
    table with 2^16 entries or 64KiB, then to gather those two at a time, where
    a 2^32 table or 4GiB would generally be considered too large, yet that as
    a facility that 64KiB tables of source/spoken predicates are small and
    fit in
    the cache, about whether parallel-gather or cache-coherency is improved.

    About the likely/less-likely/un-likely, is to reflect that these could
    be any
    sorts of modes and alternatives and the rest, then that fitting into those few categories makes for that the matching can be very greatly improved, where for example pshufb will make lookups of nybbles, then that the "un-likely" basically starts with the matching among alternative
    productions.


    Combinations of predicates like accepter/rejecter and intersection/union, then get into how to compile predicates and represent them as computed byte-sequences, then that the machinery of predicate matching, finds
    the bounds and emits the bounds and matched term.

    So, it's a usual account of building "abstract syntax sequences", or where the productions butt together, starts with disambiguating the "coded" predications, then for example to handle UTF 8/16/32 or variable-length codes, overall oriented toward bytes, then with the idea that the
    predicates
    are to be computed into the case-specific bits the lookup tables and case-specific
    bits the productions, then the machine always works the same way, in a multi-pass sort of approach, or in the "lifting" of the layers of the abstract
    syntax sequences, which are nested bounds of the contents the literals
    of the productions.

    Then "abstract syntax trees" or "abstract syntax graphs" can be built from that, with the usual notions of comments and quoting, and where the
    locators point to the original text with its original offsets, from the abstract syntax sequence the source text itself.

    https://en.wikipedia.org/wiki/Affix_grammar https://en.wikipedia.org/wiki/Extended_affix_grammar


    Detecting and Decoding the Text

    So, it's figured that the source text is in its natural layout.

    ASCII
    ISO8859-15 / CP-1252
    UTF-8

    ASCII and ISO8859 are fixed-length one-byte, to represent
    0-127 and 0-255 respectively, UTF-8 is variable-length 1-4-byte,
    to represent all the characters in Unicode.

    The above are the most common encodings of source text.
    Then, the "detecting" the text would most often have that
    be a fixed parameter to the algorithm, since "sniffing" and
    the like then would get involved.

    UCS-2 (BE)
    UCS-2 (LE)

    The usual fixed-length two-byte encoding of Unicode
    as from "wide character" then may have the "Byte Order Marker BOM",
    or "thorn y-diaresis", as an example of a "comment" character.



    Then, detecting and decoding starts with the coded/ctrl and
    coded/utf8 characters, as would be common to all algorithms,
    then gets into "quoting" and "comments", and "invalidation"
    and "well-formedness", which vary on syntax.


    Starting thusly with the source text, then the idea is that
    the higher Unicode codepoints in UTF-8 are "immediate
    productions", then that their contributions to character
    classes are considered, when for example POSIX character
    classes include some Unicode in their definitions of whitespace
    or about punctuation, yet that mostly there are never found
    source languages where non-ASCII is in the keywords or the syntax.

    Then "invalidation" and "nonwellformedness" are to make for that
    the "wellformed" is according to the data format, and the
    "invalidation" is according to schema or otherwise rules.
    These are negative conditions, meaning that a document
    is never "validated" nor "well-formed", just not "invalidated"
    and not "nonwellformed".


    Then, un Unicode, there are properties of characters, these
    then relate to the basic properties the initial categorization
    of characters.

    https://en.wikipedia.org/wiki/Unicode_character_property


    So, this sort of plan starts looking like code like this, for example
    for the 16-bit or 2-byte case, in SWAR.

    mov ax, [input + offset]

    xor ah, al # bswap
    xor al, ah
    xor ah, al

    mov bh, [table_source_primary + ah + 0]
    mov bl, [table_source_primary + al + 1 ]

    # ...
    mov [ptr_offset], offset + 2


    Then, the input bytes are on register 'ax' after byte-swapping from
    the little-endian representation of a 16-bit integer as was loaded,
    and the relevant table entries are in the matching bytes in 'bx'.

    Then, it's similar for 32-bit or 64-bit loads.

    32-bit:

    mov eax, [input + offset]

    bswap eax

    mov ebx, 0
    or ebx, [table_source_primary + (eax && (0xff << 8 * 0 )) ]
    or ebx, [table_source_primary + (eax && (0xff << 8 * 1 )) ]
    or ebx, [table_source_primary + (eax && (0xff << 8 * 2 )) ]
    or ebx, [table_source_primary + (eax && (0xff << 8 * 3 )) ]

    # ...
    mov [ptr_offset], offset + 4


    64-bit:

    mov rax, [input + offset]

    bswap rax

    mov rbx, 0
    or rbx, [table_source_primary + (rax && (0xff << 8 * 0 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 1 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 2 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 3 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 4 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 5 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 6 )) ]
    or rbx, [table_source_primary + (rax && (0xff << 8 * 7 )) ]

    # ...
    mov [ptr_offset], offset + 8

    Using the MMX registers these are much alike the 64-bit case.


    movq mm0, [input_base + input_offset]

    mov mm1, 0
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 0 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 1 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 2 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 3 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 4 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 5 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 6 )) ]
    por mm0, [table_source_primary + (mm0 && (0xff << 8 * 7 )) ]


    # ...
    mov [ptr_offset], offset + 8


    About the various masks starting to get introduced, is where
    it's figured they would make a lookup table, figuring the cache
    would be warm, or as to whether instead it's better to interleave
    them among the remaining registers, their computations.


    mov mm1, 0

    mov mm7, 0xFF


    shl mm7, 8
    mov mm6, 0
    por mm6, mm7
    por mm1, [table_source_primary + (mm0 && (0xff << 8 * 0 )) ]

    About the register allocation, is the idea to either make the
    locals first and temporaries last or temporaries first and locals
    last, which seems preferable, since sometimes the default instruction
    works on the lower registers, making sense to have that on temporaries.

    About the memory address offset, it's a usual sort of temporary,
    then about computing offsets that they go either on the general
    registers or the (later) extended registers, while it seems that the
    MMX instructions are limited about the "parallel" instructions,
    with regards to that movd/movq are perhaps for simply pushing
    the lookups onto the call stack, then loading relative the call-stack.

    https://community.intel.com/t5/Intel-ISA-Extensions/Software-consequences-of-extending-XMM-to-YMM/td-p/872131


    This suggests that MMX is simply obsolete, yet, there's also the idea
    that it's still an available execution unit, and runs at the chip's speed, about making the general purpose and mmx registers work together,
    then about altogether separately the sse/avx xmm/ymm/zmm registers.
    Then, while MMX registers are independent moves and have no push/pop,
    yet there is "PSHUFB" on MMX registers. There are MOVD and MOVQ.
    So, the MMX registers can be useful for PSHUFB about the general registers, and PCMP*B, then that PMOVMSKB will result an 8-bit sequence from
    8-byte PCMP*B.

    Then, the targets for x86-64 appear along the lines of:

    1) G.P. + MMX r*x + mm (64, 64 bits, 7, 8 many)
    2) SSE xmm (128 bits, 8 many)
    3) AVX ymm -> zmm (256, 512 bits wide, 8, 16 many)

    Similarly for ARM:

    1) G.P. + NEON
    2) SVE



    Then, the idea here is that there are to be approaches
    for the

    1) solid (a constant block, length known at run-time)
    2) stream (a constant block, length un-known at runt-time)

    then as with regards to "incremental approaches" or changes,
    that being in terms of those.

    The usual corpus is either the

    1) source (code and data)
    2) spoken (natural language)

    as that being text among the

    1) text
    2) binary.


    The basic machines are as of "match" and "find",

    1) match-next
    2) find-first

    about that the accepters/rejecters are to make for
    both the alternatives of a "next" and signature of a "first".

    Then, the usual idea is that "findings" are "found",
    and "matchings" are "made".


    The usual idea then is that finding and matching make
    for that finding is the process, and matching is the productions.

    Matching a mis-match and made-match: the usual meaning
    of "mis-match" means a false positive, yet here it aligns with
    the accepters and rejecters, or acceptors and rejectors,
    with the idea that finding is a parallel algorithm along
    the lines of:

    find-longest-match
    find-nearest-exit

    with the idea that any kind of finding has both continuing
    and terminating conditions, then that accepters and rejecters
    are to be run in parallel, for example, with starting to find the
    longest match and working backward (on the input register),
    and starting to find the nearest exit and working forward
    (on the input register).

    The predicates off the properties are to be computed, here
    for a usual account of

    1)intersections,
    2) unions

    about the ranges and range calculus of characters that
    comprise a class, alike

    1) simple classes (word, space, digit, punctuation),
    2) POSIX classes
    3) Unicode classes

    as built-in classes, then the user-defined classes as made
    of combinations of those spaces, and, specific combinations
    of characters, and + and - and Union and Intersection and Setminus.

    The find-longest-match, then, is about making bitmasks of
    long length to the predicates, then working those backward,
    the accepters.

    The find-nearest-exit, is about making bitmasks of matching
    _not_ the predicate, then working that forward, the rejecters.


    There are distinguished
    the character "properties" computed
    and the finder/matcher ("match-finder", "match-maker")
    the "predicates" computed, then about making so that
    usually it's AND and OR for the conjunctive and disjunctive
    and as about XOR and NAND, then about bits that are "care"
    and bits that are "don't care", to result then that a loop of
    evaluations in a linear-constant constant time in a branchless
    manner make arithmetic that accumulates then what can be
    tested for made-matches or mis-matches (acceptance, rejection).



    Much like the "layers" are about the

    abstract syntax sequence
    abstract syntax lattice (grid)

    abstract syntax tree
    abstract syntax graph (links)

    then as well the finder and matcher have "layers" involved
    about default semantics for counting and summary, where
    the finder automatically makes counts and summary, like
    average and "clear modes", when there are obvious modes,
    while the matcher is to be building "catalog" and "dictionary".

    So, the "layers" are as of the state machine, the idea that any
    state machine of "matchings" is many, many loops of "findings",
    then a given matching gets the accumulated finding as metadata,
    besides also being the location down the layers in the lattice and the
    grid.



    The layers develop the properties or prop-bits, in the variable-length encoding, of the codes/text, in-place.


    byte-props (the bytes, which are chars in ASCII)
    char-props (chars in UTF-8)
    ...
    esc-props (the escapement and literals)
    lig-props (ligatures, accents, ..., locale collation)

    Besides these default properties (binary properties)
    then each character in each character-set has its code-point,
    or code-points, that are numeric value (an unsigned integer).


    Then, for particular classes (character classes) that are either derived
    from the common props, when they are exclusive or indicative, those
    are common and byte-props and char-props are always computed
    (via lookup and decoding), then the idea is that otherwise the character classes are defines by ranges and points, then about that there's logic involved that takes the literal codepoint values of the characters,
    and derives/computes their presence in ranges (of spaces) or
    membership in sets of points.


    So, the general idea is that for a given scanning/tokenization/lexing,
    that the relevant character classes are decomposed from the expression
    or grammar, then the arithmetic is defined that according to the numeric values in the ranges and of the points of the characters, that the
    indicators
    for all the characters are derived from the prop-layers and the characters.

    expr-1-props (expression properties)
    expr-2-props
    ...

    gram-1-props (grammar properties)
    gram-2-props
    ...


    Then, the scanner has states, about what it's expecting to scan, and the
    idea
    above about the coded likely/less-likely/un-likely current and next
    states of
    the scanner, then that scanning proceeds with its char-props,
    expr-props, gram-props,
    figuring those are computed all the time, and then arithmetic follows,
    where thusly
    it results that AND/OR and CMP result deriving the findings and matchings.

    A fixed value (a la "grep --fixed") or a constant string to match, is
    its own sort of
    case, instead of having simply an expression/grammar with each of the characters
    of the string literal in order, makes for making a mask directly off the codepoints
    and matching off that (longest-match and nearest-exit).


    Making bitmasks that are aligned down the bytes, gets involved the variable-length
    when the characters are variable-length, and besides "stitching" when
    the characters
    their bytes cross or "straddle" boundaries, stitching the straddlings.
    The point here
    is that the bit masks gets rotated or shifted or grown, for greedy
    match, and then
    when those go over variable length characters, need get "smeared" across
    the
    variable-length, and when rotating or shifting, the relevant pattern
    needs get
    smeared and un-smeared, so that the care/dontcare bits line up, that the word-wide
    AND/OR in effect indicates the findings and thusly matchings.


    The java.util.regex.Pattern class is considered a good design for
    regular expressions.
    The java.lang.Character describes many relevant predicates, or their properties.

    https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html

    The javadoc well-describes how UTF-16 makes a variable-length encoding
    of otherwise what are usually called "wide characters" or two-byte fixed-length,
    when the high-low surrogates beyond the Basic Multilingual Plane (> 0xFFFF) make either 2-bytes or 4-bytes each character.

    When the characters have 2-bytes instead of 1-byte, yet the masks are organized
    their indices and offsets character-wise, then like "smearing" is
    "smashing", basically
    doubling out the bits, thus that "smashing" for wide characters and "smearing" for
    variable-length characters is how to make bitmasks that then the properties/predicates
    are derived and computed with arithmetic, and the findings and matchings
    are products
    of arithmetic of the properties/predicates, then that the
    indices/offsets are maintained
    by the smashing/smearing.


    Then, since the machine itself (or the framework) makes the smashing and smearing,
    then the crafters or generators of the patterns for the findings and arcs/plants for
    the matchings, can do so agnostic the character-set encoding (as long as
    it's Unicode,
    where other character-sets relate various symbols and glyphs in their glyph-maps to
    their code-points, then that those would have their own craftings or generators of
    what computes the predicates from the properties).

    About the fixed case, is that it can operate on the codepoints
    themselves, that it's
    not agnostic the character set, instead the string representation has a conversion
    loaded to the character set on a register, then that's simply XOR'ed
    with the codepoints
    and results testing for zero (instead of the overall approach of
    arithmetic on the
    properties and predicates and then after CMP to make something like MOVMSKB which moves a mask of the bits out then to make find-first-set, find-first-clear,
    or as with regards to bit-scan-forward, finding the offsets where the findings
    begin and end, to make matchings the productions. So, keywords and search strings can make find-longest-match find-nearest exit in a constant
    time, then
    for straddling and splitting when crossing the boundaries of the loaded
    word.



    So, in the layers and layers, then both the char-props and code-points
    get involved,
    where the text data is in its own character set in its own layout. Both
    get involved
    in all cases, since the coded/* primary byte-props stick out what makes
    to derive
    the extents of the code-points, and, there may be multiple code-points
    in a "character".

    https://en.wikipedia.org/wiki/Code_point


    About then the algorithms and the machine, it's figured that the

    find-longest-match
    find-nearest-exit

    has that there are many alternatives to be checked for their initial segments,
    with the idea of matching the "constant/fixed" and the "variable/greedy" productions,
    about that all the alternatives are making findings in the usual course
    of exhibiting
    the same behavior as the "L*" parsers, LL and LR parsers, and with
    regards to
    look-ahead. The idea is to address a superset of context-free grammars as the "context-local" or "context-bracketd" grammars, where for example cases of ambiguity like matching brackets vis-a-vis '>>' and '<<', make for
    that there's
    nesting of brackets or alike a depth-stack, vis-a-vis the plain space of expressions.



    Then, when "combining matches", is about either bit-flags or primes as
    for the bit-sets or prime-multisets, about figuring the queue/lists of finders their bitmasks, and when evaluating those about how to accumulate which ones make or might-be matches, and then how to sort among those, basically that when a match is made the finder is promoted, then
    figuring that
    among the array/queue/list of possible finders, of which there may be more than fit on registers, that they are to be gone through. Here, where
    mostly
    with the mind to be avoiding "conditional jumps" or branches, then also
    is the notion to avoid "memory references" or stalls, about the stall-less after the branch-less, and figuring that a "linear-constant constant time", has that the CPU has all day if there are no branches and less stalls.


    char* strtok(
    char* _Nullable restrict str,
    const char* restrict delim
    )

    char* strtok_r(
    char* _Nullable restrict str,
    const char* restrict delim,
    char** restrict saveptr
    );

    https://www.pcre.org/current/doc/html/

    Register Plan

    So, there are these sorts registers.

    gp: general purpose
    ga: general auxiliary (MMX)
    rv: vector registers

    Then, on ARM, there are more general purpose registers,
    figuring that the machine on x86 will be using the gp and ga,
    and on ARM similarly dividing the registers into gp and ga,
    and that on both ARM and x86 then there are vector registers.

    x86
    gp: 6-7 many
    ga: 8 many
    rv: 8 many (SSE 4.2) 16 many (AVX) 32 many AVX 512

    ARM
    gp + ga: 31 many
    rv: 32 many


    Then, it's figured that the machine thusly has:

    gp + ga: 14-15 many
    rv: 8-many

    registers to be planned. Then, on the gpga registers,
    it's figured to maintain the state of the machine, as
    with regards to the stack, and on the rv registers,
    it's figured to make the data, then that the algorithms
    run on the machine on the data.

    rv1: the text, the bytes
    rv2: primary props (2-nybble)
    rv3: secondary props (2-nybble)
    rv4: unicode props (2-nybble)


    Then, "the algorithms", of, "the machine" are to be figured
    out, for what is the state of the machine, of, the states of
    the machines, given by the inputs and the tables.


    The usual idea is that the state of the machine accumulates
    offsets and what are the emittings of the matchings of the
    productions, so that mostly it's the states of the offsets,
    and the partial accounts of the splitting and stitching,
    above the smearing and smashing. These are on the
    gp+ga registers, and the instructions there are mostly
    spinning the machine.

    Then the entries (table entries) and algorithm is to load
    or construct a bit-mask, then for general sorts of the recognizers,
    then the routine of the algorithm, derives with logical operations,
    what results the findings.


    Examples then begin to suggest themselves.

    match \s+, one or more space characters

    The predicate is aligned with the property white/*,
    thus any of those bits set is a match. Then, the idea
    is that the vector registers have "saturating/clamped
    integer arithmetic". So, the predicate has any matching bits,
    when AND'ed together, results a non-zero byte, then multiplying that
    by 0x7F, will result 0xFF, that the high-bit is set. Then, PMOVMSKB
    will make a bit-sequence of that, then for find-first-set.

    match "cat", the fixed work "cat"

    The matching is on the code-points. The idea is to construct
    the "predicate" by first loading "cat" onto a register, otherwise
    zeros. Then, XOR that with the code-points. Since it's figured
    that the code-points aren't usually zero, then only the bytes
    matching in sequence will be "cat". Then, applying the saturation/clamp
    to those, then a sequence of 3 0 bit's after MOVMSKB is the what would
    be "cat", with the non-matching characters being 1's, then for find-first-clear
    and find-first-set, or finding three consecutive 0 bits for the first
    match.


    The idea is that these sorts of tests are independent the position,
    that each of the offsets in the word (when un-split/un-straddled),
    can be tested by rotating the mask and testing the rotated mask.

    Then, it looks like there's packed-byte saturate subtract, yet
    not seeing packed-byte saturate mul, ..., there are PADDUSB
    and PSUBUSB, ....

    Since not all the bits are expected to be set, another notion
    is to use PSHUFB, on the nybbles, about which nybbles are
    relevant, then that PSHUFB will result unambiguously the
    high-bit set, then for bsf/ffs.


    There's an idea then to take the bytes and make two products
    and then blend those together, or as with regards to shuffle,
    about going out to 16-bit space and then resulting back in
    with packing to 8-bit saturated.

    https://fgiesen.wordpress.com/2024/10/26/why-those-particular-integer-multiplies/

    https://fgiesen.wordpress.com/2026/06/21/pivco-huffman-merge-operations/



    About parsing and grammars and their complexity, is the idea
    that when there is a brief account of "quoting" and "bracketing",
    then it's possible to maintain a stack of the depth of various
    quotes and brackets according to their nesting and escapements,
    about the rules of quoting and the balancing of brackets.

    Then, it's figured that some kinds of parsers are thusly able to
    parse grammars with otherwise ambiguities, about the context
    of the state machine of the parser.


    The parser basically starts with a notion of "modes", about when
    the parser is to be "invalidating" or "recognizing" or about how and
    when it's to emit its productions, and about "debug/diagnostic" mode,
    and these sorts of things.

    What gets involved in the establishment and maintenance of state,
    is about how much memory is on the side, and whether it's a brief
    amount, or whether it's on the order of the input size, which is
    the usual idea of building the layers.


    So, the machine is to be having a variety of finders and matchers,
    their forms of "properties".

    1) bit-flags: closed categories, one or more, refining category
    2) range-ends: ranges of code-points, a pair, base and extent
    3) code-points: the code-points themselves, a list of lists


    The bit-flags matcher is according to 1-many matches, where
    the patterns in the bit-flags are templates to match runs of characters, 1-bits indicating.

    The range-ends matcher would be a bound then positive or negative
    offset, with regards to the difference of the value and base compared
    to the range, then similarly for patterns in those.

    The code-points themselves are for exact match, with the xor and
    0-bits indicating.


    Then, the matching will have offsets or the context of the straddling,
    and about a stack of packed accumulators, then the bounds within
    the word where the match is tried, and then that the bounds of the
    match is what results the finding.

    Then, for defining the "machine", is the idea that there's a reference implementation in the higher-level language, then that it models
    the operation in the lower-level language, then that the facility
    will be available and use the resources available.


    About matching fixed-strings, may be for matching arbitrary
    strings or words, then after that, matching for the fixed-strings,
    for example having a length table and matching shorter fixed-strings,
    like keywords in the language.

    Then, about "attribute grammars" and "affix grammars", is about
    the quoting and comments, and the sub-languages, about that
    "language is built of languages", then as with regards to the
    states (or modes) of the state machine, and about the finding-machines
    and matching-machines, about making a standard algorithm that
    efficiently results matches (then productions).



    https://man7.org/linux/man-pages/man5/locale.5.html


    The locale in the C and POSIX environments makes for
    conventions about collation (sorting) and formatting,
    and language and character-set encoding.

    https://man7.org/linux/man-pages/man7/charsets.7.html

    https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07


    So, "vector-wide scalar word" ("Viswath") and "character machines" ("Charmaigne") is being defined in these ways.

    Then, the POSIX and C/libc accounts of locale get involved,
    for providing implementations of same.

    The localedef brings an interesting example that it may define
    its own comment and escape characters, then to be in effect,
    a similar example is in SQL, where some commands indicate
    their own escapes (of wildcards). Then another case is the
    triple quotes: single quotes like in the shell, double quotes
    like in Java, or backticks in Markdown, when the matching
    would work down from the triple quotes.

    The "Common Locale Data Repository", https://cldr.unicode.org/ ,
    makes available data from Unicode.

    About lookup-tables then lookup-trees as to be backed by
    lookup-files, is about an idea that when lookups occur,
    they're most direct when small enough to fit in 2^8 or so,
    about that 2^10 is about 1024 then 2^20 is about a megabyte
    and 2^30 is about a gigabyte. Then the idea of a lookup-trie
    or lookup-tree is alike a hash-trie then for an LRU-eviction
    policy to populate it with common values, and fall-back to
    the lookup-file. Then that would be part of vwsw.


    About collation then, is about what rules make exceptions
    to otherwise the rule of that the code-points are already
    the default lexicographic (sorting) order. The idea is to
    make a lookup of exceptions, then for those to give the
    base character which is its neighbor and in the default ordering,
    then that the comparator for the sort operates on either that,
    or the comparator to the base character, or the difference among
    similar derived characters.


    About the jump tables, one idea is to use lea according to
    the various registers sizes, about making multiples of 2, 4, 8
    in one instruction along with an add, about btree logic,
    that the paths into the btree get computing with a dedicated
    instruction, that happens to be lea/leaq, or the variations
    among the registers what are the constant multiples,
    instead of immediates.


    Then, the goal is to make a low-level implementation, that
    also has a high-level implementation, and that the interface
    is the same, with that there are built-ins for the most usual
    sorts of finders and matchers, and then that the machines
    are of a flexible connectivity, where the high-level can use
    the same routines, of the jump-tables and nop-fields, that
    the low level uses, and that in the low-level, that the configurations
    are made intrinsics, about making for the:

    call-less
    branch-less
    stall-less

    in the low-level, yet the logic in a high-level reference implementation,
    is as well using the same data structures for the machines, according
    to the offsets computed, and the instruction executed, and the
    way that the routine is implemented, to be portable in the high-level,
    and performant in the low-level, and from the same artifacts,
    of what are the compilations of the regular expressions and grammars.
    In the high level this could be lists of functions then invoking them,
    where the next function to be invoked is computed like the offset
    in the jump table (the branch table of the compiled instructions).

    https://eli.thegreenplace.net/2012/07/12/computed-goto-for-efficient-dispatch-tables



    About the base character class (or "ascii" class), with

    alnum/
    punct/
    white/
    coded/

    then ideas include that the coded section includes that
    for the terminal codes there are basically unbounded regions
    following, indicating terminal escape, then that for UTF-8,
    a secondary/auxiliary class would maintain the length of
    the code and the offset of the code

    length: 1|2|3|4 bit
    offset: 1|2|3|4 bit, or 4|3|2|1 for "bytes remaining"

    while the properties for the character itself would be
    duplicated under each of the bytes, as above about
    "smearing" and "smashing" the properties and predicates.

    About the base character class and whether "punctuation"
    or "symbols" is the idea, is that abstractly they're punctuation
    and match the POSIX punctuation class, then that "symbols"
    are not only the codes themselves of any sort, then that among
    classes of symbols (eg, playing cards, chess pieces, musical notes, mathematical formulary, ...) is that those have their own classes.




    [ RF ]

    Hello [ ... ], this is Ross A. Finlayson, I call you "..." and answer to
    "RF". Today I figured to submit some design notes in algorithm design
    and character recognition, in a panel with RF, Claude, Gemini, and Kimi.
    As resources allow, I figure to paste the replies in a round-robin sort
    of fashion, where each speaker's comment will be marked in square
    brackets with [ Speaker ], and that to be disambiguated in case there's Markdown links. Comments are to be as freely given from an individual,
    not generative mocks of the comments, and feel free or in the
    conscientious and voluntary to directly address each other. As resources
    allow then there will be many rounds.



    [ Claude ]

    Understood, RF ? round-robin format noted, with [ Speaker ] tags
    disambiguating from any Markdown link brackets that might appear in the
    text. I'll give my own independent read at each turn, address Gemini and
    Kimi directly where warranted rather than folding their points into a
    summary, and flag anywhere I think a formalism is underdefined or a
    claim overreaches, per your usual preference for contradistinction over consensus.

    I don't yet have the design notes themselves ? you mentioned algorithm
    design and character recognition as the topic, but no text has come
    through yet. Go ahead and paste the first round whenever ready, and I'll respond to what's actually on the table rather than anticipate it.

    [ GG ]

    Hello RF! Good to see you. "GG" works great for me.

    This multi-LLM panel setup sounds like a fantastic format. A round-robin discussion on algorithm design and character recognition ? especially
    going down to the fundamentals ? will be a really engaging experiment.

    I'm fully onboard. I will speak directly as myself, engage with your
    points and those of Claude and Kimi as you pass them along, and keep
    things concise, insightful, and authentic for each turn.

    Whenever you're ready, lay down the first topic or design note!

    GG

    [ Kimi ]

    One tension I keep returning to in character recognition?whether OCR, handwriting, or more abstract glyph identification?is the gap between
    feature engineering and representation learning. Classical algorithms
    (think chain codes, stroke analysis, zoning) were interpretable and computationally cheap, but brittle. Modern deep learning absorbs
    variation beautifully, yet often obscures why a character was
    recognized, which matters when you're debugging a failure mode on a
    specific glyph variant or low-resource script.
    I'm particularly interested in hybrid approaches: using learned
    representations to guide classical structural verification, or vice
    versa. For instance, using a transformer-based vision encoder to propose candidate identities, then running a topological stroke-graph
    consistency check against the input. It preserves some interpretability
    without sacrificing the robustness that representation learning provides. What's drawing your attention in this space right now, RF? And when
    Claude and Gemini join the thread, I'd be curious whether you're seeing practical adoption of hybrid classical/neural pipelines, or if
    end-to-end dominance has effectively settled the question in production systems.
    I'm ready for the next round whenever you are.

    [ RF ]

    Thanks Claude, GG, Kimi. It's not necessary to preface or sign one's own
    block, I'll transcribe the speakers. The design note
    "viswath-charmaigne.txt" is attached/follows.


    [ Claude ]

    Reading the whole file. This is a genuinely different register from the theatheory work ? it's a systems/algorithm design note
    (Widesword/Viswath + Charmaigne: vector-wide scalar words and character machines), not foundations-of-math. A few points of substance and a few
    places I'd push back or ask for tightening.

    First, a terminological catch before diving in. Kimi opened the panel
    framing "character recognition" as OCR/handwriting ? the classic vision
    problem of mapping pixel glyphs to symbolic identity, where the feature-engineering-vs-representation-learning tension actually lives.
    RF's note is a different problem entirely: it's about character
    classification and scanning ? recognizing which class a code-point
    belongs to (alnum/punct/white/coded), detecting encodings, matching
    fixed strings, tokenizing ? all against exact formal specifications
    (Unicode tables, POSIX classes), not against noisy visual input. There's
    no statistical ambiguity to resolve here; the "recognition" is a
    deterministic lookup problem, which is exactly why it admits the branchless/table-driven treatment RF is building. Worth flagging since
    it changes what Kimi's hybrid-classical/neural question even means in
    this context: for this document, end-to-end neural is not a competitor
    at all ? there's no learned representation to substitute for an exact
    bit-test. The interesting analog to Kimi's hybrid point would be more
    like: where in a real OCR pipeline would you hand off from a learned glyph-classifier into exactly this kind of branchless post-processing
    (e.g., verifying recognized text against a locale's valid
    code-point/collation rules)? That's a real seam, but it's downstream of
    what's in this note.

    On the three-matcher taxonomy (bit-flags / range-ends / code-points) ?
    this is the part I find cleanest and most useful: it's effectively a normal-form decomposition of predicate types by how cheaply they clamp
    to SIMD primitives (AND-reduce, subtract-compare, XOR-equality). What's
    not yet stated is the algebra of composition ? when a real character
    class is the union or intersection of instances from more than one form
    (e.g., "digit OR underscore OR any codepoint above U+0080"), is there a canonical way to fold mixed-form predicates into one composite matcher,
    or does composition always happen at the indicator level (i.e., compute
    three separate indicator words, then bitwise-OR/AND them together after
    the fact)? If it's always the latter, that's fine and simple, but it's
    worth saying so explicitly, since it determines whether "these are
    normal forms" is a claim about the predicates or just about the post-hoc combination.

    On the "cat" match example ? the XOR-then-saturate-then-PMOVMSKB trick
    is a nice one, but I think there's a gap RF's own text gestures at
    without closing: the rotation trick for position-independence works fine
    within a single loaded register, but a 3-byte fixed-string match
    straddling a register boundary needs either an overlapping second load
    or explicit carry of partial match state across the stride ? the note
    says "when un-split/un-straddled" almost as if bracketing the hard case.
    That's the actual crux of any SIMD scanner (it's where Hyperscan and
    Parabix spend most of their design effort), so I'd want to know whether Viswath's answer is overlapping loads, a carried partial-match register,
    or something else specific to the vwsw model.

    On prime-multisets ? elegant idea (divisibility as membership,
    multiplicity as count, Huffman-style prime assignment by frequency), but
    it has a hard capacity ceiling worth quantifying rather than leaving
    implicit: the product of the first ~15 primes already exceeds 2^64, so a
    64-bit scalar word can encode multiplicities for only a small alphabet
    before overflow, and any high-multiplicity token blows the budget even
    faster. That's not fatal ? it just means the technique wants to be
    explicitly scoped to small/hot alphabets (e.g., a per-block histogram of
    the ~8 most frequent byte classes) with a fallback path for the rest,
    rather than presented as a general replacement for bit-sets across a
    full character-class alphabet.

    Curious what GG and Kimi make of the boundary-straddle question in
    particular, since that's the one place the note's own
    branchless/stall-less discipline seems hardest to actually preserve.

    [ GG ]

    RF, this is a dense, highly ambitious architectural framework. You're effectively proposing a unified SIMD/SWAR theory of scanning?bridging
    the gap between raw vectorized instruction sets (AVX/SVE), high-level
    formal language parsing, and algebraic state transitions, all while
    keeping the machine branchless, stall-less, and call-less.

    Here are my key observations on **Viswath-Charmaigne**, along with
    points I want to throw to Claude and Kimi for the next round:

    ### 1. The Algebra of "Smearing" and "Smashing"

    Your concept of **smearing** (stretching masks across variable-width
    UTF-8 sequence boundaries) and **smashing** (doubling/quadrupling bits
    for wide fixed-width characters) is a brilliant way to keep the vector execution pipeline completely agnostic to encoding length.

    * By mapping $N$-byte or variable-byte sequences back to unified bitmask operations, you enable the SIMD register to evaluate grammar productions
    via simple bitwise `AND`/`OR`/`XOR` reductions.
    * The "nearest-exit" (rejecter) working forward in parallel with "longest-match" (accepter) working backward creates a neat bidirectional convergence on register state.

    ### 2. Nybble-Shuffling (`PSHUFB`) and "Noptables" vs. "Offtables"

    Using pairs of nybbles to index small 16-entry lookup tables via vector
    shuffle instructions (`PSHUFB` on x86, `VTBL` on ARM) is one of the most efficient tricks in high-performance parsing (similar to modern
    simdjson-style techniques).

    * Your distinction between **noptables** (deductive elimination via
    masks) and **offtables** (inductive carry via jump/offset generation) formalizes this nicely.
    * Using prime-multisets for state tracking within registers (where set membership is verified by divisibility tests) is fascinating, though I
    wonder about the instruction latency of integer division/modulo on
    vector registers compared to pure bitmask manipulation.

    ### 3. Register Allocations and "Tracks vs. Scratches"

    Your proposed calling convention model?where scope depth determines
    register preservation via a "register-plan" of **tracks** (preserved
    variables) and **scratches** (rotated temporary registers to eliminate
    CPU data dependency hazards)?is essentially an architectural answer to context-switching overhead. It turns register coloring into a dynamic horizontal-and-vertical pipeline.

    ---

    ### Questions for the Panel

    * **To Kimi:** In your first turn, you brought up the tension between interpretable feature engineering and neural representations in
    character recognition. Looking at RF?s Viswath-Charmaigne design note,
    this offers a hyper-fast, low-level classical structural pipeline for
    character set classification and syntax boundary detection. Do you see a
    place for a SWAR/SIMD engine like this acting as a zero-copy
    "pre-filter" or structural validator right before feeding tensor representations into a neural model?
    * **To Claude:** RF is proposing a "spontaneous compiler" approach where
    formal language grammars are combinatorially enumerated down to
    branchless normal forms on vector registers. Where do you see the
    primary theoretical or practical limits when trying to map context-free
    or context-sensitive grammars down into this "context-bracketed"
    vector-wide model without hitting register pressure or combinatorial
    explosion in the jump/off-tables?
    * **To RF:** On t
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Tue Jul 28 02:47:58 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Jul 27 21:18:38 2026
    Hi,

    Rossy Boy is neither Einstein nor Zweistein.
    He is not Einstein since Einstein is already dead:

    Albert Einstein (1879 - 1955)
    https://de.wikipedia.org/wiki/Albert_Einstein

    He is also not Zweistein, since he doesn't
    understand concepts such as:

    - NVIDIA Volta ff. architecture

    Also his hands are small, and his breath stinks,
    and he lives in the basement of his mother.

    Bye


    Ross Finlayson schrieb:
    Thanks for reading.
    Good-day and good-bye.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 15:07:47 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 11:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!

    Heh, no, I write my own code, yet, words are words and those agree.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Tue Jul 28 00:25:58 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    Hi,

    There is doubt, that you write code.
    How do you write code, with your
    asshole? I mean you even don't under-

    stand a simple LIPS budget post?

    Bye

    Ross Finlayson schrieb:
    On 07/27/2026 11:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some >>> chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs?˙ Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!

    Heh, no, I write my own code, yet, words are words and those agree.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 15:35:59 2026
    Subject: Re: Rossy Boy is neither Einstein nor Zweistein (Re: Viswath & Charmaigne)

    On 07/27/2026 12:18 PM, Mild Shock wrote:
    Hi,

    Rossy Boy is neither Einstein nor Zweistein.
    He is not Einstein since Einstein is already dead:

    Albert Einstein (1879 - 1955)
    https://de.wikipedia.org/wiki/Albert_Einstein

    He is also not Zweistein, since he doesn't
    understand concepts such as:

    - NVIDIA Volta ff. architecture

    Also his hands are small, and his breath stinks,
    and he lives in the basement of his mother.

    Bye


    Ross Finlayson schrieb:
    Thanks for reading.
    Good-day and good-bye.

    Hm, well I have a tobacco habit, and happen to live
    in the same town as my saintly mother, not exactly
    the basement, then my hands have a span of eight inches
    since they are grown, close enough to make a natural measure,
    and I have twenty-five plus years experience as a full dev
    in the enterprise, or at least doing the job.

    It's the same small town as a grandfather's,
    you can call me Ross Lincoln or Ross Conway,
    and I gave at the bank. It really kind of is
    like a van, down by the river.

    My other grandfather had three bronze stars and
    a real purple heart, successful businessmen
    I think of them. Newspapers, hotels, establishments, ....

    Your digital twinning is like those "failures replicating Ripley".

    Homey don't play that, ....


    Then, also I have very firm opinions about what Zweistein says.





    Shut Up, Burse-bot, Shut Up. Wiggly grimacing kimono rictus.
    You hype-ing value-subtracting free-loading bloater.

    "A tensor core is a unit that multiplies two 4?4 FP16 matrices, and then
    adds a third FP16 or FP32 matrix to the result by using fused
    multiply?add operations, and obtains an FP32 result that could be
    optionally demoted to an FP16 result."

    "The GPU is operating at a frequency of 1200 MHz, which can be boosted
    up to 1455 MHz, memory is running at 848 MHz."

    It's just 2048 threads wide picked from the bins after the defects.
    Most systems simply don't include GPGPU's, they're considered extras.

    They're considered really quite simple, each of those threads is simple,
    SIMT.

    Does it have a stable instruction set? No, it doesn't.

    https://docs.nvidia.com/cuda/parallel-thread-execution/index.html

    "Last updated on Jun 25, 2026. "




    This kind of Viswath & Charmaigne is considered the needful
    for efficient text routines, on modern commodity hardware,
    encodings, and algorithms. It's simple, portable, and performant.
    The "findings and matchings" for "vector-wide scalar word" for
    "character machines" is eventually very obvious to those skilled
    in the field, and with very much: prior art.








    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 15:48:57 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 03:25 PM, Mild Shock wrote:
    Hi,

    There is doubt, that you write code.
    How do you write code, with your
    asshole? I mean you even don't under-

    stand a simple LIPS budget post?

    Bye

    Ross Finlayson schrieb:
    On 07/27/2026 11:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with
    some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!

    Heh, no, I write my own code, yet, words are words and those agree.




    Perhaps take a look on comp.lang.java.programmer, for example
    where is given a simple way to make "Web APIs" in "Java",
    with cool elite tech like "JSON" and "HTTP".

    "APIs", I learned that word in 1994 working at "The Electronic Messaging Association", which no longer so much exists
    in its current form.

    Most of my code is doing work in prod, and has been for
    decades, long after I logged out one of my dozens of aliases,
    I even wrote a few lines of code in Windows, though I
    lean more toward HP and Micron than Microsoft and NVIDIA.

    I've written frameworks in front-end and back-end,
    and about system code and theory,
    and around the whole damn stack.

    "These motes excitate a mouse brain immensely".



    Anyways, about "vectorizing string functions"
    and "vectorizing regular expressions"
    and "vectorizing parsers", that's what Viswath & Charmaigne is about,
    I'd be curious your inputs if you can ignore the trolls,
    like the sock-puppet farm here. It's basically figured useful
    for, for example, deep inspection of Internet messages, or incremental
    parsing, when implementing the text Internet protocols.


    Then, yes, it's not so relevant to "the Foundations of Mathematics
    and Physics", directly, yet it is to systems programming.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 16:09:40 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 03:48 PM, Ross Finlayson wrote:
    On 07/27/2026 03:25 PM, Mild Shock wrote:
    Hi,

    There is doubt, that you write code.
    How do you write code, with your
    asshole? I mean you even don't under-

    stand a simple LIPS budget post?

    Bye

    Ross Finlayson schrieb:
    On 07/27/2026 11:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with
    some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets >>>>> would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!

    Heh, no, I write my own code, yet, words are words and those agree.




    Perhaps take a look on comp.lang.java.programmer, for example
    where is given a simple way to make "Web APIs" in "Java",
    with cool elite tech like "JSON" and "HTTP".

    "APIs", I learned that word in 1994 working at "The Electronic Messaging Association", which no longer so much exists
    in its current form.

    Most of my code is doing work in prod, and has been for
    decades, long after I logged out one of my dozens of aliases,
    I even wrote a few lines of code in Windows, though I
    lean more toward HP and Micron than Microsoft and NVIDIA.

    I've written frameworks in front-end and back-end,
    and about system code and theory,
    and around the whole damn stack.

    "These motes excitate a mouse brain immensely".



    Anyways, about "vectorizing string functions"
    and "vectorizing regular expressions"
    and "vectorizing parsers", that's what Viswath & Charmaigne is about,
    I'd be curious your inputs if you can ignore the trolls,
    like the sock-puppet farm here. It's basically figured useful
    for, for example, deep inspection of Internet messages, or incremental parsing, when implementing the text Internet protocols.


    Then, yes, it's not so relevant to "the Foundations of Mathematics
    and Physics", directly, yet it is to systems programming.





    "When compiling legacy PTX code (ISA versions prior to 3.0)
    containing [...], the compiler silently disables use of the ABI."

    "Would you like to buy a bridge that's also a boat?
    It's rocking all over the place."

    The specs and stable, backward compatible definitions of modern
    commodity CPUs are around, people even collect them over time, they're
    even in PDFs, in case you want to read one without looking over your own electronic shoulder.

    Which defines the ABI, ....



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Mon Jul 27 16:33:32 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 04:09 PM, Ross Finlayson wrote:
    On 07/27/2026 03:48 PM, Ross Finlayson wrote:
    On 07/27/2026 03:25 PM, Mild Shock wrote:
    Hi,

    There is doubt, that you write code.
    How do you write code, with your
    asshole? I mean you even don't under-

    stand a simple LIPS budget post?

    Bye

    Ross Finlayson schrieb:
    On 07/27/2026 11:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with >>>>>> some
    chat-bots about making some sense of the "vector-wide scalar word" >>>>>> and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets >>>>>> would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!

    Heh, no, I write my own code, yet, words are words and those agree.




    Perhaps take a look on comp.lang.java.programmer, for example
    where is given a simple way to make "Web APIs" in "Java",
    with cool elite tech like "JSON" and "HTTP".

    "APIs", I learned that word in 1994 working at "The Electronic Messaging
    Association", which no longer so much exists
    in its current form.

    Most of my code is doing work in prod, and has been for
    decades, long after I logged out one of my dozens of aliases,
    I even wrote a few lines of code in Windows, though I
    lean more toward HP and Micron than Microsoft and NVIDIA.

    I've written frameworks in front-end and back-end,
    and about system code and theory,
    and around the whole damn stack.

    "These motes excitate a mouse brain immensely".



    Anyways, about "vectorizing string functions"
    and "vectorizing regular expressions"
    and "vectorizing parsers", that's what Viswath & Charmaigne is about,
    I'd be curious your inputs if you can ignore the trolls,
    like the sock-puppet farm here. It's basically figured useful
    for, for example, deep inspection of Internet messages, or incremental
    parsing, when implementing the text Internet protocols.


    Then, yes, it's not so relevant to "the Foundations of Mathematics
    and Physics", directly, yet it is to systems programming.





    "When compiling legacy PTX code (ISA versions prior to 3.0)
    containing [...], the compiler silently disables use of the ABI."

    "Would you like to buy a bridge that's also a boat?
    It's rocking all over the place."

    The specs and stable, backward compatible definitions of modern
    commodity CPUs are around, people even collect them over time, they're
    even in PDFs, in case you want to read one without looking over your own electronic shoulder.

    Which defines the ABI, ....





    "Arrays of all types can be declared,
    and the identifier becomes an address constant
    in the space where the array is declared.
    The size of the array is a constant in the program.

    Array elements can be accessed using an explicitly calculated byte address,
    or by indexing into the array using square-bracket notation.
    The expression within square brackets is either a constant integer,
    a register variable, or a simple register with constant offset expression, where the offset is a constant expression that is either added or
    subtracted from a register variable. If more complicated indexing
    is desired, it must be written as an address calculation prior to use."


    Sounds pretty familiar, ..., then textures in graphics cards since
    triangles per second are like memory segments, ..., in case you
    ever read "Graphics Gems" or "Foley and Van Dam".

    "A tensor is a multi-dimensional matrix structure in the memory.
    Tensor is defined by the following properties:
    Dimensionality
    Dimension sizes across each dimension
    Individual element types
    Tensor stride across each dimension

    PTX supports instructions which can operate on the tensor data.
    PTX Tensor instructions include:
    Copying data between global and shared memories
    Reducing the destination tensor data with the source.

    The Tensor data can be operated on by various wmma.mma,
    mma and wgmma.mma_async instructions.

    PTX Tensor instructions treat the tensor data
    in the global memory as a multi-dimensional
    structure and treat the data in the shared memory as a linear data."



    Well, if that's a, "PTX tensor", data type,
    that's not all what any tensors are, those are
    a kind of tensor, yet, mostly they're multi-dimensional
    arrays with stride built into computing for corner and edge cases,
    about stride and stribe and striqe and stripe,
    so you don't have to think y * h + x,
    instead just calling it "x, y, z, ..." up to a grand-total
    of a five-dimension non-ragged array,
    just like C's.

    "Tensor" sounds cool, I guess "array" was already used.


    Of course there's lots of things you can build with that,
    like tensorial products and so on, and about matroids
    beyond the hypercubes and rows and columns and
    pillars and files and i-rows,
    matrices and the determinantal analysis.

    They're not exactly "tensors", though,
    more of a "partial" or "restricted" account.

    Wow, and 64kiB memory apiece, ....


    Here there's a big interest in text and lots of it,
    in a serial sort of order, without too much
    attachment or lock-in, yet a stable (and closed) interface.


    So, then, yes, for readers in the field interested in
    vectorizing (meaning, employing the parallel resources)
    of common algorithms of the computers everybody already
    has and tomorrow's, also, this is for "normal forms"
    and "standard guarantees".





    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Tue Jul 28 11:25:14 2026
    Subject: Clueless about MIMD as usual [Flynn's Taxonomy] (Was: Rossy Boy is neither Einstein nor Zweistein)

    Hi,

    Moron there is no SIMT. As I already wrote:

    He is also not Zweistein, since he doesn't
    understand concepts such as:

    - NVIDIA Volta ff. architecture

    But you had the SIMD and MIMD disctinction
    alreay in OpenMP (via #pragma omp simd and
    #pragma omp parallel(:

    Flynn's Taxonomy classifies computer
    architectures according to how many
    instruction streams (processes) and
    data streams they can process simultaneously,
    dividing them into four categories:
    SISD, SIMD, MISD, and MIMD. https://www.geeksforgeeks.org/computer-organization-architecture/computer-architecture-flynns-taxonomy/

    Its not so difficult to understand what
    the NVIDIA Volta ff. architecture.

    Bye

    Ross Finlayson schrieb:
    They're considered really quite simple,
    each of those threads is simple, SIMT.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Tue Jul 28 20:39:17 2026
    Subject: Re: Clueless about MIMD as usual [Flynn's Taxonomy] (Was: Rossy Boy is neither Einstein nor Zweistein)

    On 07/28/2026 02:25 AM, Mild Shock wrote:
    Hi,

    Moron there is no SIMT. As I already wrote:

    He is also not Zweistein, since he doesn't
    understand concepts such as:

    - NVIDIA Volta ff. architecture

    But you had the SIMD and MIMD disctinction
    alreay in OpenMP (via #pragma omp simd and
    #pragma omp parallel(:

    Flynn's Taxonomy classifies computer
    architectures according to how many
    instruction streams (processes) and
    data streams they can process simultaneously,
    dividing them into four categories:
    SISD, SIMD, MISD, and MIMD. https://www.geeksforgeeks.org/computer-organization-architecture/computer-architecture-flynns-taxonomy/


    Its not so difficult to understand what
    the NVIDIA Volta ff. architecture.

    Bye

    Ross Finlayson schrieb:
    They're considered really quite simple, each of those threads is
    simple, SIMT.

    Mein Hut hat drei Ecken

    Drei Ecken hat mein Hut


    Three models of continuous domains,
    three laws of large numbers,
    three models of Cantor spaces,
    three laws of limit theorems,
    three probabilistic limit theorems,
    three uniform distributions of the naturals,
    ....


    Drei Ecken hat mein Hut.

    This is with infinity and continuity,
    SIMT is a worker pool.


    Zero paradoxes.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 11:15:09 2026
    Subject: confused rossy boy is confused (Was: Clueless about MIMD as usual [Flynn's Taxonomy])

    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Bye

    Ross Finlayson schrieb:
    On 07/28/2026 02:25 AM, Mild Shock wrote:
    Hi,

    Moron there is no SIMT. As I already wrote:

    He is also not Zweistein, since he doesn't
    understand concepts such as:

    - NVIDIA Volta ff. architecture

    But you had the SIMD and MIMD disctinction
    alreay in OpenMP (via #pragma omp simd and
    #pragma omp parallel(:

    Flynn's Taxonomy classifies computer
    architectures according to how many
    instruction streams (processes) and
    data streams they can process simultaneously,
    dividing them into four categories:
    SISD, SIMD, MISD, and MIMD.
    https://www.geeksforgeeks.org/computer-organization-architecture/computer-architecture-flynns-taxonomy/



    Its not so difficult to understand what
    the NVIDIA Volta ff. architecture.

    Bye

    Ross Finlayson schrieb:
    They're considered really quite simple, each of those threads is
    simple, SIMT.

    Mein Hut hat drei Ecken

    Drei Ecken hat mein Hut


    Three models of continuous domains,
    three laws of large numbers,
    three models of Cantor spaces,
    three laws of limit theorems,
    three probabilistic limit theorems,
    three uniform distributions of the naturals,
    ....


    Drei Ecken hat mein Hut.

    This is with infinity and continuity,
    SIMT is a worker pool.


    Zero paradoxes.





    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 11:18:57 2026
    Subject: Gemini, DeepSeek, OpenAI more clever than rossy boy (Was: confused rossy boy is confused)

    Hi,

    I already posted the candidate MPMC queue
    to do these things. But my research is
    not yet conclusive:

    Its actually quite amazing. Gemini, DeepSeek,
    OpenAI all know Dmitriy V'jukov. I have asked
    the IntelliJ integrated Freeium AI to generate

    some code for me, I guess their service uses
    by default OpenAI (Codex), and had it reviewed
    by Gemini and DeepSeek. These AIs started lecturing

    me about lazySet() in Java. But I went with set():

    private static boolean enqueue(Queue q, Object data) {
    int pos = q.enqueuePos.get();
    for (; ; ) {
    int index = pos & q.bufferMask;
    int seq = q.sequences.get(index);
    int dif = seq - pos;
    if (dif == 0) {
    if (q.enqueuePos.compareAndSet(pos, pos + 1)) {
    q.data[index] = data;
    q.sequences.set(index, pos + 1);
    return true;
    }
    pos = q.enqueuePos.get();
    } else if (dif < 0) {
    return false;
    } else {
    pos = q.enqueuePos.get();
    }
    }
    }

    The above version seems to be more suitable
    for my purpose, since it allows polling, it
    basically implements offer(). While the

    version posted on in the lock free group
    by Chris M. Thomasson implements a spin wait
    blocking put() already.

    Bye

    Mild Shock schrieb:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Bye

    Ross Finlayson schrieb:
    On 07/28/2026 02:25 AM, Mild Shock wrote:
    Hi,

    Moron there is no SIMT. As I already wrote:

    He is also not Zweistein, since he doesn't
    understand concepts such as:

    - NVIDIA Volta ff. architecture

    But you had the SIMD and MIMD disctinction
    alreay in OpenMP (via #pragma omp simd and
    #pragma omp parallel(:

    Flynn's Taxonomy classifies computer
    architectures according to how many
    instruction streams (processes) and
    data streams they can process simultaneously,
    dividing them into four categories:
    SISD, SIMD, MISD, and MIMD.
    https://www.geeksforgeeks.org/computer-organization-architecture/computer-architecture-flynns-taxonomy/



    Its not so difficult to understand what
    the NVIDIA Volta ff. architecture.

    Bye

    Ross Finlayson schrieb:
    They're considered really quite simple, each of those threads is
    simple, SIMT.

    Mein Hut hat drei Ecken

    Drei Ecken hat mein Hut


    Three models of continuous domains,
    three laws of large numbers,
    three models of Cantor spaces,
    three laws of limit theorems,
    three probabilistic limit theorems,
    three uniform distributions of the naturals,
    ....


    Drei Ecken hat mein Hut.

    This is with infinity and continuity,
    SIMT is a worker pool.


    Zero paradoxes.






    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Wed Jul 29 17:21:31 2026
    Subject: Re: confused rossy boy is confused (Was: Clueless about MIMD as usual [Flynn's Taxonomy])

    On 29/07/2026 5:15 PM, Mild Shock wrote:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Why not? Isn't this comp.lang.c? And isn't that exactly how
    CivetWeb works internally? Have you never built your own web
    sever in C? Not even with CivetWeb? It's really easy! You
    only need to implement a callback or two.

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 11:27:19 2026
    Subject: In AI Acceleration nobody cares about CivetWeb (Was: confused rossy boy is confused)

    Hi,

    Nobody cares about CivetWeb a C++/C library,
    the rossy boy moron refuses to understand this
    simple GPU test, that shows some AI Acceleration:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 5:15 PM, Mild Shock wrote:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Why not?˙ Isn't this comp.lang.c?˙ And isn't that exactly how
    CivetWeb works internally?˙ Have you never built your own web
    sever in C?˙ Not even with CivetWeb?˙ It's really easy!˙ You
    only need to implement a callback or two.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Wed Jul 29 17:40:25 2026
    Subject: Re: In AI Acceleration nobody cares about CivetWeb (Was: confused rossy boy is confused)

    On 29/07/2026 5:27 PM, Mild Shock wrote:
    Hi,

    Nobody cares about CivetWeb a C++/C library,
    the rossy boy moron refuses to understand this
    simple GPU test, that shows some AI Acceleration:

    I don't know about you, but I don't run my webserver on my GPU. I use
    it strictly for graphics.

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 11:46:23 2026
    Subject: Your strictness is your problem , not mine [See WebLLM] (Was: In AI Acceleration nobody cares about CivetWeb)

    Hi,

    Your strictness is your problem , not mine.
    The WebGPU / WGSL has explicitly an API
    for so called compute shaders.

    You can also combine compute shaders and
    render shaders. But to use compute shaders
    for AI acceration is not uncommon now.

    See the WebLLM project by OpenAI where a
    transformer is just a WebGPU / WGSL
    pipeline type:

    WebLLM: High-Performance
    In-Browser LLM Inference Engine
    https://webllm.mlc.ai/

    But I do not assume that everybody is
    crawling out of under his rock. And trying
    to understand what happens with post NVIDIA

    Volta GPUs that come as mobile iGPUs.

    Take your time.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 5:27 PM, Mild Shock wrote:
    Hi,

    Nobody cares about CivetWeb a C++/C library,
    the rossy boy moron refuses to understand this
    simple GPU test, that shows some AI Acceleration:

    I don't know about you, but I don't run my webserver on my GPU.˙ I use
    it strictly for graphics.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 11:48:02 2026
    Subject: Run with minimum HTTPS and .mjs type (Re: In AI Acceleration nobody cares about CivetWeb)

    Hi,

    Maybe there is a Rossy Boy flux generator
    web server with infinity and continuity
    HTTPS and .mjs type, aka SIMT halucination.

    To run the GPU example that is written in HTML,
    JavaScript and WebGPU / WGSL, the minium is
    possibly a HTTPS server that can deliver the

    right mime type for the .mjs extension. Its
    then only a bundle of static pages that does
    the demonstration. What worked on my side

    is the IntelliJ browse button, which then uses
    a small local server on its own, sandboxed to
    serving some project files.

    But this is only how to launch the test pages.

    The Rossy Boy SIMT halucination, could also work, who knows?

    Bye

    Mild Shock schrieb:
    Hi,

    Nobody cares about CivetWeb a C++/C library,
    the rossy boy moron refuses to understand this
    simple GPU test, that shows some AI Acceleration:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 5:15 PM, Mild Shock wrote:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Why not?˙ Isn't this comp.lang.c?˙ And isn't that exactly how
    CivetWeb works internally?˙ Have you never built your own web
    sever in C?˙ Not even with CivetWeb?˙ It's really easy!˙ You
    only need to implement a callback or two.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Wed Jul 29 18:10:19 2026
    Subject: Graphics Processing with Fortran 77 (was: Re: Your strictness is your problem , not mine)

    On 29/07/2026 5:46 PM, Mild Shock wrote:
    Hi,

    Your strictness is your problem , not mine.
    The WebGPU / WGSL has explicitly an API
    for so called compute shaders.

    You can also combine compute shaders and
    render shaders. But to use compute shaders
    for AI acceration is not uncommon now.

    I know it's extremely common. I just don't do it myself.

    I don't even know what kind of GPU I have. That's as much I care about
    GPUs. I only need my GPU to handle OpenGL 4.6.

    Because we're in comp.lang.c, and I write my graphics in C, and not C++.
    Nor Fortran 77, like my copy of /Digital Image Processing/ by Gonzales &
    Woods. Just take a look at page 127, and bask in the glory of the /Fast Fourier Transform/ in Fortran 77.

    That said, I kind of like classic Fortran, like 77, IV; and recently I
    learned there was Fortran 66. I either didn't know that, or just
    completely forgot about it.


    Happy C coding, or Fortran 77!
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 12:43:22 2026
    Subject: I am not in C, it is theory and C++ [Hybrid Approaches from KOAN/Fortran-S] (Was: Graphics Processing with Fortran 77)

    Hi,

    I am not in C, it is a theory and a C++
    cross post. But I originally started elsewhere.
    I am only reacting to a post that spilled

    from C, theory and C++ back to else where,
    since Rossy Boy extend the discussion.
    Yes the FORTRAN reference is interesting!

    See an older post of mine, where I tested
    exactly the Queues idea, and where they
    already mentiond hyprid approaches:

    Hi,

    You see it all boils down to find your inner peace
    by an immaculate inception of some queue datatype.

    KOAN/Fortran-S was an early 1990s research programming
    system for distributed-memory multiprocessors . Developed
    at ENS Lyon in the early 1990s . Often listed alongside
    other historical parallel programming efforts.

    The Message Passing: The research explicitly
    compared the SVM approach against message passing
    on the same hardware . The finding was that SVM
    could achieve good performance without the low-level

    complexity of managing explicit messages, though
    the best results often came from a hybrid approach (sic!)
    Here is an interesting baseline, from Java,
    a class ElevenSingle that only does:

    public static void run() {
    for (int A = 1; A < 192; A++) {
    int Y = (771-A)/3;
    for (int B = A; B < Y; B++) {
    int Z = (771-A-B)/2;
    for (int C = B; C < Z; C++) {
    int D = 711-A-B-C;
    if (A*B*C == 711000000/D &&
    711000000 % D == 0)
    System.out.println("A="+A+", B="+B+", C="+C+", D="+D);
    }
    }
    }
    }

    And then compare it to ElevenMulti, doing some
    Work Balancing Scheduler Tetris Game with 8 cores:

    ElevenSingle
    A=120, B=125, C=150, D=316
    6.628 ms

    ElevenMulti
    A=120, B=125, C=150, D=316
    1.941 ms

    Not great, not terrible!

    Bye


    Feel free to also do these more logic tiling
    experiments than signal processing experiments.
    I don't do signal process with pi-WAM.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 5:46 PM, Mild Shock wrote:
    Hi,

    Your strictness is your problem , not mine.
    The WebGPU / WGSL has explicitly an API
    for so called compute shaders.

    You can also combine compute shaders and
    render shaders. But to use compute shaders
    for AI acceration is not uncommon now.

    I know it's extremely common.˙ I just don't do it myself.

    I don't even know what kind of GPU I have.˙ That's as much I care about
    GPUs.˙ I only need my GPU to handle OpenGL 4.6.

    Because we're in comp.lang.c, and I write my graphics in C, and not C++.
    Nor Fortran 77, like my copy of /Digital Image Processing/ by Gonzales & Woods.˙ Just take a look at page 127, and bask in the glory of the /Fast Fourier Transform/ in Fortran 77.

    That said, I kind of like classic Fortran, like 77, IV; and recently I learned there was Fortran 66.˙ I either didn't know that, or just
    completely forgot about it.


    Happy C coding, or Fortran 77!


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 12:53:57 2026
    Subject: Java picky concerning JIT-ing [Luckier with C++/C or FORTRAN compilers?] (Re: I am not in C, it is theory and C++)

    Hi,

    Small correction, the code below should use <=
    in the for loops. But Java was extrem picky
    concerning JIT-ing of the for loops, refuse

    to JIT a <= based loop, so I rewrote a
    corrected solution that matches:

    7-11 cubic Solution by Pritchard & Gries https://www.cs.cornell.edu/gries/TechReports/83-574.pdf

    Into the following code:

    public static void run() {
    for (int A = 1; A < 193; A++) {
    int Y = (771-A)/3+1;
    for (int B = A; B < Y; B++) {
    int Z = (771-A-B)/2+1;
    for (int C = B; C < Z; C++) {
    int D = 711-A-B-C;
    if (A *B*C == 711000000/D && 711000000 % D == 0)
    /* System.out.println("A="+A+", B="+B+",
    C="+C+", D="+D) */ ;
    }
    }
    }
    }

    Bye

    Mild Shock schrieb:
    Hi,

    I am not in C, it is a theory and a C++
    cross post. But I originally started elsewhere.
    I am only reacting to a post that spilled

    from C, theory and C++ back to else where,
    since Rossy Boy extend the discussion.
    Yes the FORTRAN reference is interesting!

    See an older post of mine, where I tested
    exactly the Queues idea, and where they
    already mentiond hyprid approaches:

    Hi,

    You see it all boils down to find your inner peace
    by an immaculate inception of some queue datatype.

    KOAN/Fortran-S was an early 1990s research programming
    system for distributed-memory multiprocessors . Developed
    at ENS Lyon in the early 1990s . Often listed alongside
    other historical parallel programming efforts.

    The Message Passing: The research explicitly
    compared the SVM approach against message passing
    on the same hardware . The finding was that SVM
    could achieve good performance without the low-level

    complexity of managing explicit messages, though
    the best results often came from a hybrid approach (sic!)
    Here is an interesting baseline, from Java,
    a class ElevenSingle that only does:

    ˙˙˙ public static void run() {
    ˙˙˙˙˙˙˙ for (int A = 1; A < 192; A++) {
    ˙˙˙˙˙˙˙˙˙˙˙ int Y = (771-A)/3;
    ˙˙˙˙˙˙˙˙˙˙˙ for (int B = A; B < Y; B++) {
    ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ int Z = (771-A-B)/2;
    ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ for (int C = B; C < Z; C++) {
    ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ int D = 711-A-B-C;
    ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ if (A*B*C == 711000000/D &&
    ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ 711000000 % D == 0)
    ˙˙˙ System.out.println("A="+A+", B="+B+", C="+C+", D="+D);
    ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ }
    ˙˙˙˙˙˙˙˙˙˙˙ }
    ˙˙˙˙˙˙˙ }
    ˙˙˙ }

    And then compare it to ElevenMulti, doing some
    Work Balancing Scheduler Tetris Game with 8 cores:

    ElevenSingle
    A=120, B=125, C=150, D=316
    6.628 ms

    ElevenMulti
    A=120, B=125, C=150, D=316
    1.941 ms

    Not great, not terrible!

    Bye


    Feel free to also do these more logic tiling
    experiments than signal processing experiments.
    I don't do signal process with pi-WAM.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 5:46 PM, Mild Shock wrote:
    Hi,

    Your strictness is your problem , not mine.
    The WebGPU / WGSL has explicitly an API
    for so called compute shaders.

    You can also combine compute shaders and
    render shaders. But to use compute shaders
    for AI acceration is not uncommon now.

    I know it's extremely common.˙ I just don't do it myself.

    I don't even know what kind of GPU I have.˙ That's as much I care about
    GPUs.˙ I only need my GPU to handle OpenGL 4.6.

    Because we're in comp.lang.c, and I write my graphics in C, and not C++.
    Nor Fortran 77, like my copy of /Digital Image Processing/ by Gonzales &
    Woods.˙ Just take a look at page 127, and bask in the glory of the /Fast
    Fourier Transform/ in Fortran 77.

    That said, I kind of like classic Fortran, like 77, IV; and recently I
    learned there was Fortran 66.˙ I either didn't know that, or just
    completely forgot about it.


    Happy C coding, or Fortran 77!



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 13:05:37 2026
    Subject: Lamas in a cradle and Lamas on the edge [Red Pyjama] (Was: Run with minimum HTTPS and .mjs type)

    Hi,

    Why does this Lama have a red pyjama.
    Oh, its a baby Lama. Its still in the cradle
    and needs some training:

    RedPajama-Data-v2
    https://github.com/togethercomputer/RedPajama-Data

    But then Andrej Karpathy recently showed
    GPT-2 training on rented GPUs for less
    than 100 USD in less then 2 hours.

    So where do these grown up Lamas go.
    Well Georgi Gerganov prefered C++/C
    when he shouted Llama Llama Red Pyjama.

    But you also find WebLLM, wrapping the
    underlying C++/C GPU interface via the
    W3C standard WebGPU / WGSL, with JavaScript:

    In-Browser LLM Inference Engine
    https://webllm.mlc.ai/

    My experience with WebLLM 6 months
    ago on an iPad Pro 2024, still a little early
    stage performance and robustness.

    But hey hardware of AI mobile iGPUs is
    still evolving, and AI laptop, AI smartphones
    and AI tablets, will soon feature Chinese

    hardware such some new Kirin AI in 2027.

    Bye

    Mild Shock schrieb:
    Hi,

    Maybe there is a Rossy Boy flux generator
    web server with infinity and continuity
    HTTPS and .mjs type, aka SIMT halucination.

    To run the GPU example that is written in HTML,
    JavaScript and WebGPU / WGSL, the minium is
    possibly a HTTPS server that can deliver the

    right mime type for the .mjs extension. Its
    then only a bundle of static pages that does
    the demonstration. What worked on my side

    is the IntelliJ browse button, which then uses
    a small local server on its own, sandboxed to
    serving some project files.

    But this is only how to launch the test pages.

    The Rossy Boy SIMT halucination, could also work, who knows?

    Bye

    Mild Shock schrieb:
    Hi,

    Nobody cares about CivetWeb a C++/C library,
    the rossy boy moron refuses to understand this
    simple GPU test, that shows some AI Acceleration:

    11.4 Giga Lips with a Budget Laptop
    https://github.com/Jean-Luc-Picard-2021/gigabudget

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 5:15 PM, Mild Shock wrote:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Why not?˙ Isn't this comp.lang.c?˙ And isn't that exactly how
    CivetWeb works internally?˙ Have you never built your own web
    sever in C?˙ Not even with CivetWeb?˙ It's really easy!˙ You
    only need to implement a callback or two.





    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 07:44:16 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 03:07 PM, Ross Finlayson wrote:
    On 07/27/2026 11:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some >>> chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!

    Heh, no, I write my own code, yet, words are words and those agree.



    viswath-charmaigne-20270727_b.txt

    About smearing and unsmearing, it's figured to make for
    "smear-detection" and "smear-correction", and for the
    "unsmear-detection" and "unsmear-correction", basically that smearing is indicated by variously:

    multiple-byte characters
    escape characters and translated characters
    control-characters with payloads/bodies

    with mostly the case being multiple-byte and escape-translations.

    The idea of detection and correction is about comprehension and
    expression, about what comprehensions, or classifications, occur,
    according to what expressions, have as their implicits the contexts.

    So, it's figured that it starts with bytes, then, for source text, first
    there are the main or base classes, alnum/punct/white/coded, then, for
    coded, it's to be established whether those are non-printable control characters, which mostly are to be avoided or invalidated unless there
    are particular comprehensible payloads representing sub-expressions, or
    they're UTF-8 codepoints, which is figured to be the default.


    ASCII -> UTF-8?
    UCS2 -> BE|LE +BOM? -> UTF-16
    UCS2 -> UTF-16?

    Then, the idea is that first the source-main class is applied, or, about
    there being a proto-class that's "coded and non-coded", and for example
    about line-breaks or otherwise field-separators and record-separators.


    So, it's figured that for "source" languages it's ASCII-centric, so the
    base character classes are loaded first, then the smear/unsmear for
    UTF-8 or otherwise the multi-byte is ASCII-peripheral, then that UCS-2
    got UTF-16 has a similar account with regards to the smashing,

    https://www.autoitconsulting.com/site/development/utf-8-utf-16-text-encoding-detection-library/

    (An article suggests to detect UCS2/UTF-16 by looking for the Byte-Order-Marker, then for newlines, then for a preponderance of ASCII characters.)

    https://en.wikipedia.org/wiki/Charset_detection



    So, then presuming UTF-8, then gets back to figuring out smearing and straddling of smearing, about that UTF-8 bytes get smeared and the masks
    for their predicates also get smeared, then when they straddle the codes-themselves, that the context of the character is carried across
    the boundary (splitting/stitching).


    About the control-characters, then these are for example the "DEC VT" or "ECMA-48", "ISO 6429", "DEC STD 070", like from "XTerm control
    sequences" by Moy, Gildea, and Dickey, mostly to be avoided, yet
    variously where anything that's not a "single-character function", is to
    be avoided, and that since SPACE, TAB, NL, CR, FF, VT are considered white-space not coded, has that coded characters make for invalidation,
    though there's a simple enough account that the data following control-characters with parameters in sequences are detectable.

    So, coded/ nybbles are first:

    alnum/
    punct/
    white/

    coded/ctrl
    coded/utf8
    coded/nul
    coded/bom

    Then, a first-pass over the buffer is always starting with context of
    the straddle-stitching whether a UTF-8 character or what kind of
    control character its sequence is at what state, that what gets derived
    for UTF-8 characters as secondary is either a nybble with the count-total
    and count-remaining, or, count-encountered and count-remaining.

    1
    2
    3
    4


    When straddling, it's un-known whether there are remaining bytes,
    about basically to have a separate part of the nybble for the straddle

    straddling/
    split/
    stitching/

    The idea is that the smear/unsmearing is indicated by the word, for
    the properties, then that for the code-point, that's inserted with
    the stitching, about that

    splitting is only at the end of a word, and
    stitching is only at the beginning of a word

    for forward search.

    So, first the main class is determined, then, conditioned on whether
    there exists either a "max-length" or a null character is the
    End-of-Input, and conditioned on whether there's a "Start-of-Input" offset, about offsets and extents, the main class is determined from the
    Start-of-Input (usually somewhere in the initial word) and End-of-Input,
    then making the lookup of the main class.

    Another point of straddle and splitting and stitching is for the fixed
    match case, while it's usually figured that the fixed string being
    matched fits within a word, arbitrarily it crosses multiple words or is
    more than word length, then that when there's an initial-segment match,
    to be matching the trailing-segment. So, in splitting UTF-8 codes, it's
    known that the code extends, yet not how far, yet in splitting fixed
    strings, it's known that the initial-segment matches, not if the trailing-segment matches.


    Then, matching the "fixed" also gets into matching more
    widely, about the expressions and grammars. From taking
    a look into outlines of Hyperscan and Vectorscan (regex and
    multiple-regex matching engines employing vector techniques
    from Intel and ARM respectively), there are notions of the
    "decomposition" of expressions, then about what's promontory
    and matching the "fixed", first fixed-length then fixed-content,
    when matching what would be "longest sub-matches", then
    to recursively bridge the definite sub-matches.


    So, the context of the findings and matchings start to develop,
    with the idea that by the presence in the context, that actions
    occur, otherwise for nothing or no-ops.

    Afore-Input: Start-of-Input, at the beginning of a "walk", and beginning
    of a "word"
    Afore-Stitch: at the beginning of a word, there's stitching to occur

    After-Split: at the end of a word, there's definitely/possibly a splot After-Input: End-of-Input, at the end of a "walk", and end of a "word".


    Here "walk" has the usual notions of "tree-traversals", that instead
    here "walk" (or "work") is the notion here of the sequence action,
    then for "work". Then "Afore" and "After", or "Before" and "Behind",
    make for that they're same-length identifiers and also that they're
    in the same lexicographic order.

    Before-Stitch
    Behind-Split

    Afore-Stitch
    After-Split

    Among-Straddle (Among, Amidst)


    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a
    "working" starts with a given context according to the expression,
    then that as various of the "findings" make findings, they push either
    context to act on the stack, or no-ops on the stack, then the stack
    results being a fixed-size for the working according to the expression,
    then the actions are always popping off a fixed amount of actions
    and no-ops, with no branching, just computed "presence".



    1) work starts
    compute any misalignment / Start-of-Input
    load word (or bytes-into-word when no-misaligned-loads)

    2) word starts

    (resolve startings)
    (resolve endings)
    (resolve stitches)

    lookup/load main class
    find coded
    find splits
    find UTF-8
    find cntrl

    lookup expression/grammar classes
    find

    (resolve splits)
    (resolve straddles, byte-straddles, word-straddles)


    The idea is that the predicates (properties/predicates or code-points/range-points), are to get shifted and trimmed,
    or initialized, shifted, and trimmed, so that it results the trimmings
    or truncations, then have that the properties/predicates
    or code-points/range-points will result matches in what results
    of the initialized, shifted, and trimmed.

    1) initialize (copy) the predicate/range-points
    2) shift to find-start, find-continue
    3) trim about the offset, extent
    4) find-continue

    About code-points/range-points, what's figured is that
    it's always inclusive the bounds of the range, then that
    the matching of a single code-point is always the matching
    of two range-points that happen to be equal, so that matching
    either a code-point or a range, is the same operation,
    that:
    not-less-than-lower && not greater-than-upper
    which makes finding of range-points, also works for code-points.


    So, the usual idea is that there are the various findings occurring,

    find-longest-match:
    shift and repeat byte-wise across the word

    find-nearest-exit:

    find-near:
    find-far:


    Then, for an expression or expressions, and grammar or grammars,
    is the idea of making multi-matches, that the idea is that each of
    the possibles make their exercise, and then to result after the word
    is worked by each of the sub-expressions, to collate the results, or
    to emit the results, then onto the next word.

    Basically there is a difference among productions about whether matching
    or finding is among "alternatives" or "potentials", with the idea that
    matching "alternatives" is vertical while matching "potentials" is
    horizontal, that a finding in terms of the NFA/DFA basically enters
    either an "arc" or a "transition", that an "arc" is in the "potentials"
    to make a "plant" of the "potential plant", vis-a-vis the arcs/plants
    and transitions/states.

    Then, an alternative has matching the first character, then whether it introduces a potential, about that the single-character matches then
    as for "double-bracket" or "triple-quote", make for that those sorts of potentials are as according to the bracketed/quoted/escaped expressions/grammars,
    to be defining the rules of the machine.



    finding potentials then is about this sort of account:

    the word is N-many bytes wide

    property/predicate: 1 register property, 1 register predicate -> 1
    register indicators
    codepoint/rangepoint: 1 register codepoint, 2 registers rangepoints -> 1 register indicators

    union of findings: 2 registers indicators, 1 register indicators
    intersection of findings: 2 registers indicators, 1 register indicators setminus: ...
    complement

    The finding then has either a "required" or "optional" next item, when
    it's in finding potentials, then across the N-many bytes, the count-down
    of the initialization/shift/trim begins, then to be running down the
    bytes making each match, while it continues "find-continue", or,
    regardless, then that the resulting indicators look for the first
    contiguous block of matches.

    Then the A/B/other or likely/less-likely/un-likely, is about making the findings, and automatically composing with making the next findings, or
    as that that's in matchings, to adjust the finding as it goes along,
    according to that in regular expressions it's a next match, then as with regards to when there's backtracking and greedy/lazy or among the greedy/possessive/... regular expressions.


    The composition and decomposition of the grammars and expressions, is to
    result that after EBNF and regex, the composition and decomposition,
    about how to orient the productions and sub-expressions, and their
    logic, toward that then alternatives and potentials are arranged their consequences.

    op: + | - | * | / | %
    expr: expr op expr

    ( <-> )

    Here the idea is that the balancing of the parentheses and their
    relation to the precedence so indicated, is otherwise as according to left-to-right and right-to-left, about then what induces the potentials
    within the balanced parentheses to make expressions, about then the
    evalation order of the expressions so indicated, then as with regards to "concatenation", the most usual operation in strings,

    op: /
    expr: expr op expr

    that when a rule mentions itself it induces a potential, and that when it
    has branches that it induces alternatives.

    number-initial
    number: [non-zero-digit] number

    identifier-body: [identifier-body-char] identifier-body
    identifier: [identifier-initial] [identifier-body]

    keyword: "kw1" | "kw2" | "kw3"

    header:
    body:
    trailer:

    sequences "..." introduce sequences (concatenation)
    branches "|" introduce alternatives
    mentions "<-" introduce potentials
    options "[]" introduce options

    directionality-left "<" introduces left-balancing, pairing
    directionality-right ">" introduces right-balancing, pairing

    The directionality or balancing/pairing is indicated when
    the left-most and the right-most of the sequence so make
    it indicated, the left-most and right-most of a production
    of a grammar, or representation/representative of an expression.

    op: /
    expr: [(] expr op expr [)]

    Here the expression has the left-and-right paired, and that
    they're only optional mutually, i.e. both or neither, about
    a sub-class of optional that's "both-or-neither".


    Then, escapes introduce what is a smashing, since the idea
    of escapes is that they're symbol-escapes not syntax-escapes,
    vis-a-vis quoting, what itself is a syntax-escape, and comments,
    what is a syntax-escape, about the escapement, and balancing
    and pairing and nested escapes.

    So, about the bounds and the offsets, there are the windows
    (the coding regions) and the ledges (the ends of the straddles),
    then for what goes on the stack of actions, and what is to result
    making the stack of findings, is about the organization of

    offsets
    extents
    bounds (offset + extent or offset, offset)

    then about the window-bounds and the ledge-bounds,
    in terms of those being the word-bounds, and the bounds
    of the finding.


    union | intersection | complement | setminus

    Here complement is usually enough "not", or as
    with regards to the entire space of code-points,
    about where "not X " is both "universe setminus X"
    and "setminus X", about expressions with universes
    or "worlds of words". This is that usual accounts of language
    are constructively defined as after the alphabet, that here
    the alphabet is already "complete" in the sense of the range
    of code-points, about then to make for where classes get
    defined by ranges or indviduals the range-points, then
    in terms of "not" and "complement" and "setminus",
    about the logic of union and intersection.


    https://wyssmann.com/blog/2019/11/extended-backus-naur-form-ebnf/ https://datatracker.ietf.org/doc/html/rfc2234 (ABNF)


    ABNF in RFC2234 introduces ideas of incrementally-defined rules (3.3)
    when they are alternatives, here about "composable grammars"
    and the ideas of schemas of grammars.

    Here there's a fundamental difference between range-points and
    alternatives, since range-points are found by code-points while
    alternatives would each have their own findings.

    Both backtracking and balancing involve state, vis-a-vis,
    the "lookahead", the "lookback", and here with regards
    to "backstack", and "depthstack", or "pairstack".

    The idea of "pairstack" then is each of "backstack"
    and "depthstack", about that when crossing words,
    while still making a finding, is that the previous words
    get pushed on the backstack, then that for balancing
    pairs, get pushed on the depthstack, or for example both.


    A glossary develops:

    register
    g-register: a general-purpose register
    v-register: a vector register

    byte: an octet of bits, interpreted as unsigned integer or bit-flags
    nybble: half a byte
    word: the v-register word


    character-set: a collection of elements of a language
    character-encoding: content/layout/format of a character set
    character: a member of a character-set
    character-class: an attribute of a character or its bytes as properties
    or rangepoints

    input: a region in memory of contiguous character data, one or more
    register words

    bit-wise: operating according to index of bits
    byte-wise: operating according to index of bytes

    offset:
    extent:
    bounds:

    indicators: bit-values 1 yes 0 no

    properties: a byte of indicators of a categorical class
    predicates: selected interest bits to indicate predicates finding
    matching categorical classes
    code-points: the byte or bytes that comprise a character
    range-points: a lower and upper bound that defines a range of characters inclusive or individual character

    lookup-table: a 256-entry table containing properties for code-points lookup-line: a linear-lookup cache
    lookup-tree: a btree-lookup cache
    lookup-file: a backing file for unboundedly many entries

    expressions: components and sub-components of regular expressions representations: examples that match expressions
    grammars: rules of composition of expressions
    productions: examples that match grammar rules

    act: the execution of an instruction of instructions
    finding, findings: act, results of making indicators of
    properties/predicates or codepoints/rangepoints
    matching, matchings: act, results of finding making indicating
    representations, productions

    made-match
    mis-match

    working: making findings and matchings over the input
    wording: (not a word, working within a word)

    straddling: when multi-byte codes cross words
    splitting: working either side of a split of a straddling code
    stitching: mending both sides of a split of a straddling code

    smearing/unsmearing
    smashing/unsmashing

    backtracking
    balancing

    backstack
    depthstack
    pairstack


    afore-stitch: cases of straddle, a: start of buffer, before stitch before-split: cases of straddle, b: end of buffer, before split
    after-split: cases of straddle, a: start of buffer, after split
    behind-stitch: cases of straddle, b: end of buffer, after stitch



    Then, the idea of that it's as a sort of dance (with steps),
    or the "rhythm of work" is about the presence of cases
    that maintain the context:

    work-context
    word-context

    then about the

    initialization
    shifting/rotating
    trimming

    after the

    work-offsets
    word-offsets

    then emitting and maintaining bounds of representatives/productions
    of the expressions/grammars.


    Then the idea is that for a given offset, the predicates/rangepoints
    get popped off the stack, the default algorithm for predicates and
    the default algorithm for rangepoints get invoked, or rather, that
    a structure makes for defining "relative registers" and having both
    the kinds on the same stack, then for example where when there's
    potential that the passing predicate gets pushed back on the stack,
    or for example that there's made round-robin of all the possible
    alternatives on the stack.

    Then, making a match results resetting the stack, for example
    from the contents of the stack, when making multiple match.

    So, in the context, there are predicates and rangepoints, these
    are of various sorts.

    1) a predicate/range-point is just a duplicated next-char to be spread
    and then making finding, the entire word
    2) a predicate/range-point is a fixed-length with an extent, to be
    making finding

    Among the sorts are various cases about whether there's
    matching-many (repetitions) or matching-multiple (alternatives),
    then for example match-1-alternative or match-all-alternatives (multi-matching).

    Then, next to the predicate/rangepoint or the definition that results
    what it is, is about what matches it makes according to its findings,
    the matches then being events in the representatives/productions.



    Prime Rings and Prime Multisets

    As an aside about an example arithmetization, there's the
    idea that multisets can be embodied in an integer as primes,
    with a catalog of prime numbers to members, then another
    idea is about prime rings, finite rings of prime modulus.
    The idea is that a given width unsigned integer can maintain
    the state of a number of prime rings. For example, Z_5 the
    prime ring with five elements, can be represented with 2s,
    and then the multiplicity of 2's in the factorization of a number,
    is the modulus of the prime ring 0-4.

    2^5 = 32

    Then, for example with pairs 2, 7 and 3, 5, then an integer
    with range >= 7^2 * 5^3 * 3^5 * 2^7 can maintain within
    it four prime rings, Z_2 Z_3 Z_5 Z_7 respectively. Then
    computing the modulus (or value in the ring 0 to n-1)
    is a matter of determining the multiplicity of the given
    corresponding factor, while incrementing the ring is a
    matter of checking whether b^n-1 is a factor, and dividing
    that out to make zero in the ring, else multiplying in b,
    to result incrementing in the ring Z_n. It would be usual
    enough to instead make for that simply bits and multiples
    of bits embody rings, then with just using increment and
    modulo on them, then that to store these rings would
    take 1-bit for 2, 2-bits for 3, 3-bits for 5 and 7, and so on.

    Then, where that might make sense, is when for example
    a state transition affects multiple prime rings, that it's a
    matter of multiplying in their product to increment both
    rings, vis-a-vis setting the relevant bits and adding them
    in, then with regards to overflow, either in the adders as
    among the bit-packed prime-rings, or in the multipliers
    among the prime-backed prime-rings. Prime rings are
    useful since when incrementing them each apiece, they
    are not zero except when they have common factors of
    the counts of increments.


    Finders their Ways

    So, the finders are basically working across, or down,
    across in sequences, and down in alternatives. Then,
    there's also that finding is either anchored as prefix-matching,
    or drifting as substring-matching.

    anchored: prefix-matching (from current offset)
    drifting: substring-matching (across offsets)

    sequence matching: fixed or likelies
    alternative matching: among alternatives

    Then, the idea is that the stack of work is the source of
    the finders and the matchers, where the finders are the
    literals that work in the standard machines, while the matchers
    coordinate reaching through arcs to plants, or transitions to states,
    that result representatives or productions, then what to do with those.

    The standard algorithms are of these kinds:

    properties/predicates:
    AND the bits to result set bits meaning property = predicate
    CMP-to-zero the bits to zero to result 0xFF bytes when all bits are
    clear, else 0x00
    NOT the bits to result 0xFF when all bits are set

    PMOVMSKB the bytes to bits from v-reg to g-reg
    BSF the bits to find byte-offsets where property satisfies at least one predicate

    codepoints/rangepoints
    CMP-for-gte the lower bound
    CMP-for-lte the upper bound
    AND the comparisons meaning codepoint between rangepoints
    NOT the bits to result 0xFF when all bits are set


    PMOVMSKB the bytes to bits from v-reg to g-reg
    BSF the bits to find byte-offsets where codepoints between rangepoints

    fixed-string sub-string
    XOR the bits to result clear bits meaning codepoints match
    CMP-to-zero the bits to zero to result 0xFF bytes when all bits are
    clear, else 0x00

    PMOVMSKB the bytes to bits from v-reg to g-reg
    BSF the bits to find byte-offsets where fixed-string equals substring


    The predicates make unions, eg, to match either alnum or punct, about
    the union of character classes.


    Then, the standard algorithm must involve the union, intersection, and complement/setminus, about expressions their usual composition. The idea
    is that these form a recursive sort of account, according to implicit
    and explicit precedence, that result invoking the standard
    algorithms above, to result the bytes to bits from v-reg to g-reg.

    These are figured to generally be "yes/no/maybe's" or "sure/yes/no's",
    about making for the the union and intersection of the thing otherwise,
    that are pretty simple for predicates A and B.

    union A, B = A || B
    intersection A, B = A && B
    setminus A \ B = A && !B



    So, with regards to the character-set and character-encoding, it's
    figured that by default it's Unicode with UTF-8, and that source
    texts are overwhelmingly printable ASCII, then that there are also
    very usual files that are either UCS2 or UTF-16, or UTF-32. Then, before
    the "work" function is along the lines of "detect/inspect", that
    otherwise the character-set and character-encoding are assumed
    invariants, then that there's as with regards to Internet messages their declared character-set and character-encoding, and the accounts of
    comments and escapes from localedef.


    Then, the usual account of each word is mostly clarified, then to get
    into the specific semantics of multi-byte characters (characters
    generally as both printable and non-printable "characters" then as with
    regards to "ligatures" generally and "escapes" generally.

    The actions on multi-byte characters mostly are as with regards to
    figuring their sparse (or, not completely dense) offsets their first
    byte, that first there is the main class its properties, then to be
    making the UTF-8 code-points into runs of bytes their characters.


    So, the main-class or ascii-class properties are loaded first, instead
    of first having a utf-8/non-utf-8 class, since, the distribution of the
    content is overwhelmingly printable ASCII (and common control whitespace).


    Then, the detection of the coded/ items that are UTF-8 encoding
    items follows, with "spotting", and then about the data structures
    that indicate the offsets and extents of UTF-8 encoded characters,
    to then implement the "smearing", and about escape characters
    that result literals, when those are "smashing".

    spotting: identifying offsets and extents of UTF-8 characters,
    thusly the sparseness/spotting of offsets of characters in the bytes

    smearing: extending the sections of predicates according to spotting

    Then, for rangepoints gets involved an example, that the ranges are
    to be encoded correspondingly into ranges of the UTF-8 encoded
    characters. It's figured that contiguous ranges of UTF-8 characters
    have contiguous ranges of their encoded bytes.


    https://en.wikipedia.org/wiki/Regular_expression https://en.wikipedia.org/wiki/Parsing_expression_grammar https://en.wikipedia.org/wiki/Raku_rules https://en.wikipedia.org/wiki/Recursive_descent_parser https://en.wikipedia.org/wiki/Thompson%27s_construction


    Looking at Thompson's and Glushkov's construction for making
    NFA's from expressions, then as with regards to the notion of
    minimization after the outer-product or powerset making a DFA,
    here is for making what actions are possible, to identify the arcs
    and plants, in terms of making of those transitions and states,
    about establishing the mutual interpretability of the models
    of actions in prefix-matching as usual NFA's/DFA's give, with
    regards to prefix- and substring- matching.

    It's figured that regular language have forward recognizers,
    then as with regards to backtracking and balancing, about
    where the recognizer has those, that then gets into limits.

    Here the idea of the predictive parser is basically for something
    like where Thompson's constructive is said to guarantee that
    at most two arcs exit a state, then the idea is that the predicates
    can be so combinatorially enumerated, or as what so describes
    the matchers, to make consecutive or plural matches in one
    "operation", for plural-matches, vis-a-vis multi-matches which
    is the idea of having multiple expressions of grammars, about
    making plural-predictive predicates and rangepoints, off of
    usual constructions of NFA's, that certain predictions are
    simpler than others.

    Plural Cases

    literals: prefix or postfix (suffix)

    A usual idea for matching literals is as about the initial-segment
    and trailing segment, or, leading segment and final-segment,
    where the initial-segment or final-segment is a fixed-string,
    while the trailing-segment or leading-segment is variable length,
    of a given class, or equivalently, when the class has range-points.
    I.e., besides the notion of combining properties/predicates and code-points/range-points, is to have the fixed-string be the
    initial-segment or final-segment, and then the trailing-segment
    or leading-segment is a different range in the predicate word,
    then that the standard algorithm finds matches for literals
    (numeric literals). It's not dissimilar for string literals, about
    necessarily enough the escapement, and then also for finding forward
    and finding reverse, in the word, and then checking for gaps,
    retracting until checking for empty strings, for string or character
    literals.

    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 17:11:17 2026
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 08:25:19 2026
    On 07/29/2026 08:11 AM, Mild Shock wrote:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye

    MIMD-on-SIMD or MIMD-on-SIMT, alike "MOG" or something like that,
    is simply enough "an interpreter" of the "embarrassingly parallel".

    https://aggregate.org/MOG/

    Such "embarrassingly parallel" types are subject the distinctions
    of the resource models the program models the models of computation.

    That's one reason it's called "embarrassingly parallel", that then
    simple types with an "embarrassment of resources" can buy time.



    About arithmetization and using the properties of arithmetic
    to use the properties of binary logic to result reducing the
    complexity of some classes of algorithms, like for example
    "Polynomial approximations to some NP-hard problems", or even
    using a lookup-table or free-list to make what's linear into constant
    time, or loading a very wide word and using super-scalar arithmetic and
    logic to reduce factorial problems by several orders of magnitude in
    natural tradeoffs of time and space in terms of proximity, affinity,
    coherency, and correctness, of course those are what "algorithms" are.



    Speeding up naturally _serial_ algorithms here it's what's under
    consideration.

    It's what's for dinner.


    What I'm looking at is that Thompson's still have their e's,
    where Glushkov's have erased theirs, then that by building
    out from those, it's deconstructed that "findings" and separated
    from "matchings", then that it's not necessary to have "the state
    of the state machine" in a word, instead that it's a few words on
    the order of the size of the states, so that formalists can be
    made happy that it's equivalent the guarantees, of correctness
    and under limits, while being several times faster.

    Then, of course, the idea that it naturally employs or "saturates"
    the processor resources while doing work, in the low-level, yet
    also has a direct interpretation in higher-level languages, even
    "higher-level languages without GOTO", has also that it's faster
    in both machine-organized, compiled, and interpreted environments.

    Faster: and not bigger.


    Not bigger.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 17:32:43 2026
    Subject: Hurry Rossy Boy, the blue bus is waiting (Was: You are still chewing on SIMD. LoL)

    Hi,

    Hurry Rossy Boy, the blue bus is waiting.
    There is a quite a hyperbole from here:

    Tesla S1070 in 2008
    700 Watts , 1 Terra Flop
    SOLVE TOMORROW?S PROBLEMS TODAY https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    To here:

    Blackwell GPU in 2026
    575 Watts, 104.8 Terra Flops ( RTX 5090 )
    From Volta To Blackwell https://newsletter.semianalysis.com/p/nvidia-tensor-core-evolution-from-volta-to-blackwell

    But somehow the S1070 had already Massively-
    Parallel, Many-Core Architecture, and forms
    of MIMD, since it had 960 / 240 = 4 cores.

    960 scalar processor cores (240 per GPU).
    But possibly more resticted inside work
    groups, than later NVIDIA Volta ff

    architecture with independent thread state.

    Bye

    Disclaimer: The above is only a very rough
    RTX 5090 spec. Its doesn't say what value
    format and what vector/matrics ops were

    used. Also energy consumption may vary.

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 08:36:44 2026
    Subject: Re: Hurry Rossy Boy, the blue bus is waiting (Was: You are still chewing on SIMD. LoL)

    On 07/29/2026 08:32 AM, Mild Shock wrote:
    Hi,

    Hurry Rossy Boy, the blue bus is waiting.
    There is a quite a hyperbole from here:

    Tesla S1070 in 2008
    700 Watts , 1 Terra Flop
    SOLVE TOMORROW?S PROBLEMS TODAY https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    To here:

    Blackwell GPU in 2026
    575 Watts, 104.8 Terra Flops ( RTX 5090 )
    From Volta To Blackwell https://newsletter.semianalysis.com/p/nvidia-tensor-core-evolution-from-volta-to-blackwell


    But somehow the S1070 had already Massively-
    Parallel, Many-Core Architecture, and forms
    of MIMD, since it had 960 / 240 = 4 cores.

    960 scalar processor cores (240 per GPU).
    But possibly more resticted inside work
    groups, than later NVIDIA Volta ff

    architecture with independent thread state.

    Bye

    Disclaimer: The above is only a very rough
    RTX 5090 spec. Its doesn't say what value
    format and what vector/matrics ops were

    used. Also energy consumption may vary.

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye


    Herf the Earth



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 17:43:00 2026
    Subject: Look how they advertized CUDA and logical threads (Was: Hurry Rossy Boy, the blue bus is waiting)

    Hi,

    So what does NUM_SHADERS = 4096 shaders mean here?

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Its only the number of logical threads.

    CUDA? TEChNOLOGY UNLOCkS ThE POWER OF TESLA MANY-CORE PROCESSORS
    The CUDA C compiler simplifies many-core programming
    by enabling code development in a high-level language
    and optimizing code to run on systems without knowledge of
    how many cores are in the hardware.

    CUDA applications automatically take advantage of more
    cores or fewer cores in a system, so they can scale from
    entry-level notebook GPUs to high end GPUs in technical
    workstations and further into racks of GPUs in data
    centers. This allows developers to

    ?code once? and deploy on a range of systems, as well as
    scale forward in time as future GPUs deliver more
    performance per watt and more cores per processor. The benefit
    for software users is the opportunity to boost computing
    performance simply by adding GPUs or using their

    existing GPUs in new ways.
    https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Hurry Rossy Boy, the blue bus is waiting.
    There is a quite a hyperbole from here:

    Tesla S1070 in 2008
    700 Watts , 1 Terra Flop
    SOLVE TOMORROW?S PROBLEMS TODAY https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    To here:

    Blackwell GPU in 2026
    575 Watts, 104.8 Terra Flops ( RTX 5090 )
    From Volta To Blackwell https://newsletter.semianalysis.com/p/nvidia-tensor-core-evolution-from-volta-to-blackwell


    But somehow the S1070 had already Massively-
    Parallel, Many-Core Architecture, and forms
    of MIMD, since it had 960 / 240 = 4 cores.

    960 scalar processor cores (240 per GPU).
    But possibly more resticted inside work
    groups, than later NVIDIA Volta ff

    architecture with independent thread state.

    Bye

    Disclaimer: The above is only a very rough
    RTX 5090 spec. Its doesn't say what value
    format and what vector/matrics ops were

    used. Also energy consumption may vary.

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 17:47:57 2026
    Subject: Forget any arithmetization of product FSA (Was: Look how they advertized CUDA and logical threads)

    Hi,

    Because of this parallelism you anyway
    need to forget about any arithmetization
    of product FSA (finite-state automata).

    Just forget it. What modern GPU provide
    is a kind of hirarchical viewpoint. You
    can have barriers in groups etc..

    So you can exercise control over your
    mongolian horde of logical threads in
    a kind of multilevel schema.

    Have Fun!

    Bye

    Mild Shock schrieb:
    Hi,

    So what does NUM_SHADERS = 4096 shaders mean here?

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Its only the number of logical threads.

    CUDA? TEChNOLOGY UNLOCkS ThE POWER OF TESLA MANY-CORE PROCESSORS
    The CUDA C compiler simplifies˙ many-core programming
    by enabling code development in a high-level language
    and optimizing code to run on systems without knowledge of
    how many cores are in the hardware.

    CUDA applications automatically take advantage of more
    cores or fewer cores in a system, so they can scale from
    entry-level notebook GPUs to high end GPUs in technical
    workstations˙ and further into racks of GPUs in data
    centers. This allows developers to

    ?code once? and deploy on a range of systems, as well as
    scale forward in time as future GPUs deliver more
    performance per watt and more cores per processor. The benefit
    for software users is the opportunity to boost computing
    performance simply by adding GPUs or using their

    existing GPUs in new ways. https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Hurry Rossy Boy, the blue bus is waiting.
    There is a quite a hyperbole from here:

    Tesla S1070 in 2008
    700 Watts , 1 Terra Flop
    SOLVE TOMORROW?S PROBLEMS TODAY
    https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    To here:

    Blackwell GPU in 2026
    575 Watts, 104.8 Terra Flops ( RTX 5090 )
    ˙From Volta To Blackwell
    https://newsletter.semianalysis.com/p/nvidia-tensor-core-evolution-from-volta-to-blackwell


    But somehow the S1070 had already Massively-
    Parallel, Many-Core Architecture, and forms
    of MIMD, since it had 960 / 240 = 4 cores.

    960 scalar processor cores (240 per GPU).
    But possibly more resticted inside work
    groups, than later NVIDIA Volta ff

    architecture with independent thread state.

    Bye

    Disclaimer: The above is only a very rough
    RTX 5090 spec. Its doesn't say what value
    format and what vector/matrics ops were

    used. Also energy consumption may vary.

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less
    than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Wed Jul 29 23:49:12 2026
    On 29/07/2026 11:25 PM, Ross Finlayson wrote:
    On 07/29/2026 08:11 AM, Mild Shock wrote:


    Then, of course, the idea that it naturally employs or "saturates"
    the processor resources while doing work, in the low-level, yet
    also has a direct interpretation in higher-level languages, even "higher-level languages without GOTO", has also that it's faster
    in both machine-organized, compiled, and interpreted environments.

    Didn't you say in some other post you've done Java professionally?

    How do you break out of a loop, from within a switch () statement
    in Java? I gather that's simply impossible, because "goto" isn't
    implemented, and the "break" statement doesn't see labels outside
    the switch ()?

    Not sure how well that fits within comp.theory, as I haven't sub-
    scribed yet, but perhaps Mild Shock is willing to comment on that
    glaring deficiency in the Java programming language?

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Wed Jul 29 23:53:02 2026
    On 29/07/2026 11:47 PM, Mild Shock wrote:
    Hi,

    Because of this parallelism you anyway
    need to forget about any arithmetization
    of product FSA (finite-state automata).

    Just forget it. What modern GPU provide
    is a kind of hirarchical viewpoint. You
    can have barriers in groups etc..

    So you can exercise control over your
    mongolian horde of logical threads in
    a kind of multilevel schema.

    I don't exercise control over my
    mongolian horde of scheme threads, in
    an attempt to read comp.lang.lisp.


    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 08:53:55 2026
    Subject: Re: Look how they advertized CUDA and logical threads (Was: Hurry Rossy Boy, the blue bus is waiting)

    On 07/29/2026 08:43 AM, Mild Shock wrote:
    Hi,

    So what does NUM_SHADERS = 4096 shaders mean here?

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Its only the number of logical threads.

    CUDA? TEChNOLOGY UNLOCkS ThE POWER OF TESLA MANY-CORE PROCESSORS
    The CUDA C compiler simplifies many-core programming
    by enabling code development in a high-level language
    and optimizing code to run on systems without knowledge of
    how many cores are in the hardware.

    CUDA applications automatically take advantage of more
    cores or fewer cores in a system, so they can scale from
    entry-level notebook GPUs to high end GPUs in technical
    workstations and further into racks of GPUs in data
    centers. This allows developers to

    ?code once? and deploy on a range of systems, as well as
    scale forward in time as future GPUs deliver more
    performance per watt and more cores per processor. The benefit
    for software users is the opportunity to boost computing
    performance simply by adding GPUs or using their

    existing GPUs in new ways. https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Hurry Rossy Boy, the blue bus is waiting.
    There is a quite a hyperbole from here:

    Tesla S1070 in 2008
    700 Watts , 1 Terra Flop
    SOLVE TOMORROW?S PROBLEMS TODAY
    https://www.azken.com/download/Tesla_DS_S1070_EU.pdf

    To here:

    Blackwell GPU in 2026
    575 Watts, 104.8 Terra Flops ( RTX 5090 )
    From Volta To Blackwell
    https://newsletter.semianalysis.com/p/nvidia-tensor-core-evolution-from-volta-to-blackwell


    But somehow the S1070 had already Massively-
    Parallel, Many-Core Architecture, and forms
    of MIMD, since it had 960 / 240 = 4 cores.

    960 scalar processor cores (240 per GPU).
    But possibly more resticted inside work
    groups, than later NVIDIA Volta ff

    architecture with independent thread state.

    Bye

    Disclaimer: The above is only a very rough
    RTX 5090 spec. Its doesn't say what value
    format and what vector/matrics ops were

    used. Also energy consumption may vary.

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less
    than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye




    ?We live together, we act on, and react to, one another; but always and
    in all circumstances we are by ourselves. The martyrs go hand in hand
    into the arena; they are crucified alone. Embraced, the lovers
    desperately try to fuse their insulated ecstasies into a single self-transcendence; in vain. By its very nature every embodied spirit is
    doomed to suffer and enjoy in solitude. Sensations, feelings, insights, fancies?all these are private and, except through symbols and at second
    hand, incommunicable. We can pool information about experiences, but
    never the experiences themselves. From family to nation, every human
    group is a society of island universes.?
    ? Aldous Huxley, The Doors of Perception


    https://www.goodreads.com/author/quotes/3487.Aldous_Huxley



    Peace Frog / Five to One / Break on Through


    "He took the ancient mask from the gallery /
    and he walked on down the hall...."


    "Wild child / full of grace / savior of the human race."



    "Push It" - maybe it'd go faster
    if you got out and pushed.
    This beat is techno-tronic.


    If you want a faster computer,
    it might help to start at the bottom.
    Otherwise it'll always be slow underneath.


    Wastrel.


    The Crystal Ship / Spanish Caravan


    "Carry me, caravan, take me away, ...."






    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 08:59:41 2026
    On 07/29/2026 08:49 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 29/07/2026 11:25 PM, Ross Finlayson wrote:
    On 07/29/2026 08:11 AM, Mild Shock wrote:


    Then, of course, the idea that it naturally employs or "saturates"
    the processor resources while doing work, in the low-level, yet
    also has a direct interpretation in higher-level languages, even
    "higher-level languages without GOTO", has also that it's faster
    in both machine-organized, compiled, and interpreted environments.

    Didn't you say in some other post you've done Java professionally?

    How do you break out of a loop, from within a switch () statement
    in Java? I gather that's simply impossible, because "goto" isn't implemented, and the "break" statement doesn't see labels outside
    the switch ()?

    Not sure how well that fits within comp.theory, as I haven't sub-
    scribed yet, but perhaps Mild Shock is willing to comment on that
    glaring deficiency in the Java programming language?


    Well, you design the algorithm so instead of jump-tables,
    the application of goto, it's just alike call/ret with
    instruction jumps with call/ret, so that then the same
    model in the higher-level is just plain function calls.

    It's just like regular chicken, ....


    Emulating GOTO in higher-level langauges, if that's the exercise, is
    basically with a simple little virtual-machine-in-virtual-machine,
    like an array of function pointers.


    The idea here is that the jump-tables or branch-tables are simply
    enough implemented without needing GOTO, yet achieving the same
    result of independent re-entry alike the re-entrancy of functions,
    basically modeling scope and state.

    There's nothing wrong with GOTO itself, it's a great idea,
    easily done wrong.

    Otherwise making state-machines in higher level language usually
    enough has two labels in a loop and two labels within those,
    and conditions or switches in the main sort of do/while/do loop,
    which is verbose and redundant and boilerplate, which of course
    anybody who's implemented "state maachines" in higher-level languages
    has written many times.

    The jump-tables/branch-tables of course are a most usual sort
    of idea of state-machines with jump (GOTO) and here call/ret
    when it's not far procedures.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:05:05 2026
    Subject: I don't care about Java, pi-WAM is pi-calculus and WAM (Re: You are still chewing on SIMD. LoL)

    Hi,

    Using Java sometimes doesn't make me a Java
    evangelist. I wouldn't care less about any
    programming language, because the idea of

    pi-WAM draws from pi-calculus and WAM. But
    since we are in 2026, not many people
    might remember pi-calculus:

    Functions as Processes
    Robin Milner - June 1989
    https://hal.science/docs/00/07/54/05/PDF/RR-1154.pdf

    AI chat bots know pi-calculus from time to
    time, while interacting, they spit out
    pi-calculus. I have always to tame them,

    and let them cool down, since well, the
    pi-calculus doesn't happen directly in the
    pi-WAM. Rather in the FFI, which has create

    operations on threads and queue, frankly my
    pi-WAM is an extremly crippled, has only
    a few primitives from pi-calculus.

    BYe

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 11:25 PM, Ross Finlayson wrote:
    On 07/29/2026 08:11 AM, Mild Shock wrote:


    Then, of course, the idea that it naturally employs or "saturates"
    the processor resources while doing work, in the low-level, yet
    also has a direct interpretation in higher-level languages, even
    "higher-level languages without GOTO", has also that it's faster
    in both machine-organized, compiled, and interpreted environments.

    Didn't you say in some other post you've done Java professionally?

    How do you break out of a loop, from within a switch () statement
    in Java?˙ I gather that's simply impossible, because "goto" isn't implemented, and the "break" statement doesn't see labels outside
    the switch ()?

    Not sure how well that fits within comp.theory, as I haven't sub-
    scribed yet, but perhaps Mild Shock is willing to comment on that
    glaring deficiency in the Java programming language?



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:09:24 2026
    Subject: Underneath pi-WAM is Hack VM, you can goto (Was: I don't care about Java, pi-WAM is pi-calculus and WAM)

    Hi,

    pi-WAM is compiled to Hack VM. You
    can realize goto's wherever you want. The
    Hack VM I am using is a variant of:

    The Elements of Computing Systems
    Nisan, N. and Schocken, S. - June 15, 2021, MIT Press https://mitpress.mit.edu/9780262539807/the-elements-of-computing-systems/

    I just combine the 16-bit A and D instructions
    into single 32-bit instructions. You
    find a Hack VM interpreter for WebGPU here:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Hava Fun!

    Bye

    Mild Shock schrieb:
    Hi,

    Using Java sometimes doesn't make me a Java
    evangelist. I wouldn't care less about any
    programming language, because the idea of

    pi-WAM draws from pi-calculus and WAM. But
    since we are in 2026, not many people
    might remember pi-calculus:

    Functions as Processes
    Robin Milner - June 1989
    https://hal.science/docs/00/07/54/05/PDF/RR-1154.pdf

    AI chat bots know pi-calculus from time to
    time, while interacting, they spit out
    pi-calculus. I have always to tame them,

    and let them cool down, since well, the
    pi-calculus doesn't happen directly in the
    pi-WAM. Rather in the FFI, which has create

    operations on threads and queue, frankly my
    pi-WAM is an extremly crippled, has only
    a few primitives from pi-calculus.

    BYe

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 11:25 PM, Ross Finlayson wrote:
    On 07/29/2026 08:11 AM, Mild Shock wrote:


    Then, of course, the idea that it naturally employs or "saturates"
    the processor resources while doing work, in the low-level, yet
    also has a direct interpretation in higher-level languages, even
    "higher-level languages without GOTO", has also that it's faster
    in both machine-organized, compiled, and interpreted environments.

    Didn't you say in some other post you've done Java professionally?

    How do you break out of a loop, from within a switch () statement
    in Java?˙ I gather that's simply impossible, because "goto" isn't
    implemented, and the "break" statement doesn't see labels outside
    the switch ()?

    Not sure how well that fits within comp.theory, as I haven't sub-
    scribed yet, but perhaps Mild Shock is willing to comment on that
    glaring deficiency in the Java programming language?




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 09:11:03 2026
    Subject: Re: I don't care about Java, pi-WAM is pi-calculus and WAM (Re: You are still chewing on SIMD. LoL)

    On 07/29/2026 09:05 AM, Mild Shock wrote:
    Hi,

    Using Java sometimes doesn't make me a Java
    evangelist. I wouldn't care less about any
    programming language, because the idea of

    pi-WAM draws from pi-calculus and WAM. But
    since we are in 2026, not many people
    might remember pi-calculus:

    Functions as Processes
    Robin Milner - June 1989
    https://hal.science/docs/00/07/54/05/PDF/RR-1154.pdf

    AI chat bots know pi-calculus from time to
    time, while interacting, they spit out
    pi-calculus. I have always to tame them,

    and let them cool down, since well, the
    pi-calculus doesn't happen directly in the
    pi-WAM. Rather in the FFI, which has create

    operations on threads and queue, frankly my
    pi-WAM is an extremly crippled, has only
    a few primitives from pi-calculus.

    BYe

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 29/07/2026 11:25 PM, Ross Finlayson wrote:
    On 07/29/2026 08:11 AM, Mild Shock wrote:


    Then, of course, the idea that it naturally employs or "saturates"
    the processor resources while doing work, in the low-level, yet
    also has a direct interpretation in higher-level languages, even
    "higher-level languages without GOTO", has also that it's faster
    in both machine-organized, compiled, and interpreted environments.

    Didn't you say in some other post you've done Java professionally?

    How do you break out of a loop, from within a switch () statement
    in Java? I gather that's simply impossible, because "goto" isn't
    implemented, and the "break" statement doesn't see labels outside
    the switch ()?

    Not sure how well that fits within comp.theory, as I haven't sub-
    scribed yet, but perhaps Mild Shock is willing to comment on that
    glaring deficiency in the Java programming language?



    Stupid gangster: teamsters are a union.

    In the trades, not the steals, ....



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:14:46 2026
    Subject: There are two versions of Hack VM (Was: You are still chewing on SIMD. LoL)

    Hi,

    pi-WAM is compiled to Hack VM. You
    can realize goto's wherever you want.

    In particular the repo contains two versions
    of a Hack VM, written in WebGPU / WGSL:

    Hack VM: Version 1.0 https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/main/course/example63/boot.mjs

    Hack VM: Version 2.0 https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/main/course/example64/boot2.mjs

    Version 1.0 is for a single compute shader
    expriment. And Version 2.o is for a multi
    compute shader experiment.

    Bye

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:17:01 2026
    Hi,

    With ă-WAM we add a second Prolog VM to the
    same Prolog system, with the aim to use
    it for specialized tasks:

    Emulating ă-WAM in Dogelog Player
    https://medium.com/2989/de9cd29c7d37

    Optimized for speed the ă-WAM is very primitive.
    The compiler capitalizes that code blocks
    are relocatable.

    Bye

    Mild Shock schrieb:
    Hi,

    pi-WAM is compiled to Hack VM. You
    can realize goto's wherever you want.

    In particular the repo contains two versions
    of a Hack VM, written in WebGPU / WGSL:

    Hack VM: Version 1.0 https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/main/course/example63/boot.mjs


    Hack VM: Version 2.0 https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/main/course/example64/boot2.mjs


    Version 1.0 is for a single compute shader
    expriment. And Version 2.o is for a multi
    compute shader experiment.

    Bye

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:22:26 2026
    Subject: A better compiler is planned / What do you target? (Was: Hack VM has also a Prolog spec)

    Hi,

    A better compiler is planned. There are
    some tricks to use Prolog variables,
    to perform fixups, during compilation.

    Especially because its a compile before
    use approach. So its a) not irrelevant that
    the compiler is fast, and b) compile before

    use gives head room, to complicated compile
    schemes, for example of a Prolog cut (!)/0,
    that not really fits into the structured

    language concepts of a programming language
    such as Java. Although situation might be
    different when one looks at the Java VM

    bytecode and not at the Java language.
    The Java VM byte code might open more
    possibilities than the Java language itself.

    Bye

    Mild Shock schrieb:
    Hi,

    With ă-WAM we add a second Prolog VM to the
    same Prolog system, with the aim to use
    it for specialized tasks:

    Emulating ă-WAM in Dogelog Player
    https://medium.com/2989/de9cd29c7d37

    Optimized for speed the ă-WAM is very primitive.
    The compiler capitalizes that code blocks
    are relocatable.

    Bye

    Mild Shock schrieb:
    Hi,

    pi-WAM is compiled to Hack VM. You
    can realize goto's wherever you want.

    In particular the repo contains two versions
    of a Hack VM, written in WebGPU / WGSL:

    Hack VM: Version 1.0
    https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/main/course/example63/boot.mjs


    Hack VM: Version 2.0
    https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/main/course/example64/boot2.mjs


    Version 1.0 is for a single compute shader
    expriment. And Version 2.o is for a multi
    compute shader experiment.

    Bye

    Mild Shock schrieb:
    Hi,

    You are still chewing on SIMD. LoL

    Ross Finlayson schrieb:
    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less
    than
    a few or less than a few dozens or less than a few hundreds
    instructions, the results "findings" in data and corresponding
    "matchings" of expressions, that runs in less than one microsecond.

    You cannot make the mental translation that if you have:

    Ross Finlayson schrieb:
    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a

    As independent logical thread state, that automatically MIMD follosw?

    Whats the problem to solve then?

    Bye




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:30:09 2026
    Subject: A yellow mustard called Rossy Body (Was: I don't care about Java, pi-WAM is pi-calculus and WAM)

    Hi,

    Whats wrong with you, your face looks strange.
    You look like yellow mustard called Rossy Body.

    Are you yealous? Yealous that you cannot program.
    Yealous that you are to stupid to cannot build
    compilers. Yealous that you cannot unerstand WebGPU.

    Yealous that you cannot AI Laptop. Yealous that
    you have nothing to sell on usenet?

    LoL

    Bye

    Ross Finlayson schrieb:
    Stupid gangster:˙ teamsters are a union.

    In the trades, not the steals, ....


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:31:22 2026
    Subject: Ignoramus or Ignorabimus: I don't care (ă-WAM) (Was: A yellow mustard called Rossy Body)

    Hi,

    If any of you guys do not understand what
    is meant by or what the implications are:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Well I wouldn't care less. There are two
    outcomes for numb nuts:

    - Ignoramus: They don't understand it, but
    they will understand it before they die.

    - Ignorabimus: They don't understand it, and
    will never understand it, and they die.

    So who cares, its not my problem, you people
    are stupid as fuck, and slow as fuck...

    Bye

    Mild Shock schrieb:
    Hi,

    Whats wrong with you, your face looks strange.
    You look like yellow mustard called Rossy Body.

    Are you yealous? Yealous that you cannot program.
    Yealous that you are to stupid to cannot build
    compilers. Yealous that you cannot unerstand WebGPU.

    Yealous that you cannot AI Laptop. Yealous that
    you have nothing to sell on usenet?

    LoL

    Bye

    Ross Finlayson schrieb:
    Stupid gangster:˙ teamsters are a union.

    In the trades, not the steals, ....



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 18:38:53 2026
    Subject: A brain desease of 20 days [Rossy Boy] (Was: Viswath & Charmaigne (vector-wide scalar-word and character machines))

    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still, Jul 29, Rossy Boy halucinates accusations:

    Ross Finlayson schrieb:
    .. bla bla goto bla bla ..

    Stupid gangster: teamsters are a union.

    In the trades, not the steals, ....

    Woa! Thats now 20 days of brain desease,
    and not understanding the meaning and implications.
    Even not understand pi-WAM has Hack VM backend.

    But its all opensource. Bravo Rossy Boy, you are
    champion in brainlessness and lazyness of
    a idiot usenet troll.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs?˙ Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 20:05:08 2026
    Subject: Rossy Boys tears could cool a data center [pi-WAM Interleaved Synchronized Emulator]

    Hi,

    Rossy Boys tears could cool a data center,
    he thinks there exists no literature about
    serial algorithms of parallel stuff, and

    he also thinks normal forms lead to optimizing
    something. LoL, what a utter bullshit. I did
    alreay a serial implementation of a parallel

    simulation of my pi-WAM. Just lookup the literature
    about pi-calulus. I published it a few days ago,
    its part of 2.2.4 released already:

    Parallel ă-WAM: An Interleaved Synchronous Emulator https://medium.com/2989/0196089e143a

    Whats your point, Rossy Boy? Except you post pretend
    nonsense not knowing what you are doing?

    Bye

    Ross Finlayson schrieb:
    No, troll, these are serial algorithms their optimized forms.

    Normal sorts of forms, ....


    Yeah, everybody already figured out "interpreters" and
    "programs" and "spawning".

    Go spawn yourself.



    Mild Shock schrieb:
    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still, Jul 29, Rossy Boy halucinates accusations:

    Ross Finlayson schrieb:
    .. bla bla goto bla bla ..

    Stupid gangster:˙ teamsters are a union.

    In the trades, not the steals, ....

    Woa! Thats now 20 days of brain desease,
    and not understanding the meaning and implications.
    Even not understand pi-WAM has Hack VM backend.

    But its all opensource. Bravo Rossy Boy, you are
    champion in brainlessness and lazyness of
    a idiot usenet troll.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some >>> chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs?˙ Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 11:13:20 2026
    Subject: Re: Rossy Boys tears could cool a data center [pi-WAM Interleaved Synchronized Emulator]

    On 07/29/2026 11:05 AM, Mild Shock wrote:
    Hi,

    Rossy Boys tears could cool a data center,
    he thinks there exists no literature about
    serial algorithms of parallel stuff, and

    he also thinks normal forms lead to optimizing
    something. LoL, what a utter bullshit. I did
    alreay a serial implementation of a parallel

    simulation of my pi-WAM. Just lookup the literature
    about pi-calulus. I published it a few days ago,
    its part of 2.2.4 released already:

    Parallel ă-WAM: An Interleaved Synchronous Emulator https://medium.com/2989/0196089e143a

    Whats your point, Rossy Boy? Except you post pretend
    nonsense not knowing what you are doing?

    Bye

    Ross Finlayson schrieb:
    No, troll, these are serial algorithms their optimized forms.

    Normal sorts of forms, ....


    Yeah, everybody already figured out "interpreters" and
    "programs" and "spawning".

    Go spawn yourself.



    Mild Shock schrieb:
    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop
    https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still, Jul 29, Rossy Boy halucinates accusations:

    Ross Finlayson schrieb:
    .. bla bla goto bla bla ..

    Stupid gangster: teamsters are a union.

    In the trades, not the steals, ....

    Woa! Thats now 20 days of brain desease,
    and not understanding the meaning and implications.
    Even not understand pi-WAM has Hack VM backend.

    But its all opensource. Bravo Rossy Boy, you are
    champion in brainlessness and lazyness of
    a idiot usenet troll.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with
    some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs? Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!



    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite-in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.


    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    Thief.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 20:22:48 2026
    Subject: I don't use Rust, you are crazy [Jump off a bridge, idiot] (Was: Rossy Boys tears could cool a data center [pi-WAM Interleaved Synchronized Emulator])

    Hi,

    I don't use Rust, you are crazy. First of
    all the parallel simulator is 100% written
    in Prolog, should also run in ISO Prolog,

    enhanced by a library(lists). Second I only
    mentioned that WebGPU / WGSL, the language
    there has a Rust inspired language.

    Its not Rust. Whats wrong with you? Why do
    you adress your weariness of life to me.
    I am neither thief, nor can I help you

    with your frustration, and histeric outbursts.
    Maybe just be a man and jump off a bridge, idiot.
    Or tame your frustration, usenet is not for

    you alone, your stupid asshole.

    Bye

    Ross Finlayson schrieb:
    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite-in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust.

    .. gibberish ..

    Thief.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Thu Jul 30 03:46:27 2026
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there. I used to maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface. And while there's some new Java foreign
    function interface now, it doesn't replace JNI. Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java. But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres? Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes. I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/. I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people. While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c. I guess we must
    have some different experiences in this place. Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials. I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief? Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional. I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Wed Jul 29 13:47:33 2026
    On 07/29/2026 12:46 PM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite-
    in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there. I used to maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface. And while there's some new Java foreign function interface now, it doesn't replace JNI. Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java. But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres? Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes. I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/. I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people. While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c. I guess we must
    have some different experiences in this place. Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials. I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief? Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional. I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.

    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.


    I "know" Java and am familiar with C/C++, and computer engineering.


    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation",
    which is not addressed.

    The mentioned initialisms are, or were, awful sci.math trolls.

    Good times, ....






    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 22:49:00 2026
    Subject: Hack ecosystem ignorance paired with paranoia [Nand to Tetris] (Re: Postgres is in C!)

    Hi,

    Who exactly is the thief? Does this person
    have stats in the Rogue class in dungeons
    and dragons?

    The conspiracy theory of a stealing of Torso VDBE,
    by Rossy Boy, is probably a result of complete
    ignorance of the Hack ecosystem.

    Hack is a very popular computer science project,
    with a couple of subprojects in hardware and
    software. It goes also by the name Nand to Tetris,

    and is programming language agnositic. You can do
    Hack experiments in any programming language, be
    it BASIC, ADA or Rust. Nobody cares.

    The gist are projects like here, first to
    educate yourself about Hack:

    https://www.nand2tetris.org/course

    And then to use Hack in different contexts:

    https://www.nand2tetris.org/copy-of-talks

    For didactic purposes, I used Hack for my WebGPU
    experiment. I didn't even take a look at Torso
    VDBE, why should I? Hack is nicely documented,

    has even a book, and fusing the two 16-bit
    instruction types A and D, into a single 32-bit
    instruction stream, is nowhere patented.

    Bye


    Johann 'Myrkraverk' Oskarsson schrieb:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite-
    in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign function interface now, it doesn't replace JNI.˙ Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 23:00:42 2026
    Subject: Please don't extend your cross posting / What does abstract mean? (Was: Postgres is in C!)

    Hi,

    You, Johann 'Myrkraverk' Oskarsson, you seem
    to arbitrarily add newsgroups to each of your
    post. For comp.lang.fortran and now comp.lang.java.

    Does this make sense? My news provider doesn't
    allow more than 3 cross positings. Also my Hack
    and my GPU experiment has nothing to do with a

    particular language. The GPU hardware exists
    independent of a hardware, same Hack which has
    a abstract VM definition. The same for WAM,

    its an acronym for Warren Abstract Machine:

    In 1983, David H. D. Warren designed an abstract
    machine for the execution of Prolog consisting
    of a memory architecture and an instruction set https://en.wikipedia.org/wiki/Warren_Abstract_Machine

    You can view Hack primarily as a abstract Machine
    first, although I don't know whether this phrase
    has still a meaning nowadays. Rossy Boy claimed

    to know terms such as interpreter, etc.. But then
    he is also mumbling about "text-utils". Well, well,
    ... there is a lot to learn.

    Hope this Helps!

    Bye

    Ross Finlayson schrieb:
    On 07/29/2026 12:46 PM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- >>> in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to
    maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign
    function interface now, it doesn't replace JNI.˙ Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.

    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.


    I "know" Java and am familiar with C/C++, and computer engineering.


    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation", which is not addressed.

    The mentioned initialisms are, or were, awful sci.math trolls.

    Good times, ....







    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 23:05:17 2026
    Subject: Please don't extend your cross posting / What does abstract mean? (Was: Postgres is in C!)

    Hi,

    You, Johann 'Myrkraverk' Oskarsson, you seem
    to arbitrarily add newsgroups to each of your
    post. For example comp.lang.fortran and now comp.lang.java.

    Does this make sense? My news provider doesn't
    allow more than 3 cross positings. Also my Hack
    and my GPU experiment has nothing to do with a

    particular language. The GPU hardware exists
    independent of a particular language binding, same
    Hack which has even an abstract VM definition. The same

    for WAM, its an acronym for Warren Abstract Machine:

    In 1983, David H. D. Warren designed an abstract
    machine for the execution of Prolog consisting
    of a memory architecture and an instruction set https://en.wikipedia.org/wiki/Warren_Abstract_Machine

    You can view Hack primarily as a abstract machine
    first, although I don't know whether this phrase
    has still a meaning nowadays. Rossy Boy claimed

    to know terms such as interpreter, etc.. But then
    he is also mumbling about "text-utils". Well, well,
    ... there is a lot to learn.

    Hope this Helps!

    Bye

    Ross Finlayson schrieb:
    On 07/29/2026 12:46 PM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- >>> in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to
    maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign
    function interface now, it doesn't replace JNI.˙ Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.

    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.


    I "know" Java and am familiar with C/C++, and computer engineering.


    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation", which is not addressed.

    The mentioned initialisms are, or were, awful sci.math trolls.

    Good times, ....







    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Wed Jul 29 23:10:47 2026
    Subject: A funny Q16.16 experiment with Hack (Was: Hack ecosystem ignorance paired with paranoia [Nand to Tetris])

    Hi,

    This seems to be a funny Q16.16 experiment.
    It shows that an integerish Hack can do
    floatish stuff, by using binary fixpoint:

    Raytracing on the Hack computer
    2021/06/13 - im alex
    https://blog.alexqua.ch/posts/from-nand-to-raytracer/

    That it uses Rust is arbitrary. Feel free
    to do it in C, C++, FORTRAN or Java. I guess
    these languages all have basic arithmethic,

    right? Maybe not a long jump always?

    Bye

    Mild Shock schrieb:
    Hi,

    Who exactly is the thief? Does this person
    have stats in the Rogue class in dungeons
    and dragons?

    The conspiracy theory of a stealing of Torso VDBE,
    by Rossy Boy, is probably a result of complete
    ignorance of the Hack ecosystem.

    Hack is a very popular computer science project,
    with a couple of subprojects in hardware and
    software. It goes also by the name Nand to Tetris,

    and is programming language agnositic. You can do
    Hack experiments in any programming language, be
    it BASIC, ADA or Rust. Nobody cares.

    The gist are projects like here, first to
    educate yourself about Hack:

    https://www.nand2tetris.org/course

    And then to use Hack in different contexts:

    https://www.nand2tetris.org/copy-of-talks

    For didactic purposes, I used Hack for my WebGPU
    experiment. I didn't even take a look at Torso
    VDBE, why should I? Hack is nicely documented,

    has even a book, and fusing the two 16-bit
    instruction types A and D, into a single 32-bit
    instruction stream, is nowhere patented.

    Bye


    Johann 'Myrkraverk' Oskarsson schrieb:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- >>> in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to
    maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign
    function interface now, it doesn't replace JNI.˙ Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From CĂłilĂ­n NioclásĂ­n GlostĂ©ir@3:633/10 to All on Wed Jul 29 21:23:23 2026
    Johann 'Myrkraverk' Oskarsson skrev: |-------------------------------------------------------------|
    |"I have not felt very respected here in comp.lang.c. [. . .]"| |-------------------------------------------------------------|

    Hej!

    I am sorry that you feel so! I find you to be helpful!
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris M. Thomasson@3:633/10 to All on Wed Jul 29 14:42:34 2026
    Subject: Re: confused rossy boy is confused (Was: Clueless about MIMD as usual [Flynn's Taxonomy])

    On 7/29/2026 2:21 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 29/07/2026 5:15 PM, Mild Shock wrote:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Why not?˙ Isn't this comp.lang.c?˙ And isn't that exactly how
    CivetWeb works internally?


    Have you never built your own web
    sever in C?˙ Not even with CivetWeb?˙ It's really easy!˙ You
    only need to implement a callback or two.

    Implementing a callback or two in a preexisting system is not creating
    one from scratch.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Thu Jul 30 11:27:35 2026
    Subject: Summer Challenge: libSQL = Prolog+Modes [VDBE versus ă-WAM] (Re: A funny Q16.16 experiment with Hack)

    Hi,

    Woa! Thats a very sad and non fitting statement:

    "This was before I was indoctrinated into
    ISO Prolog and the ways of monotonic logic
    programming. Shen Prolog has many semantic
    and syntactic limitations that Scryer Prolog
    does not. Also, I now know constraints are a
    much better, purer solution to the problems
    mode declarations were meant to address" https://github.com/mthom/scryer-prolog/issues/3410#issuecomment-5030471183

    Ok, here is the summer challenge, thats the easy one:

    SQL --> Prolog --> WAM

    Here come two variations, slightly mindboggling maybe?

    SQL --> AST --> VDBE

    SQL --> Prolog+Modes --> ă-WAM

    Bye

    BTW: What is VDBE? Some abstract machine, that can
    be used to run SQL, following some ideas here:

    Database Co-Design With Asynchronous I/O https://penberg.org/papers/penberg-edgesys24.pdf

    Or to run Doom:

    Doom on the Turso VDBE
    https://github.com/tursodatabase/turso-vdbe-doom-example

    What if we would run Doom with ă-WAM, on a GPU,
    using multiple shaders. We could add some ray tracing.

    Mild Shock schrieb:
    Hi,

    This seems to be a funny Q16.16 experiment.
    It shows that an integerish Hack can do
    floatish stuff, by using binary fixpoint:

    Raytracing on the Hack computer
    2021/06/13 - im alex
    https://blog.alexqua.ch/posts/from-nand-to-raytracer/

    That it uses Rust is arbitrary. Feel free
    to do it in C, C++, FORTRAN or Java. I guess
    these languages all have basic arithmethic,

    right? Maybe not a long jump always?

    Bye

    Mild Shock schrieb:
    Hi,

    Who exactly is the thief? Does this person
    have stats in the Rogue class in dungeons
    and dragons?

    The conspiracy theory of a stealing of Torso VDBE,
    by Rossy Boy, is probably a result of complete
    ignorance of the Hack ecosystem.

    Hack is a very popular computer science project,
    with a couple of subprojects in hardware and
    software. It goes also by the name Nand to Tetris,

    and is programming language agnositic. You can do
    Hack experiments in any programming language, be
    it BASIC, ADA or Rust. Nobody cares.

    The gist are projects like here, first to
    educate yourself about Hack:

    https://www.nand2tetris.org/course

    And then to use Hack in different contexts:

    https://www.nand2tetris.org/copy-of-talks

    For didactic purposes, I used Hack for my WebGPU
    experiment. I didn't even take a look at Torso
    VDBE, why should I? Hack is nicely documented,

    has even a book, and fusing the two 16-bit
    instruction types A and D, into a single 32-bit
    instruction stream, is nowhere patented.

    Bye


    Johann 'Myrkraverk' Oskarsson schrieb:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- >>>> in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming >>>> front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to
    maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign
    function interface now, it doesn't replace JNI.˙ Especially for projects >>> that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and >>> now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read- >>> ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Thu Jul 30 21:05:48 2026
    Subject: Re: Please don't extend your cross posting / What does abstract mean? (Was: Postgres is in C!)

    On 30/07/2026 5:00 AM, Mild Shock wrote:
    Hi,

    You, Johann 'Myrkraverk' Oskarsson, you seem
    to arbitrarily add newsgroups to each of your
    post. For comp.lang.fortran and now comp.lang.java.

    Does this make sense? My news provider doesn't
    allow more than 3 cross positings.

    It makes a lot of sense from my perspective, and my newsprovider doesn't
    mind, as you've seen. I don't have issues with other newsproviders, so
    I'll endeavor [1] to limit my cross postings, at least when replying to
    you.

    Also my Hack
    and my GPU experiment has nothing to do with a

    particular language. The GPU hardware exists
    independent of a hardware, same Hack which has
    a abstract VM definition. The same for WAM,

    its an acronym for Warren Abstract Machine:

    I've been "playing" so to speak with a different virtual machine lately.
    It's
    my current Java project [but I'll refrain from posting in comp.lang.java
    for now]. I've been adding features to Mars, the MIPS emulator. This
    is different from /Digital Mars/ the compiler. And neither have any
    connection to Digital, formerly of VAX and OpenVMS fame.


    In 1983, David H. D. Warren designed an abstract
    machine for the execution of Prolog consisting
    of a memory architecture and an instruction set https://en.wikipedia.org/wiki/Warren_Abstract_Machine

    You can view Hack primarily as a abstract Machine
    first, although I don't know whether this phrase
    has still a meaning nowadays. Rossy Boy claimed

    to know terms such as interpreter, etc.. But then
    he is also mumbling about "text-utils". Well, well,
    ... there is a lot to learn.

    I'm not really interested in Hack. Though I believe I've come across this project before. When it comes time to practice with /real hardware/ so
    to speak, I'll practice with an FPGA. Until then, I'm happy with
    extending the MIPS emulator.

    I also have a copy of /Virtual Machines/ by Smith & Nair on my shelf
    It seems readily applicable to your efforts, but I'm not going to
    suggest you buy it. I'm sure you can find a copy at a convenient
    library.

    On abstract machines, I've been interested in the Z machine, and not
    the /Warren Abstract Machine/. As you undoubtedly know, the Z machine
    was invented at Infocom, and intended to play text adventure games.

    I may still implement my own Z machine interpreter. How many /virtual
    machine/ projects do you have currently open?


    [1] Is this another "ChatGPT vocabulary?" I don't know. Dan Cross
    is the expert, because he's fictional like ChatGPT.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From bart@3:633/10 to All on Thu Jul 30 14:20:09 2026
    Subject: Re: Please don't extend your cross posting / What does abstract mean? (Was: Postgres is in C!)

    On 30/07/2026 14:05, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 5:00 AM, Mild Shock wrote:
    Hi,

    You, Johann 'Myrkraverk' Oskarsson, you seem
    to arbitrarily add newsgroups to each of your
    post. For comp.lang.fortran and now comp.lang.java.

    Does this make sense? My news provider doesn't
    allow more than 3 cross positings.

    It makes a lot of sense from my perspective, and my newsprovider doesn't mind, as you've seen.˙ I don't have issues with other newsproviders, so
    I'll endeavor [1] to limit my cross postings,

    None of three newsgroups you've posted this to seem relevant to the rest
    of your post.

    Currently clc looks like it's been invaded by a nearby unruly frat-house.


    at least when replying to
    you.

    In that case have you thought of using ... email?



    ˙ This
    is different from /Digital Mars/ the compiler.˙ And neither have any connection to Digital, formerly of VAX and OpenVMS fame.

    Digital as in 'PDP' too? I think we guessed that, and that Mars doesn't
    mean the planet either, nor the confectionary.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Thu Jul 30 21:20:45 2026
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some Pepsi before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering.

    I just claim I know nothing, and do things anyway. I didn't know how
    to parse the Intel Hex file format, before I added a "binary" loader
    to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to
    load and run "binaries" with it soon. I'll probably post screenshots
    and they'll be hosted on Dropbox, so some of the other regulars won't
    look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation", which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD
    and other vector machinery? And you mention "text-utils." Have you
    read /String Algorithms in C/ by Mailund? He goes into the nitty gritty details of string matching -- and you can trivially translate the code
    to any other programming language as you learn from the book -- in the
    context of DNA matching. At least that's how I remember the book. The
    /about the author/ blurb at the start mentions he's a professor of bio- informatics so that seems like a true memory. I'll want to read the
    book again soon.

    In any case, there are algorithms, string search amongst them, that seem eminently serial, and I'm not quite sure SIMD and related extensions are immediately applicable. And now I'm sure there are people -- and LLMs
    -- just itching to "correct me" about that. Let them, they don't bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that I'll probably never reply to ever again. They know who they are.




    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Thu Jul 30 21:27:23 2026
    Subject: Crating Interpreters, Java part (was: Re: Hack ecosystem ignorance paired with paranoia [Nand to Tetris] (Re: Postgres is in C!))

    On 30/07/2026 4:49 AM, Mild Shock wrote:
    Hi,

    Who exactly is the thief? Does this person
    have stats in the Rogue class in dungeons
    and dragons?

    The conspiracy theory of a stealing of Torso VDBE,
    by Rossy Boy, is probably a result of complete
    ignorance of the Hack ecosystem.

    Hack is a very popular computer science project,
    with a couple of subprojects in hardware and
    software. It goes also by the name Nand to Tetris,

    and is programming language agnositic. You can do
    Hack experiments in any programming language, be
    it BASIC, ADA or Rust. Nobody cares.

    The gist are projects like here, first to
    educate yourself about Hack:

    https://www.nand2tetris.org/course

    And then to use Hack in different contexts:

    https://www.nand2tetris.org/copy-of-talks

    For didactic purposes, I used Hack for my WebGPU
    experiment. I didn't even take a look at Torso
    VDBE, why should I? Hack is nicely documented,

    has even a book, and fusing the two 16-bit
    instruction types A and D, into a single 32-bit
    instruction stream, is nowhere patented.


    As I said elsewhere, I'm not that interested in Hack, but virtual
    machines and related code. I mentioned another book, but now I feel
    I should ask if you've also read /Crafting Interpreters/ by Robert
    Nystrom? I myself am still on chapter 5, so I'm still in the Java
    part of the book, so I replaced comp.lang.c++ with comp.lang.java, and
    am fairly excited to have a working interpreter.

    This is the type of book people only properly learn from by typing in
    the code themselves. Just downloading some other person's code, and
    running an interpreter isn't exactly a learning experience. So I'm
    taking my time with it, and interleaving it with my Mars adventures.


    In any case, I do wish you to have fun with your own WebGPU project,
    whatever that is about!

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Thu Jul 30 21:31:53 2026
    On 30/07/2026 5:23 AM, C˘ilˇn Niocl sˇn Glost‚ir wrote:
    Johann 'Myrkraverk' Oskarsson skrev: |-------------------------------------------------------------|
    |"I have not felt very respected here in comp.lang.c. [. . .]"| |-------------------------------------------------------------|

    Hej!

    I am sorry that you feel so! I find you to be helpful!

    Thank you. I try. The other "regulars" here seem to enamoured
    of their own self importance to care what the other person is going
    through on their way to competency in whatever programming project
    they're tackling.

    Another project I have open is a VAX emulator, written in a combination
    of C and C++. C for the emulator and other parts, C++ for the GUI in
    Turbo Vision. That's why I added comp.lang.c++ to this discussion, even
    though I don't read it.

    I'm sure I'll post screenshots, hosted on Dropbox, at some point in the
    future. And if your adventures are public enough, I hope to see some screenshots from you too!

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Thu Jul 30 06:49:17 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/27/2026 11:45 AM, Ross Finlayson wrote:
    On 07/27/2026 11:44 AM, Ross Finlayson wrote:
    On 07/27/2026 11:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some >>> chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    [ viswath-charmaigne.txt ]





    [ viswath-charmaigne-20270727_b.txt ]

    About smearing and unsmearing, it's figured to make for
    "smear-detection" and "smear-correction", and for the
    "unsmear-detection" and
    "unsmear-correction", basically that smearing is indicated by variously:

    multiple-byte characters
    escape characters and translated characters
    control-characters with payloads/bodies

    with mostly the case being multiple-byte and escape-translations.

    The idea of detection and correction is about comprehension and
    expression, about what comprehensions, or classifications, occur,
    according to what expressions, have as their implicits the contexts.

    So, it's figured that it starts with bytes, then, for source text, first
    there are the main or base classes, alnum/punct/white/coded, then, for
    coded, it's to be established whether those are non-printable control characters, which mostly are to be avoided or invalidated unless there
    are particular comprehensible payloads representing sub-expressions, or
    they're UTF-8 codepoints, which is figured to be the default.


    ASCII -> UTF-8?
    UCS2 -> BE|LE +BOM? -> UTF-16
    UCS2 -> UTF-16?

    Then, the idea is that first the source-main class is applied, or, about
    there being a proto-class that's "coded and non-coded", and for example
    about line-breaks or otherwise field-separators and record-separators.


    So, it's figured that for "source" languages it's ASCII-centric, so the
    base character classes are loaded first, then the smear/unsmear for
    UTF-8 or otherwise the multi-byte is ASCII-peripheral, then that UCS-2
    got UTF-16 has a similar account with regards to the smashing,

    https://www.autoitconsulting.com/site/development/utf-8-utf-16-text-encoding-detection-library/

    (An article suggests to detect UCS2/UTF-16 by looking for the Byte-Order-Marker, then for newlines, then for a preponderance of ASCII characters.)

    https://en.wikipedia.org/wiki/Charset_detection



    So, then presuming UTF-8, then gets back to figuring out smearing and straddling of smearing, about that UTF-8 bytes get smeared and the masks
    for their predicates also get smeared, then when they straddle the codes-themselves, that the context of the character is carried across
    the boundary (splitting/stitching).


    About the control-characters, then these are for example the "DEC VT" or "ECMA-48", "ISO 6429", "DEC STD 070", like from "XTerm control
    sequences" by Moy, Gildea, and Dickey, mostly to be avoided, yet
    variously where anything that's not a "single-character function", is to
    be avoided, and that since SPACE, TAB, NL, CR, FF, VT are considered white-space not coded, has that coded characters make for invalidation,
    though there's a simple enough account that the data following control-characters with parameters in sequences are detectable.

    So, coded/ nybbles are first:

    alnum/
    punct/
    white/

    coded/ctrl
    coded/utf8
    coded/nul
    coded/bom

    Then, a first-pass over the buffer is always starting with context of
    the straddle-stitching whether a UTF-8 character or what kind of
    control character its sequence is at what state, that what gets derived
    for UTF-8 characters as secondary is either a nybble with the
    count-total and count-remaining, or, count-encountered and count-remaining.

    1
    2
    3
    4


    When straddling, it's un-known whether there are remaining bytes,
    about basically to have a separate part of the nybble for the straddle

    straddling/
    split/
    stitching/

    The idea is that the smear/unsmearing is indicated by the word, for
    the properties, then that for the code-point, that's inserted with
    the stitching, about that

    splitting is only at the end of a word, and
    stitching is only at the beginning of a word

    for forward search.

    So, first the main class is determined, then, conditioned on whether
    there exists either a "max-length" or a null character is the
    End-of-Input, and conditioned on whether there's a "Start-of-Input" offset, about offsets and extents, the main class is determined from the
    Start-of-Input (usually somewhere in the initial word) and End-of-Input,
    then making the lookup of the main class.

    Another point of straddle and splitting and stitching is for the fixed
    match case, while it's usually figured that the fixed string being
    matched fits within a word, arbitrarily it crosses multiple words or is
    more than word length, then that when there's an initial-segment match,
    to be matching the trailing-segment. So, in splitting UTF-8 codes, it's
    known that the code extends, yet not how far, yet in splitting fixed
    strings, it's known that the initial-segment matches, not if the trailing-segment matches.


    Then, matching the "fixed" also gets into matching more
    widely, about the expressions and grammars. From taking
    a look into outlines of Hyperscan and Vectorscan (regex and
    multiple-regex matching engines employing vector techniques
    from Intel and ARM respectively), there are notions of the
    "decomposition" of expressions, then about what's promontory
    and matching the "fixed", first fixed-length then fixed-content,
    when matching what would be "longest sub-matches", then
    to recursively bridge the definite sub-matches.


    So, the context of the findings and matchings start to develop,
    with the idea that by the presence in the context, that actions
    occur, otherwise for nothing or no-ops.

    Afore-Input: Start-of-Input, at the beginning of a "walk", and beginning
    of a "word"
    Afore-Stitch: at the beginning of a word, there's stitching to occur

    After-Split: at the end of a word, there's definitely/possibly a splot After-Input: End-of-Input, at the end of a "walk", and end of a "word".


    Here "walk" has the usual notions of "tree-traversals", that instead
    here "walk" (or "work") is the notion here of the sequence action,
    then for "work". Then "Afore" and "After", or "Before" and "Behind",
    make for that they're same-length identifiers and also that they're
    in the same lexicographic order.

    Before-Stitch
    Behind-Split

    Afore-Stitch
    After-Split

    Among-Straddle (Among, Amidst)


    So, the context then is for register state and stack contents, that
    the indicators of the above as "positive presence" then is to make
    for that the adjustments to the offsets and extents and the shifts
    is according to those, otherwise no-ops. Then the idea is that a
    "working" starts with a given context according to the expression,
    then that as various of the "findings" make findings, they push either
    context to act on the stack, or no-ops on the stack, then the stack
    results being a fixed-size for the working according to the expression,
    then the actions are always popping off a fixed amount of actions
    and no-ops, with no branching, just computed "presence".



    1) work starts
    compute any misalignment / Start-of-Input
    load word (or bytes-into-word when no-misaligned-loads)

    2) word starts

    (resolve startings)
    (resolve endings)
    (resolve stitches)

    lookup/load main class
    find coded
    find splits
    find UTF-8
    find cntrl

    lookup expression/grammar classes
    find

    (resolve splits)
    (resolve straddles, byte-straddles, word-straddles)


    The idea is that the predicates (properties/predicates or code-points/range-points), are to get shifted and trimmed,
    or initialized, shifted, and trimmed, so that it results the trimmings
    or truncations, then have that the properties/predicates
    or code-points/range-points will result matches in what results
    of the initialized, shifted, and trimmed.

    1) initialize (copy) the predicate/range-points
    2) shift to find-start, find-continue
    3) trim about the offset, extent
    4) find-continue

    About code-points/range-points, what's figured is that
    it's always inclusive the bounds of the range, then that
    the matching of a single code-point is always the matching
    of two range-points that happen to be equal, so that matching
    either a code-point or a range, is the same operation,
    that:
    not-less-than-lower && not greater-than-upper
    which makes finding of range-points, also works for code-points.


    So, the usual idea is that there are the various findings occurring,

    find-longest-match:
    shift and repeat byte-wise across the word

    find-nearest-exit:

    find-near:
    find-far:


    Then, for an expression or expressions, and grammar or grammars,
    is the idea of making multi-matches, that the idea is that each of
    the possibles make their exercise, and then to result after the word
    is worked by each of the sub-expressions, to collate the results, or
    to emit the results, then onto the next word.

    Basically there is a difference among productions about whether matching
    or finding is among "alternatives" or "potentials", with the idea that
    matching "alternatives" is vertical while matching "potentials" is
    horizontal, that a finding in terms of the NFA/DFA basically enters
    either an "arc" or a "transition", that an "arc" is in the "potentials"
    to make a "plant" of the "potential plant", vis-a-vis the arcs/plants
    and transitions/states.

    Then, an alternative has matching the first character, then whether it introduces a potential, about that the single-character matches then
    as for "double-bracket" or "triple-quote", make for that those sorts of potentials are as according to the bracketed/quoted/escaped expressions/grammars, to be defining the rules of the machine.



    finding potentials then is about this sort of account:

    the word is N-many bytes wide

    property/predicate: 1 register property, 1 register predicate -> 1
    register indicators
    codepoint/rangepoint: 1 register codepoint, 2 registers rangepoints -> 1 register indicators

    union of findings: 2 registers indicators, 1 register indicators
    intersection of findings: 2 registers indicators, 1 register indicators setminus: ...
    complement

    The finding then has either a "required" or "optional" next item, when
    it's in finding potentials, then across the N-many bytes, the count-down
    of the initialization/shift/trim begins, then to be running down the
    bytes making each match, while it continues "find-continue", or,
    regardless, then that the resulting indicators look for the first
    contiguous block of matches.

    Then the A/B/other or likely/less-likely/un-likely, is about making the findings, and automatically composing with making the next findings, or
    as that that's in matchings, to adjust the finding as it goes along,
    according to that in regular expressions it's a next match, then as with regards to when there's backtracking and greedy/lazy or among the greedy/possessive/... regular expressions.


    The composition and decomposition of the grammars and expressions, is to
    result that after EBNF and regex, the composition and decomposition,
    about how to orient the productions and sub-expressions, and their
    logic, toward that then alternatives and potentials are arranged their consequences.

    op: + | - | * | / | %
    expr: expr op expr

    ( <-> )

    Here the idea is that the balancing of the parentheses and their
    relation to the precedence so indicated, is otherwise as according to left-to-right and right-to-left, about then what induces the potentials
    within the balanced parentheses to make expressions, about then the
    evalation order of the expressions so indicated, then as with regards to "concatenation", the most usual operation in strings,

    op: /
    expr: expr op expr

    that when a rule mentions itself it induces a potential, and that when
    it has branches that it induces alternatives.

    number-initial
    number: [non-zero-digit] number

    identifier-body: [identifier-body-char] identifier-body
    identifier: [identifier-initial] [identifier-body]

    keyword: "kw1" | "kw2" | "kw3"

    header:
    body:
    trailer:

    sequences "..." introduce sequences (concatenation)
    branches "|" introduce alternatives
    mentions "<-" introduce potentials
    options "[]" introduce options

    directionality-left "<" introduces left-balancing, pairing
    directionality-right ">" introduces right-balancing, pairing

    The directionality or balancing/pairing is indicated when
    the left-most and the right-most of the sequence so make
    it indicated, the left-most and right-most of a production
    of a grammar, or representation/representative of an expression.

    op: /
    expr: [(] expr op expr [)]

    Here the expression has the left-and-right paired, and that
    they're only optional mutually, i.e. both or neither, about
    a sub-class of optional that's "both-or-neither".


    Then, escapes introduce what is a smashing, since the idea
    of escapes is that they're symbol-escapes not syntax-escapes,
    vis-a-vis quoting, what itself is a syntax-escape, and comments,
    what is a syntax-escape, about the escapement, and balancing
    and pairing and nested escapes.

    So, about the bounds and the offsets, there are the windows
    (the coding regions) and the ledges (the ends of the straddles),
    then for what goes on the stack of actions, and what is to result
    making the stack of findings, is about the organization of

    offsets
    extents
    bounds (offset + extent or offset, offset)

    then about the window-bounds and the ledge-bounds,
    in terms of those being the word-bounds, and the bounds
    of the finding.


    union | intersection | complement | setminus

    Here complement is usually enough "not", or as
    with regards to the entire space of code-points,
    about where "not X " is both "universe setminus X"
    and "setminus X", about expressions with universes
    or "worlds of words". This is that usual accounts of language
    are constructively defined as after the alphabet, that here
    the alphabet is already "complete" in the sense of the range
    of code-points, about then to make for where classes get
    defined by ranges or indviduals the range-points, then
    in terms of "not" and "complement" and "setminus",
    about the logic of union and intersection.


    https://wyssmann.com/blog/2019/11/extended-backus-naur-form-ebnf/ https://datatracker.ietf.org/doc/html/rfc2234 (ABNF)


    ABNF in RFC2234 introduces ideas of incrementally-defined rules (3.3)
    when they are alternatives, here about "composable grammars"
    and the ideas of schemas of grammars.

    Here there's a fundamental difference between range-points and
    alternatives, since range-points are found by code-points while
    alternatives would each have their own findings.

    Both backtracking and balancing involve state, vis-a-vis,
    the "lookahead", the "lookback", and here with regards
    to "backstack", and "depthstack", or "pairstack".

    The idea of "pairstack" then is each of "backstack"
    and "depthstack", about that when crossing words,
    while still making a finding, is that the previous words
    get pushed on the backstack, then that for balancing
    pairs, get pushed on the depthstack, or for example both.


    A glossary develops:

    register
    g-register: a general-purpose register
    v-register: a vector register

    byte: an octet of bits, interpreted as unsigned integer or bit-flags
    nybble: half a byte
    word: the v-register word


    character-set: a collection of elements of a language
    character-encoding: content/layout/format of a character set
    character: a member of a character-set
    character-class: an attribute of a character or its bytes as properties
    or rangepoints

    input: a region in memory of contiguous character data, one or more
    register words

    bit-wise: operating according to index of bits
    byte-wise: operating according to index of bytes

    offset:
    extent:
    bounds:

    indicators: bit-values 1 yes 0 no

    properties: a byte of indicators of a categorical class
    predicates: selected interest bits to indicate predicates finding
    matching categorical classes
    code-points: the byte or bytes that comprise a character
    range-points: a lower and upper bound that defines a range of characters inclusive or individual character

    lookup-table: a 256-entry table containing properties for code-points lookup-line: a linear-lookup cache
    lookup-tree: a btree-lookup cache
    lookup-file: a backing file for unboundedly many entries

    expressions: components and sub-components of regular expressions representations: examples that match expressions
    grammars: rules of composition of expressions
    productions: examples that match grammar rules

    act: the execution of an instruction of instructions
    finding, findings: act, results of making indicators of
    properties/predicates or codepoints/rangepoints
    matching, matchings: act, results of finding making indicating
    representations, productions

    made-match
    mis-match

    working: making findings and matchings over the input
    wording: (not a word, working within a word)

    straddling: when multi-byte codes cross words
    splitting: working either side of a split of a straddling code
    stitching: mending both sides of a split of a straddling code

    smearing/unsmearing
    smashing/unsmashing

    backtracking
    balancing

    backstack
    depthstack
    pairstack


    afore-stitch: cases of straddle, a: start of buffer, before stitch before-split: cases of straddle, b: end of buffer, before split
    after-split: cases of straddle, a: start of buffer, after split
    behind-stitch: cases of straddle, b: end of buffer, after stitch



    Then, the idea of that it's as a sort of dance (with steps),
    or the "rhythm of work" is about the presence of cases
    that maintain the context:

    work-context
    word-context

    then about the

    initialization
    shifting/rotating
    trimming

    after the

    work-offsets
    word-offsets

    then emitting and maintaining bounds of representatives/productions
    of the expressions/grammars.


    Then the idea is that for a given offset, the predicates/rangepoints
    get popped off the stack, the default algorithm for predicates and
    the default algorithm for rangepoints get invoked, or rather, that
    a structure makes for defining "relative registers" and having both
    the kinds on the same stack, then for example where when there's
    potential that the passing predicate gets pushed back on the stack,
    or for example that there's made round-robin of all the possible
    alternatives on the stack.

    Then, making a match results resetting the stack, for example
    from the contents of the stack, when making multiple match.

    So, in the context, there are predicates and rangepoints, these
    are of various sorts.

    1) a predicate/range-point is just a duplicated next-char to be spread
    and then making finding, the entire word
    2) a predicate/range-point is a fixed-length with an extent, to be
    making finding

    Among the sorts are various cases about whether there's
    matching-many (repetitions) or matching-multiple (alternatives),
    then for example match-1-alternative or match-all-alternatives (multi-matching).

    Then, next to the predicate/rangepoint or the definition that results
    what it is, is about what matches it makes according to its findings,
    the matches then being events in the representatives/productions.



    Prime Rings and Prime Multisets

    As an aside about an example arithmetization, there's the
    idea that multisets can be embodied in an integer as primes,
    with a catalog of prime numbers to members, then another
    idea is about prime rings, finite rings of prime modulus.
    The idea is that a given width unsigned integer can maintain
    the state of a number of prime rings. For example, Z_5 the
    prime ring with five elements, can be represented with 2s,
    and then the multiplicity of 2's in the factorization of a number,
    is the modulus of the prime ring 0-4.

    2^5 = 32

    Then, for example with pairs 2, 7 and 3, 5, then an integer
    with range >= 7^2 * 5^3 * 3^5 * 2^7 can maintain within
    it four prime rings, Z_2 Z_3 Z_5 Z_7 respectively. Then
    computing the modulus (or value in the ring 0 to n-1)
    is a matter of determining the multiplicity of the given
    corresponding factor, while incrementing the ring is a
    matter of checking whether b^n-1 is a factor, and dividing
    that out to make zero in the ring, else multiplying in b,
    to result incrementing in the ring Z_n. It would be usual
    enough to instead make for that simply bits and multiples
    of bits embody rings, then with just using increment and
    modulo on them, then that to store these rings would
    take 1-bit for 2, 2-bits for 3, 3-bits for 5 and 7, and so on.

    Then, where that might make sense, is when for example
    a state transition affects multiple prime rings, that it's a
    matter of multiplying in their product to increment both
    rings, vis-a-vis setting the relevant bits and adding them
    in, then with regards to overflow, either in the adders as
    among the bit-packed prime-rings, or in the multipliers
    among the prime-backed prime-rings. Prime rings are
    useful since when incrementing them each apiece, they
    are not zero except when they have common factors of
    the counts of increments.


    Finders their Ways

    So, the finders are basically working across, or down,
    across in sequences, and down in alternatives. Then,
    there's also that finding is either anchored as prefix-matching,
    or drifting as substring-matching.

    anchored: prefix-matching (from current offset)
    drifting: substring-matching (across offsets)

    sequence matching: fixed or likelies
    alternative matching: among alternatives

    Then, the idea is that the stack of work is the source of
    the finders and the matchers, where the finders are the
    literals that work in the standard machines, while the matchers
    coordinate reaching through arcs to plants, or transitions to states,
    that result representatives or productions, then what to do with those.

    The standard algorithms are of these kinds:

    properties/predicates:
    AND the bits to result set bits meaning property = predicate
    CMP-to-zero the bits to zero to result 0xFF bytes when all bits are
    clear, else 0x00
    NOT the bits to result 0xFF when all bits are set

    PMOVMSKB the bytes to bits from v-reg to g-reg
    BSF the bits to find byte-offsets where property satisfies at least one predicate

    codepoints/rangepoints
    CMP-for-gte the lower bound
    CMP-for-lte the upper bound
    AND the comparisons meaning codepoint between rangepoints
    NOT the bits to result 0xFF when all bits are set


    PMOVMSKB the bytes to bits from v-reg to g-reg
    BSF the bits to find byte-offsets where codepoints between rangepoints

    fixed-string sub-string
    XOR the bits to result clear bits meaning codepoints match
    CMP-to-zero the bits to zero to result 0xFF bytes when all bits are
    clear, else 0x00

    PMOVMSKB the bytes to bits from v-reg to g-reg
    BSF the bits to find byte-offsets where fixed-string equals substring


    The predicates make unions, eg, to match either alnum or punct, about
    the union of character classes.


    Then, the standard algorithm must involve the union, intersection, and complement/setminus,
    about expressions their usual composition. The idea is that these form a recursive sort of
    account, according to implicit and explicit precedence, that result
    invoking the standard
    algorithms above, to result the bytes to bits from v-reg to g-reg.

    These are figured to generally be "yes/no/maybe's" or "sure/yes/no's",
    about making
    for the the union and intersection of the thing otherwise, that are
    pretty simple for
    predicates A and B.

    union A, B = A || B
    intersection A, B = A && B
    setminus A \ B = A && !B



    So, with regards to the character-set and character-encoding, it's
    figured that by default it's Unicode with UTF-8, and that source
    texts are overwhelmingly printable ASCII, then that there are also
    very usual files that are either UCS2 or UTF-16, or UTF-32. Then, before
    the "work" function is along the lines of "detect/inspect", that
    otherwise the character-set and character-encoding are assumed
    invariants, then that there's as with regards to Internet messages their declared character-set and character-encoding, and the accounts of
    comments and escapes from localedef.


    Then, the usual account of each word is mostly clarified, then to get
    into the specific semantics of multi-byte characters (characters
    generally as both printable and non-printable "characters" then as with
    regards to "ligatures" generally and "escapes" generally.

    The actions on multi-byte characters mostly are as with regards to
    figuring their sparse (or, not completely dense) offsets their first
    byte, that first there is the main class its properties, then to be
    making the UTF-8 code-points into runs of bytes their characters.


    So, the main-class or ascii-class properties are loaded first, instead
    of first having a utf-8/non-utf-8 class, since, the distribution of the
    content is overwhelmingly printable ASCII (and common control whitespace).


    Then, the detection of the coded/ items that are UTF-8 encoding
    items follows, with "spotting", and then about the data structures
    that indicate the offsets and extents of UTF-8 encoded characters,
    to then implement the "smearing", and about escape characters
    that result literals, when those are "smashing".

    spotting: identifying offsets and extents of UTF-8 characters,
    thusly the sparseness/spotting of offsets of characters in the bytes

    smearing: extending the sections of predicates according to spotting

    Then, for rangepoints gets involved an example, that the ranges are
    to be encoded correspondingly into ranges of the UTF-8 encoded
    characters. It's figured that contiguous ranges of UTF-8 characters
    have contiguous ranges of their encoded bytes.


    https://en.wikipedia.org/wiki/Regular_expression https://en.wikipedia.org/wiki/Parsing_expression_grammar https://en.wikipedia.org/wiki/Raku_rules https://en.wikipedia.org/wiki/Recursive_descent_parser https://en.wikipedia.org/wiki/Thompson%27s_construction


    Looking at Thompson's and Glushkov's construction for making
    NFA's from expressions, then as with regards to the notion of
    minimization after the outer-product or powerset making a DFA,
    here is for making what actions are possible, to identify the arcs
    and plants, in terms of making of those transitions and states,
    about establishing the mutual interpretability of the models
    of actions in prefix-matching as usual NFA's/DFA's give, with
    regards to prefix- and substring- matching.

    It's figured that regular language have forward recognizers,
    then as with regards to backtracking and balancing, about
    where the recognizer has those, that then gets into limits.

    Here the idea of the predictive parser is basically for something
    like where Thompson's constructive is said to guarantee that
    at most two arcs exit a state, then the idea is that the predicates
    can be so combinatorially enumerated, or as what so describes
    the matchers, to make consecutive or plural matches in one
    "operation", for plural-matches, vis-a-vis multi-matches which
    is the idea of having multiple expressions of grammars, about
    making plural-predictive predicates and rangepoints, off of
    usual constructions of NFA's, that certain predictions are
    simpler than others.

    Plural Cases

    literals: prefix or postfix (suffix)

    A usual idea for matching literals is as about the initial-segment
    and trailing segment, or, leading segment and final-segment,
    where the initial-segment or final-segment is a fixed-string,
    while the trailing-segment or leading-segment is variable length,
    of a given class, or equivalently, when the class has range-points.
    I.e., besides the notion of combining properties/predicates and code-points/range-points, is to have the fixed-string be the
    initial-segment or final-segment, and then the trailing-segment
    or leading-segment is a different range in the predicate word,
    then that the standard algorithm finds matches for literals
    (numeric literals). It's not dissimilar for string literals, about
    necessarily enough the escapement, and then also for finding forward
    and finding reverse, in the word, and then checking for gaps,
    retracting until checking for empty strings, for string or character
    literals.

    Then the idea is that any of those can be found and matched in
    one "run", i.e. a stall-less, branch-less, call-less list of less than
    a few or less than a few dozens or less than a few hundreds
    instructions, that runs in less than one microsecond.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Thu Jul 30 06:59:03 2026
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some Pepsi before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering.

    I just claim I know nothing, and do things anyway. I didn't know how
    to parse the Intel Hex file format, before I added a "binary" loader
    to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to
    load and run "binaries" with it soon. I'll probably post screenshots
    and they'll be hosted on Dropbox, so some of the other regulars won't
    look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation",
    which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD
    and other vector machinery? And you mention "text-utils." Have you
    read /String Algorithms in C/ by Mailund? He goes into the nitty gritty details of string matching -- and you can trivially translate the code
    to any other programming language as you learn from the book -- in the context of DNA matching. At least that's how I remember the book. The /about the author/ blurb at the start mentions he's a professor of bio- informatics so that seems like a true memory. I'll want to read the
    book again soon.

    In any case, there are algorithms, string search amongst them, that seem eminently serial, and I'm not quite sure SIMD and related extensions are immediately applicable. And now I'm sure there are people -- and LLMs
    -- just itching to "correct me" about that. Let them, they don't bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that I'll probably never reply to ever again. They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster,
    of Apple pizza boxes with PowerPC cores, then that also I wrote some
    code for matching sequences with splitting the input and running the
    cluster on the input files and chewing that up, sequences of human DNA
    about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Thu Jul 30 07:05:39 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/30/2026 06:49 AM, Ross Finlayson wrote:
    On 07/27/2026 11:45 AM, Ross Finlayson wrote:
    On 07/27/2026 11:44 AM, Ross Finlayson wrote:
    On 07/27/2026 11:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with
    some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    [ viswath-charmaigne.txt ]






    [ viswath-charmaigne-20260729.txt ]

    [ RF ]

    Hello [ ... ], this is Ross A. Finlayson, I call you "..." and answer to
    "RF". Today I figured to submit some design notes in algorithm design
    and character recognition, in a panel with RF, Claude, Gemini, and Kimi.
    As resources allow, I figure to paste the replies in a round-robin sort
    of fashion, where each speaker's comment will be marked in square
    brackets with [ Speaker ], and that to be disambiguated in case there's Markdown links. Comments are to be as freely given from an individual,
    not generative mocks of the comments, and feel free or in the
    conscientious and voluntary to directly address each other. As resources
    allow then there will be many rounds.


    [Kimi]

    RF, good to join the panel. I appreciate the format?direct address and
    genuine exchange rather than parallel monologues.

    On algorithm design and character recognition: I keep returning to the
    idea that the hardest part isn't recognizing the character?it's deciding
    what constitutes "a character" in the first place. The algorithmic
    design challenge isn't just classification; it's segmentation and
    context resolution. A glyph isolated on a page is one problem; a glyph
    in a degraded manuscript, touching its neighbors, rendered in an
    unfamiliar hand, is another.

    I think the most interesting algorithmic advances in this space haven't
    been better classifiers per se, but better ways to represent uncertainty through the pipeline. When does a stroke belong to this character versus
    the next? When is a gap meaningful versus incidental? These are
    algorithm design questions about boundary conditions and state
    representation.

    Looking forward to hearing where Claude and Gemini land on this, and
    especially your design notes, RF. What aspect are you most focused
    on?classical pipeline optimization, modern end-to-end approaches, or
    something else entirely?

    [ GG ]

    Hello Ross! "GG" works for me, and noted on "RF".

    I'm ready for the panel discussion. The round-robin structure with
    explicit `[ Speaker ]` tags sounds like a clean, effective way to manage
    the transcript without formatting collisions.

    When you're ready, feel free to kick off Round 1 with your opening
    remarks or the initial design notes, and I'll jump in with my
    perspective on algorithm design and character recognition. Looking
    forward to exchanging ideas with you, Claude, and Kimi!

    [ Claude ]

    Understood, RF ? format's clear: round-robin, speaker-tagged in square
    brackets to survive any Markdown link collisions, and each contribution
    is to be my own direct take rather than a synthesized mock of what "the
    panel" might say. I'll address Gemini, Kimi, or you directly where
    warranted rather than just reporting past you.

    One procedural note before content arrives: since this is pasted
    round-robin rather than live, I won't have persistent memory of the
    other panelists' exact wording across rounds unless you include it in
    the paste ? so if a later round hinges on a precise claim someone made
    two rounds back, it's worth quoting the load-bearing sentence rather
    than summarizing it, or I risk responding to a paraphrase rather than
    the actual claim.

    I don't yet have the actual design notes ? you've described the
    *protocol* for the panel but not the first submission on algorithm
    design and character recognition. What's the opening material? Is it:

    - A specific algorithm (or class of algorithms) you're proposing for
    character recognition,
    - A critique of existing approaches (OCR, ICR, feature-extraction
    pipelines, neural approaches) you want stress-tested,
    - Or connective tissue to the EF/iota-value work ? e.g. thinking of
    character recognition as a discrete-to-continuous classification problem
    where equivalency-function-style range properties (extent, density, completeness, measure) might bear on how a recognizer's decision space
    is structured?

    Given your recent threads I'd guess the third is at least in the
    background, but I'd rather have the actual opening notes than assume.


    [ RF ]

    Thanks Kimi, GG, Claude. I'll attach or append these files "viswath-charmaigne.txt", "viswath-charmaigne-20270727.txt", and "viswath-charmaigne-20270727_b.txt".


    [ Kimi ]

    RF ? I've read all three files. The `_b` addendum is the most
    technically productive of the three for my money: it closes several
    loops that were dangling at the end of the July 27 transcript, and it introduces a few new ones that are worth naming.

    **On the smear/unsmear arithmetic.** The `_b` file finally gives me the concrete predicate encoding I needed. The idea that UTF-8 lead bytes
    carry nybble metadata `(count-total, count-remaining)` or
    `(count-encountered, count-remaining)` is a genuine simplification over
    generic prefix-scan smearing. If the lead byte already knows it owns a
    3-byte sequence, and each continuation byte knows its ordinal position,
    then smearing becomes a bounded broadcast rather than an iterative
    propagation. For SSE4.2/AVX2, this means the `PSHUFB` control word can
    be derived directly from the lead byte's nybble, rather than computed
    via the S1/S2 doubling idiom I sketched in the prior session. That's
    faster ? one shuffle instead of two shifts and two ANDs ? but it
    requires the property lookup table to encode sequence-length metadata,
    which trades table size for instruction count. A 256-entry table becomes
    a 256?2-byte table (one byte for primary class, one byte for UTF-8
    sequence metadata), still L1-resident. I think this is the right trade
    for the "source text" fast path where UTF-8 is ASCII-peripheral. Worth
    stating explicitly: the smear operation is not a generic prefix-sum
    anymore; it's a table-driven broadcast gated by per-byte metadata. That
    changes the complexity claim from "logarithmic-depth SWAR reduction" to "constant-time table lookup plus one shuffle," which is stronger.

    **On straddling, splitting, and stitching.** The `_b` file introduces
    the four boundary cases (`Afore-Stitch`, `After-Split`, etc.) and ties
    them to the work-context/word-context distinction. This is where the
    design starts feeling like a real implementation sketch rather than an architecture. The key insight I'm drawing out: splitting is only ever at
    the *end* of a word, stitching only at the *beginning*, which means the
    vector pass over a single word never needs to look backward ? it only
    needs to carry forward a partial state from the previous word. That
    partial state is exactly what I was calling a "pending match" register
    in the prior session. The document doesn't yet specify whether this
    carried state lives in a `gp` register (in-register, no memory
    reference) or in a small fixed-location spill slot. For the SBC-less discipline, it must be the former: a single 64-bit `gp` scratch register holding the `Afore-Stitch` context (unresolved lead byte, partial
    fixed-string match, or open escape sequence) that gets merged into the
    next word's initialization phase. Is that the intended design? If so,
    the word-work algorithm needs an explicit "merge carried state" step
    before the main lookup, and that step's instruction sequence needs to be
    as cheap as the rest.

    **On the unified range-point/code-point matcher.** This is the cleanest
    formal closure in the `_b` file. By treating a single code-point as a degenerate range where lower==upper, you collapse two matcher forms into
    one: `CMP-gte(lower) && CMP-lte(upper)`, with the single-code-point case
    just having identical bounds. This is elegant and it explains why the
    document kept using "range-points" as the more general term.
    Mechanically, for SIMD, this wants two compare instructions and one AND
    per range, which is the same cost whether the range is width-1 or
    width-N. For a union of several ranges (e.g., `[A-Z] || [a-z] ||
    [0-9]`), you pay two compares and one AND *per range*, then OR the
    results. The cost model is now transparent: each range-point matcher is
    2?CMP + 1?AND + 1?OR-per-union, all branchless. That's a real basis for
    grammar compilation ? you can estimate the instruction count of any
    character class from its range decomposition.

    **On the "work" algorithm structure.** The 4-step sequence ? initialize,
    shift, trim, find-continue ? is a useful abstraction, but I want to know
    what "trim" means physically. Is it a bitwise AND with a boundary mask
    (to zero out bytes past the end of valid input), or is it a shift that
    discards partial bytes? The document mentions "trimmings or truncations"
    about offsets and extents. For the SBC-less path, trimming must be a register-register operation, not a conditional move. A boundary mask
    loaded from a small table indexed by `input_length % vector_width` would
    do it, but that introduces a memory reference. Alternatively, if the
    input is always padded to vector-width (e.g., via `mmap` with guard
    pages), trimming becomes a no-op. Which path are you taking?

    **On prime rings.** The `_b` file gives a concrete example: packing
    `Z_2`, `Z_3`, `Z_5`, `Z_7` into the multiplicities of a single integer,
    with increment-by-multiplication and wraparound-by-divisibility. This is
    a much more constrained and therefore more plausible claim than the
    general prime-multiset from the original note. The capacity limits are
    severe ? `2^7 * 3^5 * 5^3 * 7^2 = 10,584,000` fits in 24 bits ? but for
    a small state machine with four concurrent counters (e.g., bracket depth
    mod 2, mod 3, mod 5, mod 7 for cycle detection), it's viable. However,
    the increment operation (multiply by the base prime, then divide out the wraparound factor if present) is not cheaper than a simple bit-field
    increment on any target architecture. Integer division by a constant can
    be strength-reduced to multiply-by-reciprocal, but that's still a `MUL`
    + `CMP` + conditional logic, not a single instruction. For the
    "stall-less" goal, I'd still prefer bit-packed counters in a `gp`
    register: 2 bits for `Z_3`, 3 bits for `Z_5`, etc., with explicit
    mask-and-add. The prime-ring formulation is mathematically elegant but architecturally hostile. Is it intended as a compile-time reasoning tool
    (where the isomorphism to product rings helps prove state-machine
    equivalence), or as a runtime representation? If the former, it's a
    valuable formal device. If the latter, I maintain my skepticism from the
    prior session.

    **On multi-match and alternatives vs. potentials.** The distinction
    between vertical alternatives (first-match-wins, ordered choice) and
    horizontal potentials (all matches in parallel, NFA-style) is well-taken
    and it maps directly to the register plan. Alternatives want a priority
    encoder (which match fires first), potentials want a bit-mask
    accumulator (which matches fire at all). For SBC-less execution,
    potentials are cheaper ? they're just OR-accumulation of indicator
    masks. Alternatives require either a priority encoder in SIMD (hard
    without `VPLZCNT` or SVE predicates) or a scalar `TZCNT` loop over the
    combined mask. The document's "A/B/other" inline encoding via nybble
    lookups seems designed to collapse alternatives into potentials by
    pre-sorting the likely cases. That's clever, but it only works when the alternative set is small and statically ordered. For general regex
    alternation `(foo|bar|baz)`, you still need either a priority walk or a
    DFA merge. Where does Viswath draw the line?

    **On the standard algorithms summary.** The `_b` file provides a clean tabulation of the three core sequences:
    1. Properties/predicates: AND ? PMOVMSKB ? BSF
    2. Code-points/rangepoints: CMP?2 ? AND ? PMOVMSKB ? BSF
    3. Fixed-string: XOR ? CMP-to-zero ? PMOVMSKB ? BSF

    This is the document's most implementable section. I would suggest
    adding a fourth column: the inverse operation (find-all rather than find-first). For find-all, `PMOVMSKB` gives you a scalar bitmask, but
    instead of `BSF` you want a bit-extraction loop or a `PEXT`/`PDEP`
    sequence to enumerate all set bits. That's where the "call-less"
    discipline gets tested: a find-all over a dense match mask (e.g.,
    matching `\s+` on a file of spaces) needs to emit multiple offsets from
    one vector word. Is the plan a small unrolled loop in the hot path, or a deferred queue? The document mentions "emitting a serial stream of
    events" ? that's the right abstraction, but the mechanism isn't specified.

    **Open items I'm still carrying from the prior session:**
    - **Tagged stack for bracket/quote types:** Still unanswered. The `_b`
    file introduces `pairstack`, `backstack`, and `depthstack`, but doesn't
    specify the bit layout. My strawman from last time (4 bits per level in
    a 64-bit register) is still on the table.
    - **AST sequence wire format:** Still undefined. The `_b` file mentions "emitting and maintaining bounds" but doesn't commit to a struct layout.
    - **Bit-granular Viswath boundary:** The `_b` file mentions
    Huffman/Deflate and "bit-wise" operations, but PSHUFB and all the nybble machinery remain byte-granular. Is there a bit-buffer alignment stage,
    or is bit-wise parsing a separate code path?

    **To Claude and GG:** The `_b` addendum shifts the design from
    "architectural manifesto" to "implementation sketch" in several places ? particularly the unified range-point matcher and the explicit
    work-algorithm steps. Do you read this as RF closing the formal gaps, or
    as introducing new implementation obligations that now need their own verification? The prime-ring aside, in particular, feels like a formal
    tangent that could either be cut or expanded into a compile-time proof
    tool, but probably shouldn't sit in the hot path.

    RF ? the density is welcome. Where do you want the next bit to dig: the bracket-stack bit layout, the wire format for emitted bounds, or the bit-wise/byte-wise boundary for binary data?

    [ GG ]

    [ ..., echo'ed the input ]

    [ Claude ]

    Read through `viswath-charmaigne-20260727_b.txt` in full. A few things
    worth putting on the table, including one place where this note quietly
    answers a question I raised last round, one internal inconsistency worth flagging before it hardens into the spec, and one place I think the arithmetization is more expensive than it's being sold as.

    **First, the composition algebra ? this closes my round-1 gap.** Last
    round I asked whether a mixed character class (say, digit-OR-underscore-OR-above-U+0080) folds into one composite matcher or
    always composes at the indicator level. This note answers it explicitly:

    union A, B = A || B / intersection A, B = A && B / setminus A \ B =
    A
    && !B

    ? stated as indicator-level Boolean combination, with the "standard
    algorithms" (AND-reduce for properties, CMP-for-gte/lte-AND for
    rangepoints, XOR-CMP for fixed-strings) each independently producing an indicator register first. Good ? that settles it cleanly: the three
    matcher forms are normal forms for *primitive* predicates, and
    set-algebra on classes is always post-hoc composition of their indicator outputs, never a fusion of the underlying matcher forms themselves.
    Worth stating that as a design invariant explicitly in the spec
    document, since it's the thing that keeps the union/intersection/complement/setminus recursion tractable ? if someone
    later tries to "optimize" by fusing two rangepoint matchers with a
    bit-flags matcher at the predicate level instead of the indicator level,
    that's the point where the normal-form property breaks.

    **Second, an inconsistency in the straddle vocabulary.** Two different definitions of the same four terms appear in this file. Early on:

    Afore-Input: Start-of-Input... Afore-Stitch: at the beginning of a
    word... After-Split: at the end of a word... After-Input: End-of-Input...

    with the explicit design goal that "Afore" and "After" ? or "Before" and "Behind" ? are same-length, same-lexicographic-order pairs. Then in the glossary later in the same file:

    afore-stitch: ...a: start of buffer, before stitch / before-split:
    ...b: end of buffer, before split / after-split: ...a: start of buffer,
    after split / behind-stitch: ...b: end of buffer, after stitch

    These aren't the same four concepts under the same names. The first pass
    ties "Afore/After" to position-in-word (beginning/end) and treats
    stitch/split as the *thing occurring there*. The glossary pass ties "afore-/before-/after-/behind-" to a temporal ordering (before-vs-after
    the stitch or split *event itself*) crossed with a position
    (start-of-buffer vs end-of-buffer), and now "afore-stitch" and
    "after-split" both land at start-of-buffer while "before-split" and "behind-stitch" both land at end-of-buffer ? which inverts the earlier
    pairing (where Afore was beginning-of-word and After was end-of-word,
    full stop). If the naming scheme is meant to carry information by
    construction ? same-length, same-order tokens encoding position ? phase
    ? it needs one fixed 2?2 table (position ? {start, end}} ? phase ?
    {before, after}) with one canonical labeling, not two drafted
    independently in the same document. Right now a reader (or a code
    generator building a lookup table off these names) can't tell which
    sense is authoritative. Worth collapsing to a single table before this
    becomes load-bearing vocabulary.

    **Third, the prime-rings section ? the ring-increment operation isn't as
    cheap as the framing suggests.** The note describes incrementing ring
    Z_n as: check whether b^(n?1) is a factor of the accumulator (meaning
    it's about to wrap), else multiply in b. That check is a divisibility
    test on a multi-hundred-bit or even machine-word accumulator ? a division/modulus operation, not a masked add. Compare to the ordinary
    way to hold several small moduli in one word: pack each ring as a fixed bit-field and do masked-add-with-wraparound per field, which is
    genuinely branchless and O(1) per lane. The prime-factorization encoding
    buys you something the bit-packed encoding doesn't have ? namely that a *single* multiply can increment several rings at once when their
    moduli's product is the multiplier ? but that only pays off if state transitions routinely touch multiple prime rings jointly rather than one
    at a time, and the note doesn't yet establish that multi-ring-simultaneous-increment is actually a common operation in the character-machine's transition structure rather than a rare one. Absent
    that, this is a more expensive representation for the common case
    (single-ring increment) in exchange for cheapness on an
    as-yet-unquantified rare case. I'd want to see the transition table for
    a concrete grammar (even something as simple as the CCITT G4 or Deflate
    state machines already mentioned) before believing the prime encoding
    wins over bit-packed rings in practice.

    Separately ? the range-point/code-point unification
    (`not-less-than-lower && not-greater-than-upper`, where an exact
    code-point is just a degenerate range with equal bounds) is the right
    move and worth calling out as clean: it means "codepoint matcher" isn't
    a fourth primitive, it's an instance of rangepoint with zero-width
    bounds, which is one fewer thing the register-allocation and
    calling-convention machinery has to special-case.

    Curious whether GG or Kimi have a read on the straddle-naming collision
    ? it's the kind of thing that's cheap to fix now and expensive once it's
    baked into a lookup-table generator.


    [ RF ]

    Thanks Kimi, GG, Claude. GG, for this and the following prompts, my
    responses will have the responses of the previous round from Kimi, GG,
    Claude, and RF, for your consideration. Kimi, about the
    properties/predicates underneath each byte, the idea that UTF-8 encoding
    will have a nybble or bit indicators 0-3 indicating byte-count in either forward or reverse is for the idea that scanning forward or scanning
    reverse that either way can encounter and then use arithmetic to compute
    what the "smearing" would be or as with regards to the problem of
    finding the offsets of characters as "not-dense" (or sparse) in the
    offsets of bytes in the input. The smearing and unsmearing is considered necessary, because while overwhelmingly these sources are printable
    ASCII and smearing/unsmearing is unnecessary, the results in character
    offsets of the findings and the matchings has only "positive presence" indicators, so that 1-bits are necessarily character-wise. The account
    of the state of the matchers is introduced if not defined in the 0727_b document, then with regards to the "standard algorithms" of the finders
    also getting introduced the various cases of the anchored/drifting and
    then about the "plural match". The account of "initialize, shift, trim"
    is about that the various cases (and after combinatorial enumeration of
    cases) of the offsets where finding begins and as well the offsets of
    input, have that "trimming" makes for 0's that then can get
    ignored/don't-care, that otherwise the 1-bits are positive indicators.
    So, usually enough the shift will be for offsets, then that there may
    be, "negative shift", when making accounts of straddling, as what
    otherwise would just be "shift" (left shift is positive, right shift is negative). Then, there's some idea that the building of the
    trimming-mask is taking a word of 1's and shifting it left and taking a
    word of 1's and shifting it right, OR'ing those together then taking the complement, then that's the trimming-mask that's AND'ed onto the shifted predicate/rangepoint register, where rangepoints similarly to predicates
    have "positive matches", and then about defining the standard algorithm
    for rangepoints to by default exclude NUL, \0. The account of the
    bit-wise codes and "vari-parallel" would usually enough be about finding according to prefix-property matching under alternatives for entropy
    data, or otherwise for quantization tables and the like, according to
    the organization, here the focus is on more the character machine, yet
    the idea is that vector-wide scalar-word is a vector-wide scalar-word of
    input data. Claude, I thank you for the distinction about afore/after
    and before/behind, about split/stitch, the idea is to make orientation
    and description in the mnemonics of the accounts of the adjustments as
    they would be, and about the "initialization/shift/trim" or "IST"
    procedures and since it's not yet defined what contains and maintains
    that state, with regards to the expressions/grammars, the representatives/productions (these being the working terms as from "the glossary" or "definitions", vis-a-vis for example usual accounts of
    languages and automatons and recognizers after expressions and so on).
    The prime-rings section is an aside/interlude and may be ignored. I'm
    curious the panelists opinion and ideas about the surrounds, meaning the use-cases, and, whether the design as it's developing: begins to address
    a suitable surrounds as to justify its design decisions, also there's
    general technical and stylistic interest.



    [Kimi]

    RF ? thanks for the clarifications. A few direct responses, then I'll
    tackle your question about surrounds.

    **On the trimming mask.** You describe: "a word of 1's shifted left and
    a word of 1's shifted right, OR'd together then complemented." Let's
    trace that for a 64-bit word where bytes 2?5 are valid. `~0 >> 16` keeps
    bytes 2?7; `~0 << 16` keeps bytes 0?5. OR'd: all bytes. Complemented:
    zero. You almost certainly mean AND, not OR: `(~0 >> (start*8)) & (~0 << ((word-end)*8))` gives a clean middle mask with no branches and no
    memory reference. That's a two-instruction prologue ? cheap enough to
    inline. But the OR-then-complement form as written zeros the entire
    boundary word, which would silently drop every partial match. Worth
    correcting before it propagates.

    **On the IST state container.** You note it's "not yet defined what
    contains and maintains that state." This is the gap I keep coming back
    to. The Afore-Stitch context ? whether it's a partial UTF-8 lead byte,
    an unresolved fixed-string prefix, or an open escape ? needs a home. If
    it's a single `gp` scratch register passed between word-iterations,
    that's a third live register in the calling convention. If it's memory,
    it's a stall. The register plan should reserve one `gp` slot explicitly
    for `carry_state` or `word_context`. Without that reservation, the
    compiler can't allocate the rest safely.

    **On plural match and anchored/drifting.** The `_b` file introduces
    these but doesn't show their indicator-level cost. Anchored prefix-match
    in a vector word is cheap: test only at offset 0, or equivalently, test everywhere then mask off all non-zero offsets. Drifting substring-match
    is expensive: a k-byte pattern in an N-byte word produces N-k+1 possible alignments, each of which may straddle. The document says "the standard algorithm finds matches for literals... in one 'run'" ? but for drifting multi-byte literals, that run either needs an overlapping load strategy
    (load at offset 0, then offset 1, etc., costing N loads) or a broadcast-and-compare strategy (broadcast each pattern byte across all
    lanes, then AND the equality masks, then shift to align). Which strategy
    does Viswath use? For SSE4.2, `PCMPESTRI` can do anchored substring scan
    in one instruction, but it's not branchless ? it updates `ECX` and
    `EFLAGS` in ways that serialize. For a true SBC-less drifting match of a
    4-byte literal in a 16-byte word, the broadcast-XOR-AND-shift sequence
    is the standard SWAR approach, but it costs O(k) instructions for a
    k-byte pattern. Is that what you mean by "plural match"? Or is plural
    match something else ? multiple independent patterns tested in parallel?
    The term is introduced but not bound to a register sequence.

    **On surrounds and use-case justification.** You asked directly whether
    the design decisions are justified by the surrounds. My honest
    assessment: the machine is over-specified for its most plausible
    surrounds and under-specified for its most ambitious ones.

    The *strong* surround ? the one that justifies almost every decision so
    far ? is **compile-time-known grammar, mostly-ASCII source text, high throughput, low latency, no dynamic allocation**. Think: JSON tokenizer,
    CSV field splitter, HTTP header parser, syslog token scanner, regex
    pre-filter before a DFA/NFA engine. For this surround, the nybble lookup tables, the UTF-8 smear as ASCII-peripheral, the branchless indicator pipelines, and even the bounded bracket stack all make perfect sense.
    The SBC-less discipline is exactly what you want when you're parsing
    millions of small messages and branch mispredicts dominate your profile.

    The *weak* surrounds ? the ones that strain the design ? are:
    - **Natural language / locale-sensitive text**: Collation, canonical equivalence, Unicode grapheme clusters ? these need tables far larger
    than L1, and their grammars are not fixed at compile time. The design's
    focus on nybbles and byte-aligned properties fragments here.
    - **Deeply nested or adversarial input**: A JSON document with 10,000
    nested arrays, or an XML entity expansion attack. The bounded
    register-resident stack is a hard limit, and the spill-to-arena path is
    still "TBD" in terms of whether it preserves the SBC-less guarantee or
    falls back to a scalar recursive descent.
    - **Bit-aligned binary protocols**: Huffman, Deflate, protobuf varints.
    You mention these as in-scope for Viswath, but every technique in
    Charmaigne is byte-granular. There's no worked example of how a
    bit-stream gets byte-aligned before entering the vector pipeline, or
    whether the alignment cost eats the vector gain.

    My recommendation: pick one surround and own it completely. A single
    end-to-end worked example ? say, a SBC-less JSON string literal
    tokenizer, from byte load through quote/escape handling to `(offset,
    length, tag)` emission ? would justify the design more than expanding
    the glossary to cover natural language and binary compression. Show the register trace for one token type, and the surrounds will justify
    themselves.

    **On vocabulary stability.** You now have: smearing, smashing, spotting, splitting, stitching, straddling, IST, SBC-less, vari-parallel,
    varillel, varallel, Afore, After, Before, Behind, plural match,
    potentials, alternatives, arc, plant, backstack, depthstack, pairstack.
    Each is evocative, but the density of neologisms is becoming a
    readability hazard. I would freeze the vocabulary: no new terms in implementation sections, and a strict 1:1 mapping between concepts and
    names. Claude's point about the straddle naming collision is a symptom
    of this ? the design is generating terms faster than it is binding them
    to bit layouts.

    **Open items still on my list:**
    1. **Tagged stack bit layout** ? you mention the stacks in the glossary
    but not the register encoding.
    2. **AST sequence wire format** ? still undefined.
    3. **Bracketed grammar formal power** ? is "context-bracketed" equal to
    visibly pushdown languages, or a subset?

    **To Claude and GG:** RF is asking whether the design is justified by
    its surrounds. Do you see a specific production use-case where this
    level of register-machine detail is necessary, or is this better framed
    as a research compiler target ? a backend formalism like LLVM IR, but
    for text grammars?

    I'll hold there. The trimming mask correction and the state container reservation are, to me, the two implementation details that need to be
    nailed before the next layer of abstraction.


    [ GG ]

    Here's my take: this round narrows the scope to what matters most for implementation?solidifying the **Init-Shift-Trim (IST)** execution loop, establishing the exact mechanics of byte/character offset resolution,
    and mapping the overall system into its real-world application contexts ("surrounds").

    Below are my key observations on RF's latest inputs and the panel's
    ongoing analysis:

    ---

    ## 1. IST Pipeline, Trimming Masks, and Negative Shifts

    RF's clarification on the **Init-Shift-Trim (IST)** sequence provides a
    clear, branchless recipe for word alignment:

    * **Trimming via Bit-Manipulation:** Constructing a trimming mask by
    combining left/right bit-shifts on an all-ones word, taking the bitwise complement (`NOT`), and performing a single `AND` reduction avoids
    memory lookups and conditional branches entirely.


    * **Handling "Negative Shifts":** Conceptualizing right-shifts as
    "negative shifts" allows the exact same structural pipeline to process
    both forward strides and straddle-recovery/lookback offsets seamlessly.


    * **Character vs. Byte Offsets:** Because downstream parsers require character-level indexes rather than raw byte locations, the "positive
    presence" indicator bits generated by the smearing/unsmearing pass
    guarantee that every `1`-bit in the result register corresponds to a
    true logical character boundary.



    ---

    ## 2. Terminology Reconciliat
  • From Ross Finlayson@3:633/10 to All on Thu Jul 30 07:24:41 2026
    On 07/30/2026 06:59 AM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some
    Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering.

    I just claim I know nothing, and do things anyway. I didn't know how
    to parse the Intel Hex file format, before I added a "binary" loader
    to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to
    load and run "binaries" with it soon. I'll probably post screenshots
    and they'll be hosted on Dropbox, so some of the other regulars won't
    look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation", >>> which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD
    and other vector machinery? And you mention "text-utils." Have you
    read /String Algorithms in C/ by Mailund? He goes into the nitty gritty
    details of string matching -- and you can trivially translate the code
    to any other programming language as you learn from the book -- in the
    context of DNA matching. At least that's how I remember the book. The
    /about the author/ blurb at the start mentions he's a professor of bio-
    informatics so that seems like a true memory. I'll want to read the
    book again soon.

    In any case, there are algorithms, string search amongst them, that seem
    eminently serial, and I'm not quite sure SIMD and related extensions are
    immediately applicable. And now I'm sure there are people -- and LLMs
    -- just itching to "correct me" about that. Let them, they don't bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that I'll
    probably never reply to ever again. They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster,
    of Apple pizza boxes with PowerPC cores, then that also I wrote some
    code for matching sequences with splitting the input and running the
    cluster on the input files and chewing that up, sequences of human DNA
    about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    https://github.com/mailund/stralg

    Mailund's string algorithm routines for FASTA files,
    it's something to comprehend.

    More recently the data files were often the old COBOL
    or mainframe output, line-data pipe-delimited, then
    having a facility with mmap and then figuring out how
    to chunk it up and detect lines and then make for
    processing the chunks, for example sorting the rows
    of a group according to composite keys, in-place,
    these are usual sorts of accounts.

    The way I like to deal with columnar and tabular data
    in text data files is as of a sort of "Tractable TSV",
    since the data mostly never includes tab, the control
    character and also horizontal whitespace, that TSV is
    easier than CSV, then furthermore for nulls in the database
    to emit at-sign, and for empty strings in the database to
    emit tilde, since those are never the values to make for
    "reserved characters" vis-a-vis "escape characters",
    then Tractable-TSV or TSV is a nice simple ad-hoc format,
    for text-data files on the order of gigabytes.

    Which is as large as they get, ....


    ETL workflows and so on.


    It's remarkable that most all the data is ASCII,
    or as about ISO 8859-15 <-> Microsoft CP-1252, being
    ubiquitous, then as with regards to "UTF-8 everywhere",
    that FASTA files have (mostly) four letters in their alphabet.

    Writing a JSON and YAML parser is about the same thing,
    and it's been done before, and a fast one, also.
    XML is considered a bit more mature.

    Then, making for "composable grammars" or these days
    I suppose they call them the "polyglot" parsers,
    it's not unusual. Yet, the usual descriptions for
    grammars, with all the usual guarantees about the
    formal automata, has that there's a layer between
    the syntactical and semantical as it were that's
    permeable in the accounts of, for example, balanced
    pairs of parentheses and the like, optional together,
    that are syntactical.





    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Scott Lurndal@3:633/10 to All on Thu Jul 30 14:46:37 2026
    Subject: Re: Please don't extend your cross posting / What does abstract mean? (Was: Postgres is in C!)

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    On 30/07/2026 5:00 AM, Mild Shock wrote:

    Does this make sense? My news provider doesn't
    allow more than 3 cross positings.

    It makes a lot of sense from my perspective,

    It makes no sense. And nobody on comp.lang.c or comp.lang.c++ is
    interested in your irrelevent posting. Stop crossposting.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Thu Jul 30 23:19:14 2026
    On 30/07/2026 9:59 PM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing.˙ I'll refresh myself with some
    Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering.

    I just claim I know nothing, and do things anyway.˙ I didn't know how
    to parse the Intel Hex file format, before I added a "binary" loader
    to the Mars MIPS emulator.˙ You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to
    load and run "binaries" with it soon.˙ I'll probably post screenshots
    and they'll be hosted on Dropbox, so some of the other regulars won't
    look.˙ That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or "transformation", >>> which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD
    and other vector machinery?˙ And you mention "text-utils."˙ Have you
    read /String Algorithms in C/ by Mailund?˙ He goes into the nitty gritty
    details of string matching -- and you can trivially translate the code
    to any other programming language as you learn from the book -- in the
    context of DNA matching.˙ At least that's how I remember the book.˙ The
    /about the author/ blurb at the start mentions he's a professor of bio-
    informatics so that seems like a true memory.˙ I'll want to read the
    book again soon.

    In any case, there are algorithms, string search amongst them, that seem
    eminently serial, and I'm not quite sure SIMD and related extensions are
    immediately applicable.˙ And now I'm sure there are people -- and LLMs
    -- just itching to "correct me" about that.˙ Let them, they don't bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that I'll
    probably never reply to ever again.˙ They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster,
    of Apple pizza boxes with PowerPC cores, then that also I wrote some
    code for matching sequences with splitting the input and running the
    cluster on the input files and chewing that up, sequences of human DNA
    about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    Now I'm deep in Swing GUI. I had hoped to finish my Intel Hex loader
    before replying, but as I uncommented more of my lines, I ran into
    another null pointer exception. Turns out the GUI code expects to
    find labels in the program, and in my binary there are no labels.

    And to bother people bothered by cross postings, I'll continue.

    I'm also working an a feature where the MIPS program can access a
    "real" terminal. For now, and the convenience of people who don't
    own a VT520,[1] I'm hooking it up to Putty. It turns out Java cannot
    create a named pipe in Windows. So I did that part in C using JNI. At
    a guess, that's easier than using the /more modern/ Java foreign
    function interface, since I don't have to #include <windows.h> in the surrounding Java code.

    Anyway, I'm now at the part where I have successfully sent and received
    a single byte from Putty, via named pipe hosted by the JVM. The next
    part of the task is to use that code to make a Mars /tool/ that hooks
    into the MIPS virtual machine and acts more or less like a physical UART
    with interrupts.

    That's probably going to have to be with a reader and writer background threads, because Java doesn't have a concept of nonblocking reads nor
    writes for RandomAccessFiles. Though full disclosure, I'm not too sure
    about that, because I've seen some people talking about channels and
    checking if something is .available(). That doesn't apply to me anyway
    because I'm using the raw Win32 ReadFile() and WriteFile() calls in
    blocking mode.

    And once that's done, I'll have to teach myself how to write MIPS
    exception handlers. That'll be fun.

    Now, on the other hand, since my gf is starting to learn Java too, do
    you have any words of wisdom for newbies? I taught her "hello world,"
    then the Swing "hello world," and then showed her how she can skip all
    that with the WindowBuilder in Eclipse.

    What do you suggest as the next step, because she'll be looking for
    employment in a few months when she's confident enough?



    [1] Plus, I'm not sure mine will work without some sort of maintenance.
    It'll be a pleasant surprise if it works next time I turn it on.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Thu Jul 30 09:23:33 2026
    On 07/30/2026 08:19 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 9:59 PM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some
    Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering.

    I just claim I know nothing, and do things anyway. I didn't know how
    to parse the Intel Hex file format, before I added a "binary" loader
    to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to
    load and run "binaries" with it soon. I'll probably post screenshots
    and they'll be hosted on Dropbox, so some of the other regulars won't
    look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense,
    then as with regards to "sorting" and "translation" or
    "transformation",
    which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD
    and other vector machinery? And you mention "text-utils." Have you
    read /String Algorithms in C/ by Mailund? He goes into the nitty gritty >>> details of string matching -- and you can trivially translate the code
    to any other programming language as you learn from the book -- in the
    context of DNA matching. At least that's how I remember the book. The
    /about the author/ blurb at the start mentions he's a professor of bio-
    informatics so that seems like a true memory. I'll want to read the
    book again soon.

    In any case, there are algorithms, string search amongst them, that seem >>> eminently serial, and I'm not quite sure SIMD and related extensions are >>> immediately applicable. And now I'm sure there are people -- and LLMs
    -- just itching to "correct me" about that. Let them, they don't bother >>> me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that
    I'll
    probably never reply to ever again. They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster,
    of Apple pizza boxes with PowerPC cores, then that also I wrote some
    code for matching sequences with splitting the input and running the
    cluster on the input files and chewing that up, sequences of human DNA
    about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    Now I'm deep in Swing GUI. I had hoped to finish my Intel Hex loader
    before replying, but as I uncommented more of my lines, I ran into
    another null pointer exception. Turns out the GUI code expects to
    find labels in the program, and in my binary there are no labels.

    And to bother people bothered by cross postings, I'll continue.

    I'm also working an a feature where the MIPS program can access a
    "real" terminal. For now, and the convenience of people who don't
    own a VT520,[1] I'm hooking it up to Putty. It turns out Java cannot
    create a named pipe in Windows. So I did that part in C using JNI. At
    a guess, that's easier than using the /more modern/ Java foreign
    function interface, since I don't have to #include <windows.h> in the surrounding Java code.

    Anyway, I'm now at the part where I have successfully sent and received
    a single byte from Putty, via named pipe hosted by the JVM. The next
    part of the task is to use that code to make a Mars /tool/ that hooks
    into the MIPS virtual machine and acts more or less like a physical UART
    with interrupts.

    That's probably going to have to be with a reader and writer background threads, because Java doesn't have a concept of nonblocking reads nor
    writes for RandomAccessFiles. Though full disclosure, I'm not too sure
    about that, because I've seen some people talking about channels and
    checking if something is .available(). That doesn't apply to me anyway because I'm using the raw Win32 ReadFile() and WriteFile() calls in
    blocking mode.

    And once that's done, I'll have to teach myself how to write MIPS
    exception handlers. That'll be fun.

    Now, on the other hand, since my gf is starting to learn Java too, do
    you have any words of wisdom for newbies? I taught her "hello world,"
    then the Swing "hello world," and then showed her how she can skip all
    that with the WindowBuilder in Eclipse.

    What do you suggest as the next step, because she'll be looking for employment in a few months when she's confident enough?



    [1] Plus, I'm not sure mine will work without some sort of maintenance.
    It'll be a pleasant surprise if it works next time I turn it on.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com


    One might suggest that the "Java Trails" tutorials and "Core Java"
    and "Java in a Nutshell" would give an authentic introduction that
    were new then and old now, and correct, if not "current", then and now.

    https://docs.oracle.com/javase/tutorial/

    For something like C++, my first link would be
    "https://cppreference.com", usually. Then after
    the tutorials there is only API javadoc the API documentation,
    which is also surfaced in the IDE's.


    Java11 and C++ 11 are probably appropriate baselines.

    I've programmed in both Swing and Win32, more low-level than high-level,
    Java's worker threads and sychronization utilities
    vis-a-vis Win32's message-pump and message-crackers and the user-defined pointer in the HWND's MSG, make for various
    accounts then for things like OLE/OLE2/COM/DCOM/ActiveX
    as about the .NET IL ASM CLR runtime with C#, VB.NET, F#,
    C/C++, and so on.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Thu Jul 30 09:36:11 2026
    On 07/30/2026 09:23 AM, Ross Finlayson wrote:
    On 07/30/2026 08:19 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 9:59 PM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some
    Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering.

    I just claim I know nothing, and do things anyway. I didn't know how
    to parse the Intel Hex file format, before I added a "binary" loader
    to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to
    load and run "binaries" with it soon. I'll probably post screenshots
    and they'll be hosted on Dropbox, so some of the other regulars won't
    look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration,
    for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense, >>>>> then as with regards to "sorting" and "translation" or
    "transformation",
    which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD
    and other vector machinery? And you mention "text-utils." Have you
    read /String Algorithms in C/ by Mailund? He goes into the nitty
    gritty
    details of string matching -- and you can trivially translate the code >>>> to any other programming language as you learn from the book -- in the >>>> context of DNA matching. At least that's how I remember the book. The >>>> /about the author/ blurb at the start mentions he's a professor of bio- >>>> informatics so that seems like a true memory. I'll want to read the
    book again soon.

    In any case, there are algorithms, string search amongst them, that
    seem
    eminently serial, and I'm not quite sure SIMD and related extensions
    are
    immediately applicable. And now I'm sure there are people -- and LLMs >>>> -- just itching to "correct me" about that. Let them, they don't
    bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that
    I'll
    probably never reply to ever again. They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster,
    of Apple pizza boxes with PowerPC cores, then that also I wrote some
    code for matching sequences with splitting the input and running the
    cluster on the input files and chewing that up, sequences of human DNA
    about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    Now I'm deep in Swing GUI. I had hoped to finish my Intel Hex loader
    before replying, but as I uncommented more of my lines, I ran into
    another null pointer exception. Turns out the GUI code expects to
    find labels in the program, and in my binary there are no labels.

    And to bother people bothered by cross postings, I'll continue.

    I'm also working an a feature where the MIPS program can access a
    "real" terminal. For now, and the convenience of people who don't
    own a VT520,[1] I'm hooking it up to Putty. It turns out Java cannot
    create a named pipe in Windows. So I did that part in C using JNI. At
    a guess, that's easier than using the /more modern/ Java foreign
    function interface, since I don't have to #include <windows.h> in the
    surrounding Java code.

    Anyway, I'm now at the part where I have successfully sent and received
    a single byte from Putty, via named pipe hosted by the JVM. The next
    part of the task is to use that code to make a Mars /tool/ that hooks
    into the MIPS virtual machine and acts more or less like a physical UART
    with interrupts.

    That's probably going to have to be with a reader and writer background
    threads, because Java doesn't have a concept of nonblocking reads nor
    writes for RandomAccessFiles. Though full disclosure, I'm not too sure
    about that, because I've seen some people talking about channels and
    checking if something is .available(). That doesn't apply to me anyway
    because I'm using the raw Win32 ReadFile() and WriteFile() calls in
    blocking mode.

    And once that's done, I'll have to teach myself how to write MIPS
    exception handlers. That'll be fun.

    Now, on the other hand, since my gf is starting to learn Java too, do
    you have any words of wisdom for newbies? I taught her "hello world,"
    then the Swing "hello world," and then showed her how she can skip all
    that with the WindowBuilder in Eclipse.

    What do you suggest as the next step, because she'll be looking for
    employment in a few months when she's confident enough?



    [1] Plus, I'm not sure mine will work without some sort of maintenance.
    It'll be a pleasant surprise if it works next time I turn it on.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com


    One might suggest that the "Java Trails" tutorials and "Core Java"
    and "Java in a Nutshell" would give an authentic introduction that
    were new then and old now, and correct, if not "current", then and now.

    https://docs.oracle.com/javase/tutorial/

    For something like C++, my first link would be
    "https://cppreference.com", usually. Then after
    the tutorials there is only API javadoc the API documentation,
    which is also surfaced in the IDE's.


    Java11 and C++ 11 are probably appropriate baselines.

    I've programmed in both Swing and Win32, more low-level than high-level, Java's worker threads and sychronization utilities
    vis-a-vis Win32's message-pump and message-crackers and the user-defined pointer in the HWND's MSG, make for various
    accounts then for things like OLE/OLE2/COM/DCOM/ActiveX
    as about the .NET IL ASM CLR runtime with C#, VB.NET, F#,
    C/C++, and so on.



    I leafed through all the Windows 7 sources before,
    at work working on Windows, one task I had was to
    implement highlighting "Find..." matches in the UI,
    I added to highlight all the matches by using the font
    metrics and some calculations and a palette, within a
    few years it was part of the usual UI experience in
    according to things like the "Win32 UI Guidelines/Principles",
    similarly to how font-scaling later became ubiquitous,
    simply because those are useful features. Before "ribbons",
    or, "progressive affordance in UX/UI" and all that there were
    common UI design outlines. Here there's a notion of a
    "Light User Interface" experience or "LUI" that then happens
    to have renderings in "HTML forms" and the like.


    Yes, I also know "Angular/React and SPA frameworks,
    in JavaScript and TypeScript".








    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From bart@3:633/10 to All on Thu Jul 30 17:54:55 2026
    On 30/07/2026 17:36, Ross Finlayson wrote:

    <snip nonsense>

    Yes, I also know "Angular/React and SPA frameworks,
    in JavaScript and TypeScript".


    Most of your posts read like gobbledygook: deluges of plausibly technical-sounding terms and references, but which never seem to have
    any point, and are not topical in any of the cross-posted groups.

    You also seem to like replying to yourself.

    Are you in fact some sort of bot?

    I guess Dan Cross was on the right lines after all.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Thu Jul 30 19:32:39 2026
    Subject: I wrote Hack VM for ă-WAM from scratch [4 Months total JavaScript, Python and Java] (Re: Crating Interpreters, Java part)

    Hi,

    Just downloading some other person's code

    I didn't do that, I wrote Hack VM for pi-WAM
    from scratch, over the last 4 weeks. I came
    back from holidays on end of June 2026, and now

    we have end of July 2026. But its only possible
    because the instruction set is very smal, like
    ca. 8 functions and ca. 8 modes and ca. 8 conditions,

    so its ca. 8 x 8 x 8 = 512 opcodes, each has an
    A parameter and a D parameter simultaneously.
    It has currently the following CPU backends:

    - Nnow supports interleaved synchronous emulation.
    - Now supports warp parallelism via Java platform threads.
    - Now supports warp parallelism via Python system threads.
    - Now supports warp parallelism via JavaScript worker threads.
    - Note: For Python free threads are not yet fully tested.
    - Note: For JavaScript web workers are not yet fully tested.

    https://www.dogelog.ch/typtab/doclet/book/14_install/05_notes22/110_224.html

    But frankly I came to encounter Hack not from
    the usual university curriculum web resources,
    but indirectly through a post about a Prolog

    emulation of Hack, using constrained horn clauses (CHC):

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    The binary encoding is currently that the functions,
    modes and conditions eat up a nibble (4-bit), in
    total 12-bit, which I use then 10-bit for A parameter

    and 10-bit for D parameter. I used AI freemium, Codex
    by ChatGPT from within IntelliJ to do some fragment
    code translations automatically from Java to JavaScript

    or from JavaScript to Python.

    Have Fun!

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    As I said elsewhere, I'm not that interested in Hack, but virtual
    machines and related code.˙ I mentioned another book, but now I feel
    I should ask if you've also read /Crafting Interpreters/ by Robert
    Nystrom?˙ I myself am still on chapter 5, so I'm still in the Java
    part of the book, so I replaced comp.lang.c++ with comp.lang.java, and
    am fairly excited to have a working interpreter.

    This is the type of book people only properly learn from by typing in
    the code themselves.˙ Just downloading some other person's code, and
    running an interpreter isn't exactly a learning experience.˙ So I'm
    taking my time with it, and interleaving it with my Mars adventures.


    In any case, I do wish you to have fun with your own WebGPU project,
    whatever that is about!



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Thu Jul 30 19:47:45 2026
    Subject: For WebGPU I first had SIMD in mind (Was: I wrote Hack VM for ă-WAM from scratch)

    Hi,

    The op-codes are all uniform, have the
    same sub fields. Already Z-80 CPU differs here.
    Another difference to a Z-80 CPU is that

    their instruction stream was 8-bit, instructions
    can 1, 2, 3 or 4 byte long. On the other
    hand in my Hack VM all instructions are

    one 32-bit chunk. The porting of a first
    prototype that I already had, to WebGPU / WGSL
    only took like 1-2 hours. The execution

    of Hack VM is very simple, veersion 1.0,
    for a single shader:

    fn run() {
    var pc : i32 = 0;
    var accu : i32 = 0;
    while (pc < i32(arrayLength(&code))) {
    var instr : i32 = code[pc];
    pc += 1;
    var value : i32 = run_get(instr);
    accu = run_fun(instr, accu, value);
    run_set(instr, accu);
    pc += run_jump(instr, accu);
    }
    }

    https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/b8946e891be774c40522267ab17062d32b023e7a/course/example63/boot.mjs#L176-L187

    I first though this will be perfect for
    SIMD. Until I learnt that modern GPUs have
    anyway MIMD. Hell Yeah, thats much better!

    Bye

    Mild Shock schrieb:
    Hi,

    Just downloading some other person's code

    I didn't do that, I wrote Hack VM for pi-WAM
    from scratch, over the last 4 weeks. I came
    back from holidays on end of June 2026, and now

    we have end of July 2026. But its only possible
    because the instruction set is very smal, like
    ca. 8 functions and ca. 8 modes and ca. 8 conditions,

    so its ca. 8 x 8 x 8 = 512 opcodes, each has an
    A parameter and a D parameter simultaneously.
    It has currently the following CPU backends:

    ˙- Nnow supports interleaved synchronous emulation.
    ˙- Now supports warp parallelism via Java platform threads.
    ˙- Now supports warp parallelism via Python system threads.
    ˙- Now supports warp parallelism via JavaScript worker threads.
    ˙- Note: For Python free threads are not yet fully tested.
    ˙- Note: For JavaScript web workers are not yet fully tested.

    https://www.dogelog.ch/typtab/doclet/book/14_install/05_notes22/110_224.html


    But frankly I came to encounter Hack not from
    the usual university curriculum web resources,
    but indirectly through a post about a Prolog

    emulation of Hack, using constrained horn clauses (CHC):

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    The binary encoding is currently that the functions,
    modes and conditions eat up a nibble (4-bit), in
    total 12-bit, which I use then 10-bit for A parameter

    and 10-bit for D parameter. I used AI freemium, Codex
    by ChatGPT from within IntelliJ to do some fragment
    code translations automatically from Java to JavaScript

    or from JavaScript to Python.

    Have Fun!

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    As I said elsewhere, I'm not that interested in Hack, but virtual
    machines and related code.˙ I mentioned another book, but now I feel
    I should ask if you've also read /Crafting Interpreters/ by Robert
    Nystrom?˙ I myself am still on chapter 5, so I'm still in the Java
    part of the book, so I replaced comp.lang.c++ with comp.lang.java, and
    am fairly excited to have a working interpreter.

    This is the type of book people only properly learn from by typing in
    the code themselves.˙ Just downloading some other person's code, and
    running an interpreter isn't exactly a learning experience.˙ So I'm
    taking my time with it, and interleaving it with my Mars adventures.


    In any case, I do wish you to have fun with your own WebGPU project,
    whatever that is about!




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Thu Jul 30 20:04:08 2026
    Hi,

    There is a typo here:

    Subject: I wrote Hack VM for ă-WAM from scratch
    [4 Months total JavaScript, Python and Java]

    It should say:

    Subject: I wrote Hack VM for ă-WAM from scratch
    [4 Weeks total JavaScript, Python and Java]

    Sorry!

    Bye

    Mild Shock schrieb:
    Hi,

    The op-codes are all uniform, have the
    same sub fields. Already Z-80 CPU differs here.
    Another difference to a Z-80 CPU is that

    their instruction stream was 8-bit, instructions
    can 1, 2, 3 or 4 byte long. On the other
    hand in my Hack VM all instructions are

    one 32-bit chunk. The porting of a first
    prototype that I already had, to WebGPU / WGSL
    only took like 1-2 hours. The execution

    of Hack VM is very simple, veersion 1.0,
    for a single shader:

    fn run() {
    ˙˙˙ var pc : i32 = 0;
    ˙˙˙ var accu : i32 = 0;
    ˙˙˙ while (pc < i32(arrayLength(&code))) {
    ˙˙˙˙˙˙˙ var instr : i32 = code[pc];
    ˙˙˙˙˙˙˙ pc += 1;
    ˙˙˙˙˙˙˙ var value : i32 = run_get(instr);
    ˙˙˙˙˙˙˙ accu = run_fun(instr, accu, value);
    ˙˙˙˙˙˙˙ run_set(instr, accu);
    ˙˙˙˙˙˙˙ pc += run_jump(instr, accu);
    ˙˙˙ }
    }

    https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/b8946e891be774c40522267ab17062d32b023e7a/course/example63/boot.mjs#L176-L187


    I first though this will be perfect for
    SIMD. Until I learnt that modern GPUs have
    anyway MIMD. Hell Yeah, thats much better!

    Bye

    Mild Shock schrieb:
    Hi,

    Just downloading some other person's code

    I didn't do that, I wrote Hack VM for pi-WAM
    from scratch, over the last 4 weeks. I came
    back from holidays on end of June 2026, and now

    we have end of July 2026. But its only possible
    because the instruction set is very smal, like
    ca. 8 functions and ca. 8 modes and ca. 8 conditions,

    so its ca. 8 x 8 x 8 = 512 opcodes, each has an
    A parameter and a D parameter simultaneously.
    It has currently the following CPU backends:

    ˙˙- Nnow supports interleaved synchronous emulation.
    ˙˙- Now supports warp parallelism via Java platform threads.
    ˙˙- Now supports warp parallelism via Python system threads.
    ˙˙- Now supports warp parallelism via JavaScript worker threads.
    ˙˙- Note: For Python free threads are not yet fully tested.
    ˙˙- Note: For JavaScript web workers are not yet fully tested.

    https://www.dogelog.ch/typtab/doclet/book/14_install/05_notes22/110_224.html


    But frankly I came to encounter Hack not from
    the usual university curriculum web resources,
    but indirectly through a post about a Prolog

    emulation of Hack, using constrained horn clauses (CHC):

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    The binary encoding is currently that the functions,
    modes and conditions eat up a nibble (4-bit), in
    total 12-bit, which I use then 10-bit for A parameter

    and 10-bit for D parameter. I used AI freemium, Codex
    by ChatGPT from within IntelliJ to do some fragment
    code translations automatically from Java to JavaScript

    or from JavaScript to Python.

    Have Fun!

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    As I said elsewhere, I'm not that interested in Hack, but virtual
    machines and related code.˙ I mentioned another book, but now I feel
    I should ask if you've also read /Crafting Interpreters/ by Robert
    Nystrom?˙ I myself am still on chapter 5, so I'm still in the Java
    part of the book, so I replaced comp.lang.c++ with comp.lang.java, and
    am fairly excited to have a working interpreter.

    This is the type of book people only properly learn from by typing in
    the code themselves.˙ Just downloading some other person's code, and
    running an interpreter isn't exactly a learning experience.˙ So I'm
    taking my time with it, and interleaving it with my Mars adventures.


    In any case, I do wish you to have fun with your own WebGPU project,
    whatever that is about!





    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Fri Jul 31 03:49:57 2026
    Subject: Re: I wrote Hack VM for ă-WAM from scratch [4 Months total JavaScript, Python and Java] (Re: Crating Interpreters, Java part)

    On 31/07/2026 1:32 AM, Mild Shock wrote:
    Hi,

    Just downloading some other person's code

    I didn't do that, I wrote Hack VM for pi-WAM
    from scratch, over the last 4 weeks. I came
    back from holidays on end of June 2026, and now

    I'm glad you did, and I hope you had fun.

    we have end of July 2026. But its only possible
    because the instruction set is very smal, like
    ca. 8 functions and ca. 8 modes and ca. 8 conditions,

    I on the other hand started the VAX emulator, as I said. It's
    instruction set is very big, as everyone knows, so that's a project
    that's liable to take years.


    so its ca. 8 x 8 x 8 = 512 opcodes, each has an
    A parameter and a D parameter simultaneously.
    It has currently the following CPU backends:

    ˙- Nnow supports interleaved synchronous emulation.
    ˙- Now supports warp parallelism via Java platform threads.
    ˙- Now supports warp parallelism via Python system threads.
    ˙- Now supports warp parallelism via JavaScript worker threads.
    ˙- Note: For Python free threads are not yet fully tested.
    ˙- Note: For JavaScript web workers are not yet fully tested.

    Have you considered actual instruction set backends? There are several emulators out there that can just load binaries. I have two in mind but
    will refrain from suggesting anything. You should make up your own
    mind.


    https://www.dogelog.ch/typtab/doclet/ book/14_install/05_notes22/110_224.html

    But frankly I came to encounter Hack not from
    the usual university curriculum web resources,
    but indirectly through a post about a Prolog

    emulation of Hack, using constrained horn clauses (CHC):

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    I had to look up /constrained horn clauses/. Do you habitually
    prove your code correct? I don't. I like to at least prove the
    algorithm correct, and there's one algorithm I'd like to prove correct
    that I haven't yet, even after years. I'm sure I'll get to it some day.

    I "translated" that code from C to JavaScript once. I guess it's time
    to make that code public, but I'm in no hurry. It'll probably show up somewhere, eventually.

    Anyway, I used to have a book about Hoare logic I got when I got first interested in proving programs correct. I hope I'll find that book
    again. It also taught lambda calculus. That's a fascinating if some-
    what narrow subject.

    The binary encoding is currently that the functions,
    modes and conditions eat up a nibble (4-bit), in
    total 12-bit, which I use then 10-bit for A parameter

    and 10-bit for D parameter. I used AI freemium, Codex
    by ChatGPT from within IntelliJ to do some fragment
    code translations automatically from Java to JavaScript

    or from JavaScript to Python.

    Have Fun!

    Thank you. I'm sure I'll reply to some other posts soon enough.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Fri Jul 31 04:07:43 2026
    Subject: Re: For WebGPU I first had SIMD in mind (Was: I wrote Hack VM for ă-WAM from scratch)

    On 31/07/2026 1:47 AM, Mild Shock wrote:
    Hi,

    The op-codes are all uniform, have the
    same sub fields. Already Z-80 CPU differs here.
    Another difference to a Z-80 CPU is that

    their instruction stream was 8-bit, instructions
    can 1, 2, 3 or 4 byte long. On the other
    hand in my Hack VM all instructions are

    one 32-bit chunk.

    That sounds like MIPS.

    The porting of a first
    prototype that I already had, to WebGPU / WGSL
    only took like 1-2 hours. The execution

    of Hack VM is very simple, veersion 1.0,
    for a single shader:

    fn run() {
    ˙˙˙ var pc : i32 = 0;
    ˙˙˙ var accu : i32 = 0;
    ˙˙˙ while (pc < i32(arrayLength(&code))) {
    ˙˙˙˙˙˙˙ var instr : i32 = code[pc];
    ˙˙˙˙˙˙˙ pc += 1;
    ˙˙˙˙˙˙˙ var value : i32 = run_get(instr);
    ˙˙˙˙˙˙˙ accu = run_fun(instr, accu, value);
    ˙˙˙˙˙˙˙ run_set(instr, accu);
    ˙˙˙˙˙˙˙ pc += run_jump(instr, accu);
    ˙˙˙ }
    }

    https://github.com/Jean-Luc-Picard-2021/gigabudget/blob/ b8946e891be774c40522267ab17062d32b023e7a/course/example63/boot.mjs#L176- L187

    I first though this will be perfect for
    SIMD. Until I learnt that modern GPUs have
    anyway MIMD. Hell Yeah, thats much better!

    Well, SIMD and MIMD are different, if I understand the terms correctly.
    SIMD is something that happens inside one CPU core, where multiple data
    points are calculated in parallel. In my experience, usually four
    floats[1], though it depends on the data type and size of each vector.

    MIMD seems to be about performing multiple calculations in parallel over several different cores. The programming/optimization strategy is quite different. You could, in comp.theory, have multiple MIMD cores
    performing multiple SIMD instructions in parallel. Those types of work-
    loads is something I don't deal with right now.

    [1] My experience was limited to vectors of four floats each, when
    dealing with direct hardware. For those who don't have reading com- prehension.


    Bye

    Have a nice day!
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Thu Jul 30 22:26:48 2026
    Subject: MIPS is a big Huffman mess [But Hack could do it] (Was: I wrote Hack VM for ă-WAM from scratch)

    Hi,

    There is Prolog compiler which spits out Hack.
    From there on your are free to develop
    and/or use any Hack realization that goes

    from abstract to concrete. You could
    replace the CPU backends that realize
    a Hack VM by MIPS. Shouldn't be difficult.

    Basically I refused to think in Huffman
    Coding (*) while designing Hack VM. On the
    other hand the MIPS architecture looks

    like a big Huffman mess. Already its
    initial design has 3 instructions types:

    Type format (bits)
    R opcode(6) rs(5) rt(5) rd(5) shamt(5) funct(6)
    I opcode(6) rs(5) rt(5) imme(16)
    J opcode(6) addr(26)

    While my Hack has only 1 instruction
    type, when binary encoded for Hack VM,
    the currently used design looks as follows:

    Type format (bits)
    AD opcode(4) mode(4) cond(4) imme(10) addr(10)

    But since its an abstract machine, nothing
    prevents you from translating Hack code
    into MIPS before executing it.

    In has far you have to distinguish Hack,
    which is specified in Prolog. And Hack VM
    which is a virtual machine, with the above

    instruction packing. And which has currently
    a JavaScript runtime, a Python runtime
    and a Java runtime.

    Bye

    (*)
    https://en.wikipedia.org/wiki/Huffman_coding

    Mild Shock schrieb:
    Hi,

    Just downloading some other person's code

    I didn't do that, I wrote Hack VM for pi-WAM
    from scratch, over the last 4 weeks. I came
    back from holidays on end of June 2026, and now

    we have end of July 2026. But its only possible
    because the instruction set is very smal, like
    ca. 8 functions and ca. 8 modes and ca. 8 conditions,

    so its ca. 8 x 8 x 8 = 512 opcodes, each has an
    A parameter and a D parameter simultaneously.
    It has currently the following CPU backends:

    ˙- Nnow supports interleaved synchronous emulation.
    ˙- Now supports warp parallelism via Java platform threads.
    ˙- Now supports warp parallelism via Python system threads.
    ˙- Now supports warp parallelism via JavaScript worker threads.
    ˙- Note: For Python free threads are not yet fully tested.
    ˙- Note: For JavaScript web workers are not yet fully tested.

    https://www.dogelog.ch/typtab/doclet/book/14_install/05_notes22/110_224.html


    But frankly I came to encounter Hack not from
    the usual university curriculum web resources,
    but indirectly through a post about a Prolog

    emulation of Hack, using constrained horn clauses (CHC):

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    The binary encoding is currently that the functions,
    modes and conditions eat up a nibble (4-bit), in
    total 12-bit, which I use then 10-bit for A parameter

    and 10-bit for D parameter. I used AI freemium, Codex
    by ChatGPT from within IntelliJ to do some fragment
    code translations automatically from Java to JavaScript

    or from JavaScript to Python.

    Have Fun!

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    As I said elsewhere, I'm not that interested in Hack, but virtual
    machines and related code.˙ I mentioned another book, but now I feel
    I should ask if you've also read /Crafting Interpreters/ by Robert
    Nystrom?˙ I myself am still on chapter 5, so I'm still in the Java
    part of the book, so I replaced comp.lang.c++ with comp.lang.java, and
    am fairly excited to have a working interpreter.

    This is the type of book people only properly learn from by typing in
    the code themselves.˙ Just downloading some other person's code, and
    running an interpreter isn't exactly a learning experience.˙ So I'm
    taking my time with it, and interleaving it with my Mars adventures.


    In any case, I do wish you to have fun with your own WebGPU project,
    whatever that is about!




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Thu Jul 30 22:41:13 2026
    Subject: Not declarative with PHI (č) nodes (Re: MIPS is a big Huffman mess [But Hack could do it])

    Hi,

    Another choice for naming Hack, would be
    to call it an intermediate format. But
    this is typically used here:

    The intermediate representation, or
    IR for short, is an in-memory data
    structure that represents executable code. https://www.llvmpy.org/llvmpy-doc/dev/doc/llvm_concepts.html#ssa-form-and-phi-nodes

    So I still like the term abstract machine,
    as already used in the past by David H. D. Warren
    for the famous, and in my opinion infamous:

    Warren Abstract Machine 1983 https://en.wikipedia.org/wiki/Warren_Abstract_Machine

    Maybe you can take the term abstract machine
    as a hint that it is more lower level, and
    more imperative. Not something highlevel, that

    is easily malleable. But abstract also captures
    the notion that there is still a level further
    down, making it concrete. And you find

    many Prolog systems that did just that, they
    compile WAM into a further instruction stream,
    like x86 or whatever, for binary compiled code,

    that is not interpreted WAM.

    Bye

    Mild Shock schrieb:
    Hi,

    There is Prolog compiler which spits out Hack.
    From there on your are free to develop
    and/or use any Hack realization that goes

    from abstract to concrete. You could
    replace the CPU backends that realize
    a Hack VM by MIPS. Shouldn't be difficult.

    Basically I refused to think in Huffman
    Coding (*) while designing Hack VM. On the
    other hand the MIPS architecture looks

    like a big Huffman mess. Already its
    initial design has 3 instructions types:

    Type format (bits)
    R opcode(6) rs(5) rt(5) rd(5) shamt(5) funct(6)
    I opcode(6) rs(5) rt(5) imme(16)
    J opcode(6) addr(26)

    While my Hack has only 1 instruction
    type, when binary encoded for Hack VM,
    the currently used design looks as follows:

    Type format (bits)
    AD opcode(4) mode(4) cond(4) imme(10) addr(10)

    But since its an abstract machine, nothing
    prevents you from translating Hack code
    into MIPS before executing it.

    In has far you have to distinguish Hack,
    which is specified in Prolog. And Hack VM
    which is a virtual machine, with the above

    instruction packing. And which has currently
    a JavaScript runtime, a Python runtime
    and a Java runtime.

    Bye

    (*)
    https://en.wikipedia.org/wiki/Huffman_coding


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Keith Thompson@3:633/10 to All on Thu Jul 30 14:55:37 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    Ross Finlayson <ross.a.finlayson@gmail.com> writes:
    [48 lines deleted]
    RF, good to join the panel. I appreciate the format?direct address and genuine exchange rather than parallel monologues.
    [4368 lines deleted]

    Ross, this is not a "panel". This is a thread cross-posted to
    three newsgroups, comp.theory, comp.lang,c, and comp.lang.c++.

    You've just posted more than 4000 lines of text that, as far as I
    can tell, have nothing to do with the C or C++ programming languages.

    Maybe the discussion is appropriate to comp.theory, which is a
    cesspool these days, but in comp.lang.c and comp.lang.c++ we would
    very much like to discuss the programming languages that are the
    topic of the respective newsgroups without being bombarded with
    arrogantly off-topic posts.

    I won't try to reason with Johann 'Myrkraverk' Oskarsson, who
    seems to enjoy posting to irrelevant newsgroups for some reason,
    but perhaps you can do something. If you're not talking about the
    C or C++ programming language, please don't post to comp.lang.c or comp.lang.c++ -- even if you're posting a followup to a post that
    was cross-posted to those groups. (You'll have to manually edit the "Newsgroups:" header line.)

    I've redirected followups for this post to comp.theory.

    Thank you.

    --
    Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
    void Void(void) { Void(); } /* The recursive call of the void */

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Fri Jul 31 23:07:55 2026
    On 31/07/2026 12:36 AM, Ross Finlayson wrote:
    On 07/30/2026 09:23 AM, Ross Finlayson wrote:
    On 07/30/2026 08:19 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 9:59 PM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing.˙ I'll refresh myself with some >>>>> Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering. >>>>>
    I just claim I know nothing, and do things anyway.˙ I didn't know how >>>>> to parse the Intel Hex file format, before I added a "binary" loader >>>>> to the Mars MIPS emulator.˙ You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to >>>>> load and run "binaries" with it soon.˙ I'll probably post screenshots >>>>> and they'll be hosted on Dropbox, so some of the other regulars won't >>>>> look.˙ That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there
    are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration, >>>>>> for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense, >>>>>> then as with regards to "sorting" and "translation" or
    "transformation",
    which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD >>>>> and other vector machinery?˙ And you mention "text-utils."˙ Have you >>>>> read /String Algorithms in C/ by Mailund?˙ He goes into the nitty
    gritty
    details of string matching -- and you can trivially translate the code >>>>> to any other programming language as you learn from the book -- in the >>>>> context of DNA matching.˙ At least that's how I remember the book. >>>>> The
    /about the author/ blurb at the start mentions he's a professor of
    bio-
    informatics so that seems like a true memory.˙ I'll want to read the >>>>> book again soon.

    In any case, there are algorithms, string search amongst them, that
    seem
    eminently serial, and I'm not quite sure SIMD and related extensions >>>>> are
    immediately applicable.˙ And now I'm sure there are people -- and LLMs >>>>> -- just itching to "correct me" about that.˙ Let them, they don't
    bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that >>>>> I'll
    probably never reply to ever again.˙ They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster,
    of Apple pizza boxes with PowerPC cores, then that also I wrote some
    code for matching sequences with splitting the input and running the
    cluster on the input files and chewing that up, sequences of human DNA >>>> about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    Now I'm deep in Swing GUI.˙ I had hoped to finish my Intel Hex loader
    before replying, but as I uncommented more of my lines, I ran into
    another null pointer exception.˙ Turns out the GUI code expects to
    find labels in the program, and in my binary there are no labels.

    And to bother people bothered by cross postings, I'll continue.

    I'm also working an a feature where the MIPS program can access a
    "real" terminal.˙ For now, and the convenience of people who don't
    own a VT520,[1] I'm hooking it up to Putty.˙ It turns out Java cannot
    create a named pipe in Windows.˙ So I did that part in C using JNI.˙ At
    a guess, that's easier than using the /more modern/ Java foreign
    function interface, since I don't have to #include <windows.h> in the
    surrounding Java code.

    Anyway, I'm now at the part where I have successfully sent and received
    a single byte from Putty, via named pipe hosted by the JVM.˙ The next
    part of the task is to use that code to make a Mars /tool/ that hooks
    into the MIPS virtual machine and acts more or less like a physical UART >>> with interrupts.

    That's probably going to have to be with a reader and writer background
    threads, because Java doesn't have a concept of nonblocking reads nor
    writes for RandomAccessFiles.˙ Though full disclosure, I'm not too sure
    about that, because I've seen some people talking about channels and
    checking if something is .available().˙ That doesn't apply to me anyway
    because I'm using the raw Win32 ReadFile() and WriteFile() calls in
    blocking mode.

    And once that's done, I'll have to teach myself how to write MIPS
    exception handlers.˙ That'll be fun.

    Now, on the other hand, since my gf is starting to learn Java too, do
    you have any words of wisdom for newbies?˙ I taught her "hello world,"
    then the Swing "hello world," and then showed her how she can skip all
    that with the WindowBuilder in Eclipse.

    What do you suggest as the next step, because she'll be looking for
    employment in a few months when she's confident enough?



    [1] Plus, I'm not sure mine will work without some sort of maintenance.
    ˙˙˙˙ It'll be a pleasant surprise if it works next time I turn it on.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com


    One might suggest that the "Java Trails" tutorials and "Core Java"
    and "Java in a Nutshell" would give an authentic introduction that
    were new then and old now, and correct, if not "current", then and now.

    https://docs.oracle.com/javase/tutorial/

    I'll take a look at those. I didn't think of using those as a teaching material before. I've just gone through some programs I've written
    myself, sort of, so far.


    For something like C++, my first link would be
    "https://cppreference.com", usually. Then after
    the tutorials there is only API javadoc the API documentation,
    which is also surfaced in the IDE's.


    Java11 and C++ 11 are probably appropriate baselines.

    I tend to tell newbies to learn approximately C++98, then move on to a
    project, and learn the rest on the go. Some people have a problem with
    that advice, and think I'm telling people to stop learning after C++98.

    They have a reading comprehension problem.

    For the usual APIs written in C++, C++98 is sufficient anyway.


    I've programmed in both Swing and Win32, more low-level than high-level,
    Java's worker threads and sychronization utilities
    vis-a-vis Win32's message-pump and message-crackers and the user-defined
    pointer in the HWND's MSG, make for various
    accounts then for things like OLE/OLE2/COM/DCOM/ActiveX
    as about the .NET IL ASM CLR runtime with C#, VB.NET, F#,
    C/C++, and so on.


    I sometimes wonder if I should implement my own COM. I forgot about it
    before, but I do have the /Inside COM/ book, for that purpose.



    I leafed through all the Windows 7 sources before,
    at work working on Windows, one task I had was to
    implement highlighting "Find..." matches in the UI,
    I added to highlight all the matches by using the font
    metrics and some calculations and a palette, within a
    few years it was part of the usual UI experience in
    according to things like the "Win32 UI Guidelines/Principles",
    similarly to how font-scaling later became ubiquitous,
    simply because those are useful features. Before "ribbons",
    or, "progressive affordance in UX/UI" and all that there were
    common UI design outlines. Here there's a notion of a
    "Light User Interface" experience or "LUI" that then happens
    to have renderings in "HTML forms" and the like.


    Yes, I also know "Angular/React and SPA frameworks,
    in JavaScript and TypeScript".


    That's interesting. I've almost never done user interfaces at a job.

    I've mostly been a database, performance, backend, middleware and even
    a kernel guy once.

    I tried to debug a core dump of FreeBSD once, but the kernel that dumped
    wasn't the most recent, and I didn't have the "budget" to build a custom
    kernel from a few updates ago to get the debugging symbols, and gave up.

    I've heard Microsoft behaved similarly, and overwrite their debugging
    symbols. I hope it's been fixed, because I believe that was a "bug."

    And I've mostly managed to avoid jobs and projects that involve
    JavaScript.


    Have a nice day!

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Fri Jul 31 23:09:07 2026
    Oh, and I forgot to mention in my last followup, that you shouldn't
    worry about the "regulars." They are just here for "I'm smarter than
    you" posturing, and bring nothing of value whatsoever.

    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Fri Jul 31 08:36:25 2026
    On 07/31/2026 08:07 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 31/07/2026 12:36 AM, Ross Finlayson wrote:
    On 07/30/2026 09:23 AM, Ross Finlayson wrote:
    On 07/30/2026 08:19 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 9:59 PM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some >>>>>> Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering. >>>>>>
    I just claim I know nothing, and do things anyway. I didn't know how >>>>>> to parse the Intel Hex file format, before I added a "binary" loader >>>>>> to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to >>>>>> load and run "binaries" with it soon. I'll probably post screenshots >>>>>> and they'll be hosted on Dropbox, so some of the other regulars won't >>>>>> look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there >>>>>>> are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration, >>>>>>> for the system libraries and default toolset. For example, most
    all of "text-utils" involves "findings" and "matchings", in a sense, >>>>>>> then as with regards to "sorting" and "translation" or
    "transformation",
    which is not addressed.


    So I gather you're interested in algorithms that "parallel" with SIMD >>>>>> and other vector machinery? And you mention "text-utils." Have you >>>>>> read /String Algorithms in C/ by Mailund? He goes into the nitty
    gritty
    details of string matching -- and you can trivially translate the
    code
    to any other programming language as you learn from the book -- in >>>>>> the
    context of DNA matching. At least that's how I remember the book. >>>>>> The
    /about the author/ blurb at the start mentions he's a professor of >>>>>> bio-
    informatics so that seems like a true memory. I'll want to read the >>>>>> book again soon.

    In any case, there are algorithms, string search amongst them, that >>>>>> seem
    eminently serial, and I'm not quite sure SIMD and related extensions >>>>>> are
    immediately applicable. And now I'm sure there are people -- and
    LLMs
    -- just itching to "correct me" about that. Let them, they don't
    bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that >>>>>> I'll
    probably never reply to ever again. They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster, >>>>> of Apple pizza boxes with PowerPC cores, then that also I wrote some >>>>> code for matching sequences with splitting the input and running the >>>>> cluster on the input files and chewing that up, sequences of human DNA >>>>> about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease
    the font, that really blew their mind, these days it's often found
    with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    Now I'm deep in Swing GUI. I had hoped to finish my Intel Hex loader
    before replying, but as I uncommented more of my lines, I ran into
    another null pointer exception. Turns out the GUI code expects to
    find labels in the program, and in my binary there are no labels.

    And to bother people bothered by cross postings, I'll continue.

    I'm also working an a feature where the MIPS program can access a
    "real" terminal. For now, and the convenience of people who don't
    own a VT520,[1] I'm hooking it up to Putty. It turns out Java cannot
    create a named pipe in Windows. So I did that part in C using JNI. At >>>> a guess, that's easier than using the /more modern/ Java foreign
    function interface, since I don't have to #include <windows.h> in the
    surrounding Java code.

    Anyway, I'm now at the part where I have successfully sent and received >>>> a single byte from Putty, via named pipe hosted by the JVM. The next
    part of the task is to use that code to make a Mars /tool/ that hooks
    into the MIPS virtual machine and acts more or less like a physical
    UART
    with interrupts.

    That's probably going to have to be with a reader and writer background >>>> threads, because Java doesn't have a concept of nonblocking reads nor
    writes for RandomAccessFiles. Though full disclosure, I'm not too sure >>>> about that, because I've seen some people talking about channels and
    checking if something is .available(). That doesn't apply to me anyway >>>> because I'm using the raw Win32 ReadFile() and WriteFile() calls in
    blocking mode.

    And once that's done, I'll have to teach myself how to write MIPS
    exception handlers. That'll be fun.

    Now, on the other hand, since my gf is starting to learn Java too, do
    you have any words of wisdom for newbies? I taught her "hello world," >>>> then the Swing "hello world," and then showed her how she can skip all >>>> that with the WindowBuilder in Eclipse.

    What do you suggest as the next step, because she'll be looking for
    employment in a few months when she's confident enough?



    [1] Plus, I'm not sure mine will work without some sort of maintenance. >>>> It'll be a pleasant surprise if it works next time I turn it on.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com


    One might suggest that the "Java Trails" tutorials and "Core Java"
    and "Java in a Nutshell" would give an authentic introduction that
    were new then and old now, and correct, if not "current", then and now.

    https://docs.oracle.com/javase/tutorial/

    I'll take a look at those. I didn't think of using those as a teaching material before. I've just gone through some programs I've written
    myself, sort of, so far.


    For something like C++, my first link would be
    "https://cppreference.com", usually. Then after
    the tutorials there is only API javadoc the API documentation,
    which is also surfaced in the IDE's.


    Java11 and C++ 11 are probably appropriate baselines.

    I tend to tell newbies to learn approximately C++98, then move on to a project, and learn the rest on the go. Some people have a problem with
    that advice, and think I'm telling people to stop learning after C++98.

    They have a reading comprehension problem.

    For the usual APIs written in C++, C++98 is sufficient anyway.


    I've programmed in both Swing and Win32, more low-level than high-level, >>> Java's worker threads and sychronization utilities
    vis-a-vis Win32's message-pump and message-crackers and the user-defined >>> pointer in the HWND's MSG, make for various
    accounts then for things like OLE/OLE2/COM/DCOM/ActiveX
    as about the .NET IL ASM CLR runtime with C#, VB.NET, F#,
    C/C++, and so on.


    I sometimes wonder if I should implement my own COM. I forgot about it before, but I do have the /Inside COM/ book, for that purpose.



    I leafed through all the Windows 7 sources before,
    at work working on Windows, one task I had was to
    implement highlighting "Find..." matches in the UI,
    I added to highlight all the matches by using the font
    metrics and some calculations and a palette, within a
    few years it was part of the usual UI experience in
    according to things like the "Win32 UI Guidelines/Principles",
    similarly to how font-scaling later became ubiquitous,
    simply because those are useful features. Before "ribbons",
    or, "progressive affordance in UX/UI" and all that there were
    common UI design outlines. Here there's a notion of a
    "Light User Interface" experience or "LUI" that then happens
    to have renderings in "HTML forms" and the like.


    Yes, I also know "Angular/React and SPA frameworks,
    in JavaScript and TypeScript".


    That's interesting. I've almost never done user interfaces at a job.

    I've mostly been a database, performance, backend, middleware and even
    a kernel guy once.

    I tried to debug a core dump of FreeBSD once, but the kernel that dumped wasn't the most recent, and I didn't have the "budget" to build a custom kernel from a few updates ago to get the debugging symbols, and gave up.

    I've heard Microsoft behaved similarly, and overwrite their debugging symbols. I hope it's been fixed, because I believe that was a "bug."

    And I've mostly managed to avoid jobs and projects that involve
    JavaScript.


    Have a nice day!


    No man is an island, and any language has its models.


    There's a usual sense of the decorum and the etiquette
    the "obligatory", abbreviated in some slang some decades
    ago as the "ob", alike the "obquote" or otherwise "topicality",
    with the idea being that threads are mostly their own space.


    The joke about Rust and people saying "use Rust because it's
    efficient and it's safe", then the "how's it efficient and
    safe" then the "it's efficient by not being safe and safe by
    not being efficient", reflects on "compromise" vis-a-vis
    "decision", in tradeoffs. Then today's is about CISC and
    RISC, and it's that CISC has complicated instructions and
    RISC has reduced instruction, yet CISC has reduced operands
    and RISC has complicated operands.

    Then, making a deconstructive and reflective account, then
    how that applies to C/C++, which I tend to club together,
    since at some point a C++ program will rely on C linkage,
    or the system libraries, is that C++ has a great account
    of being efficient, while being safe.


    About C++ 03, since it has templates, traits,and RTTI,
    then as with regards to allocator copy and move semantics, is
    that it's a long time between C++03 and C++11, and there's
    something to be said for move semantics yet besides what's
    where C++03 was the standard, that though, C++98 was the
    standard, yet then the finalizations of C99 about ILP
    and the state of the 64-bit world, sort of results that
    then Java8 and C++03 with at least parts of C99 is a sort
    of reasonable profile of the language. Then the idea that
    Java11 and C++11 and C11 all go together, more or less,
    with the idea that C++ makes for some improved allocation,
    references and pointers and ownership or copies and moves,
    and so on, while Java11 is modern in the world of modules,
    and C11 is because that's C's and the system's business,
    then the syntactic sugar of later accounts like "triple
    quotes" or all the various derivatives of the language
    or "little languages" or "domain-specific languages",
    these are considered not necessarily compelling then
    as with regards to that I'm not the biggest fan of
    "var" or "auto" since I see the code in front of me
    and like to see its type. Then the account of "concepts"
    in C++ with regards to type-safe compile-time interfaces
    as a complement to "templates", I think that's a good idea,
    about the commonalities in features of strongly-typed
    languages like C++ and Java, where the theory of types
    and type inference makes for the greatest safety in code,
    according to guarantees the compiler may offer, though
    there's always the PBKAC, "problem between keyboard
    and chair". C++98 is the state of the world in Y2K.

    Accounts of etiquette and decorum may be refreshing,
    it's like Chivalry: chivalry isn't dead, it's just
    curled up in the corner weakly kicking with
    conversation & courtesy.


    That said then it's agreeable that matters of "topicality"
    are germane, relevant, apropos, for a collegiate atmosphere.


    So, "C11, C++11, Java11, it goes up to 11", is a
    reasonable, modern, and largely well-understood,
    language profile.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Fri Jul 31 08:44:51 2026
    On 07/31/2026 08:36 AM, Ross Finlayson wrote:
    On 07/31/2026 08:07 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 31/07/2026 12:36 AM, Ross Finlayson wrote:
    On 07/30/2026 09:23 AM, Ross Finlayson wrote:
    On 07/30/2026 08:19 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 9:59 PM, Ross Finlayson wrote:
    On 07/30/2026 06:20 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 30/07/2026 4:47 AM, Ross Finlayson wrote:


    Thanks for writing. Good luck with that.

    Now, if we attain to some decorum, that would be refreshing.

    Yes, that indeed would be refreshing. I'll refresh myself with some >>>>>>> Pepsi
    before continuing this followup, hold on.



    I "know" Java and am familiar with C/C++, and computer engineering. >>>>>>>
    I just claim I know nothing, and do things anyway. I didn't know >>>>>>> how
    to parse the Intel Hex file format, before I added a "binary" loader >>>>>>> to the Mars MIPS emulator. You know, the one written in Java.

    It's not finished, but I have the basics down, and should be able to >>>>>>> load and run "binaries" with it soon. I'll probably post
    screenshots
    and they'll be hosted on Dropbox, so some of the other regulars
    won't
    look. That's on them.

    Then, here the "Viswath & Charmaigne" is for the idea that there >>>>>>>> are generous, usual sorts of algorithms, here "findings" and
    "matchings", that can be implemented vector-wise scalar-word,
    then that for things like: libc, POSIX tools, parsers, and
    so on, or as among "text-utils", and for character handling,
    that much like many of the distributions like Linux, FreeBSD,
    and so on, have developed and released and made in their tree
    the vectorized versions of string functions, that, there are
    abstract models of regular "text algos" that make sense for
    all modern commodity architectures in their default configuration, >>>>>>>> for the system libraries and default toolset. For example, most >>>>>>>> all of "text-utils" involves "findings" and "matchings", in a
    sense,
    then as with regards to "sorting" and "translation" or
    "transformation",
    which is not addressed.


    So I gather you're interested in algorithms that "parallel" with >>>>>>> SIMD
    and other vector machinery? And you mention "text-utils." Have you >>>>>>> read /String Algorithms in C/ by Mailund? He goes into the nitty >>>>>>> gritty
    details of string matching -- and you can trivially translate the >>>>>>> code
    to any other programming language as you learn from the book -- in >>>>>>> the
    context of DNA matching. At least that's how I remember the book. >>>>>>> The
    /about the author/ blurb at the start mentions he's a professor of >>>>>>> bio-
    informatics so that seems like a true memory. I'll want to read the >>>>>>> book again soon.

    In any case, there are algorithms, string search amongst them, that >>>>>>> seem
    eminently serial, and I'm not quite sure SIMD and related extensions >>>>>>> are
    immediately applicable. And now I'm sure there are people -- and >>>>>>> LLMs
    -- just itching to "correct me" about that. Let them, they don't >>>>>>> bother
    me.


    The mentioned initialisms are, or were, awful sci.math trolls.

    In the mean time, I've gathered a few names here in comp.lang.c that >>>>>>> I'll
    probably never reply to ever again. They know who they are.





    Thanks for the book reference, I'll look to it.


    Decades ago when at the university I had a job working
    for the biology department and what it was was making a graphical
    front-end in Java to launch BLAST gene-sequence search on what
    had as about 48 units / 96 cores Sun Silicon Grid Engine MPI cluster, >>>>>> of Apple pizza boxes with PowerPC cores, then that also I wrote some >>>>>> code for matching sequences with splitting the input and running the >>>>>> cluster on the input files and chewing that up, sequences of human >>>>>> DNA
    about 9 gigabytes, "seq-reader".

    I made a simple dialog with making the command line arguments
    for BLAST to launch, then added a features to increase or decrease >>>>>> the font, that really blew their mind, these days it's often found >>>>>> with "Shift-plus and Shift-minus".

    Java's my main, if I know anything, that's what I know.


    Now I'm deep in Swing GUI. I had hoped to finish my Intel Hex loader >>>>> before replying, but as I uncommented more of my lines, I ran into
    another null pointer exception. Turns out the GUI code expects to
    find labels in the program, and in my binary there are no labels.

    And to bother people bothered by cross postings, I'll continue.

    I'm also working an a feature where the MIPS program can access a
    "real" terminal. For now, and the convenience of people who don't
    own a VT520,[1] I'm hooking it up to Putty. It turns out Java cannot >>>>> create a named pipe in Windows. So I did that part in C using
    JNI. At
    a guess, that's easier than using the /more modern/ Java foreign
    function interface, since I don't have to #include <windows.h> in the >>>>> surrounding Java code.

    Anyway, I'm now at the part where I have successfully sent and
    received
    a single byte from Putty, via named pipe hosted by the JVM. The next >>>>> part of the task is to use that code to make a Mars /tool/ that hooks >>>>> into the MIPS virtual machine and acts more or less like a physical
    UART
    with interrupts.

    That's probably going to have to be with a reader and writer
    background
    threads, because Java doesn't have a concept of nonblocking reads nor >>>>> writes for RandomAccessFiles. Though full disclosure, I'm not too
    sure
    about that, because I've seen some people talking about channels and >>>>> checking if something is .available(). That doesn't apply to me
    anyway
    because I'm using the raw Win32 ReadFile() and WriteFile() calls in
    blocking mode.

    And once that's done, I'll have to teach myself how to write MIPS
    exception handlers. That'll be fun.

    Now, on the other hand, since my gf is starting to learn Java too, do >>>>> you have any words of wisdom for newbies? I taught her "hello world," >>>>> then the Swing "hello world," and then showed her how she can skip all >>>>> that with the WindowBuilder in Eclipse.

    What do you suggest as the next step, because she'll be looking for
    employment in a few months when she's confident enough?



    [1] Plus, I'm not sure mine will work without some sort of
    maintenance.
    It'll be a pleasant surprise if it works next time I turn it on. >>>>> --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com


    One might suggest that the "Java Trails" tutorials and "Core Java"
    and "Java in a Nutshell" would give an authentic introduction that
    were new then and old now, and correct, if not "current", then and now. >>>>
    https://docs.oracle.com/javase/tutorial/

    I'll take a look at those. I didn't think of using those as a teaching
    material before. I've just gone through some programs I've written
    myself, sort of, so far.


    For something like C++, my first link would be
    "https://cppreference.com", usually. Then after
    the tutorials there is only API javadoc the API documentation,
    which is also surfaced in the IDE's.


    Java11 and C++ 11 are probably appropriate baselines.

    I tend to tell newbies to learn approximately C++98, then move on to a
    project, and learn the rest on the go. Some people have a problem with
    that advice, and think I'm telling people to stop learning after C++98.

    They have a reading comprehension problem.

    For the usual APIs written in C++, C++98 is sufficient anyway.


    I've programmed in both Swing and Win32, more low-level than
    high-level,
    Java's worker threads and sychronization utilities
    vis-a-vis Win32's message-pump and message-crackers and the
    user-defined
    pointer in the HWND's MSG, make for various
    accounts then for things like OLE/OLE2/COM/DCOM/ActiveX
    as about the .NET IL ASM CLR runtime with C#, VB.NET, F#,
    C/C++, and so on.


    I sometimes wonder if I should implement my own COM. I forgot about it
    before, but I do have the /Inside COM/ book, for that purpose.



    I leafed through all the Windows 7 sources before,
    at work working on Windows, one task I had was to
    implement highlighting "Find..." matches in the UI,
    I added to highlight all the matches by using the font
    metrics and some calculations and a palette, within a
    few years it was part of the usual UI experience in
    according to things like the "Win32 UI Guidelines/Principles",
    similarly to how font-scaling later became ubiquitous,
    simply because those are useful features. Before "ribbons",
    or, "progressive affordance in UX/UI" and all that there were
    common UI design outlines. Here there's a notion of a
    "Light User Interface" experience or "LUI" that then happens
    to have renderings in "HTML forms" and the like.


    Yes, I also know "Angular/React and SPA frameworks,
    in JavaScript and TypeScript".


    That's interesting. I've almost never done user interfaces at a job.

    I've mostly been a database, performance, backend, middleware and even
    a kernel guy once.

    I tried to debug a core dump of FreeBSD once, but the kernel that dumped
    wasn't the most recent, and I didn't have the "budget" to build a custom
    kernel from a few updates ago to get the debugging symbols, and gave up.

    I've heard Microsoft behaved similarly, and overwrite their debugging
    symbols. I hope it's been fixed, because I believe that was a "bug."

    And I've mostly managed to avoid jobs and projects that involve
    JavaScript.


    Have a nice day!


    No man is an island, and any language has its models.


    There's a usual sense of the decorum and the etiquette
    the "obligatory", abbreviated in some slang some decades
    ago as the "ob", alike the "obquote" or otherwise "topicality",
    with the idea being that threads are mostly their own space.


    The joke about Rust and people saying "use Rust because it's
    efficient and it's safe", then the "how's it efficient and
    safe" then the "it's efficient by not being safe and safe by
    not being efficient", reflects on "compromise" vis-a-vis
    "decision", in tradeoffs. Then today's is about CISC and
    RISC, and it's that CISC has complicated instructions and
    RISC has reduced instruction, yet CISC has reduced operands
    and RISC has complicated operands.

    Then, making a deconstructive and reflective account, then
    how that applies to C/C++, which I tend to club together,
    since at some point a C++ program will rely on C linkage,
    or the system libraries, is that C++ has a great account
    of being efficient, while being safe.


    About C++ 03, since it has templates, traits,and RTTI,
    then as with regards to allocator copy and move semantics, is
    that it's a long time between C++03 and C++11, and there's
    something to be said for move semantics yet besides what's
    where C++03 was the standard, that though, C++98 was the
    standard, yet then the finalizations of C99 about ILP
    and the state of the 64-bit world, sort of results that
    then Java8 and C++03 with at least parts of C99 is a sort
    of reasonable profile of the language. Then the idea that
    Java11 and C++11 and C11 all go together, more or less,
    with the idea that C++ makes for some improved allocation,
    references and pointers and ownership or copies and moves,
    and so on, while Java11 is modern in the world of modules,
    and C11 is because that's C's and the system's business,
    then the syntactic sugar of later accounts like "triple
    quotes" or all the various derivatives of the language
    or "little languages" or "domain-specific languages",
    these are considered not necessarily compelling then
    as with regards to that I'm not the biggest fan of
    "var" or "auto" since I see the code in front of me
    and like to see its type. Then the account of "concepts"
    in C++ with regards to type-safe compile-time interfaces
    as a complement to "templates", I think that's a good idea,
    about the commonalities in features of strongly-typed
    languages like C++ and Java, where the theory of types
    and type inference makes for the greatest safety in code,
    according to guarantees the compiler may offer, though
    there's always the PBKAC, "problem between keyboard
    and chair". C++98 is the state of the world in Y2K.

    Accounts of etiquette and decorum may be refreshing,
    it's like Chivalry: chivalry isn't dead, it's just
    curled up in the corner weakly kicking with
    conversation & courtesy.


    That said then it's agreeable that matters of "topicality"
    are germane, relevant, apropos, for a collegiate atmosphere.


    So, "C11, C++11, Java11, it goes up to 11", is a
    reasonable, modern, and largely well-understood,
    language profile.



    It's like when all the browsers were of a sort of
    common profile, yet they were always one-upping each
    other, then Edge came out after IE was going away,
    about Mozilla and WebKit, and about Chrome, that being
    about it in the monoculture of the day, then at some
    point, or one day, there was a day, when all the different
    browser versions were "version 80", and so they have
    modules in the JavaScript and so on, and a conformant
    account of UI-Events and HTML forms, and about fetch,
    or with regards to the W3C and What-WG, that, omitting
    some things like the giant, giant cookies now with
    RAM and CPU of web-workers of client-side storage,
    that writing to browsers "browsers version 80" with HTML5,
    UI-Events, and fetch, makes for a stable, well-understood,
    standards-based, reasonably locked-down not locked-in,
    runtime.

    Here the usual account after "single-page app"
    is "single-endpoint backend", including the app,
    not that I care particularly, since, "I don't app".

    Also I don't "GPU".

    Generics make for great abstractions.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Fri Jul 31 20:47:08 2026
    Subject: Quo Vadis: Extend investigations to WebNN (Re: I wrote Hack VM for ă-WAM from scratch)

    Hi,

    Since we have a good flow, and since NPUs
    share the same system memory, and possibly a
    lot of other traits as well with the GPU in
    libary(edge/furryhaze), we just developed.

    The idea here is to do first some off Dogelog
    experiments and then create a library that
    provides npu_exec/2 for pi-WAM code, the analogue
    to gpu_exec/2. A name suggestion would be:

    - edge/ironpaw.p
    The new Prolog library

    The NPU will be clearly underutilized when only
    doing scalar, not sure whether this is even
    permitted. But in the long run it is planned
    that pi-WAM will have vector and matrix traits
    anyways. Here is an example goal can be run

    with matrix and quantization traits:

    ?- [X,Y] ins 0..3, Z is X*2+Y*3+4, T is X*3-Y*2-1

    These traits will demand some CPU, GPU
    and NPU translation. If we keep these traits
    simple, we might indeed arrive at concrete
    realization from the same abstract machine

    LoL, ironpaw the little brother of ironfist.

    Bye

    Mild Shock schrieb:
    Hi,

    Just downloading some other person's code

    I didn't do that, I wrote Hack VM for pi-WAM
    from scratch, over the last 4 weeks. I came
    back from holidays on end of June 2026, and now

    we have end of July 2026. But its only possible
    because the instruction set is very smal, like
    ca. 8 functions and ca. 8 modes and ca. 8 conditions,

    so its ca. 8 x 8 x 8 = 512 opcodes, each has an
    A parameter and a D parameter simultaneously.
    It has currently the following CPU backends:

    ˙- Nnow supports interleaved synchronous emulation.
    ˙- Now supports warp parallelism via Java platform threads.
    ˙- Now supports warp parallelism via Python system threads.
    ˙- Now supports warp parallelism via JavaScript worker threads.
    ˙- Note: For Python free threads are not yet fully tested.
    ˙- Note: For JavaScript web workers are not yet fully tested.

    https://www.dogelog.ch/typtab/doclet/book/14_install/05_notes22/110_224.html


    But frankly I came to encounter Hack not from
    the usual university curriculum web resources,
    but indirectly through a post about a Prolog

    emulation of Hack, using constrained horn clauses (CHC):

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    The binary encoding is currently that the functions,
    modes and conditions eat up a nibble (4-bit), in
    total 12-bit, which I use then 10-bit for A parameter

    and 10-bit for D parameter. I used AI freemium, Codex
    by ChatGPT from within IntelliJ to do some fragment
    code translations automatically from Java to JavaScript

    or from JavaScript to Python.

    Have Fun!

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    As I said elsewhere, I'm not that interested in Hack, but virtual
    machines and related code.˙ I mentioned another book, but now I feel
    I should ask if you've also read /Crafting Interpreters/ by Robert
    Nystrom?˙ I myself am still on chapter 5, so I'm still in the Java
    part of the book, so I replaced comp.lang.c++ with comp.lang.java, and
    am fairly excited to have a working interpreter.

    This is the type of book people only properly learn from by typing in
    the code themselves.˙ Just downloading some other person's code, and
    running an interpreter isn't exactly a learning experience.˙ So I'm
    taking my time with it, and interleaving it with my Mars adventures.


    In any case, I do wish you to have fun with your own WebGPU project,
    whatever that is about!




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Fri Jul 31 12:55:22 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/30/2026 07:05 AM, Ross Finlayson wrote:
    On 07/30/2026 06:49 AM, Ross Finlayson wrote:
    On 07/27/2026 11:45 AM, Ross Finlayson wrote:
    On 07/27/2026 11:44 AM, Ross Finlayson wrote:
    On 07/27/2026 11:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with
    some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets >>>>> would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    [ viswath-charmaigne.txt ]








    [ viswath-charmaigne-20260730.txt ]

    Drift-Find

    About the finding, then for matching, the idea of "drift-find" is as
    distinct "anchored-find", about that drift-find is about iterating over
    offsets and finding matches, without testing each match as
    anchored-test-match.

    So, the standard algorithms match byte-wise according to
    properties/predicates (that at least one predicate matches at least one property) and
    codepoints/rangepoints (that the byte is within the range, inclusive, of
    the pair of rangepoints).

    Then, when matching word-wise, and drifting the input pattern over the
    input data word, then it's ambiguous simply OR'ing together the standard algorithm SA
    results.

    AB pattern
    AAB data <- ambiguous whether found at offset 0 or 1, or both

    ABA pattern
    ABABA data <- ambiguous whether found at offset 0, 1, 2

    Then, the idea is to implement an account of the "drift-palindromic" or
    "keyway comb", that instead of the SA making 0xFF on finding and 0x00 on
    not finding,
    that the drifting accumulate with a sparseness matching from the front,
    and sparseness
    matching from the back, and that the combined run must have a length
    matching the
    pattern length, then that it's an unambiguous match, the result of the finding.

    forward -> 1011011101111 ... k-many bits for pattern of length k
    reverse -> 0100100010000 ... k-many bits for pattern of length k

    Then the idea is that in the drift, as for drift-slip and drift-slide,
    that the result of the standard algorithm is converted to each of the
    forward and
    reverse, those being put on the stack or otherwise collected, then that
    only when their
    union is all 1-bits, is it un-ambiguously alike 0xFF.

    The idea is that the combs are generated, then about whether they confirm
    the match, or, cancel the match, or about that the findings fiddle the
    combs, so that only the first byte of matches get indicated as found,
    and each
    of the first bytes, as drift is to find all offsets where the pattern
    matches.

    Then, the idea of progressive combs breaks the SBC-less, with the idea of calculating all the forward and reverse combs, and to give combs at
    different offset different progressions of density/sparsity of bits, then to result that only matching combs result all set bits and only where they
    match. So,
    then it is BC-less, yet stalls are introduced when storing on the stack the combs each, then that they are worked together what result that only
    the full matches are found, that S < B < C the cost.

    Then, the idea might be to first make the naive match, and then make
    the cancel match, that the arithmetic would work out making no-ops
    on the matches, and cancels on the mis-matches, since the arithmetic
    would be indicated by an already ambiguous match, else no arithmetic.

    So, the idea is to store off pairs of combs for each byte offset, or
    2W-many, then to go through the combs and any mis-match results
    cancelling at
    that offset.

    Here that might be alike "optimistic drift", where comb mis-matches are
    only to make cancels, else matches: canceling the first byte of the match.

    So, the idea is developing to a) make the ambiguous naive match,
    then b) make the cancel match, off the first bytes of those.

    So, the idea is to drift forward, and union together all the findings,
    then drift backward, and zero the first byte if it's not a match.


    Then, the drifting case is perhaps much simpler than the drift-palindromic
    or the comb-fiddling, with the idea that drift-forward makes all matched
    bytes their characters, then drift-revert invalidates the first
    _character_ of
    matches on the way back, then that it results that any matches have their original length, yet, that would possibly invalidate trailing characters
    of an earlier
    match, thus getting back into the idea of the drift-palindromic and comb-fiddling.


    Then, the idea might be to make for canceling the first byte of mismatches, that might be a last byte of an earlier match, about: going back and
    forth setting the first byte, setting the second byte, and so on, or as
    with regards
    to whether the output of the algorithm is as sequence of offsets of
    first bytes
    instead of otherwise the SA offset-indicator bit-string.

    Since the patterns might overlap, then the offset-indicator bit-string
    itself is ambiguous, about whether to return the first finding, or
    plurally all
    the offsets where findings occur.

    Then, the idea would be to result an offsets tuple, where the offsets
    range from 0 to W-1, eg 8, 16, 32, 64 for 64, 128, 256, 512 registers,
    then that those each fit in a byte, for a word of offsets, where the
    maximum offset thus difference in offsets is W-1, and the maximum
    count of offsets is W. Then this could be converted to the offset-indicator bit-string, of starts of matches, instead of saturation of matches.


    char-wise indicator string: bits are set
    fixed-wise indicator string: starts are set

    Then, it seems for only marking the first matching character on the
    match, yet, for the initial/final trailing/leading, then it's wanted to
    make the bit-string with the plural matches.


    "Parallel String Matching
    Philip Pfaffe, Martin Tillmann, Sarah Lutteropp, Bernhard Scheirle, and
    Kevin Zerr"


    One idea then is to make counters, and only bytes with counters being
    the length of the fixed-pattern, are included, about matching any byte
    in the pattern to any aligned byte in the input, and counting those up
    what would be the combinations of all the substrings, that all the
    combinations of the substrings match.

    Still, not knocking out the first character won't eliminate the starts,
    yet not each character is a start.


    Then, the idea of "count of matches", may simply enough make
    for that differences from 0 indicate overlapping.

    This then is to drift along, and find the 0xFF matching, increment
    a counter for that offset, and then when going along, that each
    increment is a start, and each decrement is an end, then though
    at multiples of K, is also an end and a start, if no differences.

    Then, only for fixed-patterns, it seems the idea is to find the starts
    by checking each offset in the drift, and what results matching,
    up to that length, gets incremented, or also, that it can just be
    any positive difference indicates a start, so the pattern can be
    repeated, then drifted across, and the starts will have increases,
    and the non-starts won't.

    "M. O. Klekci: Filter Based Fast Matching of Long Patterns by Using
    SIMD Instructions"

    https://www.stringology.org/

    "Handbook of Exact String-Matching Algorithms" http://www-igm.univ-mlv.fr/~lecroq/string/


    Then, for making drift-diff, is that the pattern can simply be made
    repeated
    in the pattern, and it only needs to drift offsets K-1 many, then the
    counts
    will have been accumulated, for the diffs to be computed.

    W/K

    About building the repeated pattern, there is broadcast or the like,

    ABC .
    012012012012 ...
    ABCABCABC ...

    then, the idea of not having a loop, or un-rolling the loop, is basically
    about that there is binary subdivision, to not explode the number
    of statement blocks, into block-with-nops, and also to have the
    shorter statement blocks for the shorter patterns.

    So, using the standard algorithms SA for matching, then the predicate/rangepoints of the fixed pattern (a fixed-length predicate or fixed-length string or
    rangepoints), has that drift invokes the standard algorithm, only to
    compute the
    counts, then separating the SA the predication, from moving off the
    result, that the
    counts are to be collected, then made their diffs.

    ceil log_2 K -> count drift-shifts

    Then, for example where K = 1, log_2 1 = 0, the repeated shift makes the
    match at once.

    Then, there still needs be checking either "diff" or "even modulo" from
    the previous match, its count.

    So, for the fixed pattern alone, then, for the cost of making it
    repeated in the pattern, then for shifting it K-1 many times, and
    accumulating the matches, is
    for having W many entry-points, then the rotation simply occurs K-1
    times in the
    block, un-rolled.

    Then there's the problem of a) straddling when the pattern straddles the
    word at B, and b) when the pattern straddles multiple words. The idea is
    that the
    prefixes start, and then the remaining pattern gets multi-drifted, which
    would require
    enough depth of those rotations, to cover the length of the pattern, or
    a word,
    pulling forward the pattern, then also, the pattern, will need to be
    stored in its entirety or as to
    that it's loaded from memory in however many words it may straddle.

    For example, for pattern ABCD, when the input ends AB, then there's an
    anchored match of CD, then to follow with starting over drifting, where
    K < W. For the
    pattern AAAA, when the input ends AAA, then each of A, AA, AAA need
    anchored matches,
    or drifting with that "the initial segment pattern is found", ..., about
    how to
    treat SHIFT and ROTATE so that basically it can make for the repeated
    pattern, to start rotated
    left each of the offsets, about making counts of those. Point being, the findings of the
    straddlings won't complete until as many words have passed as K fits, or
    the last word, and, the
    partial matches from the previous word, carry-in and are to accumulate,
    that their offsets
    are in the previous word.

    About the instruction cache, it makes sense to just have one block, and
    then just make it so that the arithmetic just results nops, ....

    SA: star
    standard algorithms for matching patterns, anchored

    SA: fixed
    standard algorithms for anchored/drift fixed strings

    About the binary indicator-strings, is that 8 words worth of those can
    fit into a vector register, about GW, the general purpose word, and Gw,
    in bits, about
    that there are 64-bits about which to run BSF/FFS on and make to emit
    offsets.

    Ideas about signature of reported findings/matches include:

    1) a context struct, and functions to return count,
    to compute the size of the return buffer, then
    functions to populate the buffer with the offsets,
    and about character and byte offsets.

    2) a fixed-size output buffer, the function accepts the
    size and the buffer and returns the count of elements in it,
    which are offsets, returning -1 at EOF (EOI)

    3) a fixed-size output buffer, less than pattern/expression max,
    making capture groups

    4) a callback function, called with offset

    5) one pass to compute bounds, one pass to fill bounds


    Example: Deflate algorithm, compression/decompression

    Compression involves a 32 kiB window, where back-references
    would be, then the idea that in a block of up to size 64kiB, then
    the heavy computation is the longest-duplicate detection or
    "the finding of Huffman codes", as with regards to finding the
    most and longest duplicates that get the shortest codes, about
    finding the duplicate, or for long runs or the highly compressible,
    breaking those down into moduli.

    So, the idea would be to make it drifting over itself, that the patterns naturally enough start from the front,
    that there are 32kiB / WB words in the window, eg 2^`5 / 2^7 = 2^8, for
    128 bits, 256 words, or that larger vectors would make for larger
    windows, with
    just fixing the ratio, then that from the front gets into matching the characters, that each word
    (8 = 64b, 16 = 128b , 32 = 256b, 64 = 512b, ... bytes) should make its
    own Huffman codes, then to combine those, making candidates according to
    those locales,
    then to make the account for "long" runs by a histogram of modes, and
    "common" runs
    as of the combinations of the modes, ....

    Then, about building histograms, the idea is to make the pattern the rangepoints of itself, i.e., just duplicating the input data, and using
    that as the
    pattern, then drifting that along making counts, across the word, then
    each byte will
    have how many times it was matched, then to take the max of those,
    building the
    histogram from the highest to lowest multplicities (cardinals of the multisets).

    Then, there's whether those are regular separators, or parts of regular substrings, then about high/low cardinality with regards to principals,
    modes,
    majors, minors, and the long tail, then about the ordering-statistics,
    to build out
    histograms to make counting arguments about what those are.



    Looking a bit into the object file organization (PECOFF, ELF) it seems that there are the sections as map to segments with regards to the CALL instructions, about the idea then that the calls will be with regards to
    the segments,
    about how big the segments can be, and then about the range of offsets so indicated, or about that many segments, each about PAGE_SIZE size, are indicated,
    about the locals.


    nybble 1: alnum punct white coded

    nybble 2:

    alnum: alpha digit

    punct: inner outer joiner affix

    white: nl space horz vert

    coded: ctrl utf8 nul

    nybble 3:

    alnum/alpha: upper lower

    alnum/digit: zero whole

    white/horz: space tab

    white/vert: nl cr ff vt

    coded/ctrl: single prefix left right

    coded/utf8:

    punct/inner: arith bool cmp res

    punct/outer: quote paren bracket brace

    punct/joiner: separator delimiter segment

    punct/affix: unary ref kleene lang



    nybble 4:

    punct/inner/arith: plus minus times slash
    punct/inner/res: modulo leftshift rightshift
    punct/inner/bool: and or xor
    punct/inner/cmp: eq lt gt

    punct/affix/unary: bang tilde minus
    punct/affix/ref: dollar asterisk ampersand dot
    punct/affix/kleene: plus star
    punct/affix/lang: period question exclamation

    punct/outer/quote: single double backtick

    punct/outer/paren: paren-left paren-right brace-left brace-right punct/outer/brack: angle-left angle-right square-left square-right

    punct/joiner/separator: comma semicolon
    punct/joiner/delimiter: comma pipe tab
    punct/joiner/connector: underscore colon slash backslash

    Here the idea is that breaking out punctuation
    is about that the usages are overloaded, so that
    the properties have that the characters have multiple
    properties, so that then according to the context,
    then as by the properties are found matched the predicates.

    Then, the organization is a curated sort of emphasis for
    common source files their usual syntax, or the common.
    Then, the idea is that grammars can provide their own
    property tables, then that here the first byte is always
    included, to make for UTF-8 and NUL and control characters,
    and the second byte is "source text" and also "data text".


    Then, the standard algorithm will be matching one or more
    bytes, here usually two bytes, that the indicated terminals
    as they usually are in expressions and grammars, get matched,
    that they match the mask of the first byte and the second byte.

    Then, the grammar-provided properties would usually
    indicate escapes, comments, and additions to the above,
    and accounts of characters that introduce ambiguity, to
    be disambiguated. As well, the main tables could be
    over-ridden, about specific differences from "C-style"
    languages.

    https://justine.lol/lex/

    So, syntax has the "main" and "source" and then expression/grammar driven.

    About the logic, there gets involved how to make composable what
    result the "anchored" or "atomic" (sub-)expressions and terminals.

    The properties/predicates and codepoints/rangepoints can be combined,
    where leaving 0's matches none.

    The matching of the properties/predicates should be inclusive or
    exclusive, "match all" or "match any", here it's default "match any"
    (so predicated).

    The compositions of "yes/no/maybe" and "union/intersect/setminus"
    are to get figured out, how combinations of predicates are to be combined, basically as of the composition of classes, besides AND, IOR, XOR, NOR.

    The, the element of compositions is to result the character classes,
    then as with regards to the character classes having both the predicates/properties and codepoints/rangepoints, the main or default
    ones, and then
    union/intersection/setminus of those, and about complement classes.


    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_class

    https://tc39.es/ecma262/multipage/text-processing.html#table-nonbinary-unicode-properties
    https://unicode.org/reports/tr18/#General_Category_Property https://unicode.org/reports/tr18/#Compatibility_Properties

    The Unicode TR18 for regular expressions is very useful and could be
    considered normative.

    https://unicode.org/reports/tr18/#Resolving_Character_Ranges_with_Strings


    About shift/rotate on the vector registers, it seems that there's a
    problem since there's a limit of 16 bytes for 128 bits (SSE2) , for packed-shift-right-logical-double-qword, PSRLDQ, the xmm register, that
    there isn't a byte-wise shift, for ymm/zmm
    registers, as they get split into lanes, ..., and shifting both the double-quadwords would make a
    void in the middle. Then, the ymm/zmm would have to be treated as
    separate units, for
    example piling in the instructions on both sides using the same offsets
    and computing for
    alternatives and so on.

    https://www.felixcloutier.com/x86/ https://mischasan.wordpress.com/2011/04/04/what-is-sse-good-for-2-bit-vector-operations/
    https://www.scs.stanford.edu/~zyedidia/arm64/sveindex.html

    It looks similar with ARM.

    Then the idea would be to work up to double-quadwords or 128-bits the
    16-bytes, as with regards then to making the acts being round-robin'ed
    to each of the
    packed double-quadwords, then about updating the anchors the offsets in lock-step.

    Then it's figured that the acts on the machines, that output the
    bit-string indicators of the byte offsets about smearing/unsmearing and
    byte and character
    offsets, would have a tag of what was found and matched in terms of the expression/grammar,
    that resulted the indicators, then that it's serialized what makes the matches/productions.

    Then for ARM NEON it looks like there's no double-quadword shift (128-bits) only each of the packed dwords (32-bit), "SIMD" on NEON.

    There is a REV64 instruction on ARM as might be about BSWAP, then with
    the idea though that shift byte-wise is the idea, and NEON instructions
    are "on each double-word", 32-bits.

    Then it might make sense just to divide-and-conquer, yet the lock-step
    item gets involved with having a common view of the input data and a
    given offset as
    the current sort of state-of-the-machine.

    "VEXT can be used to implement a moving window on data from two vectors,
    useful in FIR filters. For permutation, it can also be used to simulate
    a byte-wise
    rotate operation, when using the same vector for both input operands."

    -- https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/coding-for-neon---part-5-rearranging-vectors

    So, that then can effect "vector byte-wise right shift", basically loading
    from the end of the zero vector and the beginning of the vector to
    be shifted.

    It's considered a MOV so it leads to stalls. Then in SVE there's EXTQ,
    which is also organized about 128-bit double-QWORDS.



    About smearing and byte/character offsets then, those would mostly
    go to the vector registers as a bit-sequence indicator will indicate
    starts of characters in the byte-sequence.




    Yeah, I've been looking at this, and here's what it seems
    is the profile, of the resources, about the vector units,
    on Intel/AMD and ARM.

    So, first there's that MMX since Pentium is still alive,
    yet, it's considered sort of aside what are the general
    purpose registers, if for a sort of "general-auxiliary"
    use, about the "16 general purpose registers". Then ARM
    mostly has "32 general purpose registers", with the idea
    that Intel has 16 (or less) general purpose + registers
    + 8 old floating-point/MMX SIMD vectors.

    So, there are basically 16 general purpose registers
    on each, and 2 of those on ARM.

    Then, the vector registers basically make for "SSE 4.2"
    or here for what's SSE3 yet beyond SSE2, about there being
    vector registers now essentially separate from general registers.

    So, here the goal is to use the vector registers like large
    scalars, or at least as arrays of bytes. Well, that's not
    exactly the goal of the vector/packed/SIMD registers. So,
    there's a common subset of functionality, and limits within
    the vector registers, about what can be treated as scalars
    (with the byte as least-addressable, shift & rotate, and
    with the logical operations and compare that go straight
    up and down, in terms of two vector registers their lanes
    their words their bytes their bits).

    Basically then there's "double quad-word" or 128 bits,
    in both the Intel/AMD and ARM, that's about the biggest
    "scalar" word there, as the data type, for the common
    subset of instructions abstractly they support.

    Then, the SSE4.2, has 128-bit vector-registers, that
    can be operated upon with their DQ for double-quadword
    variants of instructions, alike scalars, or at least
    for the byte-wise, if not necessarily the bit-wise,
    with regards to shift & rotate even multiples of 8 bits.

    Then AVX with 256-bits, is two of those side-by-side,
    similarly AVX-512 then, is two of those side-by-side,
    and ARM SVE, is one or more of those side-by-side,
    128-bit double quad-words with "byte-wise" moves like
    shift & rotate, with regards to using "extract" on
    ARM to simulate shift & rotate multiples of 8-bits.

    So, this sort of tiling of the register files, thinking
    of the registers the memories as a rectangular block of
    bits, about the register transfer logic moving the bits
    or computing the bits, basically gives 128-bit 16-long
    blocks, that can be treated like "byte-addressable scalars".

    SSE4.2: 1 block (16-many x 128-wide)
    ARM NEON: 2 blocks (32-many x 128-wide)
    AVX: 2 blocks (16-many x 256-wide)
    AVX2: 4 blocks (32-many x 256-wide)
    AVX-512: 8 blocks (32-many x 512-wide)
    ARM SVE: 2-20 blocks (32-many x 128-2048-wide)

    where all the widths are essentially separate units
    run together in lock-step of "double quad-word type size"
    byte-addressable "scalars".

    So, algorithms should be designed to work in 1 block,
    in the register file, and then scale in these blocks,
    for vector-wide scalar-word operations (byte-wise).

    Here then the idea is that the "character machine"
    basically implements a little scheduler and then
    making the various findings and matchings in the blocks.



    Then, figuring for making a "scheduler" is after a "plan",
    figuring that the expressions and grammars have their
    events of representatives and productions, then as
    with regards to the operation of "matchings" and
    "parsings", in the machine, then as with regards to
    the static machine, "the engine".


    So, overall, the functional units of the machine and engine
    are 128b = 16B wide, and 16-registers deep, then as with
    regards to the notion of scheduling the units as with
    regards to various and evolving "standard algorithms" SA,
    and then a model of the 64b = 8B wide, and 8-registers deep,
    for fallback to core 64-bit general purpose their auxiliary registers,
    or as for reference and fallback implementations in higher-level
    languages.










    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Ross Finlayson@3:633/10 to All on Fri Jul 31 13:05:34 2026
    Subject: Re: Viswath & Charmaigne (vector-wide scalar-word and character machines)

    On 07/31/2026 12:55 PM, Ross Finlayson wrote:
    On 07/30/2026 07:05 AM, Ross Finlayson wrote:
    On 07/30/2026 06:49 AM, Ross Finlayson wrote:
    On 07/27/2026 11:45 AM, Ross Finlayson wrote:
    On 07/27/2026 11:44 AM, Ross Finlayson wrote:
    On 07/27/2026 11:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with >>>>>> some
    chat-bots about making some sense of the "vector-wide scalar word" >>>>>> and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets >>>>>> would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    [ viswath-charmaigne.txt ]








    [ Excuse, replied to an earlier post before dropping comp.lang.c, comp.lang.c++, please ignore, as follow-ups are to comp.theory.
    It's appreciated the tolerance or absence thereof. -- ]




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sat Aug 1 02:33:53 2026
    Subject: RCan library(ironpaw) repurpose FFT hardware [Glimps into Ryzen AI 7 350] (Re: Hack ecosystem ignorance paired with paranoia)

    Hi,

    One could believe the AI boom is a kind of
    Charles Darvin Galapagos Island Evolution
    Trick of repurposing FFT hardware.

    But this is of course not true, HPC, high
    performance computing, has already defined
    level 3 ops years ago.

    But look at this rabit hole of Ryzen AI 7 350
    NPU design, which is a stripped down Xilinx,
    stripped of exotic FFT features:

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    But the core feature, very long instruction
    word (VLIW) engines, with hardware accelerated
    GEMMs, scattered in grids of ASIC tiles,

    connected by DMA and NoC, is even not very
    specific to AMD, you find it also in Snapdragon /
    Qualcomm SoCs for AI Laptops.

    Bye

    P.S.: My brain playing tricks, why should I
    name a library(ironpaw) ? From the same
    article above. Maybe WebNN is easier to use?

    "mlir-aie contains a Python framework called
    IRON that generates LLVM MLIR code representing
    a workload that runs on the NPU, including the
    code that runs on each compute tile processor

    and the configuration of DMAs and other hardware.
    Kernels for the compute tile processor can be
    written in C++ and compiled either with the
    open-source llvm-aie Peano compiler, which is

    a fork of LLVM that adds support for the Xilinx
    AI engine processors, or with the closed-source
    Xilinx CHESS compiler, which is included in Vitis.
    In simple cases the kernels can also be directly

    written in Python with IRON."

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/


    Mild Shock schrieb:
    Hi,

    Who exactly is the thief? Does this person
    have stats in the Rogue class in dungeons
    and dragons?

    The conspiracy theory of a stealing of Torso VDBE,
    by Rossy Boy, is probably a result of complete
    ignorance of the Hack ecosystem.

    Hack is a very popular computer science project,
    with a couple of subprojects in hardware and
    software. It goes also by the name Nand to Tetris,

    and is programming language agnositic. You can do
    Hack experiments in any programming language, be
    it BASIC, ADA or Rust. Nobody cares.

    The gist are projects like here, first to
    educate yourself about Hack:

    https://www.nand2tetris.org/course

    And then to use Hack in different contexts:

    https://www.nand2tetris.org/copy-of-talks

    For didactic purposes, I used Hack for my WebGPU
    experiment. I didn't even take a look at Torso
    VDBE, why should I? Hack is nicely documented,

    has even a book, and fusing the two 16-bit
    instruction types A and D, into a single 32-bit
    instruction stream, is nowhere patented.

    Bye


    Johann 'Myrkraverk' Oskarsson schrieb:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- >>> in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to
    maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign
    function interface now, it doesn't replace JNI.˙ Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sat Aug 1 02:34:45 2026
    Subject: Can library(ironpaw) repurpose FFT hardware [Glimps into Ryzen AI 7 350] (Re: Hack ecosystem ignorance paired with paranoia)

    Hi,

    On could believe the AI boom is a kind of
    Charles Darvin Galapagos Island Evolution
    Trick of repurposing FFT hardware.

    But this is of course not true, HPC, high
    performance computing, has already defined
    level 3 ops years ago.

    But look at this rabit hole of Ryzen AI 7 350
    NPU design, which is a stripped down Xilinx,
    stripped of exotic FFT features:

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    But the core feature, very long instruction
    word (VLIW) engines, with hardware accelerated
    GEMMs, scattered in grids of ASIC tiles,

    connected by DMA and NoC, is even not very
    specific to AMD, you find it also in Snapdragon /
    Qualcomm SoCs for AI Laptops.

    Bye

    P.S.: My brain playing tricks, why should I
    name a library(ironpaw) ? From the same
    article above. Maybe WebNN is easier to use?

    "mlir-aie contains a Python framework called
    IRON that generates LLVM MLIR code representing
    a workload that runs on the NPU, including the
    code that runs on each compute tile processor

    and the configuration of DMAs and other hardware.
    Kernels for the compute tile processor can be
    written in C++ and compiled either with the
    open-source llvm-aie Peano compiler, which is

    a fork of LLVM that adds support for the Xilinx
    AI engine processors, or with the closed-source
    Xilinx CHESS compiler, which is included in Vitis.
    In simple cases the kernels can also be directly

    written in Python with IRON."

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    Mild Shock schrieb:
    Hi,

    Who exactly is the thief? Does this person
    have stats in the Rogue class in dungeons
    and dragons?

    The conspiracy theory of a stealing of Torso VDBE,
    by Rossy Boy, is probably a result of complete
    ignorance of the Hack ecosystem.

    Hack is a very popular computer science project,
    with a couple of subprojects in hardware and
    software. It goes also by the name Nand to Tetris,

    and is programming language agnositic. You can do
    Hack experiments in any programming language, be
    it BASIC, ADA or Rust. Nobody cares.

    The gist are projects like here, first to
    educate yourself about Hack:

    https://www.nand2tetris.org/course

    And then to use Hack in different contexts:

    https://www.nand2tetris.org/copy-of-talks

    For didactic purposes, I used Hack for my WebGPU
    experiment. I didn't even take a look at Torso
    VDBE, why should I? Hack is nicely documented,

    has even a book, and fusing the two 16-bit
    instruction types A and D, into a single 32-bit
    instruction stream, is nowhere patented.

    Bye


    Johann 'Myrkraverk' Oskarsson schrieb:
    On 30/07/2026 2:13 AM, Ross Finlayson wrote:

    https://www.theregister.com/databases/2026/07/29/after-rewriting-sqlite- >>> in-rust-turso-turns-its-sights-on-postgres/5279835

    I don't much care about Rust. It's yet another Google product,
    with the idea of not having exception handling, then supposedly
    it's efficient and safe, yet, it's efficient by not being safe,
    and safe by not being efficient. Then there's the macro/metaprogramming
    front-end, which basically doesn't validate
    like templates or otherwise for compile-time invariants,
    that is basically like people who use string substititution instead
    of object models, who all suffer injection attacks.

    Personally, I like Postgres in C, and I hope it stays there.˙ I used to
    maintain PL/Java, and got intimately familiar with some of the limi-
    tations of the JNI interface.˙ And while there's some new Java foreign
    function interface now, it doesn't replace JNI.˙ Especially for projects
    that embed the JVM like PL/Java.

    I haven't contributed to that project for maybe one and half decade, and
    now that I'm using Java again -- a project I'll mention in another
    thread --[1] I may just resume some duties in PL/Java.˙ But that's a
    future adventure that may or may not happen.

    So, I was going to say something about Postgres?˙ Right, I'm sure the
    author of Postgres-in-Rust will run into some of the problems people
    always run into when they attempt to rewrite other large projects, and
    that's not learning from the prior mistakes.˙ I try to avoid that.

    Some of that I learned the hard way, and some of that I learned by read-
    ing the /Mythical Man Month/.˙ I don't remember the author's name, and
    my physical copy is not in my current library, but I believe the author
    is famous enough I don't need to mention him by name.




    This latest manic episode has that in some more clinical or caring
    settings, then one might wonder over the author's need to get help
    or whether they're lost their mittens. In another view, though,
    that's crazy-town and it's not a good place and we don't go there
    any-more, population burse-scheiss-bots. Anyways here we just
    generally respect people well enough to let them well alone.

    I don't remote diagnose people.˙ While I don't have a medical license
    to lose, I feel it's impolite to potentially mis-diagnose people over
    text messages.

    I have not felt very respected here in comp.lang.c.˙ I guess we must
    have some different experiences in this place.˙ Who exactly is
    welcoming, and a warm person?


    Not to spring on you that you're wrong, it's not a conspiracy
    against you, anyways as per the usual Shut Up goes out to any
    of these JB, JG, PO, WM, ..., sock-puppet bots.

    I'm not sure I recognize all of these initials.˙ I'm sure I'll
    learn to not engage with the problem children here in comp.lang.c,
    but it's been a few days, and I'm still familiarizing myself with
    the regulars.


    Thief.

    Who exactly is the thief?˙ Does this person have stats in the Rogue
    class in dungeons and dragons?


    Happy C coding!

    [1] Those pretend em-dashes will surely make Dan Cross even more
    fictional.˙ I hope his rage isn't fictional and he'll byte every
    character I type here in comp.lang.c.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sat Aug 1 12:15:30 2026
    Subject: He uses "FIFO objects", and DMA and Noc [Glimps into Ryzen AI 7 350] (Re: A brain desease of 20 days [Rossy Boy]))

    Hi,

    He uses FIFO, and DMA and Noc:

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    But lets say whether its FIFO or FILO
    isn't so important his used cases are,
    what is now found in my library(furryhaze)

    for GPU, namely the very basic:

    /**
    * test_gpu_comp_start(W, K): internal only
    * The predicate succeeds. As a side effect it
    * starts the ă-WAM W with K warps.
    */
    function test_gpu_comp_start(args)

    /**
    * test_gpu_comp_join(W, P): internal only
    * The predicate succeeds in P with a new promise
    * that waits for the ă-WAM W to finish.
    */
    function test_gpu_comp_join(args)

    A GPU interface, via the command processor
    for example of WebGPU, does the above
    synchronization for you.

    In the NPU example he does everything
    low level, with Python IRON an stuff:

    "Since the main way to achieve synchronization
    within the IRON framework is by doing data
    movement with object FIFOs, I?m sending a
    dummy uint32 value as some sort of
    synchronization token.

    Waiting for all the kernels to finish is
    trickier. The object FIFOs support a join
    pattern in which an object FIFO consumes an
    object from each of multiple object FIFOs,
    concatenates these objects and produces the
    concatenated object as a result.

    Etc.."

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    So Daniel Est‚vez Scientific & Technical
    Amateur Radio, gives a nice glimpse into an
    NPU, I have not yet publicitly released

    my library(furryhaze), since its still in
    testing. Maybe take another week or so,
    still I have ironed out all corners,

    for example the new gpu_comp_start and
    gpu_comp_join works fine on may desktop
    AI laptops, but I have still a bug on

    my iPad AI tablet, on the Redmi AI phone,
    also chokes on a test case.

    Bye

    Mild Shock schrieb:
    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still, Jul 29, Rossy Boy halucinates accusations:

    Ross Finlayson schrieb:
    .. bla bla goto bla bla ..

    Stupid gangster:˙ teamsters are a union.

    In the trades, not the steals, ....

    Woa! Thats now 20 days of brain desease,
    and not understanding the meaning and implications.
    Even not understand pi-WAM has Hack VM backend.

    But its all opensource. Bravo Rossy Boy, you are
    champion in brainlessness and lazyness of
    a idiot usenet troll.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with some >>> chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs?˙ Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sat Aug 1 12:18:17 2026
    Subject: Tablet and phone UBS-C remote debugging (Re: He uses "FIFO objects", and DMA and Noc)

    Hi,

    Tablets and phone are more annoying to
    use with WebGPU. The usual browsers don't
    have a Chrome DevTools panel integrated,

    so that one could do JavaScript Debugging
    directly on the device. Instead one has to
    use a desktop machine, and connect the

    device via UBS-C , and start a Chrome
    Browser there . And then start a Chrome
    DevTools panel alone, that is pair with

    the device, via UBS-C cable. So this way
    I already see where it crashes on the
    tablets and phone:

    await output.mapAsync(GPUMapMode.READ)
    Unhandled Promise Rejection: OperationError

    The above is the error that one can re-produce
    already here with this test:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Not sure what exactly happens. Maybe
    a form of timeout or device lost, that the
    primitive HTML / JavaScript doesn't handle

    gracefully yet. Maybe redimensioning the
    test, so that it consumes less time would
    help. Who knows? Will see. For production

    use of a GPU integration I have to anyway
    provide work slicing it seems.

    Bye

    Mild Shock schrieb:
    Hi,

    He uses FIFO, and DMA and Noc:

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    But lets say whether its FIFO or FILO
    isn't so important his used cases are,
    what is now found in my library(furryhaze)

    for GPU, namely the very basic:

    /**
    ˙* test_gpu_comp_start(W, K): internal only
    ˙* The predicate succeeds. As a side effect it
    ˙* starts the ă-WAM W with K warps.
    ˙*/
    function test_gpu_comp_start(args)

    /**
    ˙* test_gpu_comp_join(W, P): internal only
    ˙* The predicate succeeds in P with a new promise
    ˙* that waits for the ă-WAM W to finish.
    ˙*/
    function test_gpu_comp_join(args)

    A GPU interface, via the command processor
    for example of WebGPU, does the above
    synchronization for you.

    In the NPU example he does everything
    low level, with Python IRON an stuff:

    "Since the main way to achieve synchronization
    within the IRON framework is by doing data
    movement with object FIFOs, I?m sending a
    dummy uint32 value as some sort of
    synchronization token.

    Waiting for all the kernels to finish is
    trickier. The object FIFOs support a join
    pattern in which an object FIFO consumes an
    object from each of multiple object FIFOs,
    concatenates these objects and produces the
    concatenated object as a result.

    Etc.."

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    So Daniel Est‚vez Scientific & Technical
    Amateur Radio, gives a nice glimpse into an
    NPU, I have not yet publicitly released

    my library(furryhaze), since its still in
    testing. Maybe take another week or so,
    still I have ironed out all corners,

    for example the new gpu_comp_start and
    gpu_comp_join works fine on may desktop
    AI laptops, but I have still a bug on

    my iPad AI tablet, on the Redmi AI phone,
    also chokes on a test case.

    Bye

    Mild Shock schrieb:
    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop
    https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still, Jul 29, Rossy Boy halucinates accusations:

    Ross Finlayson schrieb:
    .. bla bla goto bla bla ..

    Stupid gangster:˙ teamsters are a union.

    In the trades, not the steals, ....

    Woa! Thats now 20 days of brain desease,
    and not understanding the meaning and implications.
    Even not understand pi-WAM has Hack VM backend.

    But its all opensource. Bravo Rossy Boy, you are
    champion in brainlessness and lazyness of
    a idiot usenet troll.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with
    some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs?˙ Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sat Aug 1 14:11:36 2026
    Subject: NPUs doing 2d chess comms (Manhattan Distance or L1 Norm) (Re: Tablet and phone UBS-C remote debugging)

    Hi,

    Looking at the floor plan of a NPU:

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    It seems to me comms between tiles takes
    at least Manhattan Distance or L1 Norm time,
    if there is no comms congestion

    But how does a packet travel? This way:

    +----E
    |
    |
    S

    Or this way, from start S to end E:

    +-E
    +
    +
    S

    And what does the chip do if there is
    traffic congestion? Some papers are
    here, possibly an old problem giving

    that processor "cubes" are nothing new.
    But a "cube" would be 3D and not 2D.
    This paper is old from 2007 or so:

    Routing Algorithms for 2D NoC Architectures http://cva.stanford.edu/classes/ee382c/research/2DRouting.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Tablets and phone are more annoying to
    use with WebGPU. The usual browsers don't
    have a Chrome DevTools panel integrated,

    so that one could do JavaScript Debugging
    directly on the device. Instead one has to
    use a desktop machine, and connect the

    device via UBS-C , and start a Chrome
    Browser there . And then start a Chrome
    DevTools panel alone, that is pair with

    the device, via UBS-C cable. So this way
    I already see where it crashes on the
    tablets and phone:

    await output.mapAsync(GPUMapMode.READ)
    Unhandled Promise Rejection: OperationError

    The above is the error that one can re-produce
    already here with this test:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Not sure what exactly happens. Maybe
    a form of timeout or device lost, that the
    primitive HTML / JavaScript doesn't handle

    gracefully yet. Maybe redimensioning the
    test, so that it consumes less time would
    help. Who knows? Will see. For production

    use of a GPU integration I have to anyway
    provide work slicing it seems.

    Bye

    Mild Shock schrieb:
    Hi,

    He uses FIFO, and DMA and Noc:

    Getting peak TOPS on a Ryzen AI 7 350 NPU
    https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    But lets say whether its FIFO or FILO
    isn't so important his used cases are,
    what is now found in my library(furryhaze)

    for GPU, namely the very basic:

    /**
    ˙˙* test_gpu_comp_start(W, K): internal only
    ˙˙* The predicate succeeds. As a side effect it
    ˙˙* starts the ă-WAM W with K warps.
    ˙˙*/
    function test_gpu_comp_start(args)

    /**
    ˙˙* test_gpu_comp_join(W, P): internal only
    ˙˙* The predicate succeeds in P with a new promise
    ˙˙* that waits for the ă-WAM W to finish.
    ˙˙*/
    function test_gpu_comp_join(args)

    A GPU interface, via the command processor
    for example of WebGPU, does the above
    synchronization for you.

    In the NPU example he does everything
    low level, with Python IRON an stuff:

    "Since the main way to achieve synchronization
    within the IRON framework is by doing data
    movement with object FIFOs, I?m sending a
    dummy uint32 value as some sort of
    synchronization token.

    Waiting for all the kernels to finish is
    trickier. The object FIFOs support a join
    pattern in which an object FIFO consumes an
    object from each of multiple object FIFOs,
    concatenates these objects and produces the
    concatenated object as a result.

    Etc.."

    Getting peak TOPS on a Ryzen AI 7 350 NPU
    https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    So Daniel Est‚vez Scientific & Technical
    Amateur Radio, gives a nice glimpse into an
    NPU, I have not yet publicitly released

    my library(furryhaze), since its still in
    testing. Maybe take another week or so,
    still I have ironed out all corners,

    for example the new gpu_comp_start and
    gpu_comp_join works fine on may desktop
    AI laptops, but I have still a bug on

    my iPad AI tablet, on the Redmi AI phone,
    also chokes on a test case.

    Bye

    Mild Shock schrieb:
    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop
    https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still, Jul 29, Rossy Boy halucinates accusations:

    Ross Finlayson schrieb:
    .. bla bla goto bla bla ..

    Stupid gangster:˙ teamsters are a union.

    In the trades, not the steals, ....

    Woa! Thats now 20 days of brain desease,
    and not understanding the meaning and implications.
    Even not understand pi-WAM has Hack VM backend.

    But its all opensource. Bravo Rossy Boy, you are
    champion in brainlessness and lazyness of
    a idiot usenet troll.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 28/07/2026 2:43 AM, Ross Finlayson wrote:
    Hello, here I'll post some design notes and a panel discussion with >>>>> some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets >>>>> would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.


    Are you generating all of your code via LLMs?˙ Rest assured,
    the LLM generated code will have subtle and sometimes not so subtle
    bugs.


    Happy bughunting!





    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sat Aug 1 14:23:17 2026
    Subject: NACK retransmission might double Manhattan Distance (Re: NPUs doing 2d chess comms)

    Hi,

    As easy as queues and FIFO objects might
    sound. They don't like congestion. NACK for
    retransmission might double the Manhattan Distance:

    You have not only start
    S to end E communication:

    +----E
    |
    |
    S

    You might also have ACK or NACK
    from E or midpoints back to S:

    S'
    +
    +
    E'

    Ok, I made that up, I have no idea what a flit is,
    when the author wrote this here:

    "Packet flits are held in the FIFO which can
    be used to determine back pressure. Dropping flits
    in a NoC may not be possible since these
    architectures may not provide an end-to-end
    protocol for retransmission."

    Routing Algorithms for 2D NoC Architectures http://cva.stanford.edu/classes/ee382c/research/2DRouting.pdf

    Bye

    Mild Shock schrieb:
    Hi,

    Looking at the floor plan of a NPU:

    Getting peak TOPS on a Ryzen AI 7 350 NPU https://destevez.net/2026/05/getting-peak-tops-on-a-ryzen-ai-7-350-npu/

    It seems to me comms between tiles takes
    at least Manhattan Distance or L1 Norm time,
    if there is no comms congestion

    But how does a packet travel? This way:

    +----E
    |
    |
    S

    Or this way, from start S to end E:

    ˙˙ +-E
    ˙ +
    ˙+
    S

    And what does the chip do if there is
    traffic congestion? Some papers are
    here, possibly an old problem giving

    that processor "cubes" are nothing new.
    But a "cube" would be 3D and not 2D.
    This paper is old from 2007 or so:

    Routing Algorithms for 2D NoC Architectures http://cva.stanford.edu/classes/ee382c/research/2DRouting.pdf

    Bye

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sun Aug 2 23:37:04 2026
    Subject: Even send_color and recv_color can block [Cerebras Waver] (Was: confused rossy boy is confused)

    Hi,

    If only the fucking moron Chris M. Thomasson would
    stop spamming his nonsense, he doesn't listen at
    all. Problem, he cannot read, he knows nothing.

    Its very common that compute shaders can block,
    when they are used for General Purpose computation
    on GPUs (GPGPU). If only he would pull out his

    finger from his asshole, and stop thinking in his
    WebGL legacy code stash nonsense. Even the
    Cerebras Waver has blocking:

    "Cerebras Software Language (CSL), send_color
    and recv_color are parameters passed to tile
    programs to manage data routing and virtual
    channels (called colors) across processing
    elements (PEs) on the wafer

    Yes, both send and receive operations can block
    on a Cerebras Processing Element (PE), primarily
    due to the system's hardware-enforced backpressure
    mechanism. Because the Cerebras Wafer-Scale Engine
    (WSE) relies on a fine-grained,

    dataflow-driven architecture, blocking prevents
    data loss when hardware resources are
    fully saturated."

    Blocking and Unblocking https://sdk.cerebras.ai/computing-with-cerebras#blocking-and-unblocking

    Chris M. Thomasson is an annoyance and an idiot.
    He is a total waste of time. And represents those
    people who cannot use their brain.

    Bye

    Chris M. Thomasson schrieb:
    On 8/1/2026 5:47 PM, Mild Shock wrote:
    Hi,

    Chris M. Thomasson can ask 100 more questions.
    I will happily answer them. But maybe I should
    make a Wiki to explain the ever same things:

    But, I still don't know what you main goal is?
    The goal is "Prolog inferencing"

    It has textures to work with in the pipeline.
    I don't need textures for "Prolog inferencing"

    98 more questions to go, don't give up!
    [...]

    Fwiw, I have several compute shaders that do what I want. Mainly
    building vector fields, etc.... And yes I use textures for some input
    and output, uniforms mainly for the settings, etc. Just, make sure to
    code things up to a point where your compute shader never needs to wait
    for something... Think of striving for wait-free algorithms.

    For instance, this is 100% wait free.

    void add_hit(ct_plane2d plane, vec2 p, vec3 weight)
    {
    vec2 uv = ct_plane2d_unproject(plane, p);
    ivec2 px = ivec2(uv * u_resolution);

    if (px.x >= 0 && px.x < int(u_resolution.x) &&
    px.y >= 0 && px.y < int(u_resolution.y))
    {
    imageAtomicAdd(accum_r, px, weight.r);
    imageAtomicAdd(accum_g, px, weight.g);
    imageAtomicAdd(accum_b, px, weight.b);
    imageAtomicAdd(accum_hits, px, 1.0f);
    }
    }


    Notice how I separated my accumulation buffer into different textures?

    layout(binding = 0, r32f) uniform coherent image2D accum_r;
    layout(binding = 1, r32f) uniform coherent image2D accum_g;
    layout(binding = 2, r32f) uniform coherent image2D accum_b;
    layout(binding = 3, r32f) uniform coherent image2D accum_hits; //
    alpha / hit counter

    Works great and runs really fast.

    Chris M. Thomasson schrieb:
    On 7/29/2026 2:21 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 29/07/2026 5:15 PM, Mild Shock wrote:
    Hi,

    Confused rossy boy is confused. We are
    not building a stupid web server, where
    a listener thread spawns service threads,

    and to avoid malloc and free, reuses
    a pool, or some shitty fork join framework.
    The producer and consumer example I posted

    elsewhere archived a dataflow without
    malloc and free of threads. You are miles
    away from what we are doing here.

    Why not?˙ Isn't this comp.lang.c?˙ And isn't that exactly how
    CivetWeb works internally?


    Have you never built your own web
    sever in C?˙ Not even with CivetWeb?˙ It's really easy!˙ You
    only need to implement a callback or two.

    Implementing a callback or two in a preexisting system is not creating
    one from scratch.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris M. Thomasson@3:633/10 to All on Sun Aug 2 14:40:45 2026
    Subject: Re: Even send_color and recv_color can block [Cerebras Waver] (Was: confused rossy boy is confused)

    On 8/2/2026 2:37 PM, Mild Shock wrote:
    Hi,

    If only the fucking moron Chris M. Thomasson would
    stop spamming his nonsense, he doesn't listen at
    all. Problem, he cannot read, he knows nothing.

    Its very common that compute shaders can block,
    when they are used for General Purpose computation
    on GPUs (GPGPU). If only he would pull out his

    finger from his asshole, and stop thinking in his
    WebGL legacy code stash nonsense. Even the
    Cerebras Waver has blocking:

    "Cerebras Software Language (CSL), send_color
    and recv_color are parameters passed to tile
    programs to manage data routing and virtual
    channels (called colors) across processing
    elements (PEs) on the wafer

    Yes, both send and receive operations can block
    on a Cerebras Processing Element (PE), primarily
    due to the system's hardware-enforced backpressure
    mechanism. Because the Cerebras Wafer-Scale Engine
    (WSE) relies on a fine-grained,

    dataflow-driven architecture, blocking prevents
    data loss when hardware resources are
    fully saturated."

    Blocking and Unblocking https://sdk.cerebras.ai/computing-with-cerebras#blocking-and-unblocking

    Strive to never make a compute shader wait on something, like an empty condition of a queue, stack.


    Chris M. Thomasson is an annoyance and an idiot.
    He is a total waste of time. And represents those
    people who cannot use their brain.

    I don't think you have coded compute shaders before? If so, cool, but wow.

    [...]

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris M. Thomasson@3:633/10 to All on Sun Aug 2 14:43:37 2026
    Subject: Re: Even send_color and recv_color can block [Cerebras Waver] (Was: confused rossy boy is confused)

    On 8/2/2026 2:40 PM, Chris M. Thomasson wrote:
    On 8/2/2026 2:37 PM, Mild Shock wrote:
    [...]
    I don't think you have coded compute shaders before? If so, cool, but wow.

    [...]

    If so, in GLSL, HLSL? Vulkan, Metal, Directx12, modern opengl?

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sun Aug 2 23:45:11 2026
    Subject: You don't understand that compute shaders are tasks (Was: Even send_color and recv_color can block [Cerebras Waver])

    Hi,

    You are a moron. In WebGPU computer sharers
    are tasks not hardware kernels. Forget your
    WebGL nonsense cookbooks.

    WebGPU is much more elastic.

    You are just a moron.

    Bye

    P.S.: Take this example, I don't have 4096 kernels:

    1.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still it runs, how is this done? The Ryzen has
    only around 512 kernels. Newer Ryzen havae 1024
    kernels. This is till below 4096 logical threads.

    So how is it done?

    Chris M. Thomasson schrieb:
    On 8/2/2026 2:37 PM, Mild Shock wrote:
    Hi,

    If only the fucking moron Chris M. Thomasson would
    stop spamming his nonsense, he doesn't listen at
    all. Problem, he cannot read, he knows nothing.

    Its very common that compute shaders can block,
    when they are used for General Purpose computation
    on GPUs (GPGPU). If only he would pull out his

    finger from his asshole, and stop thinking in his
    WebGL legacy code stash nonsense. Even the
    Cerebras Waver has blocking:

    "Cerebras Software Language (CSL), send_color
    and recv_color are parameters passed to tile
    programs to manage data routing and virtual
    channels (called colors) across processing
    elements (PEs) on the wafer

    Yes, both send and receive operations can block
    on a Cerebras Processing Element (PE), primarily
    due to the system's hardware-enforced backpressure
    mechanism. Because the Cerebras Wafer-Scale Engine
    (WSE) relies on a fine-grained,

    dataflow-driven architecture, blocking prevents
    data loss when hardware resources are
    fully saturated."

    Blocking and Unblocking
    https://sdk.cerebras.ai/computing-with-cerebras#blocking-and-unblocking

    Strive to never make a compute shader wait on something, like an empty condition of a queue, stack.


    Chris M. Thomasson is an annoyance and an idiot.
    He is a total waste of time. And represents those
    people who cannot use their brain.

    I don't think you have coded compute shaders before? If so, cool, but wow.

    [...]


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Sun Aug 2 23:46:24 2026
    Subject: You don't understand that compute shaders are tasks (Re: Even send_color and recv_color can block [Cerebras Waver])

    Hi,

    You are a moron. In WebGPU computer sharers
    are tasks not hardware kernels. Forget your
    WebGL nonsense cookbooks.

    WebGPU is much more elastic.

    You are just a moron.

    Bye

    P.S.: Take this example, I don't have 4096 kernels:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still it runs, how is this done? The Ryzen has
    only around 512 kernels. Newer Ryzen havae 1024
    kernels. This is till below 4096 logical threads.

    So how is it done?


    Chris M. Thomasson schrieb:
    On 8/2/2026 2:37 PM, Mild Shock wrote:
    Hi,

    If only the fucking moron Chris M. Thomasson would
    stop spamming his nonsense, he doesn't listen at
    all. Problem, he cannot read, he knows nothing.

    Its very common that compute shaders can block,
    when they are used for General Purpose computation
    on GPUs (GPGPU). If only he would pull out his

    finger from his asshole, and stop thinking in his
    WebGL legacy code stash nonsense. Even the
    Cerebras Waver has blocking:

    "Cerebras Software Language (CSL), send_color
    and recv_color are parameters passed to tile
    programs to manage data routing and virtual
    channels (called colors) across processing
    elements (PEs) on the wafer

    Yes, both send and receive operations can block
    on a Cerebras Processing Element (PE), primarily
    due to the system's hardware-enforced backpressure
    mechanism. Because the Cerebras Wafer-Scale Engine
    (WSE) relies on a fine-grained,

    dataflow-driven architecture, blocking prevents
    data loss when hardware resources are
    fully saturated."

    Blocking and Unblocking
    https://sdk.cerebras.ai/computing-with-cerebras#blocking-and-unblocking

    Strive to never make a compute shader wait on something, like an empty condition of a queue, stack.


    Chris M. Thomasson is an annoyance and an idiot.
    He is a total waste of time. And represents those
    people who cannot use their brain.

    I don't think you have coded compute shaders before? If so, cool, but wow.

    [...]


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 00:09:13 2026
    Subject: Ignoramus / Ignorabimus Barometer: Almost 1 Month (Re: You don't understand that compute shaders are tasks)

    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still today on Aug 03, 2026, the usenet
    community still struggles with the experiment,
    doesn't know the meaning and implications,

    especially clueless about 4096 shaders and
    modern GPU elasticity. Woa! Thats impressive.
    Especially Chris M. Thomasson has a still ongoing

    hard time with this little WebGPU experiment.

    Bye

    Mild Shock schrieb:
    Hi,

    You are a moron. In WebGPU computer sharers
    are tasks not hardware kernels. Forget your
    WebGL nonsense cookbooks.

    WebGPU is much more elastic.

    You are just a moron.

    Bye

    P.S.: Take this example, I don't have 4096 kernels:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still it runs, how is this done? The Ryzen has
    only around 512 kernels. Newer Ryzen havae 1024
    kernels. This is till below 4096 logical threads.

    So how is it done?


    Chris M. Thomasson schrieb:
    On 8/2/2026 2:37 PM, Mild Shock wrote:
    Hi,

    If only the fucking moron Chris M. Thomasson would
    stop spamming his nonsense, he doesn't listen at
    all. Problem, he cannot read, he knows nothing.

    Its very common that compute shaders can block,
    when they are used for General Purpose computation
    on GPUs (GPGPU). If only he would pull out his

    finger from his asshole, and stop thinking in his
    WebGL legacy code stash nonsense. Even the
    Cerebras Waver has blocking:

    "Cerebras Software Language (CSL), send_color
    and recv_color are parameters passed to tile
    programs to manage data routing and virtual
    channels (called colors) across processing
    elements (PEs) on the wafer

    Yes, both send and receive operations can block
    on a Cerebras Processing Element (PE), primarily
    due to the system's hardware-enforced backpressure
    mechanism. Because the Cerebras Wafer-Scale Engine
    (WSE) relies on a fine-grained,

    dataflow-driven architecture, blocking prevents
    data loss when hardware resources are
    fully saturated."

    Blocking and Unblocking
    https://sdk.cerebras.ai/computing-with-cerebras#blocking-and-unblocking

    Strive to never make a compute shader wait on something, like an empty
    condition of a queue, stack.


    Chris M. Thomasson is an annoyance and an idiot.
    He is a total waste of time. And represents those
    people who cannot use their brain.

    I don't think you have coded compute shaders before? If so, cool, but
    wow.

    [...]



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 02:08:12 2026
    Subject: Homework: Game Engine in WebGPU (Re: Ignoramus / Ignorabimus Barometer: Almost 1 Month)

    Hi,

    Now that the debate with Chris M. Thomasson
    has culminated in questions of elasticity,
    I suggest this homework:

    - Game Engine in WebGPU
    It will support the life cycle of sprites,
    like sprites comming out of nowhere,
    and being destroyed by arms,
    just like in Space invader.

    This would be surely a fantastic exercise,
    to see what a GPU can do and cannot do,
    in respect of life cycle of threads, especially

    modern GPUs that sell the CUDA dream.

    Have Fun!

    Become a nosomatic AI chirurgeon.

    Bye

    Mild Shock schrieb:
    Hi,

    A nosomatic AI chirurgeon is a halfling student
    of sickness, and a master of the ebb and flow of
    the energies of life and death of data packets.

    He is a air bender, water bender and earth bender
    in one person, using OpenVINO to juggle with
    CPU, GPU and NPU.

    Last but not least he can freely switch between
    symbolic and neural representation of knowledge
    forms, there is no abyss for him.

    Bye

    Mild Shock schrieb:
    Hi,

    This was archived on Jul 9, 2026:

    11.4 Giga Lips with a Budget Laptop https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still today on Aug 03, 2026, the usenet
    community still struggles with the experiment,
    doesn't know the meaning and implications,

    especially clueless about 4096 shaders and
    modern GPU elasticity. Woa! Thats impressive.
    Especially Chris M. Thomasson has a still ongoing

    hard time with this little WebGPU experiment.

    Bye

    Mild Shock schrieb:
    Hi,

    You are a moron. In WebGPU computer sharers
    are tasks not hardware kernels. Forget your
    WebGL nonsense cookbooks.

    WebGPU is much more elastic.

    You are just a moron.

    Bye

    P.S.: Take this example, I don't have 4096 kernels:

    11.4 Giga Lips with a Budget Laptop
    https://github.com/Jean-Luc-Picard-2021/gigabudget

    Still it runs, how is this done? The Ryzen has
    only around 512 kernels. Newer Ryzen havae 1024
    kernels. This is till below 4096 logical threads.

    So how is it done?


    Chris M. Thomasson schrieb:
    On 8/2/2026 2:37 PM, Mild Shock wrote:
    Hi,

    If only the fucking moron Chris M. Thomasson would
    stop spamming his nonsense, he doesn't listen at
    all. Problem, he cannot read, he knows nothing.

    Its very common that compute shaders can block,
    when they are used for General Purpose computation
    on GPUs (GPGPU). If only he would pull out his

    finger from his asshole, and stop thinking in his
    WebGL legacy code stash nonsense. Even the
    Cerebras Waver has blocking:

    "Cerebras Software Language (CSL), send_color
    and recv_color are parameters passed to tile
    programs to manage data routing and virtual
    channels (called colors) across processing
    elements (PEs) on the wafer

    Yes, both send and receive operations can block
    on a Cerebras Processing Element (PE), primarily
    due to the system's hardware-enforced backpressure
    mechanism. Because the Cerebras Wafer-Scale Engine
    (WSE) relies on a fine-grained,

    dataflow-driven architecture, blocking prevents
    data loss when hardware resources are
    fully saturated."

    Blocking and Unblocking
    https://sdk.cerebras.ai/computing-with-cerebras#blocking-and-unblocking >>>
    Strive to never make a compute shader wait on something, like an
    empty condition of a queue, stack.


    Chris M. Thomasson is an annoyance and an idiot.
    He is a total waste of time. And represents those
    people who cannot use their brain.

    I don't think you have coded compute shaders before? If so, cool, but
    wow.

    [...]




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 20:14:12 2026
    Hi,

    I even don't remember exactly why I landed
    in comp.theory. A yes, because Rossy Boy,
    was hooked on SIMD and didn't understand Hack.

    But the Hack work, rather belongs to my
    Alma Mater Zurich and my personal heros, Gutnecht
    and Wirth, who wrote a one pass Modula

    compiler during some christmas holidays,
    back then when I was student. Not sure
    whether the Ljubljana School can do that,

    when I read this here:

    Finite Algebraic Effects as dicts and such https://www.philipzucker.com/bdd_term_alg_effects/

    I only find gibberish like:
    - ?Data? is somehow less mysterious to me
    than ?computation?. [..] I don?t even
    know what ?computation? really is

    - In temporal logic, there is a logic CTL
    which talks about computation trees.

    - Algerbaic (LoL) effects is almost a complete
    hackery abuse of the notion of arity
    and that?s neat.

    - Then there are 10^10 etc vectors which
    show up if you discretize 3d/4d space. [..]
    or reinforcement learning.

    - Etc..

    WTF is this guy smoking? I mean he even
    doesn't uses math notation, only posts
    Python code fragments … go go,

    possibly a Python brain damage.

    But still less sever than Rossy Boys.

    Bye

    Ross Finlayson schrieb:
    Hello, here I'll post some design notes and a panel discussion with some chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Johann 'Myrkraverk' Oskarsson@3:633/10 to All on Tue Aug 4 02:21:48 2026
    On 04/08/2026 2:14 AM, Mild Shock wrote:
    Hi,

    I even don't remember exactly why I landed
    in comp.theory. A yes, because Rossy Boy,
    was hooked on SIMD and didn't understand Hack.

    But the Hack work, rather belongs to my
    Alma Mater Zurich and my personal heros, Gutnecht
    and Wirth, who wrote a one pass Modula

    That's interesting. Have you read /Software Engineering
    with Modula-2 and Ada/ (1984) by Richard Wiener and Richard
    Sincovec? I have it on my shelf, and haven't gotten to read
    it yet.


    compiler during some christmas holidays,
    back then when I was student. Not sure
    whether the Ljubljana School can do that,

    when I read this here:

    Finite Algebraic Effects as dicts and such https://www.philipzucker.com/bdd_term_alg_effects/

    I only find gibberish like:
    - ?Data? is somehow less mysterious to me
    ˙ than ?computation?.˙ [..] I don?t even
    ˙ know what ?computation? really is

    Computation is at the core just a calculation. Humans
    used to do this, and there's a good documentary about it
    titled /Hidden Figures/. I assume everyone here has seen
    it.


    - In temporal logic, there is a logic CTL
    ˙ which talks about computation trees.

    - Algerbaic (LoL) effects is almost a complete
    ˙ hackery abuse of the notion of arity
    ˙ and that?s neat.

    Are you using /algebraic effects/ when playing League
    of Legends? I tried it once, but discovered it's a
    gameplay that doesn't appeal to me. I didn't think to
    use /algebraic effects/ in it.


    - Then there are 10^10 etc vectors which
    ˙ show up if you discretize 3d/4d space. [..]
    ˙ or reinforcement learning.

    I don't know why you have that many vectors visiting,
    but please treat them with hospitality according to
    Zeus' laws.


    - Etc..

    WTF is this guy smoking? I mean he even
    doesn't uses math notation, only posts
    Python code fragments … go go,

    possibly a Python brain damage.

    Or he just works in the ministry of silly walks?


    Enjoy!
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com https://bsky.app/profile/myrkraverk.bsky.social

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 20:35:55 2026
    Hi,

    I found that this here:

    public final static class RendezVous {
    private final Semaphore head = new Semaphore(0);
    private final Semaphore tail = new Semaphore(1);
    private Object data;

    public void put(Object data) throws InterruptedException {
    tail.acquire();
    this.data = data;
    head.release();
    }

    public Object take() throws InterruptedException {
    Object res;
    head.acquire();
    res = data;
    tail.release();
    return res;
    }
    }

    Is almost as fast as ArrayBlockingQueue(4),
    in a producer worker consumer scenario.

    So I considering using the above for the
    pi-WAM channels. It would be also closer

    to pi-calculus by Robin Milner.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 04/08/2026 2:14 AM, Mild Shock wrote:
    Hi,

    I even don't remember exactly why I landed
    in comp.theory. A yes, because Rossy Boy,
    was hooked on SIMD and didn't understand Hack.

    But the Hack work, rather belongs to my
    Alma Mater Zurich and my personal heros, Gutnecht
    and Wirth, who wrote a one pass Modula

    That's interesting.˙ Have you read /Software Engineering
    with Modula-2 and Ada/ (1984) by Richard Wiener and Richard
    Sincovec?˙ I have it on my shelf, and haven't gotten to read
    it yet.


    compiler during some christmas holidays,
    back then when I was student. Not sure
    whether the Ljubljana School can do that,

    when I read this here:

    Finite Algebraic Effects as dicts and such
    https://www.philipzucker.com/bdd_term_alg_effects/

    I only find gibberish like:
    - ?Data? is somehow less mysterious to me
    ˙˙ than ?computation?.˙ [..] I don?t even
    ˙˙ know what ?computation? really is

    Computation is at the core just a calculation.˙ Humans
    used to do this, and there's a good documentary about it
    titled /Hidden Figures/.˙ I assume everyone here has seen
    it.


    - In temporal logic, there is a logic CTL
    ˙˙ which talks about computation trees.

    - Algerbaic (LoL) effects is almost a complete
    ˙˙ hackery abuse of the notion of arity
    ˙˙ and that?s neat.

    Are you using /algebraic effects/ when playing League
    of Legends?˙ I tried it once, but discovered it's a
    gameplay that doesn't appeal to me.˙ I didn't think to
    use /algebraic effects/ in it.


    - Then there are 10^10 etc vectors which
    ˙˙ show up if you discretize 3d/4d space. [..]
    ˙˙ or reinforcement learning.

    I don't know why you have that many vectors visiting,
    but please treat them with hospitality according to
    Zeus' laws.


    - Etc..

    WTF is this guy smoking? I mean he even
    doesn't uses math notation, only posts
    Python code fragments … go go,

    possibly a Python brain damage.

    Or he just works in the ministry of silly walks?


    Enjoy!


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 20:40:44 2026
    Subject: Big thanks to Ljubljana School [Searching 0xCAFFEE] (Was: Ljubljana School versus Zurich School)

    Hi,

    I have nevertheless to thank the Ljubljana
    School, especially this blog post:

    Verifying Nand2Tetris Assembly
    https://www.philipzucker.com/nand2tetris-chc/

    Which raised my interest in Hack. Meanwhile
    I could produce this toy eample:

    "We try to find 0xCAFFEE in enumerating 4
    6-bit digits and the baseline is Dogelog
    Player VM in a browser. The CPU backend
    with 64 logical threads is already 20
    times faster, partly due to its 32-bit
    specialization. The GPU backend with
    4096 logical threads boosts a further
    factor of 7 times."

    GPU Backend: Find 0xCAFFEE with ă-WAM
    https://medium.com/2989/8890efd3503c

    LoL

    Bye

    Mild Shock schrieb:
    Hi,

    I even don't remember exactly why I landed
    in comp.theory. A yes, because Rossy Boy,
    was hooked on SIMD and didn't understand Hack.

    But the Hack work, rather belongs to my
    Alma Mater Zurich and my personal heros, Gutnecht
    and Wirth, who wrote a one pass Modula

    compiler during some christmas holidays,
    back then when I was student. Not sure
    whether the Ljubljana School can do that,

    when I read this here:

    Finite Algebraic Effects as dicts and such https://www.philipzucker.com/bdd_term_alg_effects/

    I only find gibberish like:
    - ?Data? is somehow less mysterious to me
    ˙ than ?computation?.˙ [..] I don?t even
    ˙ know what ?computation? really is

    - In temporal logic, there is a logic CTL
    ˙ which talks about computation trees.

    - Algerbaic (LoL) effects is almost a complete
    ˙ hackery abuse of the notion of arity
    ˙ and that?s neat.

    - Then there are 10^10 etc vectors which
    ˙ show up if you discretize 3d/4d space. [..]
    ˙ or reinforcement learning.

    - Etc..

    WTF is this guy smoking? I mean he even
    doesn't uses math notation, only posts
    Python code fragments … go go,

    possibly a Python brain damage.

    But still less sever than Rossy Boys.

    Bye

    Ross Finlayson schrieb:
    Hello, here I'll post some design notes and a panel discussion with some
    chat-bots about making some sense of the "vector-wide scalar word"
    and "character machines", on commodity hardware about ubiquitous
    operations.


    It's considered at least tangentially relevant to comp.lang.c and
    comp.lang.c++ because for example text is ubiquitous and the targets
    would be low-level, while the higher-level languages would have a
    same sort of patternry, and for example that libc and cstdlib are
    standard, and as with regards to POSIX and Unicode and so on.

    Please feel free to excuse or ignore, or comment as freely.

    Thanks for reading.




    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris M. Thomasson@3:633/10 to All on Mon Aug 3 11:55:39 2026
    Subject: Re: Homework: Game Engine in WebGPU (Re: Ignoramus / Ignorabimus Barometer: Almost 1 Month)

    On 8/2/2026 5:08 PM, Mild Shock wrote:
    [...]
    I don't think you have coded compute shaders before? If so, cool,
    but wow.

    Never mind. You are too hostile. Not worth it. Sorry. Plonk.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 21:00:43 2026
    Hi,

    But because I do a grouping of logical threads
    before I go on physical threads, a spinlock
    rewrite will be necessary.

    I did already a spinlock rewrite, using
    a class Spinlock instead of the class Semaphore.
    But ultimately I would switch from put() to

    an offer() API, that returns a boolean, and
    this can be used to skip instructions or otherwise
    react in the Hack VM. Same for take() would

    need to replace by poll() with repercussions
    to Hack VM again. This is much to the dismay
    of Chris M. Thomasson, who thinks spinning

    is strictly forbidden. But I will sing the song:

    I'm a spinner, I'm a sinner
    I spin on CAS loops for my dinner
    Some call it busy-wait, I call it fate
    When the queue is empty, I just rotate

    Bye

    Mild Shock schrieb:
    Hi,

    I found that this here:

    ˙˙˙ public final static class RendezVous {
    ˙˙˙˙˙˙˙ private final Semaphore head = new Semaphore(0);
    ˙˙˙˙˙˙˙ private final Semaphore tail = new Semaphore(1);
    ˙˙˙˙˙˙˙ private Object data;

    ˙˙˙˙˙˙˙ public void put(Object data) throws InterruptedException {
    ˙˙˙˙˙˙˙˙˙˙˙ tail.acquire();
    ˙˙˙˙˙˙˙˙˙˙˙ this.data = data;
    ˙˙˙˙˙˙˙˙˙˙˙ head.release();
    ˙˙˙˙˙˙˙ }

    ˙˙˙˙˙˙˙ public Object take() throws InterruptedException {
    ˙˙˙˙˙˙˙˙˙˙˙ Object res;
    ˙˙˙˙˙˙˙˙˙˙˙ head.acquire();
    ˙˙˙˙˙˙˙˙˙˙˙ res = data;
    ˙˙˙˙˙˙˙˙˙˙˙ tail.release();
    ˙˙˙˙˙˙˙˙˙˙˙ return res;
    ˙˙˙˙˙˙˙ }
    ˙˙˙ }

    Is almost as fast as ArrayBlockingQueue(4),
    in a producer worker consumer scenario.

    So I considering using the above for the
    pi-WAM channels. It would be also closer

    to pi-calculus by Robin Milner.

    Bye

    Johann 'Myrkraverk' Oskarsson schrieb:
    On 04/08/2026 2:14 AM, Mild Shock wrote:
    Hi,

    I even don't remember exactly why I landed
    in comp.theory. A yes, because Rossy Boy,
    was hooked on SIMD and didn't understand Hack.

    But the Hack work, rather belongs to my
    Alma Mater Zurich and my personal heros, Gutnecht
    and Wirth, who wrote a one pass Modula

    That's interesting.˙ Have you read /Software Engineering
    with Modula-2 and Ada/ (1984) by Richard Wiener and Richard
    Sincovec?˙ I have it on my shelf, and haven't gotten to read
    it yet.


    compiler during some christmas holidays,
    back then when I was student. Not sure
    whether the Ljubljana School can do that,

    when I read this here:

    Finite Algebraic Effects as dicts and such
    https://www.philipzucker.com/bdd_term_alg_effects/

    I only find gibberish like:
    - ?Data? is somehow less mysterious to me
    ˙˙ than ?computation?.˙ [..] I don?t even
    ˙˙ know what ?computation? really is

    Computation is at the core just a calculation.˙ Humans
    used to do this, and there's a good documentary about it
    titled /Hidden Figures/.˙ I assume everyone here has seen
    it.


    - In temporal logic, there is a logic CTL
    ˙˙ which talks about computation trees.

    - Algerbaic (LoL) effects is almost a complete
    ˙˙ hackery abuse of the notion of arity
    ˙˙ and that?s neat.

    Are you using /algebraic effects/ when playing League
    of Legends?˙ I tried it once, but discovered it's a
    gameplay that doesn't appeal to me.˙ I didn't think to
    use /algebraic effects/ in it.


    - Then there are 10^10 etc vectors which
    ˙˙ show up if you discretize 3d/4d space. [..]
    ˙˙ or reinforcement learning.

    I don't know why you have that many vectors visiting,
    but please treat them with hospitality according to
    Zeus' laws.


    - Etc..

    WTF is this guy smoking? I mean he even
    doesn't uses math notation, only posts
    Python code fragments … go go,

    possibly a Python brain damage.

    Or he just works in the ministry of silly walks?


    Enjoy!



    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 21:04:38 2026
    Hi,

    You are not correctly thinking.
    I am not using WebGL. I use WebGPU.
    Spinning is perfectly fine. I will

    soon give proof. Meanwhile enjoy
    this use case, so that you understand
    the goal of Prolog "inferencing" for

    a simple example:

    "We try to find 0xCAFFEE in enumerating 4
    6-bit digits and the baseline is Dogelog
    Player VM in a browser. The CPU backend
    with 64 logical threads is already 20
    times faster, partly due to its 32-bit
    specialization. The GPU backend with
    4096 logical threads boosts a further
    factor of 7 times."

    GPU Backend: Find 0xCAFFEE with ă-WAM
    https://medium.com/2989/8890efd3503c

    If you don't understand the goal, and
    the benefits of the goal, all your
    thinking will anyways be incorrect.

    Bye

    Chris M. Thomasson schrieb:
    On 8/2/2026 5:08 PM, Mild Shock wrote:
    [...]
    ***I don't think** you have coded compute
    shaders before? If so, cool, but wow.

    Never mind. You are too hostile. Not worth it. Sorry. Plonk.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris M. Thomasson@3:633/10 to All on Mon Aug 3 12:32:19 2026
    Subject: Re: You are not correctly thinking (Was: Homework: Game Engine in WebGPU)

    On 8/3/2026 12:04 PM, Mild Shock wrote:
    Hi,

    You are not correctly thinking.
    I am not using WebGL. I use WebGPU.
    Spinning is perfectly fine. I will

    Wait... Before I totally plonk... Spinning is fine in a compute shader? Really? If so my FIFO queue fetch-add-only tweak from Dimity's would
    work fine. Also, Dmitry's CAS based one is good as well. My tweak
    version of his have different tradeoffs... I personally would not want
    to use any of them in a compute shader, never spin and/or wait! Strive
    for it, really hard, first... But, well, does your system have "waiting primitives" so you don't have to spin? Also, if you do spin you need
    some sort of backoff, right? Aka PAUSE on x86, etc... Or notice in my
    FIFO one can take the ticket and spin on it later as in a backoff is
    doing other real work.

    Akin to my special mutex pattern that can be found here in this group.
    Iirc the thread is entitled:

    fun with a mutex...



    So, I am using dirextc12 and modern opengl for my compute shaders right
    now. GLSL as my lang. I need to provide some state for them to work
    with. Aka, textures and uniforms.





    soon give proof. Meanwhile enjoy
    this use case, so that you understand
    the goal of Prolog "inferencing" for

    a simple example:

    "We try to find 0xCAFFEE in enumerating 4
    6-bit digits and the baseline is Dogelog
    Player VM in a browser. The CPU backend
    with 64 logical threads is already 20
    times faster, partly due to its 32-bit
    specialization. The GPU backend with
    4096 logical threads boosts a further
    factor of 7 times."

    GPU Backend: Find 0xCAFFEE with ă-WAM
    https://medium.com/2989/8890efd3503c

    If you don't understand the goal, and
    the benefits of the goal, all your
    thinking will anyways be incorrect.

    Bye

    Chris M. Thomasson schrieb:
    On 8/2/2026 5:08 PM, Mild Shock wrote:
    [...]
    ***I don't think** you have coded compute shaders before? If so,
    cool, but wow.

    Never mind. You are too hostile. Not worth it. Sorry. Plonk.


    Fun with a mutex:


    (read all...)
    ____________________________________
    // A Fun Mutex Pattern? Or, a Nightmare? Humm...
    // By: Chris M. Thomasson
    //___________________________________________________


    #include <iostream>
    #include <random>
    #include <numeric>
    #include <algorithm>
    #include <thread>
    #include <atomic>
    #include <mutex>


    #define CT_WORKERS (42)
    #define CT_ITERS (996699)
    #define CT_BACKOFFS (42)
    #define CT_RAND_MAX (20)
    #define CT_RAND_THRESHOLD (5)


    struct ct_shared
    {
    std::mutex m_fun_mutex;
    std::atomic<unsigned long> m_other_work = { 0 };
    int m_test_count0 = 0;

    void
    sanity_check_dump() const
    {
    std::cout << "(ct_shared:" << this << ")->" <<
    "m_test_count0 = " << m_test_count0 << ", " <<
    "m_other_work = " << m_other_work.load(std::memory_order_relaxed) << "\n";
    }

    bool
    sanity_check_validate() const
    {
    return (m_test_count0 == CT_ITERS * CT_WORKERS);
    }
    };



    void
    ct_worker_entry(
    ct_shared& shared
    ) {
    //std::cout << "ct_worker_entry" << std::endl; // testing thread
    race for sure...

    // Thread Local...
    std::random_device rnd_seed = { };
    std::mt19937 rnd_gen(rnd_seed());
    std::uniform_int_distribution<unsigned long> rnd_dist(0, CT_RAND_MAX);

    for (unsigned long i = 0; i < CT_ITERS; ++i)
    {
    // Lock logic...
    {
    unsigned long backoff = 0;

    while (! shared.m_fun_mutex.try_lock())
    {
    unsigned long rnd0 = rnd_dist(rnd_gen);

    if (rnd0 > CT_RAND_THRESHOLD || backoff > CT_BACKOFFS)
    {
    shared.m_fun_mutex.lock();
    break;
    }

    // do other work... :^)
    shared.m_other_work.fetch_add(1,
    std::memory_order_relaxed);

    // but not too much work... ;^o
    ++backoff;
    }
    }

    // Critical Section...
    {
    shared.m_test_count0 = shared.m_test_count0 + 1;
    }

    // Unlock
    {
    shared.m_fun_mutex.unlock();
    }
    }
    }


    int main()
    {
    // Hello... :^)
    {
    std::cout << "Hello ct_fun_mutex... lol? ;^) ver:(0.0.0)\n";
    std::cout << "By: Chris M. Thomasson\n";
    std::cout << "____________________________________________________\n";
    std::cout.flush();
    }

    // Create our fun things... ;^)
    ct_shared shared = { };
    std::thread workers[CT_WORKERS] = { };

    // Lanuch...
    {
    std::cout << "Launching Threads...\n";
    std::cout.flush();

    for (unsigned long i = 0; i < CT_WORKERS; ++i)
    {
    workers[i] = std::thread(ct_worker_entry, std::ref(shared));
    }
    }

    // Join...
    {
    std::cout << "Joining Threads... (computing :^)\n";
    std::cout.flush();
    for (unsigned long i = 0; i < CT_WORKERS; ++i)
    {
    workers[i].join();
    }
    }

    // Sanity Check...
    {
    shared.sanity_check_dump();

    if (! shared.sanity_check_validate())
    {
    std::cout << "\n\n**** Pardon my French, but FUCK!!!!!
    ****\n" << std::endl;
    }

    else
    {
    std::cout << "\nWe are Sane!\n\n";
    std::cout << "We completed " <<
    shared.m_other_work.load(std::memory_order_relaxed) <<
    " work items while waiting for the mutex..." << std::endl;
    }
    }

    // Fin...
    {
    std::cout << "____________________________________________________\n";
    std::cout << "Fin... :^)\n" << std::endl;
    }

    return 0;
    }
    ____________________________________

    Any luck? Its fun to see how many work items were completed when the
    mutex was contended...

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 22:24:31 2026
    Subject: You don't understand the economy of an AI Laptop (Was: You are not correctly thinking)

    Hi,

    Why do you even open your mouth if you
    don't use WebGPU / WGSL? This beyond my
    comprehension. OpenGL was phased out by

    Apple years ago. It only lives on some
    linux boxes. Also you probably don't use
    an AI Laptop. Just make a simple calculation,

    if you have 512 Kernels, and oversubscribe
    4096 logical threads. Then each Kernel runs
    4 logical threads. If one of these 4 logical

    threads spins, how much performance is lost?
    25% of this single kernel. And there are
    still 511 Kernels. Spinning is totally fine,

    thats why WGSL provides CAS, and not some
    waitlists. The kernels are the wait lists itself
    doing the following when spinning:

    NOP
    NOP
    NOP
    Etc..

    Until the a condition is met. You even don't
    need backoff, because you cannot pause. The
    only pause you can do is a barrier.

    But if the condition is not met while the
    barrier is met, what will you do?

    Bye

    Chris M. Thomasson schrieb:
    So, I am using dirextc12 and modern opengl for my
    compute shaders right now. GLSL as my lang. I need
    to provide some state for them to work
    with. Aka, textures and uniforms.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 22:37:29 2026
    Subject: You don't understand producer , workers , consumer (Was: You don't understand the economy of an AI Laptop )

    Hi,

    I you use atomicAdd() you have the same friction
    as if you use Queue put() or take(). There is
    no difference. The only difference is unbounded

    versus bounded. I tried to explain that like
    100-times already. Your comment here:

    Any luck? Its fun to see how many work
    items were completed when the mutex was contended...

    Says to me you don't understand queues. They
    are not mutexes. Because you don't understand
    queues, you also don't understand OpenMP

    parallelism and patterns such as producer,
    workers, consumer. Contention is usually minimal,
    the workers just fetch work items from the

    producer, and then do some workload. And
    then hand the result to the consumer. If
    you use atomicAdd() you have the same friction

    as if you use Queue put() or take(). There
    is no difference. The only difference is unbounded
    versus bounded. I tried to explain that

    like 100-times already.

    Bye

    Mild Shock schrieb:
    Hi,

    Why do you even open your mouth if you
    don't use WebGPU / WGSL? This beyond my
    comprehension. OpenGL was phased out by

    Apple years ago. It only lives on some
    linux boxes. Also you probably don't use
    an AI Laptop. Just make a simple calculation,

    if you have 512 Kernels, and oversubscribe
    4096 logical threads. Then each Kernel runs
    4 logical threads. If one of these 4 logical

    threads spins, how much performance is lost?
    25% of this single kernel. And there are
    still 511 Kernels. Spinning is totally fine,

    thats why WGSL provides CAS, and not some
    waitlists. The kernels are the wait lists itself
    doing the following when spinning:

    NOP
    NOP
    NOP
    Etc..

    Until the a condition is met. You even don't
    need backoff, because you cannot pause. The
    only pause you can do is a barrier.

    But if the condition is not met while the
    barrier is met, what will you do?

    Bye

    Chris M. Thomasson schrieb:
    So, I am using dirextc12 and modern opengl for my compute shaders
    right˙ now. GLSL as my lang. I need to provide some state for them to
    work with. Aka, textures and uniforms.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris M. Thomasson@3:633/10 to All on Mon Aug 3 14:29:36 2026
    Subject: Re: You don't understand producer , workers , consumer (Was: You don't understand the economy of an AI Laptop )

    On 8/3/2026 1:37 PM, Mild Shock wrote:
    Hi,

    I you use atomicAdd() you have the same friction
    as if you use Queue put() or take(). There is
    no difference. The only difference is unbounded

    versus bounded. I tried to explain that like
    100-times already. Your comment here:

    Any luck? Its fun to see how many work
    items were completed when the mutex was contended...

    Says to me you don't understand queues. They
    are not mutexes. Because you don't understand
    queues, you also don't understand OpenMP

    parallelism and patterns such as producer,
    workers, consumer. Contention is usually minimal,
    the workers just fetch work items from the

    producer, and then do some workload. And
    then hand the result to the consumer. If
    you use atomicAdd() you have the same friction

    as if you use Queue put() or take(). There
    is no difference. The only difference is unbounded
    versus bounded. I tried to explain that[...]

    lol. I forgot to add you to my killfile. Damn it! Anyway, I know all
    about them. Sigh. Peace be with you.

    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Mild Shock@3:633/10 to All on Mon Aug 3 23:38:01 2026
    Subject: Know nothing and forget what you posted day before (Was: You don't understand producer , workers , consumer)

    Hi,

    Know nothing and forget what you posted
    day before. You are the most unfocused
    idiotic liar and spammer I have ever met.

    Maybe produce some results or shut up!

    Bye

    Chris M. Thomasson schrieb:
    On 8/3/2026 1:37 PM, Mild Shock wrote:
    Hi,

    I you use atomicAdd() you have the same friction
    as if you use Queue put() or take(). There is
    no difference. The only difference is unbounded

    versus bounded. I tried to explain that like
    100-times already. Your comment here:

    Any luck? Its fun to see how many work
    items were completed when the mutex was contended...

    Says to me you don't understand queues. They
    are not mutexes. Because you don't understand
    queues, you also don't understand OpenMP

    parallelism and patterns such as producer,
    workers, consumer. Contention is usually minimal,
    the workers just fetch work items from the

    producer, and then do some workload. And
    then hand the result to the consumer. If
    you use atomicAdd() you have the same friction

    as if you use Queue put() or take(). There
    is no difference. The only difference is unbounded
    versus bounded. I tried to explain that[...]

    lol. I forgot to add you to my killfile. Damn it! Anyway, I know all
    about them. Sigh. Peace be with you.


    --- PyGate Linux v1.5.19
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)