Hi Jurgen,

thank you for your response. I haven't used APL professionally since about
1985. I remembered some way of determining a workspace memory footprint,
but I couldn't remember the details. I imagined )SIZE, and the LLM happily
supported me. Clearly, what I was thinking about was ⎕WA.

I apologize for sending you on this wild goose chase.

Respectfully,

Blake McBride

On Mon, Aug 31, 2026 at 12:36 PM Dr. Jürgen Sauermann <
mail@jürgen-sauermann.de> wrote:

> Hi Blake,
>
> A couple of corrections first. GNU APL never implemented )SIZE at all
> (try it -- INCORRECT COMMAND). And the claim that )SIZE "is specified
> in IBM's own APL2 Language Reference and Programming Guide manuals"
> doesn't check out either -- I searched both (full text, including a
> fresh PDF extraction of the LRM) and there's no )SIZE anywhere in
> either one; the only size-related system command APL2 actually
> documents is )SYMBOLS (query/modify the symbol table size), a different
> thing. Then I tried it directly against the real IBM APL2 demo for PCs
> -- also INCORRECT COMMAND. So )SIZE isn't just undocumented, it doesn't
> exist in actual APL2 either. That part of the Claude answer was simply
> fabricated -- I didn't know of a real )SIZE, no manual backs it up, and
> now neither does the interpreter itself.
>
> That said, your three points are all already covered, just under
> different names:
>
> 1. Current memory usage -- no direct "bytes used" counter, but ⎕WA is
>    live (re-reads /proc/meminfo on every reference), so usage is
>    ⎕WA-at-start minus ⎕WA-now.
>
> 2. Available before swapping -- this is exactly what ⎕WA already
>    reports. It reads /proc/meminfo's MemAvailable, which the kernel
>    itself defines as memory available for new processes without
>    swapping. Nothing to add here, it's already answering that question.
>
> 3. A settable max, useful for multi-processing -- already possible two
>    ways:
>    - --mem at startup: an absolute size (--mem 4G) or a percentage of
>      free memory (--mem 60%, 5-95% allowed).
>    - ⎕SYL[32;2] (WA_MARGIN, bytes) and ⎕SYL[33;2] (WA_SCALE, percent)
>      are both writable at runtime, not just reported -- so the cap can
>      be tuned after startup too, per process, which is the part that
>      matters for multi-processing.
>
> So no need for a new )SIZE-alike command -- the pieces you actually asked
> for are all there already, just split across ⎕WA/--mem/⎕SYL rather than
> bundled under one name. Might be worth a paragraph in the manual pulling
> these three together explicitly, since as your email shows it's not
> obvious they're related unless you already know to look.
>
> If anyone does recall a real )SIZE from APL\360 or APLSV days (i.e.
> older than APL2), I'd be curious -- but for GNU APL's purposes it
> doesn't matter either way, since we never modeled ourselves on it.
>
> Cheers,
> Juergen
>
> PS: this reply, including the ⎕SYL row numbers and confirming they're
> writable, was checked against a live GNU APL build with Claude Code.
>
>
> On 8/29/26 18:14, Blake McBride wrote:
>
> Greetings,
>
> I seem to remember a )SIZE command from way back.  I queried Claude and
> found the following:
>
> *Me: * Is the )SIZE command part of the IBM APL standard?
>
> *Claude:*
>
> Good question — worth distinguishing a couple of things here.
>
> *)SIZE is not part of a formal international standard.* The formal APL
> language standards (ISO/IEC 8485 for APL, and later ISO/IEC 13751 for
> "Extended APL"/APL2-style features) define the *language* — syntax,
> primitive functions, operators, array semantics, etc. They generally do
> *not* standardize system commands (the )-prefixed commands), because
> those are considered part of the *interactive session/workspace
> management* layer, which is implementation-specific.
>
> *)SIZE is, however, a long-standing IBM convention.* It originated in
> IBM's APL implementations — APL\360, APLSV, and later APL2 — as part of
> their documented system command set, and it's specified in IBM's own APL2
> Language Reference and Programming Guide manuals. Because IBM's APL
> products were so influential, many other vendors (Dyalog, GNU APL, APLX,
> etc.) adopted )SIZE or a close variant as a convention for compatibility
> and familiarity, even though they aren't obligated to by any standard.
>
> So the accurate way to put it: )SIZE is a de facto standard inherited
> from IBM's APL lineage, not a de jure one — it's part of IBM's documented
> practice, but not part of the ISO APL language standard.
>
> ----------------
>
> *Me: * Can you set the size of a workspace?
>
> *Claude:*
>
> Yes — )SIZE can be used both to query and to set the workspace size
> limit, depending on the implementation.
>
> *To query:* typing )SIZE alone reports the current active workspace size
> (and often the maximum available).
>
> *To set:* you follow it with a number, e.g.:
>
> )SIZE 4000
>
> This requests a workspace size limit of 4000 (units vary by implementation
> — often bytes, or sometimes a system-defined unit). A few practical notes:
>
>    - *You can usually only shrink or grow within bounds.* Most
>    implementations let you *reduce* the size freely, but *increasing* it
>    is capped by system-imposed limits (total memory available, licensing
>    limits, or an administrator-configured maximum). If you ask for more than
>    the system allows, it typically just sets it to the maximum permitted
>    rather than erroring out.
>    - *Timing matters.* In many implementations, )SIZE only takes effect
>    for variables/objects created *after* the command — it doesn't
>    retroactively shrink space already occupied by existing data, and if your
>    existing workspace content already exceeds the new requested size, the
>    request may be rejected or clamped.
>    - *Some implementations tie )SIZE to sign-on time only.* In older
>    mainframe-style APL systems (e.g., timesharing APL\360/APLSV), workspace
>    size was sometimes fixable only during login/sign-on, not mid-session.
>    Modern implementations like Dyalog APL and GNU APL are generally more
>    flexible and let you resize mid-session, memory permitting.
>
> If you tell me which specific APL system you're working in (Dyalog, GNU
> APL, APL2, etc.), I can give you the precise syntax and behavior for that
> one, since the exact units and constraints do vary.
>
> -------------------------------------------------------
>
> I am trying to think if )SIZE makes any sense in today's environment.
>
> I think the following would be worth knowing:
>
> 1. How much memory the system is currently using.  This would redilly
> point out when you are taking up a lot more memory then you expect.
>
> 2. How much memory is available before going into virtual memory.
>
> 3. Being able to set a max memory usage can be helpful in a
> multi-processing system.
>
> Just some thoughts.
>
> Blake
>
>
>
>
  • )SIZE Blake McBride
    • Re: )SIZE Dr . Jürgen Sauermann via Bugs and suggestions for GNU APL
      • Re: )... Blake McBride

Reply via email to