• Re: VMS Bootcamp

    From cross@cross@spitfire.i.gajendra.net (Dan Cross) to comp.os.vms on Mon Dec 1 16:08:10 2025
    From Newsgroup: comp.os.vms

    In article <10gg2do$3s891$1@dont-email.me>,
    Dave Froble <davef@tsoft-inc.com> wrote:
    On 11/12/2025 6:39 PM, Brian Schenkenberger wrote:
    On 2025-11-12 13:04:23 +0000, Dan Cross said:

    I suspect that there is a lot of business code floating around
    in memory-unsafe languages (MACRO-32, Pascal, maybe COBOL if
    used in some odd ways) etc. Not to mention FFI calls from safe
    languages into unsafe code.

    What *exactly* is memory unsafe using Macro? You do realize that the lion's >> share of VMS is Macro???

    Well ....

    From what I've read, Macro-32 is down to 33% or less these days, and shrinking.

    I'm not really sure just what "memory unsafe" means.

    Generally what this means is that a well-defined program cannot
    make an errant memory access: access to some sized datum will be
    appropritely sized; no dangling pointers; no access through
    uninitialized pointers; no double-frees or NULL dereferences; no
    accesses beyond the end of an array, or before it. In Unix
    terms, this would mean that it won't do something that would
    generate a SIGSEGV or SIGBUS.

    A number of languages can and do make these guarantees; many of
    these languages have an unsafe superset that serves as an escape
    hatch for people who need to do things that would otherwise be
    unrepresentable, but in general, "memory safe" languages prevent
    the programmer from making memory-related mistakes. Clearly, in
    order to do this, the language has to have some notion of types.

    Macro-32, as an assembly langauge, is obviously not memory safe
    in this way: if I MOVL something into R0, the language doesn't
    know whether that's a pointer or just a number. Perhaps a super
    advanced static analyzer could do ok tracing subsequent
    instructions to determing whether accesses make sense, but so
    much semantic information is missing that it is hard to imagine
    how it might meaningfully analyze the program to determine
    whether it's accessing memory safely or not.

    Nor is "idiot safe"
    something that can be enforced in any language.

    100% this. We can make languages _safer_ by making some things
    safe, but we can't make them completely bug-free. I don't know
    that anyone is trying to do that, but a lot of resistance to
    say, memory safe languages seems to be from people who conflate
    the two. However, memory safety eliminates entire categories of
    common bugs.

    Same thing with static typing; I once fixed a production outage
    in a Common Lisp program that passed a list to a function that
    expected a fixnum. But in a language with a strong, static type
    system, that would have been a compile-time error.

    Good code is relatively safe, but not always. I defy anyone to mention any >language in which I cannot do something stupid. Might exist, but I can really
    be very stupid.

    Such a language does not exist. Overall, the thing is sort of
    like solving the halting problem: we know that we cannot solve
    "THE" halting problem in general, but `for(;;);` pretty
    obviously doesn't halt and is easy to detect in a program. So
    we _can_ detect and solve any number of _instances_ of the
    halting problem. So it is with safer languages: we can't
    prevent all bugs, but we can detect and prevent a lot of them,
    and if we do that in important or common areas, and the language
    isn't _too_ onerus as a result, that's a net win.

    Btw, I've found that programmer reactions to these sorts of
    things tend to follow one of two tracks: either enthusiastic
    endorsement ("yes! free me from myself!") or derisive
    condescention ("I don't need that trash; I already write correct
    programs!"). Of course there's some nuance in here I'm eliding,
    but in terms of these broad categories, I tend to find the
    better programmers falling into the former group.

    - Dan C.

    --- Synchronet 3.21a-Linux NewsLink 1.2