• Re: Resources to learn common lisp?

    From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Fri Jun 19 19:06:48 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    That's Perl living up to its own motto, "there's more than one way to do
    it". ;-)


    Yes, I do love PERL! thanx for the remembrance...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 20 00:02:53 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 19 Jun 2026 19:01:41 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    PostScript is so little used nowadays, even Adobe has deleted all
    the documentation from its website.

    sigh, I know. I still call pdf postscript version 3.

    There is/was an actual PostScript language version (aka rCLlanguage
    levelrCY) 3. Following on from rCLPostScript Level 2rCY, it should have been called rCLPostScript Level 3rCY, but they used the name rCLPostScript 3rCY instead. I think somebody else might have had a trademark on rCLLevel
    3rCY, or something.

    One interesting difference between the language reference manuals
    between version/level 2 and 3 was the Display PostScript part in the
    former was dropped from the latter.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 20 00:04:51 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 19 Jun 2026 18:52:01 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Tue, 16 Jun 2026 23:53:07 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 15 Jun 2026 01:15:12 -0000 (UTC), Waldek Hebisch wrote:

    On equvalent programs built from low-level operations 'sbcl'
    routinely gets _much_ better performance than Python.

    Is this with similar memory consumption?

    sbcl has a new generation GC.

    Is that a yes or a no?

    "
    SBCL also inherited some newer architectural features from CMUCL. The
    most important is that on some architectures it has a generational
    garbage collector ("GC"), which has various implications (mostly good)
    for performance. These are discussed in another chapter, *note
    Efficiency::.
    "

    And memory consumption?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Fri Jun 19 21:24:44 2026
    From Newsgroup: comp.lang.lisp

    ram@zedat.fu-berlin.de (Stefan Ram) writes:

    For negotiations about weapons two parties need to find a
    common definition of the concept of a "warhead". More can
    be found in "What exactly is a warhead?" by Anna Hadley,
    Sandia Report SAND98-1201, June 1998.

    you must be kidding. "I just got blown up!"; i need to know the name
    of the device?


    In 1819, a merchant refused to pay a fish product tax on whale
    oil because a whale was not a fish. A court finally ruled
    that a whale is a fish. Later, a law established that a whale
    is not a fish. (According to D. Graham Burnett in "Trying
    Leviathan: The Nineteenth-Century New York Court Case That
    Put the Whale on Trial and Challenged the Order of Nature")


    did you know that it is illegal to trap mice in NJ,USA. That means they
    need to change the labeling on the mouse trap to something that make
    people feel less guilty about their environmental needs.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp on Fri Jun 19 22:32:28 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> writes:

    Really? That would be something I haven't encountered before. Can you
    explain how such a disagreement comes about?

    E.g. let's say you have

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))

    let's say you call (my-foo "hello" "my" "world") and a GC happens during
    the call to `do-something`:

    - Is the content of `b` still reachable?
    (AFAIK most languages don't specify it; ELisp will probably consider it
    as reachable, Scheme and SML say it isn't)
    - What about the content of `c`?

    Ah yes, in fact, I _have_ encountered that issue before. A few years
    ago I spent some time trying to understand exactly what Java's take was
    on this situation. (If I recall correctly, I was trying to debug
    somebody else's code that used the finalize() method.) The Java
    language specification addresses the issue by granting the compiler and
    the JVM a license to do whatever they want -- so in Java, this is
    undefined behavior.

    Does the Scheme standard really say that `b` in your example isn't
    reachable? I don't pay any attention to Scheme any more, so I didn't
    follow the production of RrU+RS very closely, but I don't remember
    anything in there that needs to say anything about reachability -- the denotational semantics in section 7.2 includes an implementation
    dependent `new` function that is allowed to signal an error if memory
    runs out, but it is also allowed to assume an infinite supply of
    locations.
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Jun 20 13:00:58 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 19 Jun 2026 21:24:44 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:

    ram@zedat.fu-berlin.de (Stefan Ram) writes:

    For negotiations about weapons two parties need to find a
    common definition of the concept of a "warhead". More can
    be found in "What exactly is a warhead?" by Anna Hadley,
    Sandia Report SAND98-1201, June 1998.

    you must be kidding. "I just got blown up!"; i need to know the name
    of the device?


    In 1819, a merchant refused to pay a fish product tax on whale
    oil because a whale was not a fish. A court finally ruled
    that a whale is a fish. Later, a law established that a whale
    is not a fish. (According to D. Graham Burnett in "Trying
    Leviathan: The Nineteenth-Century New York Court Case That
    Put the Whale on Trial and Challenged the Order of Nature")


    did you know that it is illegal to trap mice in NJ,USA. That means they
    need to change the labeling on the mouse trap to something that make
    people feel less guilty about their environmental needs.

    It is problematic to /live/ trap in many places.

    Where I am it is legal to trap - dead or live - on your own property.
    But if you live trap you become responsible for the animal's welfare:
    you must give medical aid if it is injured, and must arrange to
    release it safely [hopefully somewhere it won't find its way back].

    Better to dead trap or shoot pests.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Jun 20 13:43:14 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 21:28:25 -0400, Alan Bawden <alan@csail.mit.edu>
    wrote:

    Stefan Monnier <monnier@iro.umontreal.ca> writes:

    AFAIK, there is no agreed upon meaning of "garbage collection" in this
    respect: some people take it to include both "tracing GC" and "reference
    counting", while others take it to mean only "tracing GC".
    Always keep that in mind whenever you read or write "GC".

    I'm pretty sure that 45 years ago we all agreed that "reference
    counting" counted as a tool for "garbage collection". But language
    changes, so perhaps that's no longer the case today. Seem like a loss
    to me. (Similar to the way many people now claim that Lisp no longer
    counts as a call-by-value language.)

    Here also, there can be minor disagreements over what
    "unreachable" means.

    Really? That would be something I haven't encountered before. Can you >explain how such a disagreement comes about?

    The definition of reachable used by GC is different from the that used
    by compilers. Compiler texts generally refer to it as being "live" or
    "dead", but it is the same issue as "reachable" or "unreachable".

    For a compiler, an object becomes dead (unreachable) immediately
    following its last use. However the object reference often continues
    to exist until the current scope is disposed [because few (if any)
    compilers bother to null references when they finish with them].
    Additionally other references to the object may continue to exist in
    other scopes even though they will never be used again.

    So if GC is triggered after the object's last use, but before the
    object's last reference is removed, the object will continue to
    survive collections even though the compiler considers it dead.


    There are no disagreements about what reachable means to a compiler or
    to GC in isolation, the only tension is between the two.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Jun 20 13:56:55 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 19 Jun 2026 15:08:13 -0400, Stefan Monnier
    <monnier@iro.umontreal.ca> wrote:

    Here also, there can be minor disagreements over what
    "unreachable" means.
    Really? That would be something I haven't encountered before. Can you
    explain how such a disagreement comes about?

    E.g. let's say you have

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))

    let's say you call (my-foo "hello" "my" "world") and a GC happens during
    the call to `do-something`:

    - Is the content of `b` still reachable?
    (AFAIK most languages don't specify it; ELisp will probably consider it
    as reachable, Scheme and SML say it isn't)
    - What about the content of `c`?


    === Stefan

    That's not a language issue but an implementation issue: 'b' and 'c'
    both are locals in my-foo. The compiler may realize that 'b' is not
    used again (is "dead" in compiler speak) following the concat, and so
    a debugger may not allow viewing it.

    However, whatever was passed in as 'b' still exists in a surrounding
    scope and should still be accessible. The object(s) referenced may
    have been modified following the call to do-something, but the
    reference will exist.


    Correctly done, GC is supposed to act like a NOP ... the mutator
    (program) should not be able to perceive any difference to its live
    data structures for GC having run or not.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp on Sat Jun 20 22:28:03 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:
    The definition of reachable used by GC is different from the that used
    by compilers. Compiler texts generally refer to it as being "live" or "dead", but it is the same issue as "reachable" or "unreachable".

    Which is why I blanked on what Stefan was talking about initially.
    We're having a discussion about garbage collection here (despite the
    thread being titled "Resources to learn common lisp?"!), so I assumed
    the word "reachable" meant what it normally means in a paper about
    garbage collection: the objects reachable from the root set. Things the compiler might do to alter the root set aren't normally part of the
    discussion.
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 21 14:57:53 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:
    However, whatever was passed in as 'b' still exists in a surrounding
    scope and should still be accessible.

    It doesn't necessarily exist in the surrounding scope either though. It
    might be a temporary object created during during evaluation of the
    function arg.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Mon Jun 22 09:11:41 2026
    From Newsgroup: comp.lang.lisp

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))
    [...]
    - Is the content of `b` still reachable?
    [...]
    That's not a language issue but an implementation issue: 'b' and 'c'
    both are locals in my-foo.

    I think you guys are right, I was confusing "safe for space" (which is
    the property relevant for my question) and proper tail recursion (which
    is closely related but not quite the same): SML and Scheme do require
    proper tail recursion, so they do require that `b` is not reachable any
    more if the GC happens within `do-something-else`, but as for whether
    `b` is reachable if the GC happens within `do-something` it's still
    considered a quality of implementation issue. I'd be interested to hear
    of a language definition that requires "safety for space".

    See https://dl.acm.org/doi/10.1145/345099.345125 for an example of
    a paper that worries about "safety for space".


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Mon Jun 22 09:16:38 2026
    From Newsgroup: comp.lang.lisp

    Alan Bawden [2026-06-20 22:28:03] wrote:
    thread being titled "Resources to learn common lisp?"!), so I assumed
    the word "reachable" meant what it normally means in a paper about
    garbage collection: the objects reachable from the root set. Things the compiler might do to alter the root set aren't normally part of the discussion.

    Yet, the programmer has no control nor visibility other than via the
    source code: the programmer shouldn't (in an ideal world) be able to
    determine from the source code when an object is reachable, regardless
    of what the compiler chose to do.

    Of course, it's always possible the compiler chose to do something that
    makes an object unreachable even tho the source code suggests it might
    still be reachable: as long as it has no other effect than using less
    memory, noone would object. But the other way around is problematic.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Jun 24 22:14:42 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> wrote:
    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))

    let's say you call (my-foo "hello" "my" "world") and a GC happens during
    the call to `do-something`:

    - Is the content of `b` still reachable?
    (AFAIK most languages don't specify it; ELisp will probably consider it
    as reachable, Scheme and SML say it isn't)
    - What about the content of `c`?


    I am unclear why this is a problem. It depends on what concat does.

    If it copies the object b refers to then the object bound to b b is no
    longer reachable unless there is some other reference to it (for instance strings might be interned in your example). If it does not copy it rCo for instance if concat is cons, then the objects is reachable.

    Absent a very smart compiler which could prove that the length of x was
    greater than 3 then the object bound to c is reachable.

    But perhaps I am missing something.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Thu Jun 25 11:20:14 2026
    From Newsgroup: comp.lang.lisp

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))

    let's say you call (my-foo "hello" "my" "world") and a GC happens during
    the call to `do-something`:

    - Is the content of `b` still reachable?
    (AFAIK most languages don't specify it; ELisp will probably consider it
    as reachable, Scheme and SML say it isn't)
    - What about the content of `c`?


    I am unclear why this is a problem.

    It's usually not a problem. It just illustrates that there can be
    different notions of "reachable".


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Fri Jun 26 00:43:07 2026
    From Newsgroup: comp.lang.lisp

    ram@zedat.fu-berlin.de (Stefan Ram) wrote or quoted:
    Joerg Mertens <joerg-mertens@t-online.de> wrote or quoted:
    Does Perl really have a garbage collector besides reference counting? >Reference counting is a form of garbage collection.

    At least the renowned reference "The Garbage Collection Handbook"
    (2nd ed.) by Jones has chapters

    1 Introduction
    2 Mark-sweep garbage collection
    3 Mark-compact garbage collection
    4 Copying garbage collection
    5 Reference counting <===========
    6 Comparing garbage collectors
    7 Allocation
    8 Partitioning the heap
    9 Generational garbage collection
    . . .

    .


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 02:52:04 2026
    From Newsgroup: comp.lang.lisp

    On 26 Jun 2026 00:43:07 GMT, Stefan Ram wrote:

    On Thu, 18 Jun 2026 01:06:00 -0000 (UTC), Lawrence DrCOOliveiro wrote:

    On 17 Jun 2026 11:17:33 GMT, Stefan Ram wrote:

    Reference counting is a form of garbage collection.

    No, it is a form of *memory allocation management*.

    rCLGarbagerCY is the term for rCLmemory that is unreachable, but still
    unavailable for reallocationrCY.

    Stop referring to AIs for this sort of thing, please.

    At least the renowned reference "The Garbage Collection Handbook"
    (2nd ed.) by Jones has chapters

    1 Introduction
    2 Mark-sweep garbage collection
    3 Mark-compact garbage collection
    4 Copying garbage collection
    5 Reference counting <===========

    Not rCLReference counting garbage collectionrCY? Other chapter headings
    have rCLgarbage collectionrCY in there, over and over, so it seems
    unlikely that it was omitted just for brevity. So why was rCLgarbage collectionrCY omitted from this chapter heading? Could it be it wasnrCOt applicable?

    Feel free to quote from the actual book to tell me if IrCOm right or
    wrong.

    6 Comparing garbage collectors
    7 Allocation
    8 Partitioning the heap
    9 Generational garbage collection
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 02:56:56 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 16 Jun 2026 12:33:19 -0000 (UTC), tfb wrote:

    A reference counted system would have looked at, *and written the reference counts of* all billion conses: about 250 times as many as the GC.

    Two points to that:
    * Most of the reference-counter management would be happening in the
    L1 or maybe L2 cache. This goes back to my point about
    reference-counting mostly dealing with recently-used objects, while
    GCs go back to faulting in lots of long-dead objects.
    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 02:58:36 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 14 Jun 2026 18:04:14 -0700, Paul Rubin wrote:

    I also looked up Zorn's PhD thesis (about GC performance) from 1988:

    https://www2.eecs.berkeley.edu/Pubs/TechRpts/1989/Archive/CSD-89-544.pdf

    Unfortunately, reference counting has fundamental disadvantages.
    First and foremost, reference counting algorithms do not reclaim
    storage allocated in circular structures. Modifications to the
    traditional algorithm have been suggested to overcome this
    problem, but the performance of the modified algorithm is
    unacceptably slow.

    I would say that claim is long obsolete. As evidence, look at what the
    Python developers have done recently.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 03:02:40 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 16 Jun 2026 03:14:39 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Lisp would be the same. WhatrCOs his name, Lisp guru Paul Graham, has
    a blog online where he talks about working on an early dotcom
    startup where the development language was Lisp. That gave them a
    lot of productivity boosts. But the core part of the in-memory
    database was implemented in C++, precisely where the garbage
    collector could not get its sticky fingers on it.

    Do you mean https://www.paulgraham.com/avg.html ?

    No, this one <https://paulgraham.com/carl.html>:

    4. Because we have about 2 gigs of static data we need rapid
    access to, we use C++ code to memory-map huge files containing
    pointerless C structs (of flights, fares, etc), and then access
    these from Common Lisp using foreign data accesses. A struct field
    access compiles into two or three instructions, so there's not
    really any performance. penalty for accessing C rather than Lisp
    objects. By doing this, we keep the Lisp garbage collector from
    seeing the data (to Lisp, each pointer to a C object is just a
    fixnum, though we do often temporarily wrap these pointers in Lisp
    objects to improve debuggability). Our Lisp images are therefore
    only about 250 megs of "working" data structures and code.

    And the stuff he says about Python now seems quaint.

    A lot of the stuff people are *still* saying about Python seems quaint
    ;).
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jun 26 21:47:21 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    4. Because we have about 2 gigs of static data we need rapid
    access to, we use C++ code to memory-map huge files containing
    pointerless C structs (of flights, fares, etc), and then access
    these from Common Lisp using foreign data accesses.

    This sounds like there was no substantial C++ code other than an mmap
    call. As it was a chunk of static pointer-free data being mapped, there
    wasn't any allocation going on. It sounds to me like the CL
    implementation was missing mmap, so they used an FFI instead. Anyway
    it's perfectly normal to do stuff like that. It's consistent with what
    I've said earlier, about most stuff in the computer's memory not being
    under GC. Are you seriously saying reference counting could have
    somehow appeared instead?

    Fwiw I haven't used CL in a while, but GHC has several mmap modules, so
    the above approach wouldn't have needed C++ code. E.g.:

    https://hackage.haskell.org/package/mmap
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Sat Jun 27 20:25:42 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Two points to that:
    * Most of the reference-counter management would be happening in the
    L1 or maybe L2 cache. This goes back to my point about
    reference-counting mostly dealing with recently-used objects, while
    GCs go back to faulting in lots of long-dead objects.

    How exactly does the GC find these 'long dead objects' to reference? Oh,
    wait, it doesn't: you just have no fucking idea how a copying GC (or indeed
    a mark&sweep GC) works.

    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.


    I see. Stuctures which don't refer to other structures are not a problem. Hello? Yes, we know that.

    You are what kill files were invented for.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sat Jun 27 13:48:17 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.

    DEFSTRUCT, cough.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 23:18:16 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 26 Jun 2026 21:47:21 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    4. Because we have about 2 gigs of static data we need rapid
    access to, we use C++ code to memory-map huge files containing
    pointerless C structs (of flights, fares, etc), and then access
    these from Common Lisp using foreign data accesses.

    This sounds like there was no substantial C++ code other than an mmap
    call. As it was a chunk of static pointer-free data being mapped, there wasn't any allocation going on.

    That was the point: to keep a large amount of data out of the hands of
    the Lisp garbage collector.

    Anyway it's perfectly normal to do stuff like that.

    Admit that the Lisp garbage collector cannot scale to dealing with
    large amounts of data?

    Are you seriously saying reference counting could have somehow
    appeared instead?

    You say that facetiously, but that is in fact what people are doing
    nowadays, when they load huge amounts of data with NumPy, Pandas etc
    for analysis with Python code.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 23:29:58 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 16 Jun 2026 15:29:26 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Perl was probably the pioneer here. Implementations use garbage
    collection simply because itrCOs so much easier to do, nothing more.

    Have you actually implemented both? I feel like a bunch of stuff you're saying come from inexperience.

    I donrCOt claim to be smart enough to implement such things. My
    experience comes from using implementations created by people much
    smarter than I am.

    If of any interest, the current "big" Python implementation is
    CPython and it uses reference counting.

    Reference counting + GC.

    MicroPython, a smaller Python version for microcontrollers, uses GC.
    Lua, considered a smaller-footprint and more embeddable language
    than Python, also uses GC.

    Lua was designed specifically for embedding into other apps. Python (specifically CPython) was considered less suitable because it was a
    larger and more complex language.

    But guess what: I think Python has become more popular for embedded
    use than Lua.

    MicroPython ran on MCU's with as little as 16KB of ram (BBC
    Micro:bit v1) though that was very cramped. It's reasonably usable
    with 32KB. I don't think CPython could run at all on those machines.

    That may be true, but I doubt it has much to do with memory management.

    Out of curiosity, I looked it up <https://docs.micropython.org/en/latest/develop/memorymgt.html>. Note
    how they need to offer a separate rCLtracked allocationrCY API for use
    from C code? Somehow their rCLgarbage collectionrCY scheme seems to have
    some interesting limitations, no doubt for speed and efficiency.

    By contrast CPython simply exposes the regular object-management API
    for use by extension modules. Or the external code can use regular malloc(3)/free(3) for its own purposes (separate from interfacing with
    Python), and that will work, too.

    I'd be interested to know why CPython uses RC.

    Because of the reasons werCOve been discussing. You still refuse to
    accept that there might be a point to that?

    Slightly related, do you even use Lisp?

    Mainly for customizing Emacs.

    I think your picture of how Lisp programs use memory is also
    unrealistic.

    LetrCOs just say, rCLLisprCY and rCLhigh performancerCY were never terms that commonly went together. Whereas nowadays rCLPythonrCY and rCLhigh performancerCY are indeed commonly uttered in the same sentence ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 23:35:18 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 07:52:36 -0000 (UTC), tfb wrote:

    Can you do topic analysis of text?

    By rCLtopic analysis of textrCY do you mean rCLgloss over your attempts at trying to cover up the weakness of your argumentrCY?

    You were trying to claim that rCLchances arerCY InterlisprCOs reference-counting scheme was rCLquite a lot clevererrCY than PythonrCOs
    one. That turned out to be wrong. So you tried to distract attention
    with another argument, that this was somehow rCLnothing to do with
    reference countingrCY, but with rCLhandling shared resources which is a famously hard problem which, surprise, Interlisp-D did not solverCY.

    Except, of course, that PythonrCOs reference-counting scheme *does*
    solve that problem.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jun 27 23:38:58 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 12:53:23 -0400, Stefan Monnier wrote:

    On Thu, 18 Jun 2026 01:06:00 -0000 (UTC), Lawrence DrCOOliveiro wrote:

    On 17 Jun 2026 11:17:33 GMT, Stefan Ram wrote:

    Reference counting is a form of garbage collection.

    No, it is a form of *memory allocation management*.

    AFAIK, there is no agreed upon meaning of "garbage collection" in
    this respect: some people take it to include both "tracing GC" and
    "reference counting", while others take it to mean only "tracing
    GC". Always keep that in mind whenever you read or write "GC".

    I refuse to do that, for the simple fact that, the implication of your conflation of terms is that the word rCLgarbagerCY now refers to *all* allocated memory, not just the memory you want to reclaim.

    I refuse to think of the valid, live objects of my programs as
    rCLgarbagerCY.

    rCLGarbagerCY is the term for rCLmemory that is unreachable, but still
    unavailable for reallocationrCY.

    Here also, there can be minor disagreements over what "unreachable"
    means.

    Simple definition: itrCOs whatever can be reclaimed for reuse without
    affecting the correctness of the program.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 07:47:04 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 14 Jun 2026 01:46:19 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Caches are all about speeding up repeated accesses to the same
    data.

    No I don't think so.

    You donrCOt rCLthinkrCY?

    Cache is fast memory.

    Of limited size. Not nearly enough to contain all the live objects in
    the heap (in realistic cases). As it fills up, contents have to be
    dumped to the next, slower, level of memory. So bulk transfers, which
    pretty much by definition are going to larger than any RAM cache, are inevitably going to be bottlenecked by the speed of the slowest memory
    in the hierarchy, which is main RAM.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 07:55:42 2026
    From Newsgroup: comp.lang.lisp

    On 19 Jun 2026 08:12:32 GMT, Stefan Ram wrote:

    Donald Knuth had a subsection 2.3.5 "Lists and Garbage Collection"
    in his 1968 "The Art of Computer Programming" where he mentions
    reference counting. So we might think that to him it /is/ a form
    of garbage collection as it is mentioned under this heading.
    However, he chose a wording that seems to say, to him, it is /not/
    garbage collection:

    |Two principal methods have been suggested for maintaining the
    |available space list: the use of /reference counters/, and /garbage |collection/.

    . Interesting comma there!

    He should have used the title rCLLists and Memory Allocation
    ManagementrCY. That would have been much clearer, donrCOt you think?

    Now, you can propose that rCLgarbage collectionrCY is synonymous with
    rCLmemory allocation managementrCY. But that seems redundant, to have two
    terms for the same thing. Not to mention that it seems to imply, does
    it not, that all allocated objects are rCLgarbagerCY, whereas the actual
    code that goes under the name of rCLgarbage collectorrCY only wants to
    collect objects that have been allocated, but are no longer used by
    the program.

    Therefore, it makes sense that the rCLgarbagerCY part of rCLgarbage collectorrCY refers specifically to such memory allocations. Such
    objects cannot occur with reference counting, in the absence of
    reference cycles. Therefore, in such a situation, reference counting
    never produces rCLgarbagerCY that needs rCLcollectingrCY, which is why it doesnrCOt make sense to refer to it as a form of rCLgarbage collectionrCY.

    And when you *do* get reference cycles, the reference counter is no
    longer capable of coping on its own. So just when you have actual
    rCLgarbagerCY that needs collecting, a piece of code that some still want
    to call a rCLgarbage collectorrCY doesnrCOt actually work.

    Which is *another* reason not to refer to reference-counting as a form
    of rCLgarbage collectionrCY.

    Does that make sense?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 23:21:02 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 19 Jun 2026 15:08:13 -0400, Stefan Monnier wrote:

    Here also, there can be minor disagreements over what
    "unreachable" means.

    Really? That would be something I haven't encountered before. Can you
    explain how such a disagreement comes about?

    E.g. let's say you have

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))

    This is why the traditional rCLparenthesis pileuprCY layout for Lisp
    code is not helpful for figuring out whatrCOs going on. LetrCOs try reformatting that for clarity, shall we:

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3)
    (do-something-else c)
    ) ; if
    ) ; let
    ) ; my-foo

    let's say you call (my-foo "hello" "my" "world") and a GC happens during
    the call to `do-something`:

    - Is the content of `b` still reachable?
    (AFAIK most languages don't specify it; ELisp will probably consider it
    as reachable, Scheme and SML say it isn't)

    Does it make a difference to the correctness of the code?

    - What about the content of `c`?

    Same question applies.

    What if rCLdo-somethingrCY is a macro, not a function call?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 23:34:24 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 27 Jun 2026 13:48:17 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Tue, 16 Jun 2026 12:33:19 -0000 (UTC), tfb wrote:

    A reference counted system would have looked at, *and written the
    reference counts of* all billion conses: about 250 times as many
    as the GC.

    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.

    DEFSTRUCT, cough.

    A point the poster I was replying to needs to appreciate, perhaps?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 28 16:36:03 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    Admit that the Lisp garbage collector cannot scale to dealing with
    large amounts of data?

    It's not a scaling issue in the slightest.

    You say that facetiously, but that is in fact what people are doing
    nowadays, when they load huge amounts of data with NumPy, Pandas etc
    for analysis with Python code.

    NumPy and friends keep their data away from the CPython reference
    counting system the same way mmap keeps the mapped data away from a Lisp
    GC.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 23:37:34 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 27 Jun 2026 20:25:42 -0000 (UTC), tfb wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    On Tue, 16 Jun 2026 12:33:19 -0000 (UTC), tfb wrote:

    A reference counted system would have looked at, *and written the
    reference counts of* all billion conses: about 250 times as many
    as the GC.

    Two points to that:

    * Most of the reference-counter management would be happening in
    the L1 or maybe L2 cache. This goes back to my point about
    reference-counting mostly dealing with recently-used objects,
    while GCs go back to faulting in lots of long-dead objects.

    How exactly does the GC find these 'long dead objects' to reference?
    Oh, wait, it doesn't: you just have no fucking idea how a copying GC
    (or indeed a mark&sweep GC) works.

    If a GC is not finding long-dead objects to reclaim, then what exactly
    is it doing? IsnrCOt that exactly what the rCLgarbagerCY is, that it is supposed to rCLcollectrCY?

    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.

    I see. Stuctures which don't refer to other structures are not a
    problem. Hello? Yes, we know that.

    So why didnrCOt you mention it? Why were you talking about rCLconsesrCY at
    all?

    Or did your term rCLconsesrCY not refer to what CONS does?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 23:38:31 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 19 Jun 2026 11:41:38 -0000 (UTC), Waldek Hebisch wrote:

    You clearly did not understand what I wrote. Hint: re-read part that
    you snipped.

    Going passive-aggressive on us now?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 28 16:41:13 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    I donrCOt claim to be smart enough to implement such things. My
    experience comes from using implementations created by people much
    smarter than I am.

    I think you're also pretty unfamiliar with how the implementations work.

    But guess what: I think Python has become more popular for embedded
    use than Lua.

    Lua is a somewhat weird language and people may prefer Python due to familiarity. CPython is a pain to embed though.

    <https://docs.micropython.org/en/latest/develop/memorymgt.html>. Note
    how they need to offer a separate rCLtracked allocationrCY API for use
    from C code?

    The usual reason for stuff like that is so the C code doesn't have to
    interact with the GC too much.

    Somehow their rCLgarbage collectionrCY scheme seems to have
    some interesting limitations, no doubt for speed and efficiency.

    Perhaps you could post some benchmarks instead of speculating.

    I'd be interested to know why CPython uses RC.
    Because of the reasons werCOve been discussing. You still refuse to
    accept that there might be a point to that?

    I don't see any clear advantages. One early motivation was prompt
    finalization when stuff goes out of scope, but later the "with"
    statement was added, giving something like RAII.

    LetrCOs just say, rCLLisprCY and rCLhigh performancerCY were never terms that commonly went together. Whereas nowadays rCLPythonrCY and rCLhigh performancerCY are indeed commonly uttered in the same sentence ...

    Python and high performance amount to using Python as a scripting
    wrapper around C libraries, or even CUDA libraries.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jun 28 23:42:51 2026
    From Newsgroup: comp.lang.lisp

    HererCOs another point: if garbage collection offers so much better
    performance than reference-counting, why donrCOt operating-system
    kernels use it? After all, they are one of the most critical parts of
    your software stack, as far as performance goes.

    Look at the Linux kernel as an example, and you will see it makes
    heavy use of reference-counting, not garbage collection, to manage kernel-internal objects. And yet Linux is widely regarded as one of
    the highest-performance operating systems out there; when architects
    of the worldrCOs most powerful computers think about what OS to run on
    their creations, they invariably choose Linux.

    And then thererCOs filesystems. POSIX filesystems depend crucially on reference-counting to decide when files need to be deleted. No garbage collection there either.

    Why not?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 28 16:55:53 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    If a GC is not finding long-dead objects to reclaim, then what exactly
    is it doing? IsnrCOt that exactly what the rCLgarbagerCY is, that it is supposed to rCLcollectrCY?

    A copying GC doesn't find dead objects to reclaim them. It copies the
    live objects to a new heap (contiguous chunk of memory) and then
    releases the entire old heap in a single swoop. So if there are 15 live objects and a million dead ones, the GC spends no time dealing with the individual dead ones.

    I see. Stuctures which don't refer to other structures are not a
    problem. Hello? Yes, we know that.
    So why didnrCOt you mention it? Why were you talking about rCLconsesrCY at all?

    Cons nodes obviously have to be GC'd. But you're mistaken in believing
    that most of the heap objects in a running Lisp program consists of cons
    nodes. Thus the mention of DEFSTRUCT. Or for that matter, arrays.
    Python uses them, and Lisp has them too.

    Also, in Lisp jargon, "consing" sometimes informally refers to
    allocating any type of memory object, not just cons nodes.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Jun 28 22:37:52 2026
    From Newsgroup: comp.lang.lisp

    tfb <no_email@invalid.invalid> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    That memory has to be marked as free for reallocation somehow. That
    will be where the cache-thrashing comes in, no escaping it.


    It does not. Once the live data has been copied from the area of memory it is free, and new allocation may take place there. You really need to think about how a copying GC works.

    Does any program actually free or return memory to the kernel before it exits? --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Jun 28 22:41:26 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:


    I wish we had a way for a running Python image to snapshot itself, like traditional Lisps did, maybe using something based on CRIU. Emacs Lisp initially did this with a Unix hack that it called unexec(), that
    eventually became too hard to maintain and was replaced with something
    more ad hoc. But it seems deficient of OS's to not support anything
    like that.

    I actually used intel's excellent Vtune product to test python with and
    without LTO. So yes it is possible; if you can get Vtune to work.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Jun 28 22:42:40 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:


    So, given a binary, how do you know which source version was used to
    produce that?

    try using the --version option at the cmd line.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Jun 28 22:48:22 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    How exactly does the GC find these 'long dead objects' to reference? Oh, wait, it doesn't: you just have no fucking idea how a copying GC (or indeed
    a mark&sweep GC) works.

    can't you just leave them in oldspace?


    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.

    you might want to rethink that. all lists are pointers.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 28 20:31:39 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> writes:
    I actually used intel's excellent Vtune product to test python with and without LTO. So yes it is possible; if you can get Vtune to work.

    I don't see how LTO relates to saving images. Am I missing something?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 28 20:34:54 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> writes:
    * Most modern dynamic languages have more sophisticated data
    structures, which involve rather less pointer-chasing than
    traditional Lisp lists.

    you might want to rethink that. all lists are pointers.

    I think the conception is of Lisp representing a 1000 element data
    structure as 1000 linked cons nodes instead of as a defstruct.
    Ironically, Python typically uses dictionaries for that, looking up all
    the keys at runtime.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jun 28 20:42:51 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> writes:
    Does any program actually free or return memory to the kernel before
    it exits?

    SBCL supposedly does this. Emacs Lisp does it but it uses a mark-sweep
    GC that I think compacts only certain data types. I've seen the size of
    a running Firefox browser both grow and shrink, but I don't know what
    kind of allocator is making that happen.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 06:00:12 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 28 Jun 2026 20:34:54 -0700, Paul Rubin wrote:

    Ironically, Python typically uses dictionaries for that, looking up
    all the keys at runtime.

    Remember that Python strings are immutable.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 06:01:07 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 28 Jun 2026 22:42:40 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    So, given a binary, how do you know which source version was used
    to produce that?

    try using the --version option at the cmd line.

    That can print any number it likes. How do you verify the number if
    prints actually means something?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Mon Jun 29 08:27:12 2026
    From Newsgroup: comp.lang.lisp

    On 2026-06-29, steve g wrote:

    tfb <no_email@invalid.invalid> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    That memory has to be marked as free for reallocation somehow. That
    will be where the cache-thrashing comes in, no escaping it.

    It does not. Once the live data has been copied from the area of memory it >> is free, and new allocation may take place there. You really need to think >> about how a copying GC works.

    Does any program actually free or return memory to the kernel before it exits?

    Are you asking if there are programs free of memory leaks?
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 07:33:05 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:


    If a GC is not finding long-dead objects to reclaim, then what exactly
    is it doing? IsnrCOt that exactly what the rCLgarbagerCY is, that it is supposed to rCLcollectrCY?

    Like I said: you do not understand, at all, how a copying GC works.

    More worryingly, we went through this like a week or so ago: you seem to
    have already forgotten what I thought you'd understood then. I find myself slightly worried for you.

    Or did your term rCLconsesrCY not refer to what CONS does?


    'consing' is what Lisp people call allocating memory, particularly but not
    only ephemerally. "You're consing too many bignums" (which are not
    conses), "the program conses loads of ephemeral vectors" (which are not
    conses) and so on. Probably you should learn the terminology Lisp people
    use before ranting in CLL.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 00:42:43 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> writes:
    Does any program actually free or return memory to the kernel before
    it exits?
    Are you asking if there are programs free of memory leaks?

    I think the picture is as follows. The program runs for a while
    building up some data that consumes a lot of memory, so the process data segment gets big. Then the program finishes up with that data, the
    memory that it used gets GC'd, and the program goes on to the next
    thing. But the process still owns the memory pages that were occupied
    by the now GC'd data. To release the memory back to the OS, in Linux
    you'd use the munmap() system call if I'm not mistaken. In the very old
    days, Emacs never did that, so its process memory could only get larger,
    not smaller. That got fixed quite a few years ago. In ancient Unix you
    could release memory by calling sbrk() with a negative arg and maybe
    that's also still possible.

    For any of this to work usefully, the GC will usually have to rearrange (compact) the live objects, to get contiguous pages to release to the
    OS. I don't see how a non-moving GC can do that except in some special
    cases. I don't know how or whether CPython handles it.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 00:52:41 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    Ironically, Python typically uses dictionaries for that, looking up
    all the keys at runtime.
    Remember that Python strings are immutable.

    I mean a data structure in Python will typically be a class instance, so
    you'd say x.foo, x.bar, and so on, to get at the members. Each of those accesses is a dictionary lookup using the keys "foo", "bar", etc., in a dictionary that lives in the instance.

    Lisp can often optimize this so that the instance is more like a C
    struct.

    The former Alioth shootout has apparently moved here:

    https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html

    SBCL is unsurprisingly way faster than CPython at almost everything. It
    would be interesting to see a comparison against PyPy.

    Javascript is often also impressive, because of the ridiculous amount of
    tuning that the implementation has received.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 07:55:06 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> wrote:


    Does any program actually free or return memory to the kernel before it exits?


    Absolutely. LispWorks even has a function to do just this.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 07:55:36 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 00:52:41 -0700, Paul Rubin wrote:

    I mean a data structure in Python will typically be a class
    instance, so you'd say x.foo, x.bar, and so on, to get at the
    members. Each of those accesses is a dictionary lookup using the
    keys "foo", "bar", etc., in a dictionary that lives in the instance.

    Lisp can often optimize this so that the instance is more like a C
    struct.

    __slots__?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 08:08:55 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> wrote:


    can't you just leave them in oldspace?

    Yes. Which means you never even look at that memory until you're reusing
    it for new objects. Copying GCs only ever look st live objects.


    you might want to rethink that. all lists are pointers.


    Not in Python: Python lists are really dynamic arrays. If small numbers
    are immediate in Python then a list of them would not have any pointers in
    it. They're like adjustable arrays in CL, say. Even if small integers are
    not immediate then there would be half as many pointers as in a Lisp list.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 08:21:24 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 02:30:13 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Look at toolkits like NumPy, commonly used to do heavy-duty... So
    you see, the performance bottleneck does not lie in PythonrCOs memory
    management system.

    Exactly, those large numeric arrays don't contain any pointers that
    need management at finer granularity than the array itself.

    YourCOre not admitting that reference-counting can be competitive with
    garbage collection in such a situation? Or even better (Cf that Paul
    Graham example)?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 08:23:46 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 14:15:12 -0000 (UTC), Waldek Hebisch wrote:

    The point is that sometimes you need to write code including low
    level parts. In many situations that leads to a lot of smallish
    pieces of data that need to be handled efficiently.

    Worth comparing the extension APIs that different high-level languages
    offer. Not sure about Lisp, but Java has JNI, and yourCOll notice that,
    while it offers calls for allocating Java objects, there are no calls
    for freeing objects. Not that it doesnrCOt bother to offer such
    functions, but that it canrCOt.

    PythonrCOs extension API, on the other hand, provides calls for
    allocating objects and for freeing them. Because it can.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 08:24:33 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 09:32:12 -0000 (UTC), tfb wrote:

    94GB total allocation ...

    Peak?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 08:31:41 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:


    I think the conception is of Lisp representing a 1000 element data
    structure as 1000 linked cons nodes instead of as a defstruct.
    Ironically, Python typically uses dictionaries for that, looking up all
    the keys at runtime.


    In practice, of course, you'd likely use an array for that, unless you had strong reasons to use a list such as low-cost stack-like behaviour. You
    might wrap it in a structure: I've been working on a thing called SOA which does just this for arrays of 'objects' (quotes because the objects don't
    exist: just their fields in arrays belonging to the wrapper object).
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 08:31:42 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:


    Lisp can often optimize this so that the instance is more like a C
    struct.


    Yes. It's pretty easy to show that access to a field in a structure (so a thing defined with defstruct: not true for things defined with defclass)
    can be compiled to a single instruction by SBCL.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 08:41:26 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:

    Cons nodes obviously have to be GC'd. But you're mistaken in believing
    that most of the heap objects in a running Lisp program consists of cons nodes. Thus the mention of DEFSTRUCT. Or for that matter, arrays.
    Python uses them, and Lisp has them too.

    In a cold Lisp I just started, conses are a fairly distant fourth in terms
    of allocation. Not sure sbout number as conses are a lot smaller than,
    say, functions.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Mon Jun 29 08:57:38 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes: If small numbers
    are immediate in Python then a list of them would not have any pointers in >it.

    It would be allowed by the Python Language Specification
    for an implementation to store small integers directly in
    a list rather than storing pointers to integer objects.

    The standard implementation CPython does not do this, but you can
    import the built-in array module or the third-party numpy library
    if you need a data structure that bypasses PyObject pointers
    and stores integers directly in a contiguous block of memory.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 09:17:40 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:


    I don't see any clear advantages. One early motivation was prompt finalization when stuff goes out of scope, but later the "with"
    statement was added, giving something like RAII.

    Someone would have to ask Guido, but I'd assume at least three reasons:

    - prompt finalisation

    - naive reference-counting is easy to implement in an interpreter(1)

    - since Python was always going to be a wrapper around functionality
    provided by a low-level language which had strong opinions about object addresses, not moving objects in memory matters. That rules out any
    copying GC(2)

    (1) If you want to get clever, like Interlisp-D did and have essentially a single bit of reference count in objects, with objects whose counts were greater than 1 spilling to a table elsewhere it gets a lot more fiddly. I don't know if Python does that.

    (2) Systems which do have copying GCs which want to talk to C have an entertaining time. I don't know what SBCL does, but LW lets you allocate (some) things so the GC won't move them, or won't move them in a dynamic extent.


    Python and high performance amount to using Python as a scripting
    wrapper around C libraries, or even CUDA libraries.


    Exactly. The bottleneck for 'fast Python programs' is almost always the
    bits of them actually written in Python.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 09:47:21 2026
    From Newsgroup: comp.lang.lisp

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:

    It would be allowed by the Python Language Specification
    for an implementation to store small integers directly in
    a list rather than storing pointers to integer objects.

    The standard implementation CPython does not do this, but you can
    import the built-in array module or the third-party numpy library
    if you need a data structure that bypasses PyObject pointers
    and stores integers directly in a contiguous block of memory.


    Yes, I know about NumPy: I used it ... a lot ... a long time ago.

    But you saying that CPython doesn't have fixnums? So, say '1 + 3' is
    consing two integers? Does it at least intern small integers (and how
    many, if so)? There are rumours the answer is 'integers from -5 to 256'? Certainly 1000 doesn't seem to be interned (id changes).

    Actually I think I knew this once upon a time. It was probably one of the things I joined the foreign legion to forget. Obviously it worked.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 09:47:23 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:
    On Thu, 18 Jun 2026 09:32:12 -0000 (UTC), tfb wrote:

    94GB total allocation ...

    Peak?


    Total. 94GB of objects were allocated. I don't have that program any more
    but pretty sure 100 objects were live at any one time based on the second argument: the whole purpose is to show how well copying GCs deal with
    ephemeral allocation.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 10:02:28 2026
    From Newsgroup: comp.lang.lisp

    Waldek Hebisch <antispam@fricas.org> wrote:
    Lisp is not exactly there, but not far: rather
    typical figure for sbcl is half of speed of comparable C. It is
    worse when dealing with multidimensional arrays or if C compiler
    manages to usefuly autovectorize the code. OTOH memory access
    time may effectively decrease differences.


    FWIW for float-array intensive code SBCL is about 80% of C (specifically
    the LLVM-based C compiler that ships with macOS and a fairly recent SBCL). Obviously C will do better if the compiler can vectorize things. But then
    so would SBCL if its compiler could.

    I should run these benchmarks again.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Mon Jun 29 10:03:44 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    But you saying that CPython doesn't have fixnums? So, say '1 + 3' is
    consing two integers? Does it at least intern small integers (and how
    many, if so)? There are rumours the answer is 'integers from -5 to 256'? >Certainly 1000 doesn't seem to be interned (id changes).

    When you use "1 + 3" literally, modern CPython is generating

    LOAD_SMALL_INT 4

    . Source Code:

    import dis

    def add_constants():
    return 1 + 3

    dis.dis( add_constants )

    , Output:

    4 RESUME 0

    5 LOAD_SMALL_INT 4
    RETURN_VALUE

    .

    Actually I think I knew this once upon a time. It was probably one of the >things I joined the foreign legion to forget. Obviously it worked.

    "I forgot more than you'll ever know about her." - Cecil Null


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 10:09:09 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> wrote:

    As tools, they can be very efficient, but it's not because they run
    Perl or Python code efficiently: it's because they don't spend much
    time running actual Perl and Python code (instead they spend most of
    their time running code written in other languages, like C).


    A long time ago in a different world, I worked for a company which had a
    big program written in Java. We were going to redo it in Python using
    NumPy, because that would be faster. I now forget the awful details. The NumPy bit was quick, I think, but we made the mistake of assuming we could
    use native Python for, really, anything at all, and that ended up as essentially an Amdahl bottleneck, whereas the Java program didn't have
    that, because even then Java compilers were OK and its memory management
    (ehem, GC) was not made out of cardboard like Python's was.

    The answer we came to was that the only place you could use Python was as a scripting language to put together blobs of code written in languages with
    good performance. We gave up & I left a while later.

    I've seen the same thing in more recent big-data (climate model output) programs which are all in Python: you want to make really sure Python code
    is nowhere near anything which can plausibly influence performance.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jun 29 10:44:15 2026
    From Newsgroup: comp.lang.lisp

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:
    tfb <tfb@work.it.out> wrote or quoted:

    When you use "1 + 3" literally, modern CPython is generating

    Yeah, I meant 'programs which do things to small integers. If you write,
    say

    def ids(x):
    y = 1000
    return (id(x), id(y), x is y)

    then ids(1000) returns a tuple with two different values, and False.

    Obviously this is just the same as using eq for numbers being a bad idea in
    CL, and Lisps in general don't have to have fixnums. CL does, but nothing
    says what they mean. I'd just forgotten that the hugely dominant implementation of Python really doesn't.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Mon Jun 29 10:55:59 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    The answer we came to was that the only place you could use Python was as a >scripting language to put together blobs of code written in languages with >good performance. We gave up & I left a while later.

    The understanding that native Python code is slow while
    C-extensioned code runs at C-speed (known as the "glue
    language" paradigm) has been a foundational truth about
    Python throughout its history, and I'm a bit surprised that
    where you once worked they only found this out the hard way.

    Still, recent improvements made native Python code a bit
    faster in CPython 3.15.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Mon Jun 29 11:05:09 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    Yeah, I meant 'programs which do things to small integers.

    In CPython, you actually can do awful things to a small integer.

    This program sets the value of 2 to 65:

    Source Code

    import ctypes

    j = 65

    def deref( addr, typ ):
    return ctypes.cast( addr, ctypes.POINTER( typ ))

    deref( id( 2 ), ctypes.c_int )[ 6 ] = j

    print( 2 )

    Output

    65


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Mon Jun 29 11:09:45 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    Yeah, I meant 'programs which do things to small integers. If you write,
    say
    def ids(x):
    y = 1000
    return (id(x), id(y), x is y)
    then ids(1000) returns a tuple with two different values, and False.

    I think this behavior is not specified. In fact, today,

    def ids(x):
    y = 10000000000
    return (id(x), id(y), x is y)

    print( ids( 10000000000 ))

    prints the same number twice and "True".


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Mon Jun 29 14:35:15 2026
    From Newsgroup: comp.lang.lisp


    Ar an nao|| l|i is fiche de m|! Meitheamh, scr|!obh Paul Rubin:

    Nuno Silva <nunojsilva@invalid.invalid> writes:
    Does any program actually free or return memory to the kernel before
    it exits?
    Are you asking if there are programs free of memory leaks?

    I think the picture is as follows. The program runs for a while
    building up some data that consumes a lot of memory, so the process data segment gets big. Then the program finishes up with that data, the
    memory that it used gets GC'd, and the program goes on to the next
    thing. But the process still owns the memory pages that were occupied
    by the now GC'd data. To release the memory back to the OS, in Linux
    you'd use the munmap() system call if I'm not mistaken. In the very old days, Emacs never did that, so its process memory could only get larger,
    not smaller. That got fixed quite a few years ago. In ancient Unix you could release memory by calling sbrk() with a negative arg and maybe
    that's also still possible.

    For any of this to work usefully, the GC will usually have to rearrange (compact) the live objects, to get contiguous pages to release to the
    OS. I don't see how a non-moving GC can do that except in some special cases. I don't know how or whether CPython handles it.

    To give insight into a case I understand well, XEmacs buffer text (so, the memory representation of files on disk for editing; also used for temporary work that needs to modify strings that need to be longer or short in-place) can be allocated using mmap() and then correspondingly released using munmap(), and this does mean that loading a large file and then closing it decreases the amount of memory the process uses. I normally run with this turned on since this is part of why my XEmacs can run for months without my having to restart.

    This is a special case within the allocator; other Lisp objects are ultimately allocated via the C libraryrCOs malloc(), or malloc()ed at build time and then dumped into the data segment (on some systems, or for development because build times are faster, mmap()ed from an external file). Much of XEmacs is implemented in C, and keeps around pointers to Lisp objects for trivial, very cheap access. Now, all these pointers on the C level are enumerated (they have to be for garbage protection), so it would be possible to implement a relocating allocator, and just update them.

    I donrCOt plan to. The GC is broadly fast enough currently, and IMO taking locality of reference more seriously when allocating and sweeping plus playing more attention to GCing when XEmacs would otherwise be idle, would be enough.

    When I look at current GNU Emacs sources the approach seems to be much the same; mmap() based allocation for buffer text, malloc() based allocation for other Lisp objects, special handling for dumped data. Glibc malloc() will sometimes release memory back to the OS, but it doesnrCOt for the default (sbrk()-sourced) heap. I donrCOt believe that GNU Emacs releases GCed data for non-buffer Lisp objects routinely.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.lisp on Mon Jun 29 18:41:53 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote:

    (2) Systems which do have copying GCs which want to talk to C have an entertaining time. I don't know what SBCL does, but LW lets you allocate (some) things so the GC won't move them, or won't move them in a dynamic extent.

    sbcl has 'sb-sys:with-pinned-objects' which makes sure that GC will
    not move relevant objects.
    --
    Waldek Hebisch
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Mon Jun 29 16:16:03 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 28 Jun 2026 23:37:34 -0000 (UTC), Lawrence D-|Oliveiro
    <ldo@nz.invalid> wrote:

    On Sat, 27 Jun 2026 20:25:42 -0000 (UTC), tfb wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    How exactly does the GC find these 'long dead objects' to reference?
    Oh, wait, it doesn't: you just have no fucking idea how a copying GC
    (or indeed a mark&sweep GC) works.

    If a GC is not finding long-dead objects to reclaim, then what exactly
    is it doing? IsnrCOt that exactly what the rCLgarbagerCY is, that it is >supposed to rCLcollectrCY?

    @Lawrence,

    It's pretty clear that you don't really know how various GC methods
    actually work. If you would like to find out, these books are your
    friends:


    Jones & Lins, "Garbage Collection: Algorithms for Automatic Dynamic
    Memory Management", 1st ed., 1996, Wiley, ISBN 978-0471941484

    Jones, Hosking & Moss, "The Garbage Collection Handbook: The Art of
    Automatic Memory Management", 1st ed., 2012, CRC Press, ISBN
    978-1420082791


    The books complement each other. "Algorithms" is mainly theory with implementation mostly left as an exercise. "Handbook" recaps theory
    but assumes the reader already is familiar - it concentrates instead
    on details of implementation.

    Don't let the publication dates fool you - very little has changed
    since they were written. And be aware as you read that most
    real-world implementations are hybrids that use different methods, and sometimes different algorithms, to deal with different categories of
    objects [where "category" could be data type, or size, or age, or
    private vs shared, or ..., etc.].


    And BTW: the first method to be discussed in depth in "Algorithms" is
    reference counting.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 13:35:56 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    __slots__?

    I'll have to study the implementation: as I remember, __slots__ saves
    memory, but it's unclear to me how well it helps with speed. Used
    naively, "a.x = 3" where 'x' is a slot in a's class still generates a STORE_ATTR bytecode and I'm used to that doing a dictionary lookup.
    Maybe there's a way for the compiler to know what class 'a' belongs to,
    and avoid the lookup.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 13:46:10 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:
    Jones, Hosking & Moss, "The Garbage Collection Handbook: The Art of
    Automatic Memory Management", 1st ed., 2012, CRC Press, ISBN
    978-1420082791

    This has a 2nd edition now: https://www.gchandbook.org/editions.html
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 13:58:04 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    Look at the Linux kernel as an example, and you will see it makes
    heavy use of reference-counting, not garbage collection, to manage kernel-internal objects.... And then thererCOs filesystems. POSIX filesystems depend crucially on reference-counting to decide when
    files need to be deleted. No garbage collection there either.

    Why not?

    Neither of those is a Lisp implementation. Particularly, the memory
    objects (disk buffers and blocks) are large and uniform and don't
    contain arbitrarily complicated references to other objects needing
    collection.

    I don't know the situation with POSIX really. It could be that the
    standard doesn't require any particular implementation method. I'm
    pretty sure there are file systems that don't support hard links at all.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 22:19:52 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 13:58:04 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Look at the Linux kernel as an example, and you will see it makes
    heavy use of reference-counting, not garbage collection, to manage
    kernel-internal objects.... And then thererCOs filesystems. POSIX
    filesystems depend crucially on reference-counting to decide when
    files need to be deleted. No garbage collection there either.

    Why not?

    Neither of those is a Lisp implementation.

    Neither is Python. So why do you look down on PythonrCOs use of reference-counting?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jun 29 22:25:51 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 13:35:56 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    __slots__?

    I'll have to study the implementation: as I remember, __slots__
    saves memory, but it's unclear to me how well it helps with speed.

    GvR himself said they were introduced for efficiency reasons. The
    contribution to code safety was an unintended side-effect.

    <http://python-history.blogspot.com/2010/06/inside-story-on-new-style-classes.html>
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:04:25 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    steve g <Sgonedes1977@gmail.com> writes:
    I actually used intel's excellent Vtune product to test python with and
    without LTO. So yes it is possible; if you can get Vtune to work.

    I don't see how LTO relates to saving images. Am I missing something?


    I compiled 2 versions of python; one with LTO and the other without LTO.
    I loaded them both into Intel's vtune.

    I do not understand what you mean by an image?

    IMHO the lto may make a difference, but on my very slow machine it's
    hard to notice.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Mon Jun 29 19:00:35 2026
    From Newsgroup: comp.lang.lisp

    E.g. let's say you have

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3) (do-something-else c))))

    This is why the traditional rCLparenthesis pileuprCY layout for Lisp
    code is not helpful for figuring out whatrCOs going on. LetrCOs try reformatting that for clarity, shall we:

    (defun my-foo (a b c)
    (let ((x (concat a b)))
    (do-something x a)
    (if (< (length x) 3)
    (do-something-else c)
    ) ; if
    ) ; let
    ) ; my-foo

    Lispers find the first form just as readable (if not more), by paying
    attention to indentation, IOW, exactly like Pythoners do.

    - Is the content of `b` still reachable?
    (AFAIK most languages don't specify it; ELisp will probably consider it
    as reachable, Scheme and SML say it isn't)
    Does it make a difference to the correctness of the code?

    Definitely, because it can change the algorithmic complexity in terms of
    space usage, so it can affect whether a programs runs in constant space
    or not, for example.

    - What about the content of `c`?
    Same question applies.

    Same answer, tho I don't know of any language or implementation which guarantees it, so if you need `c` to be unreachable here, I'd say it's
    your responsibility to rewrite the code so that it's syntactically
    obvious rather than depend on some optimization.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:08:45 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    steve g <Sgonedes1977@gmail.com> writes:
    Does any program actually free or return memory to the kernel before
    it exits?

    SBCL supposedly does this. Emacs Lisp does it but it uses a mark-sweep
    GC that I think compacts only certain data types. I've seen the size of
    a running Firefox browser both grow and shrink, but I don't know what
    kind of allocator is making that happen.

    programming sure is complicated :)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:12:06 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Sun, 28 Jun 2026 22:42:40 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    So, given a binary, how do you know which source version was used
    to produce that?

    try using the --version option at the cmd line.

    That can print any number it likes. How do you verify the number if
    prints actually means something?

    by reading the binary or the assembler. but yes a computer program may
    print something inaccurately. this why most people use a signature file.
    I think that just checking the md5 is sufficient.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:17:17 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> writes:


    Are you asking if there are programs free of memory leaks?

    NO! it was a tongue in cheek joke. I have a very odd, or dry, sence of
    humor. If you leak memory, or file descriptors, etc. you'll figure it
    out eventually. Most of what I do is small programming for short scripts and things. I don't care about memory; I have a new machine that has 32GiB.

    I grew up with a casset and graduated to floppy 5 1/4 to a 20 MB hard
    disk drive.

    Just say no to stacker :)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:21:25 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    Nuno Silva <nunojsilva@invalid.invalid> writes:
    Does any program actually free or return memory to the kernel before
    it exits?
    Are you asking if there are programs free of memory leaks?

    I think the picture is as follows. The program runs for a while
    building up some data that consumes a lot of memory, so the process data segment gets big.

    Linux actually can be compiled to zero out memory when it is released.
    Always remeber to use bzero (another attempt at humor).


    Then the program finishes up with that data, the
    memory that it used gets GC'd, and the program goes on to the next
    thing. But the process still owns the memory pages that were occupied
    by the now GC'd data. To release the memory back to the OS, in Linux
    you'd use the munmap() system call if I'm not mistaken. In the very old days, Emacs never did that, so its process memory could only get larger,
    not smaller. That got fixed quite a few years ago. In ancient Unix you could release memory by calling sbrk() with a negative arg and maybe
    that's also still possible.

    I have always used vfork, pipes, and kill.



    For any of this to work usefully, the GC will usually have to rearrange (compact) the live objects, to get contiguous pages to release to the
    OS.

    Ahhh! another conundrum.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 17:37:24 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    GvR himself said they were introduced for efficiency reasons. The contribution to code safety was an unintended side-effect.

    That blog post says:

    Thus, every slot attribute is actually a descriptor object that knows
    how to set/get each attribute using an array index.

    So again I'd have to look at the implementation. From what I can tell,
    there's still a string lookup. It might using perfect hashing or some
    other scheme for bypassing the machinery of Python dictionaries.

    Neither is Python [a Lisp].

    Python's inventors insist that it's not a Lisp, but we Lispers can see
    that it's just a weird Lisp implementation with some surface syntax
    added. It even has lambda! Kidding.

    So why do you look down on PythonrCOs use of reference-counting?

    Look at the decades of anguish CPython has suffered over its GIL.
    There's a messy workaround for that now but I have no idea of the
    performance or maintenance hit.

    I simply don't understand the refcounting fanboying taking place here.
    The original selling point in CPython was deterministic finalization,
    but RAII takes care of that more cleanly, I would say.

    Hans Boehm makes the interesting point that you really want to finalize
    in topological order. I wonder if this happens automatically in
    CPython.

    https://hboehm.info/gc/finalization.html

    He has another finalization article that looks interesting:

    https://dl.acm.org/doi/epdf/10.1145/604131.604153

    In that one he says that finalization (non-RAII) is occasionally
    important, but I don't currently understand why. It also argues for asynchronous finalizers (saying Python's approach can lead to deadlocks)
    but I think that's only when the refcount decrement is in a separate
    thread. I should read this paper more carefully.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Jun 29 17:44:01 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> writes:
    I do not understand what you mean by an image?

    Starting up an executable program, loading a bunch of data into it such
    as Lisp libraries or Python module, where loading those modules can take
    a while; then dumping the program's memory space into a new executable
    or file (the image dump). The image dump means you can then re-launch
    the program with the data modules already loaded and initialized, so the startup delays are avoided.

    In the grand old days, it took well over a minute to start up Emacs and
    load the standard libraries into it. Normally you would only do that
    when you installed and compiled a new version of Emacs. Then you'd dump
    an image file and run a hack that converted it into a new executable.
    The new executable would then start up relatively quickly instead of
    doing all that loading.

    Every program you use that's slow to start up could probably benefit
    from something like this.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:47:02 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:

    It would be allowed by the Python Language Specification
    for an implementation to store small integers directly in
    a list rather than storing pointers to integer objects.

    The standard implementation CPython does not do this, but you can
    import the built-in array module or the third-party numpy library
    if you need a data structure that bypasses PyObject pointers
    and stores integers directly in a contiguous block of memory.


    Yes, I know about NumPy: I used it ... a lot ... a long time ago.

    But you saying that CPython doesn't have fixnums? So, say '1 + 3' is
    consing two integers? Does it at least intern small integers (and how
    many, if so)? There are rumours the answer is 'integers from -5 to 256'? Certainly 1000 doesn't seem to be interned (id changes).

    in SBCL
    MOST-POSITIVE-FIXNUM = 4611686018427387903

    I think that is around a 4 megabyte number.


    Actually I think I knew this once upon a time. It was probably one of the things I joined the foreign legion to forget. Obviously it worked.

    Haha! tell me about it...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:50:23 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:
    tfb <tfb@work.it.out> wrote or quoted:

    When you use "1 + 3" literally, modern CPython is generating



    Obviously this is just the same as using eq for numbers being a bad idea in CL, and Lisps in general don't have to have fixnums. CL does, but nothing says what they mean.

    Oh I agree. rewriting (+ x y) to (+16-bit x y) is a bad idea. screamer
    does something about this. Bignums are more of a pain in the ass than
    anything.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Jun 29 20:58:02 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Waldek Hebisch <antispam@fricas.org> wrote:
    Lisp is not exactly there, but not far: rather
    typical figure for sbcl is half of speed of comparable C. It is
    worse when dealing with multidimensional arrays or if C compiler
    manages to usefuly autovectorize the code. OTOH memory access
    time may effectively decrease differences.


    FWIW for float-array intensive code SBCL is about 80% of C (specifically
    the LLVM-based C compiler that ships with macOS and a fairly recent SBCL). Obviously C will do better if the compiler can vectorize things. But then
    so would SBCL if its compiler could.

    I should run these benchmarks again.


    sbcl does have a package for simd. I personally use GCC; it is not
    having any problems with these simd instructions. they are super fast; complicated to use though.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Tue Jun 30 02:45:49 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 18 Jun 2026 12:44:52 -0400, Stefan Monnier wrote:

    Looks like you missed this part of my message:

    As tools, they can be very efficient, but it's not because they run
    Perl or Python code efficiently: it's because they don't spend much
    time running actual Perl and Python code (instead they spend most of
    their time running code written in other languages, like C).

    If that were completely true, then the architectural rework to support reference-counting without blocking multithreading in recent Python
    versions would make little or no difference to performance. And yet
    benchmarks are indicating improvements.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Mon Jun 29 23:27:18 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe [2026-06-29 14:35:15] wrote:
    When I look at current GNU Emacs sources the approach seems to be much the same; mmap() based allocation for buffer text, malloc() based allocation for other Lisp objects, special handling for dumped data. Glibc malloc() will sometimes release memory back to the OS, but it doesnrCOt for the default (sbrk()-sourced) heap. I donrCOt believe that GNU Emacs releases GCed data for
    non-buffer Lisp objects routinely.

    Yup. Beside buffer text where we may use `mmap`, memory is nabaged in
    to of `malloc/free` and nowadays most `malloc` libraries appear to
    virtually never return memory back to the OS.
    But that's not always been the case (IIRC the `malloc` library in glibc
    did return memory to the OS a few years ago).


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Tue Jun 30 13:47:55 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:
    But you saying that CPython doesn't have fixnums?

    All CPython integers are boxed, but small ones (-5 through +250 or
    something like that) are pre-allocated. Sounds awful but I think some
    Lisps also have done that.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Tue Jun 30 17:15:54 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 13:46:10 -0700, Paul Rubin
    <no.email@nospam.invalid> wrote:

    George Neuner <gneuner2@comcast.net> writes:
    Jones, Hosking & Moss, "The Garbage Collection Handbook: The Art of
    Automatic Memory Management", 1st ed., 2012, CRC Press, ISBN
    978-1420082791

    This has a 2nd edition now: https://www.gchandbook.org/editions.html


    Thanks! This looks to be mostly new and extended material rather than
    revision of the original. Need to add it to my collection.

    "Handbook" is (mostly) about details of implementation, so not
    surprising that 2nd ed. covers new architectures and new(er)
    implementations. Since most implementations are hybrids of multiple
    algorithms, under the right circumstances, any little choice made in
    the implementation /could/ end up making a significant difference.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Tue Jun 30 21:32:30 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 20:17:17 -0400, steve g wrote:

    If you leak memory, or file descriptors, etc. you'll figure it out eventually.

    A former colleague told a story from his new place of employment.
    There was this Java program that would crash every afternoon at about
    4pm. This program was running all the time, with heavy load at around
    that time.

    Turned out it was opening lots of files and not closing them. So the
    files were only actually closed when the file objects were garbage
    collected. When the load was small, GC happened often enough to keep
    the number of open files from growing too large. But at peak times, it
    ran out and could no longer open any more. Hence, crash.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Wed Jul 1 08:57:44 2026
    From Newsgroup: comp.lang.lisp

    On 2026-06-29, Paul Rubin wrote:

    Nuno Silva <nunojsilva@invalid.invalid> writes:
    Does any program actually free or return memory to the kernel before
    it exits?
    Are you asking if there are programs free of memory leaks?

    I think the picture is as follows. The program runs for a while
    building up some data that consumes a lot of memory, so the process data segment gets big. Then the program finishes up with that data, the
    memory that it used gets GC'd, and the program goes on to the next
    thing. But the process still owns the memory pages that were occupied
    by the now GC'd data. To release the memory back to the OS, in Linux
    you'd use the munmap() system call if I'm not mistaken. In the very old days, Emacs never did that, so its process memory could only get larger,
    not smaller. That got fixed quite a few years ago. In ancient Unix you could release memory by calling sbrk() with a negative arg and maybe
    that's also still possible.

    For any of this to work usefully, the GC will usually have to rearrange (compact) the live objects, to get contiguous pages to release to the
    OS. I don't see how a non-moving GC can do that except in some special cases. I don't know how or whether CPython handles it.

    (Thanks for this, now I do understand what the question was about :-) )
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Madhu@enometh@meer.net to comp.lang.lisp on Wed Jul 1 14:29:29 2026
    From Newsgroup: comp.lang.lisp


    * Paul Rubin <87zf0dztak.fsf@nightsong.com> :
    Wrote on Mon, 29 Jun 2026 00:42:43 -0700:
    I think the picture is as follows. The program runs for a while
    building up some data that consumes a lot of memory, so the process data segment gets big. Then the program finishes up with that data, the
    memory that it used gets GC'd, and the program goes on to the next
    thing. But the process still owns the memory pages that were occupied
    by the now GC'd data. To release the memory back to the OS, in Linux
    you'd use the munmap() system call if I'm not mistaken. In the very old days, Emacs never did that, so its process memory could only get larger,
    not smaller. That got fixed quite a few years ago. In ancient Unix you could release memory by calling sbrk() with a negative arg and maybe
    that's also still possible.

    For any of this to work usefully, the GC will usually have to rearrange (compact) the live objects, to get contiguous pages to release to the
    OS. I don't see how a non-moving GC can do that except in some special cases. I don't know how or whether CPython handles it.

    In gnu emacs the call which was introduced was malloc_trim(3)
    (by larsi in may 2022)

    here's someone else who discovered it recently https://blog.nirbheek.in/2026/05/an-esoteric-type-of-memory-leak.html
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Wed Jul 1 12:56:29 2026
    From Newsgroup: comp.lang.lisp

    Madhu <enometh@meer.net> writes:
    here's someone else who discovered it recently https://blog.nirbheek.in/2026/05/an-esoteric-type-of-memory-leak.html

    That's interesting but what happens to the 4 allocated bytes at the top
    of the heap in that story? I take "allocated" to mean that malloc
    thinks that the 4 bytes are still in use, and that there are live
    pointers to them somewhere. Or does the top page stay in the process
    while madvise releases the unused internal pages?

    That still seems like a surprising lack of fragmentation. Again, it
    sounds like some type of memory compacting is needed.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Wed Jul 1 16:21:12 2026
    From Newsgroup: comp.lang.lisp

    Yup. Beside buffer text where we may use `mmap`, memory is nabaged in
    to of `malloc/free` and nowadays most `malloc` libraries appear to

    I just feel the need to remind people that too much nabaging can be
    dangerous for your health, especially when you do it in to of.
    Don't do this at home, please.


    === Stefan "that meant to say 2... is managed on top of ...+"
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Wed Jul 1 10:26:13 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin [2026-06-30 13:47:55] wrote:
    tfb <tfb@work.it.out> writes:
    But you saying that CPython doesn't have fixnums?
    All CPython integers are boxed, but small ones (-5 through +250 or
    something like that) are pre-allocated. Sounds awful but I think some
    Lisps also have done that.

    Yup, Python fixnums are represented as pointers to `PyIntObject`, where `PyIntObject` is a struct containing 3 words: a refcount, a pointer to
    the type descriptor, and the actual fixnum.

    So as soon as you get beyond the small pre-allocated range, it makes
    trivial integer operations quite costly since they require
    memory allocation.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:26:50 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 09:47:23 -0000 (UTC), tfb wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    On Thu, 18 Jun 2026 09:32:12 -0000 (UTC), tfb wrote:

    94GB total allocation ...

    Peak?

    Total. ... the whole purpose is to show how well copying GCs deal
    with ephemeral allocation.

    But if the cost is a peak use of several times the actual total size
    of the live objects at any one time, then that shows why
    reference-counting can be a worthwhile option, doesnrCOt it?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:34:04 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 19:00:35 -0400, Stefan Monnier wrote:

    Lispers find the first form just as readable (if not more), by paying attention to indentation, IOW, exactly like Pythoners do.

    I feel the indentation dependence is a mistake in the design of
    Python. GvR disagrees, saying that it makes it easier for beginners.

    I think thererCOs something in the rCLZen of PythonrCY that says rCLflat is better than nestedrCY. But Python supports rCLnestedrCY, and I use it
    heavily, as a very natural style. And then I add rCL#endrCY comment lines
    to provide convenient navigation points, because things can get very
    confusing otherwise. And I have custom Emacs commands to quickly jump
    between lines with matching indentation, which is convenient for
    hopping between the beginning of a compound statement and its
    corresponding rCL#endrCY line.

    Does it make a difference to the correctness of the code?

    Definitely, because it can change the algorithmic complexity in
    terms of space usage, so it can affect whether a programs runs in
    constant space or not, for example.

    ThatrCOs not about correctness, thatrCOs an efficiency issue. So thatrCOs a rCLnorCY, then.

    ... I don't know of any language or implementation which guarantees
    it ...

    So again, no actual correctness issue.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:35:27 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 20:12:06 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Sun, 28 Jun 2026 22:42:40 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    So, given a binary, how do you know which source version was used
    to produce that?

    try using the --version option at the cmd line.

    That can print any number it likes. How do you verify the number if
    prints actually means something?

    by reading the binary or the assembler. but yes a computer program
    may print something inaccurately. this why most people use a
    signature file. I think that just checking the md5 is sufficient.

    Checking against what?

    Remember, the issue was determining which version of the source code
    was involved in creating this binary. How does an md5 of source code
    relate in any way to that of the binary?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:38:22 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 30 Jun 2026 13:47:55 -0700, Paul Rubin wrote:

    All CPython integers are boxed, but small ones (-5 through +250 or
    something like that) are pre-allocated. Sounds awful but I think
    some Lisps also have done that.

    Every value in Python is an object. ThatrCOs a core design feature, not
    a bug. Combined with multiple inheritance, it allows you to subclass
    in useful ways from built-in types like str and int. For example, look
    at how enumeration types are implemented, not as a built-in feature,
    but as a library module written in Python code that doesnrCOt do
    anything special you canrCOt do in your own code.

    And remember, every object is an instance of a class. And functions
    and classes are objects, too.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:39:43 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 20:47:02 -0400, steve g wrote:

    in SBCL
    MOST-POSITIVE-FIXNUM = 4611686018427387903

    I think that is around a 4 megabyte number.

    ldo@theon:~> python3
    Python 3.13.14 (main, Jun 10 2026, 18:10:12) [GCC 15.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> "%#x" % 4611686018427387903
    '0x3fffffffffffffff'
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:41:04 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 10:44:15 -0000 (UTC), tfb wrote:

    Obviously this is just the same as using eq for numbers being a bad
    idea in CL ...

    Luckily, thatrCOs not a problem in Python, because it allows custom
    overloads for standard operators like rCL==rCY, which can do the right
    thing in a type-specific fashion.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:42:33 2026
    From Newsgroup: comp.lang.lisp

    On 29 Jun 2026 11:05:09 GMT, Stefan Ram wrote:

    In CPython, you actually can do awful things to a small integer.

    But not without resorting to quite low-level manipulations.

    Unlike the legend of being able to commit quite elementary mistakes
    along these lines in early FORTRAN compilers ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:43:46 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 20:50:23 -0400, steve g wrote:

    Bignums are more of a pain in the ass than anything.

    Interesting that Python 2 had separate handling of regular-sized ints
    versus bigints in its extension API, but that distinction was mostly
    done away with in Python 3.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 00:45:18 2026
    From Newsgroup: comp.lang.lisp

    On 29 Jun 2026 11:09:45 GMT, Stefan Ram wrote:

    I think this behavior is not specified. In fact, today,

    def ids(x):
    y = 10000000000
    return (id(x), id(y), x is y)

    print( ids( 10000000000 ))

    prints the same number twice and "True".

    ldo@theon:~> python3
    Python 3.13.14 (main, Jun 10 2026, 18:10:12) [GCC 15.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a = b = 100
    >>> a + b is a + b
    True
    >>> a = b = 1000
    >>> a + b is a + b
    False
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Wed Jul 1 18:47:54 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    Combined with multiple inheritance, it allows you to subclass
    in useful ways from built-in types like str and int.

    class A(int): pass
    x = A(3)
    x.foo = 8
    x += 5
    print(x.foo) # crashes

    Anyway, last I heard, OOP was a 1990s thing that didn't work out. It's
    still around, but I don't worry about it too much.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Wed Jul 1 18:52:30 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:
    print(x.foo) # crashes

    I mean throws an exception so the program terminates, before anyone
    freaks out.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Thu Jul 2 08:39:11 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-02, Lawrence DrCOOliveiro wrote:

    On Mon, 29 Jun 2026 19:00:35 -0400, Stefan Monnier wrote:

    Lispers find the first form just as readable (if not more), by paying
    attention to indentation, IOW, exactly like Pythoners do.

    I feel the indentation dependence is a mistake in the design of
    Python. GvR disagrees, saying that it makes it easier for beginners.

    If it's about "easier for beginners", I'd think they'd have addressed
    the inconsistency where CPython, by doing automatic indentation or what
    it was behaves differently when interactive, instead of being 1:1
    between parsing code from a file and pasted code.

    I mean, it sounds to me that, if you're going to make an argument that
    being this strict re: indentation is necessary to improve things for
    newcomers, you'd also extend the same logic to consistency in how
    CPython handles input...

    I think thererCOs something in the rCLZen of PythonrCY that says rCLflat is better than nestedrCY. But Python supports rCLnestedrCY, and I use it heavily, as a very natural style. And then I add rCL#endrCY comment lines
    to provide convenient navigation points, because things can get very confusing otherwise.

    This seems to be a recurring topic with how you approach code, it starts sounding like you'd take advantage of an editor doing visual cues like
    this, instead of having to write the Python and Lisp code that way?

    And I have custom Emacs commands to quickly jump
    between lines with matching indentation, which is convenient for
    hopping between the beginning of a compound statement and its
    corresponding rCL#endrCY line.

    (... well, yes, then it seems you're already taking advantage of the
    editor's features)
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Thu Jul 2 09:24:13 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> wrote or quoted:
    If it's about "easier for beginners", I'd think they'd have addressed
    the inconsistency where CPython, by doing automatic indentation or what
    it was behaves differently when interactive, instead of being 1:1
    between parsing code from a file and pasted code.

    This script is correct in a source file:

    def helloworld():
    print( 'hello' )
    helloworld()

    . It defines, and immediately calls, a function "helloworld".

    In the interactive CPython shell, one needs to add a blank line:

    def helloworld():
    print( 'hello' )

    helloworld()

    . The following script is correct in a source file:

    def helloworld():

    print( 'hello' )

    helloworld()

    . It defines, and immediately calls, a function "helloworld".

    In the interactive CPython shell, one needs to remove the blank
    line in the function definition:

    def helloworld():
    print( 'hello' )

    helloworld()

    .


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 2 21:10:24 2026
    From Newsgroup: comp.lang.lisp

    On 2 Jul 2026 09:24:13 GMT, Stefan Ram wrote:

    In the interactive CPython shell, one needs to add a blank line:

    But not in Jupyter, which is just as interactive -- if not more so.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Jul 3 00:34:38 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-02, Lawrence DrCOOliveiro wrote:

    On 2 Jul 2026 09:24:13 GMT, Stefan Ram wrote:

    In the interactive CPython shell, one needs to add a blank line:

    But not in Jupyter, which is just as interactive -- if not more so.

    Yes, but this was about the comment that Python's indentation is "easier
    for beginners" (which you attributed to Guido van Rossum?).
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 00:30:40 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 07:33:05 -0000 (UTC), tfb wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    If a GC is not finding long-dead objects to reclaim, then what
    exactly is it doing? IsnrCOt that exactly what the rCLgarbagerCY is, that
    it is supposed to rCLcollectrCY?

    Like I said: you do not understand, at all, how a copying GC works.

    ThatrCOs what we call a rCLpassive-aggressiverCY response: trying to imply IrCOm wrong, but not specifically enough so that I can call you up on it.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp on Thu Jul 2 20:33:59 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    class A(int): pass
    x = A(3)
    x.foo = 8
    x += 5
    print(x.foo) # [raises AttributeError: ...]

    This only looks bad because of the somewhat weird Python semantics of
    "+=", which sometimes performs a side effect, but sometimes just
    performs an assignment. What you wrote is equivalent to:

    class A(int): pass
    x = A(3)
    x.foo = 8
    x = operator.__iadd__(x, 5) # NOT `x = x + 5` as in C or Java!
    print(x.foo)

    Which raises an exception for the same reason that the following does:

    class A(int): pass
    x = A(3)
    x.foo = 8
    y = operator.__iadd__(x, 5)
    print(y.foo)

    After this third version, `type(x)` is still `A`, and `x.foo` is still
    `8`. `type(y)` is `int`, because that's what A's _add__ method chose
    to return.

    Python's object-orientation is working just fine here. The problem is
    that Python's `+=` doesn't do exactly what you expect. (I actually
    think `+=` is a bit of a hazard for newbie Python programmers.)
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Thu Jul 2 13:41:43 2026
    From Newsgroup: comp.lang.lisp

    Does it make a difference to the correctness of the code?
    Definitely, because it can change the algorithmic complexity in
    terms of space usage, so it can affect whether a programs runs in
    constant space or not, for example.
    ThatrCOs not about correctness, thatrCOs an efficiency issue. So thatrCOs a rCLnorCY, then.

    When your program runs out of memory that becomes a correctness issue.
    E.g. when `list-length` runs out of stack space when called on very long
    lists it's a correctness issue.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Thu Jul 2 18:22:50 2026
    From Newsgroup: comp.lang.lisp

    that shows why reference-counting can be a worthwhile option,
    doesnrCOt it?

    There are plenty of situations where reference counting can be
    a worthwhile option, of course. Nobody claimed otherwise here, AFAIK.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 00:42:36 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 01 Jul 2026 18:47:54 -0700, Paul Rubin wrote:

    class A(int): pass
    x = A(3)
    x.foo = 8
    x += 5
    print(x.foo) # crashes

    ---------------------------------------------------------------------------
    AttributeError Traceback (most recent call last)
    Cell In[1], line 5
    3 x.foo = 8
    4 x += 5
    ----> 5 print(x.foo) # crashes

    AttributeError: 'int' object has no attribute 'foo'

    Are you surprised?

    Anyway, last I heard, OOP was a 1990s thing that didn't work out.

    Maybe you donrCOt understand how itrCOs supposed to work? If the subclass doesnrCOt override the method, the call goes to the superclass, which in
    this case returns an object of the superclass type, not the subclass.

    class A(int) :

    def __init__(self, val) :
    super().__init__()
    self.foo = val
    #end __init__

    def __add__(a, b) :
    return \
    type(a)(super().__add__(b))
    #end __add__

    #end A

    x = A(3)
    print(x.foo)
    x.foo = 8
    print(x.foo)
    x += 5
    print(x.foo)

    Output:

    3
    8
    8
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 00:44:14 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 28 Jun 2026 16:55:53 -0700, Paul Rubin wrote:

    A copying GC doesn't find dead objects to reclaim them. It copies
    the live objects to a new heap (contiguous chunk of memory) and then
    releases the entire old heap in a single swoop. So if there are 15
    live objects and a million dead ones, the GC spends no time dealing
    with the individual dead ones.

    Except, more likely there will be a million live objects, way more
    than necessary to thrash the caches.

    Also, in Lisp jargon, "consing" sometimes informally refers to
    allocating any type of memory object, not just cons nodes.

    Just vague enough for plausible deniability, eh?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 00:50:04 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 02 Jul 2026 20:33:59 -0400, Alan Bawden wrote:

    (I actually think `+=` is a bit of a hazard for newbie Python
    programmers.)

    You think *that*rCOs a hazard? *This* is a hazard:

    i = 3
    ++i
    print(i)

    prints 3. Syntactically valid, yet doesnrCOt do what programmers
    accustomed to other C-style languages would expect!

    (At least rCLi++rCY raises a syntax error ...)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 04:04:00 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 02 Jul 2026 18:22:50 -0400, Stefan Monnier wrote:

    There are plenty of situations where reference counting can be a
    worthwhile option, of course. Nobody claimed otherwise here, AFAIK.

    Quite a few are insisting that garbage collection is somehow superior
    overall.

    If itrCOs so good, why donrCOt OS kernels use it?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 04:06:11 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 28 Jun 2026 16:36:03 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Admit that the Lisp garbage collector cannot scale to dealing with
    large amounts of data?

    It's not a scaling issue in the slightest.

    Large amounts of data => canrCOt cope.

    What would you call it, then?

    You say that facetiously, but that is in fact what people are doing
    nowadays, when they load huge amounts of data with NumPy, Pandas
    etc for analysis with Python code.

    NumPy and friends keep their data away from the CPython reference
    counting system the same way mmap keeps the mapped data away from a
    Lisp GC.

    They donrCOt, you know. Think of NumPy returning an array of floats:
    each float has to be allocated as a Python object. According to you
    (and others), that should be pretty much fatal to performance.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 04:07:20 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 13:46:10 -0700, Paul Rubin wrote:

    George Neuner <gneuner2@comcast.net> writes:

    Jones, Hosking & Moss, "The Garbage Collection Handbook: The Art
    of Automatic Memory Management", 1st ed., 2012, CRC Press, ISBN
    978-1420082791

    This has a 2nd edition now: https://www.gchandbook.org/editions.html

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Thu Jul 2 22:20:57 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    Think of NumPy returning an array of floats: each float has to be
    allocated as a Python object.

    Numpy float arrays don't work like that at all. They're more like in
    Python's array module, a bunch of packed floats in a C-like array in
    memory, though they can be non-contiguous. That's why types like
    np.int8 exist too.

    Of course numpy arrays can be converted to and from Python lists, but
    then the usual costs are incurred. The NP array is refcounted as a
    single object, as one would expect.

    See: https://numpy.org/doc/1.22/user/c-info.how-to-extend.html#getting-at-ndarray-memory-and-accessing-elements-of-the-ndarray
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Jul 3 05:45:01 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 02 Jul 2026 13:41:43 -0400, Stefan Monnier wrote:

    When your program runs out of memory that becomes a correctness
    issue.

    So why doesnrCOt the language spec resolve the ambiguity, then?

    Because if yourCOre relying on the implementation working in a
    particular way, then thatrCOs called rCLundefined behaviourrCY and the
    program must be considered buggy.

    I thought garbage collection was supposed to remove the headache of
    worrying about managing memory allocations. But it doesnrCOt, does it?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Fri Jul 3 02:10:31 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 03 Jul 2026 00:34:38 +0100, Nuno Silva
    <nunojsilva@invalid.invalid> wrote:

    On 2026-07-02, Lawrence DrCOOliveiro wrote:

    On 2 Jul 2026 09:24:13 GMT, Stefan Ram wrote:

    In the interactive CPython shell, one needs to add a blank line:

    But not in Jupyter, which is just as interactive -- if not more so.

    Yes, but this was about the comment that Python's indentation is "easier
    for beginners" (which you attributed to Guido van Rossum?).


    I'm not aware that von Rossum actually said indentation made it
    "easier for beginners" ... but he definitely did say that use of
    indentation made code more readable.


    from "Open heart with Guido Van Rosuum" https://impythonist.wordpress.com/2014/02/16/open-heart-with-guido-van-rosuuma-lost-interview-of-python-creator-part2/

    || The choice of indentation for grouping was not a novel concept
    || in Python; I inherited this from ABC, but it also occurred in
    || occam, an older language. I don't know if the ABC authors got
    || the idea from occam, or invented it independently, or if there
    || was a common ancestor. Of course, I could have chose not to
    || follow ABCrCOs lead, as I did in other areas (e.g., ABC used
    || uppercase for language keywords and procedure names, an idea
    || I did not copy), but I had come to like the feature quite a
    || bit while using ABC, as it seemed to do away with a certain
    || type of pointless debate common amongst C users at the time,
    || about where to place the curly braces. I also was well aware
    || that readable code uses indentation voluntarily anyway to
    || indicate grouping, and I had come across subtle bugs in code
    || where the indentation disagreed with the syntactic grouping
    || using curly bracesrCothe programmer and any reviewers had
    || assumed that the indentation matched the grouping and
    || therefore not noticed the bug. Again, a long debugging
    || session taught a valuable lesson.



    YMMV. I /hate/ the idea of indentation being signicant.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Fri Jul 3 02:16:41 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 3 Jul 2026 04:04:00 -0000 (UTC), Lawrence D-|Oliveiro
    <ldo@nz.invalid> wrote:

    On Thu, 02 Jul 2026 18:22:50 -0400, Stefan Monnier wrote:

    There are plenty of situations where reference counting can be a
    worthwhile option, of course. Nobody claimed otherwise here, AFAIK.

    Quite a few are insisting that garbage collection is somehow superior >overall.

    If itrCOs so good, why donrCOt OS kernels use it?

    There have been OS kernels that used it, even for device drivers.


    I thought the argument was about whether or not RC is, or is not, a GC
    method. As far as Jones & Lins is concerned, RC *is* a GC method, and
    in fact it is the first one they discuss in depth.

    That RC is not "perfect" [for some definition] is a different issue.
    No GC method is perfect - every method has good points and bad points.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Jul 3 07:21:03 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-03, George Neuner wrote:

    On Fri, 03 Jul 2026 00:34:38 +0100, Nuno Silva
    <nunojsilva@invalid.invalid> wrote:

    On 2026-07-02, Lawrence DrCOOliveiro wrote:

    On 2 Jul 2026 09:24:13 GMT, Stefan Ram wrote:

    In the interactive CPython shell, one needs to add a blank line:

    But not in Jupyter, which is just as interactive -- if not more so.

    Yes, but this was about the comment that Python's indentation is "easier >>for beginners" (which you attributed to Guido van Rossum?).


    I'm not aware that von Rossum actually said indentation made it
    "easier for beginners" ... but he definitely did say that use of
    indentation made code more readable.


    from "Open heart with Guido Van Rosuum" https://impythonist.wordpress.com/2014/02/16/open-heart-with-guido-van-rosuuma-lost-interview-of-python-creator-part2/

    || The choice of indentation for grouping was not a novel concept
    || in Python; I inherited this from ABC, but it also occurred in
    || occam, an older language. I don't know if the ABC authors got
    || the idea from occam, or invented it independently, or if there
    || was a common ancestor. Of course, I could have chose not to
    || follow ABCrCOs lead, as I did in other areas (e.g., ABC used
    || uppercase for language keywords and procedure names, an idea
    || I did not copy), but I had come to like the feature quite a
    || bit while using ABC, as it seemed to do away with a certain
    || type of pointless debate common amongst C users at the time,
    || about where to place the curly braces. I also was well aware
    || that readable code uses indentation voluntarily anyway to
    || indicate grouping, and I had come across subtle bugs in code
    || where the indentation disagreed with the syntactic grouping
    || using curly bracesrCothe programmer and any reviewers had
    || assumed that the indentation matched the grouping and
    || therefore not noticed the bug. Again, a long debugging
    || session taught a valuable lesson.

    On a first analysis, this doesn't make it much better, while I
    understand his view, he says this was a departure from one type of
    pointless debate. Now perhaps the one I'm about to mention is not
    pointless and that's the difference, but: this doesn't steer clear of
    the tabs v. spaces debate, and I think one might even argue it makes
    *that* debate more visible in the Python world?

    YMMV. I /hate/ the idea of indentation being signicant.
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Jul 3 07:29:14 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-03, Lawrence DrCOOliveiro wrote:

    On Thu, 02 Jul 2026 18:22:50 -0400, Stefan Monnier wrote:

    There are plenty of situations where reference counting can be a
    worthwhile option, of course. Nobody claimed otherwise here, AFAIK.

    Quite a few are insisting that garbage collection is somehow superior overall.

    If itrCOs so good, why donrCOt OS kernels use it?

    You're all for saying people have choice when they say they have issues
    with the way systemd approaches stuff, but you can't accept the same possibility of choices and different solutions fitting different users,
    systems or problems here?
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Jul 3 07:36:42 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-03, Lawrence DrCOOliveiro wrote:

    On Sun, 28 Jun 2026 16:36:03 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Admit that the Lisp garbage collector cannot scale to dealing with
    large amounts of data?

    It's not a scaling issue in the slightest.

    Large amounts of data => canrCOt cope.

    What would you call it, then?

    "Ambiguity" for "plausible deniability", apparently, because what you
    just wrote doesn't really have enough detail to configure a problem at
    all, it can just describe issues with implementation of computer
    programs in real-life computer and computing machinery - the difference
    between "infinite tape" and a human computer's desk, paper and
    pens/pencils, or between "infinite tape" and a computer's resources.

    If you are going to be pointing fingers at others for "ambiguity" of
    this sort, it'd perhaps be at least considerate that you didn't do the
    same thing in your own posts in the same 24 hour period...

    (What is "*the* Lisp garbage collector"? Is that actually defined for
    all lisps? Encompassing Emacs Lisp and RnRS too?)
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jul 3 01:47:18 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> writes:
    but: this doesn't steer clear of the tabs v. spaces debate, and I
    think one might even argue it makes *that* debate more visible in the
    Python world?

    I think Python doesn't really have a tabs-vs-spaces debate since the
    userbase is solidly convinced (indoctrinated?) that "tabs bad, spaces
    good". Tabs vs spaces was a 1980s thing anyway.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From yeti@yeti@tilde.institute to comp.lang.lisp on Fri Jul 3 12:51:44 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:

    from "Open heart with Guido Van Rosuum" https://impythonist.wordpress.com/2014/02/16/open-heart-with-guido-van-rosuuma-lost-interview-of-python-creator-part2/

    || The choice of indentation for grouping was not a novel concept
    || in Python; I inherited this from ABC, but it also occurred in
    || occam, an older language.

    I tried ABC and its integrated editor just was annoying. It only
    allowed to enter what was expected at the current cursor position and indentation always was on autopilot. I did not know a way to use an
    external editor for ABC. Maybe I just did not find it in its docs. But
    it was meant to be like an all-in-one solution even abstracting file
    access away from the user. Interesting and strange at the same time,
    but IMO hard to get used to.

    When Python-0.x appeared I at least could use the editor of my choice,
    but being forced to use indentation still annoys me today no matter
    which language demands it. I'm indenting my code in nearly all
    languages, but I dislike if it is more than pure aesthetics.

    .

    Just for a smile:

    Bython
    Python with braces. Because Python is awesome, but whitespace is awful. <https://github.com/mathialo/bython>
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jul 3 11:34:06 2026
    From Newsgroup: comp.lang.lisp

    yeti <yeti@tilde.institute> writes:
    Python with braces. Because Python is awesome, but whitespace is awful.

    "Although some people have initial resistance to the
    ( indentation as block structure | parentheses)
    most come to ( accept | deeply appreciate ) them."

    Peter Norvig, Python vs Lisp comparison (May 2000) https://www.norvig.com/python-lisp.html
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp on Fri Jul 3 19:37:40 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:
    All CPython integers are boxed, but small ones (-5 through +250 or
    something like that) are pre-allocated. Sounds awful but I think some
    Lisps also have done that.

    For example, PDP-10 MacLisp. The PDP-10 is a word addressed machine,
    where addresses are 18 bits, and words are 36 bits. PDP-10 integers are
    36 bits long, so pretty much your only choice for representing fixnums
    is as an 18-bit pointer to a 36-bit signed integer, i.e. "boxed".

    (And that single 36-bit word is all there is. The type is determined by
    the memory address, and GC mark bits are kept in their own segment of
    memory.)

    This does mean that arithmetic is _potentially_ consing all the time, but various things are done to make this less of a problem:

    rCo A range of small integers is pre-allocated. Exactly the technique
    mentioned above.

    rCo The compiler does not heap allocate intermediate results. So if you
    write `(+ (* a b) 7)`, the compiler may have to unbox the values of
    `a` and `b`, but then it can multiply and immediately add 7 without
    allocating an intermediate fixnum. (Note that the functions `+`,
    `*`, etc. are _defined_ to be operations on 36-bit words, so the
    compiler doesn't have to worry about overflow -- unlike in Common
    Lisp.)

    rCo If an intermediate fixnum needs to be allocated, say to pass as an
    argument to another function, it can be allocated in a special area
    of memory that has fixnum type, but that is managed as a stack -- the
    GC doesn't touch it. That temparary number is then popped out of
    existence after the function call returns. This does mean that the
    compiler has to constantly worry that an object that it is about to
    store someplace permanent might be a stack allocated "PDL number".
    The utility that replaces a potential PDL number with a permanent
    number is named "PDLNMK", and every serious MacLisp programmer knows
    exactly what it does because it frequently appears in our compiled
    code.

    rCo If a function returns a fixnum value, you can declare that fact to
    the compiler, which will then arrange to give that function an
    alternate entry point that directly returns the 36-bit value (in a
    non-GC-marked register). All callers that know about this
    declaration will use that alternate entry point.

    rCo Additional type declarations can make the compiler generate even
    better code. Common Lisp's declaration system was heavily influenced
    by MacLisp's. If you are willing to read the generated code, and you
    are sufficiently determined, you can declare your way to pretty
    optimal numeric machine code. (The process feels very similar to the
    way I've sometimes persuaded sbcl to produce much better code.)

    rCo There are fixnum-only arrays that contain 36-bit integers (not 18-bit
    pointers to integers). These can bite you if you are not careful, as
    every reference to such an array potentially allocates a fixnum in
    the heap! But used carefully, in combination with the techniques
    above, you can write code that manipulates arrays of machine integers
    without ever consing a single fixnum object.

    Everything I've said here also applies equally to the PDP-10's 36-bit
    floating point numbers (called "flonums" by MacLisp.)

    There's a paper by Guy Steele titled "Fast Arithmetic in MacLisp" that describes all these techniques in detail: <hdl.handle.net/1721.1/6279>.
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Fri Jul 3 17:42:54 2026
    From Newsgroup: comp.lang.lisp

    I think Python doesn't really have a tabs-vs-spaces debate since the
    userbase is solidly convinced (indoctrinated?) that "tabs bad, spaces
    good". Tabs vs spaces was a 1980s thing anyway.

    FWIW, in Emacs world, I see a rising use of TABs for indentation (and
    rising pressure to abuse `tab-width` as "the size of an indentation
    step"). Especially with languages where indentation styles are such
    that indentation can be done exclusively with TABs (rather than mixing
    TABs and SPCs). I.e. indentation styles where lines are always indented relative to the *beginning* of some previous line.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Fri Jul 3 10:12:41 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro [2026-07-03 05:45:01] wrote:
    On Thu, 02 Jul 2026 13:41:43 -0400, Stefan Monnier wrote:
    When your program runs out of memory that becomes a correctness
    issue.
    So why doesnrCOt the language spec resolve the ambiguity, then?

    Probably for the same reason most language "specifications" don't
    deserve this name, they're just vague descriptions with lots of grey areas. Some languages are more precise and do provide usable guarantees w.r.t
    when a value is unreachable, but they're still a small minority.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Fri Jul 3 10:18:04 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro [2026-07-03 04:04:00] wrote:
    On Thu, 02 Jul 2026 18:22:50 -0400, Stefan Monnier wrote:
    There are plenty of situations where reference counting can be a
    worthwhile option, of course. Nobody claimed otherwise here, AFAIK.
    Quite a few are insisting that garbage collection is somehow superior overall.

    I haven't seen such a claim being made here.
    There's no one-size-fits all, because all known methods have
    non-trivial tradeoffs.

    Tracing GCs seem to be popular among language implementors, even though
    they're non-trivial to implement (and a major PITA to debug), so they
    do seem to provide good value "overall". Tho maybe it's just
    implementors reproducing blindly what previous implementors did.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jul 3 18:29:36 2026
    From Newsgroup: comp.lang.lisp

    Alan Bawden <alan@csail.mit.edu> writes:
    For example, PDP-10 MacLisp....

    Thanks for this long and interesting post. I don't have much of a
    response but I can say that I read all of it with appreciation. Today,
    I guess that in such an implementation, CPU instructions are so much
    faster than memory accesses that there's not much slowdown from checking arithmetic results for belonging in the permanently allocated set. Can
    I ask if that was an issue in the Maclisp era?

    There was a time (maybe not now) when given a semispace GC and a fast
    bump allocator, you could spew garbage with total abandon, not worrying
    at all about temporary consing. I think SML/NJ worked like that. It
    may have been because of cheap memory (compared to the PDP-10 era)
    combined with CPU's not yet having outstripped memory speed by so much.
    Which is to say, one can't identify the "right" designs from first
    principles. A lot depends on the actual characteristics of the target hardware.

    I think SML/NJ got a speedup by using the machine's paging hardware to
    raise an address fault when the bump allocator hit the end of heap
    space, instead of spending actual CPU instructions checking that the
    pointer was in range on each allocation. It generated THAT much
    garbage.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jul 3 18:43:53 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> writes:
    So why doesnrCOt the language spec resolve the ambiguity, then?
    Probably for the same reason most language "specifications" don't
    deserve this name

    There's a viewpoint (denotative?) that an incorrect program is one that generates wrong answers (like 2+2=5) and a correct program is one that
    is not incorrect. So if the program hangs or crashes, it hasn't
    generated any type of answer much less a wrong one, and therefore it is correct. That type of program is called partial or divergent. A never-diverging program is called "total" and being correct and total at
    the same time is called "total correctness".

    Total correctness sounds like something everyone should want, but
    really, for most users, a program that might crash or generate a blue
    screen is probably tolerable, as long as the probability of this event
    is less than that of, say, a power failure at the office that similarly
    crashes the user's computer. So proofs of program correctness in (say)
    Rocq often won't care about algorithm complexity. Your program might
    compute 2+2 using an valid but impractical algorithm that consumes galactic-scale resources, and Rocq could certify it as correct. At
    least it won't give the wrong answer! It will run out of memory
    instead.

    Ada/SPARK, on the other hand, not only seek to certify correctness, but
    also totality ("this program cannot throw any exceptions, such as
    integer overflow or out-of-memory"). I think those proofs are quite a
    bit more cumbersome than Rocq proofs. So in practice (certainly in most
    Lisp programs) we users mostly care only about correctness, not
    totality.

    I haven't used Rocq or SPARK in any serious way though.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 03:51:49 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 03 Jul 2026 10:18:04 -0400, Stefan Monnier wrote:

    Lawrence DrCOOliveiro [2026-07-03 04:04:00] wrote:

    Quite a few are insisting that garbage collection is somehow
    superior overall.

    I haven't seen such a claim being made here.

    You havenrCOt seen all the ones telling me IrCOm wrong in saying that
    Python is doing the right thing with reference-counting?

    If garbage collection is so good, why donrCOt OS kernels use it?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 03:53:31 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    So why do you look down on PythonrCOs use of reference-counting?

    Look at the decades of anguish CPython has suffered over its GIL.

    Better than that Interlisp thing, that couldnrCOt even handle shared
    objects properly.

    I simply don't understand the refcounting fanboying taking place
    here.

    If garbage collection is so good, why donrCOt OS kernels use it?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 03:58:23 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 02 Jul 2026 22:20:57 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    Think of NumPy returning an array of floats: each float has to be
    allocated as a Python object.

    Numpy float arrays don't work like that at all.

    NumPy can do what it likes internally. ThatrCOs why I said rCLreturningrCY:
    the result must still be Python-compatible.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lars Brinkhoff@lars.spam@nocrew.org to comp.lang.lisp on Sat Jul 4 04:03:33 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin claims Peter Norvig wrote:
    "Although some people have initial resistance to the ( indentation as
    block structure | parentheses) most come to ( accept | deeply
    appreciate ) them."

    You don't have to deeply appreciate them. Most programming languages
    are workable unless you are too hung up about perceived flaws. (I
    normally wouldn't have posted this smug remark, but I feel it's
    appropriate in comp.lang.lisp.)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 04:06:56 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 28 Jun 2026 16:41:13 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    But guess what: I think Python has become more popular for embedded
    use than Lua.

    Lua is a somewhat weird language and people may prefer Python due to familiarity.

    That wasnrCOt so true when Lua first came out. Somehow Python managed to overtake it.

    CPython is a pain to embed though.

    I will say, I think Lua is more popular in proprietary apps (I think
    Adobe uses it, also some game engines). CPython is particularly
    well-supported among open-source content-creation apps.

    My favourite example is Blender <https://docs.blender.org/api/5.1/>.
    Just look at the depth of that -- the entire contents of the loaded
    Blender document are exposed as Python objects.

    One early motivation was prompt finalization when stuff goes out of
    scope, but later the "with" statement was added, giving something
    like RAII.

    The rCLwithrCY statement is more about restoration of state -- see also rCLtry/finallyrCY.

    I don't see any clear advantages.

    Worth comparing garbage-collected Python implementations. For example,
    someone else said that Java had a particularly good GC. Jython is, or
    was, a Python implementation on top of the JVM. That should have shown
    some clear performance advantages, shouldnrCOt it? Yet it was never
    popular.

    Microsoft also had a go, with IronPython built on top of its DotNet
    runtime. Again, after several years of trying to promote it, it could
    never work up enough interest, so eventually the project was
    abandoned.

    If a company with the marketing clout of Microsoft cannot make a
    success of a garbage-collected alternative to CPython, then the idea
    must really be bad ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 04:15:35 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 03 Jul 2026 01:47:18 -0700, Paul Rubin wrote:

    I think Python doesn't really have a tabs-vs-spaces debate since the
    userbase is solidly convinced (indoctrinated?) that "tabs bad,
    spaces good".

    Python continues to support either. What it will not let you do is mix
    them inconsistently, in such a way that the indentation level would
    depend on the precise number of spaces that a tab is equivalent to.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 04:18:24 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 04 Jul 2026 04:03:33 +0000, Lars Brinkhoff wrote:

    Most programming languages are workable unless you are too hung up
    about perceived flaws.

    I managed to annoy a PHP aficionado in another group by pointing out
    how crap that particular language is.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jul 3 22:03:48 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> writes:
    Tracing GCs seem to be popular among language implementors, even though they're non-trivial to implement (and a major PITA to debug),

    I've debugged refcounting errors in Python extensions and other systems
    too, and that's not fun either.

    so they do seem to provide good value "overall". Tho maybe it's just implementors reproducing blindly what previous implementors did.

    I think developers of more serious implementations tend to know what
    they're doing. Certainly, GC's in languages that use them tend to have adequate performance, if only because the language idioms and runtimes
    evolve along with the implementations' needs. Python by contrast had
    the GIL for decades because putting mutexes around the refcounts was
    seen to slow applications down too much, even with the rest of the
    interpreter being so slow.

    There's now a workaround for Python, but I don't know how much it
    affects the API. It might be that old extension modules need to be
    updated before they can run without the GIL. I haven't looked into it.

    This is kind of sad: https://news.ycombinator.com/item?id=48503009

    I still use Python but I have some sympathy with these:

    https://news.ycombinator.com/item?id=48525443
    https://news.ycombinator.com/item?id=48525769
    https://news.ycombinator.com/item?id=48548040
    https://news.ycombinator.com/item?id=48525706
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 05:44:24 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 03 Jul 2026 22:03:48 -0700, Paul Rubin wrote:

    I've debugged refcounting errors in Python extensions and other
    systems too, and that's not fun either.

    There is a way to write the code to make this a bit easier <https://gitlab.com/ldo/a_structured_discipline_of_programming/>.

    Hint: avoid gotos.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Sat Jul 4 07:46:59 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-04, Lawrence DrCOOliveiro wrote:

    On Sun, 28 Jun 2026 16:41:13 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    But guess what: I think Python has become more popular for embedded
    use than Lua.

    Lua is a somewhat weird language and people may prefer Python due to
    familiarity.

    That wasnrCOt so true when Lua first came out. Somehow Python managed to overtake it.

    CPython is a pain to embed though.

    I will say, I think Lua is more popular in proprietary apps (I think
    Adobe uses it, also some game engines). CPython is particularly well-supported among open-source content-creation apps.

    My favourite example is Blender <https://docs.blender.org/api/5.1/>.
    Just look at the depth of that -- the entire contents of the loaded
    Blender document are exposed as Python objects.

    One early motivation was prompt finalization when stuff goes out of
    scope, but later the "with" statement was added, giving something
    like RAII.

    The rCLwithrCY statement is more about restoration of state -- see also rCLtry/finallyrCY.

    I don't see any clear advantages.

    Worth comparing garbage-collected Python implementations. For example, someone else said that Java had a particularly good GC. Jython is, or
    was, a Python implementation on top of the JVM. That should have shown
    some clear performance advantages, shouldnrCOt it? Yet it was never
    popular.

    Microsoft also had a go, with IronPython built on top of its DotNet
    runtime. Again, after several years of trying to promote it, it could
    never work up enough interest, so eventually the project was
    abandoned.

    If a company with the marketing clout of Microsoft cannot make a
    success of a garbage-collected alternative to CPython, then the idea
    must really be bad ...

    Or maybe those who would possibly use it - not already using other MS technologies - prefer to stick with CPython &c instead of subjecting
    themselves to a less portable choice with possible vendor lock-in,
    restrictions on usage, and coming from MICROS~1, which does say
    something about stability and compliance.

    Similarly, I don't think the JVM for desktop java has ever been lauded
    for being very performant and lean on resource usage.
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sat Jul 4 03:21:05 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    There is a way to write the code to make this a bit easier <https://gitlab.com/ldo/a_structured_discipline_of_programming/>.

    The Python API docs are reasonably clear about how to balance
    references. In my case I noticed a memory leak in a 3rd party module
    that I had used in an application, and then had to track down the error,
    which was a pain.

    I also used refcounting in the GNU Awk (Gawk) interpreter. I don't
    remember having a particularly bad time debugging it, but it's hazy by
    now. I would say I chose refcounting because it was conceptually simple
    and I probably didn't know how to write a GC at the time. That
    interpreter was also much simpler than CPython and its refcounting
    didn't face as many issues. Today though, if trying to implement a
    program like that in C, I'd probably just use the Boehm GC, which didn't
    exist back then.

    I do find the CPython API to be unpleasant, compared to the FFI's of
    other languages that don't make you manage refcounts.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 23:22:09 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 04 Jul 2026 03:21:05 -0700, Paul Rubin wrote:

    I do find the CPython API to be unpleasant, compared to the FFI's of
    other languages that don't make you manage refcounts.

    If yourCOre used to working in a language like C where you have to
    remember to dispose of things anyway, doing a Python extension in C
    isnrCOt really a very different experience.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 23:24:34 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 03 Jul 2026 10:12:41 -0400, Stefan Monnier wrote:

    Lawrence DrCOOliveiro [2026-07-03 05:45:01] wrote:

    So why doesnrCOt the language spec resolve the ambiguity, then?

    Probably for the same reason most language "specifications" don't
    deserve this name, they're just vague descriptions with lots of grey
    areas. Some languages are more precise and do provide usable
    guarantees w.r.t when a value is unreachable, but they're still a
    small minority.

    Nowadays I would say theyrCOre the majority.

    Lisp is from a different era. It gives this impression of always being
    a work in progress, never quite ready for production use. OK for Comp
    Sci researchers to mess about with, not something you would want to
    rely on for any mission-critical system.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 23:28:16 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 03 Jul 2026 18:43:53 -0700, Paul Rubin wrote:

    So if the program hangs or crashes, it hasn't generated any type of
    answer much less a wrong one, and therefore it is correct. That type
    of program is called partial or divergent. A never-diverging program
    is called "total" and being correct and total at the same time is
    called "total correctness".

    There is one easy, if one might say brutal, way of guaranteeing
    termination, at any rate: make the language primitive-recursive.

    Remember Blender, the example app I mentioned before? It uses
    node-graph-style languages for defining shaders (how the materials
    that objects are made of interact with light), compositor processing,
    and rCLgeometry nodesrCY (actual programmatic generation of objects).
    These are all primitive-recursive.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Jul 4 23:34:37 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Look at the decades of anguish CPython has suffered over its GIL.

    Give them credit for being brave enough to confront a problem that
    no-one had solved before -- not even Perl.

    And now they have a solution. Not by running away from it, but by
    implementing something that, up to this point, has only been seen in
    research papers. Cutting-edge stuff!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 00:07:37 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Python's inventors insist that it's not a Lisp, but we Lispers can
    see that it's just a weird Lisp implementation with some surface
    syntax added. It even has lambda!

    Lisp has continuations, though. Python has most other things (and is
    almost homoiconic, thanks to the rCLastrCY module), but not that.

    rCLLambdarCY is nothing new. Algol-60 had call by name. Algol-68 made the resemblance more explicit by calling it a rCLproceduring coercionrCY.
    Would you call those languages rCLweird Lisp implementationsrCY?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sat Jul 4 17:22:22 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    There is one easy, if one might say brutal, way of guaranteeing
    termination, at any rate: make the language primitive-recursive.

    That still doesn't guarantee any reasonable memory bounds. But you
    might like this: https://lib.jucs.org/article/28254/

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Sat Jul 4 09:40:42 2026
    From Newsgroup: comp.lang.lisp

    I think SML/NJ got a speedup by using the machine's paging hardware to
    raise an address fault when the bump allocator hit the end of heap
    space, instead of spending actual CPU instructions checking that the
    pointer was in range on each allocation.

    IIRC it used a plan old test to detect when running out of heap space,
    but it tried to avoid making such checks on each and every allocation. Basically, the test was done once per loop iteration and tested for the presence of enough memory until the next test.

    AFAIK it's a pretty common approach which also naturally makes those
    tests be natural "safe points" (i.e. places in the code where the
    compiler makes sure the state of the memory and registers follows all
    the conventions that the GC requires).

    It generated THAT much garbage.

    Still does. It generates so much garbage because it allocates
    everything on the heap, never on the stack (which works great for
    call/cc and extra-lightweight threads).


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Sat Jul 4 09:23:44 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro [2026-07-04 03:51:49] wrote:
    On Fri, 03 Jul 2026 10:18:04 -0400, Stefan Monnier wrote:
    Lawrence DrCOOliveiro [2026-07-03 04:04:00] wrote:
    Quite a few are insisting that garbage collection is somehow
    superior overall.
    I haven't seen such a claim being made here.
    You havenrCOt seen all the ones telling me IrCOm wrong in saying that
    Python is doing the right thing with reference-counting?

    I think you're misreading answers or people are misreading your claims.
    I can't remember seeing you claiming that CPython is doing the right
    thing for their situation by using reference counting.

    Instead, I perceive you claiming that reference counting is better than
    tracing GC, which is like comparing apples and oranges: they each have
    their strengths and weaknesses. The usual main weaknesses of refcounting is low-speed and difficulty dealing with cycles. The usual main weaknesses
    of tracing GCs are poor support for real-time uses and a tendency to
    require more heap space to get good performance.

    The low-speed of refcounting is probably not a significant issue for
    CPython since the CPython compiler/interpreter doesn't focus on
    high-speed execution. So it may very well be that refcount is "the
    right thing" for CPython. I don't think anyone here cares very much
    whether it's the case or not.

    But even if it's "the right thing" for CPython, that doesn't mean it's
    the end-all-be-all of memory management and that Lisp implementations
    would all be better served by adding a refcounting front-end to their
    GC, like CPython does (since, indeed, CPython also has the equivalent of
    a tracing GC, to collect cycles).

    If garbage collection is so good, why donrCOt OS kernels use it?

    Why do *most* OS kernels not use a tracing GC?
    Probably for two reasons:

    - Habit: Most OS kernels are written in languages without automatic
    memory management.
    - Control: Usually OS kernels like to be very explicit about
    controlling resources.
    - Layering: Just like kernels typically don't internally use on-demand
    paging because it tends to create layering problems, having the
    kernel's code layered on top of a tracing GC requires extra care,
    since tracing GCs tend to require non-trivial services traditionally
    offered by ... an underlying kernel.
    - Real-time constraints: OS kernels usually aim to support real-time
    applications, and tracing GCs tend to get in the way of that.
    There's been a lot of work on real-time GCs, so it's not
    insurmountable, but comes with its own set of trade-offs.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 01:46:21 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 04 Jul 2026 09:23:44 -0400, Stefan Monnier wrote:

    The usual main weaknesses of refcounting is low-speed and difficulty
    dealing with cycles.

    See, there you go, repeating the same thing again. It is garbage
    collection that is more likely to suffer from performance issues than reference-counting.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 01:47:59 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 04 Jul 2026 17:22:22 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is one easy, if one might say brutal, way of guaranteeing
    termination, at any rate: make the language primitive-recursive.

    That still doesn't guarantee any reasonable memory bounds.

    Not that I could any mention of such an issue in that posting of yours
    ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 01:49:41 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Python's inventors insist that it's not a Lisp, but we Lispers can
    see that it's just a weird Lisp implementation with some surface
    syntax added.

    Lisp doesnrCOt have operator overloading.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sat Jul 4 21:44:50 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    See, there you go, repeating the same thing again. It is garbage
    collection that is more likely to suffer from performance issues than reference-counting.

    What on earth makes you spout nonsense like this? Do you have any
    evidence? What for that matter is the sample space that you're
    asserting a certain probability distribution over? Can you imagine
    somehow reworking CPython so that it's 10x faster than the current
    version, while leaving the current refcounting scheme in place? Can you imagine somehow reworking SBCL or GHC to use CPython-style refcounting
    (ignore the problem of cycles) and expecting it to not slow down? SMH.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 05:17:46 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 04 Jul 2026 21:44:50 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.

    What on earth makes you spout nonsense like this?

    Whichever way you look at garbage collection, it is going to be
    cache-hostile.

    I pointed out issues with storage reclamation. Someone said that
    garbage collectors donrCOt work that way, they only access live objects,
    not dead ones. But thatrCOs no better: copying live objects to new
    locations means throwing away their existing cache entries, if any,
    and forcing new cache faults.

    So you see, there is no escaping the conclusion that garbage
    collection is a fundamentally low-performance activity.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Sun Jul 5 08:42:22 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-05, Lawrence DrCOOliveiro wrote:

    On Sat, 04 Jul 2026 09:23:44 -0400, Stefan Monnier wrote:

    The usual main weaknesses of refcounting is low-speed and difficulty
    dealing with cycles.

    See, there you go, repeating the same thing again. It is garbage
    collection that is more likely to suffer from performance issues than reference-counting.

    And can you provide solid numbers of that being the case? That, to
    achieve the same result, reference-counting performs better time- and space-wise?
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Sun Jul 5 08:43:59 2026
    From Newsgroup: comp.lang.lisp

    On 2026-07-05, Lawrence DrCOOliveiro wrote:

    On Sat, 04 Jul 2026 21:44:50 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.

    What on earth makes you spout nonsense like this?

    Whichever way you look at garbage collection, it is going to be cache-hostile.

    I pointed out issues with storage reclamation. Someone said that
    garbage collectors donrCOt work that way, they only access live objects,
    not dead ones. But thatrCOs no better: copying live objects to new
    locations means throwing away their existing cache entries, if any,
    and forcing new cache faults.

    So you see, there is no escaping the conclusion that garbage
    collection is a fundamentally low-performance activity.


    I've kind of lost track in this whole thread, so if possible please
    refresh my memory: how does reference counting avoid the
    "cache-hostility" issue?
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Jul 5 01:03:58 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:
    copying live objects to new locations means throwing away their
    existing cache entries, if any, and forcing new cache faults.

    The new locations are in a contiguous block of memory, which is as cache friendly as it gets. They were scattered all over the old heap, but the
    GC compacts and defragments them. Unlike a refcount system which leaves
    them scattered.

    So you see, there is no escaping the conclusion that garbage
    collection is a fundamentally low-performance activity.

    Do you have any benchmarks that support your weird theories?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Sat Jul 4 21:48:48 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro [2026-07-04 23:24:34] wrote:
    On Fri, 03 Jul 2026 10:12:41 -0400, Stefan Monnier wrote:
    Lawrence DrCOOliveiro [2026-07-03 05:45:01] wrote:
    So why doesnrCOt the language spec resolve the ambiguity, then?
    Probably for the same reason most language "specifications" don't
    deserve this name, they're just vague descriptions with lots of grey
    areas. Some languages are more precise and do provide usable
    guarantees w.r.t when a value is unreachable, but they're still a
    small minority.
    Nowadays I would say theyrCOre the majority.

    I guess you have a very different idea of what a "guarantee" looks like
    than I. Can you name some languages whose specification requires proper tail-calls or more generally "safe for space" implementation?


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Sun Jul 5 22:14:32 2026
    From Newsgroup: comp.lang.lisp


    Ar an nao|| l|i is fiche de m|! Meitheamh, scr|!obh tfb:

    steve g <Sgonedes1977@gmail.com> wrote:


    Does any program actually free or return memory to the kernel before it exits?


    Absolutely. LispWorks even has a function to do just this.

    Why, with a modern OS? For the sake of leak-tracking?
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 23:55:32 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 05 Jul 2026 22:14:32 +0100, Aidan Kehoe wrote:

    Ar an nao|| l|i is fiche de m|! Meitheamh, scr|!obh tfb:

    steve g <Sgonedes1977@gmail.com> wrote:

    Does any program actually free or return memory to the kernel
    before it exits?

    Absolutely. LispWorks even has a function to do just this.

    Why, with a modern OS? For the sake of leak-tracking?

    rCLModernrCY OSes support multitasking. That means there are going to be
    other processes running and doing useful things in their way, not just
    yours.

    Giving up memory yourCOre not using is just part of acting like a
    well-behaved resident of the userland ecosystem. Because, at least on
    Linux, being too much of a memory hog is liable to awaken the Dreaded
    OOM Killer.

    And you do not want that.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Jul 5 23:56:59 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 04 Jul 2026 21:48:48 -0400, Stefan Monnier wrote:

    I guess you have a very different idea of what a "guarantee" looks
    like than I.

    I guess garbage-collected languages do require a few more rCLguaranteesrCY
    than I would consider normal in a programming-language implementation
    ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Sun Jul 5 11:02:49 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro [2026-07-05 01:46:21] wrote:
    On Sat, 04 Jul 2026 09:23:44 -0400, Stefan Monnier wrote:
    The usual main weaknesses of refcounting is low-speed and difficulty
    dealing with cycles.
    See, there you go, repeating the same thing again. It is garbage
    collection that is more likely to suffer from performance issues than reference-counting.

    So you say. I don't have my own numbers to back my claim, and AFAIK
    neither do you. I'm only stating a general consensus among
    practitioners. For all I know, maybe you're right (e.g. because
    hardware performance tradeoffs have changed), but I think it'll
    take hard data to convince us.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jul 6 01:10:30 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 05 Jul 2026 11:02:49 -0400, Stefan Monnier wrote:

    Lawrence DrCOOliveiro [2026-07-05 01:46:21] wrote:

    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.

    So you say. I don't have my own numbers to back my claim, and AFAIK
    neither do you. I'm only stating a general consensus among
    practitioners.

    Do your rCLpractitionersrCY include OS kernel developers?

    I also mentioned alternative purely-garbage-collected Python
    implementations, that never seemed able to offer any significant
    benefits (performance or otherwise) over regular CPython.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Mon Jul 6 08:04:27 2026
    From Newsgroup: comp.lang.lisp


    Ar an c||igi|| l|i de m|! I||il, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 05 Jul 2026 22:14:32 +0100, Aidan Kehoe wrote:

    Ar an nao|| l|i is fiche de m|! Meitheamh, scr|!obh tfb:

    steve g <Sgonedes1977@gmail.com> wrote:

    Does any program actually free or return memory to the kernel
    before it exits?

    Absolutely. LispWorks even has a function to do just this.

    Why, with a modern OS? For the sake of leak-tracking?

    rCLModernrCY OSes support multitasking. That means there are going to be other processes running and doing useful things in their way, not just yours.

    Giving up memory yourCOre not using is just part of acting like a well-behaved resident of the userland ecosystem. Because, at least on
    Linux, being too much of a memory hog is liable to awaken the Dreaded
    OOM Killer.

    And you do not want that.

    I broadly agree with that; my question above was from a misinterpretation of:

    Does any program actually free or return memory to the kernel
    before it exits?

    Absolutely. LispWorks even has a function to do just this.

    I took the question to mean rCLright before it exits,rCY which would be a waste of
    time.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Jul 6 08:00:27 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 06 Jul 2026 08:04:27 +0100, Aidan Kehoe wrote:

    I took the question to mean rCLright before it exits,rCY which would be
    a waste of time.

    I must admit I initially thought that too ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Mon Jul 6 05:13:16 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 05 Jul 2026 08:43:59 +0100, Nuno Silva
    <nunojsilva@invalid.invalid> wrote:

    On 2026-07-05, Lawrence DrCOOliveiro wrote:

    On Sat, 04 Jul 2026 21:44:50 -0700, Paul Rubin wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.

    What on earth makes you spout nonsense like this?

    Whichever way you look at garbage collection, it is going to be
    cache-hostile.

    I pointed out issues with storage reclamation. Someone said that
    garbage collectors donrCOt work that way, they only access live objects,
    not dead ones. But thatrCOs no better: copying live objects to new
    locations means throwing away their existing cache entries, if any,
    and forcing new cache faults.

    So you see, there is no escaping the conclusion that garbage
    collection is a fundamentally low-performance activity.


    I've kind of lost track in this whole thread, so if possible please
    refresh my memory: how does reference counting avoid the
    "cache-hostility" issue?

    It doesn't. Lawrence clearly has no clue how RC or tracing GC systems
    work. He's just regurgitating some bullshit he heard somewhere.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Mon Jul 6 05:21:17 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 6 Jul 2026 01:10:30 -0000 (UTC), Lawrence D-|Oliveiro
    <ldo@nz.invalid> wrote:

    On Sun, 05 Jul 2026 11:02:49 -0400, Stefan Monnier wrote:

    Lawrence DrCOOliveiro [2026-07-05 01:46:21] wrote:

    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.

    So you say. I don't have my own numbers to back my claim, and AFAIK
    neither do you. I'm only stating a general consensus among
    practitioners.

    Do your rCLpractitionersrCY include OS kernel developers?

    I also mentioned alternative purely-garbage-collected Python
    implementations, that never seemed able to offer any significant
    benefits (performance or otherwise) over regular CPython.

    Now I'm tired of this. You want OSes that used GC? I can think of
    these off the top of my head:

    Genera
    Medley
    Mezzano
    Spin
    Quicksilver

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Mon Jul 6 05:23:40 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 5 Jul 2026 01:49:41 -0000 (UTC), Lawrence D-|Oliveiro
    <ldo@nz.invalid> wrote:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Python's inventors insist that it's not a Lisp, but we Lispers can
    see that it's just a weird Lisp implementation with some surface
    syntax added.

    Lisp doesnrCOt have operator overloading.

    Lisp has generics which achieve the same thing.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Tue Jul 7 11:52:16 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro [2026-07-06 01:10:30] wrote:
    On Sun, 05 Jul 2026 11:02:49 -0400, Stefan Monnier wrote:
    Lawrence DrCOOliveiro [2026-07-05 01:46:21] wrote:
    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.
    So you say. I don't have my own numbers to back my claim, and AFAIK
    neither do you. I'm only stating a general consensus among
    practitioners.
    Do your rCLpractitionersrCY include OS kernel developers?

    No, "practitioners" of the art of implementing memory management.

    I also mentioned alternative purely-garbage-collected Python
    implementations, that never seemed able to offer any significant
    benefits (performance or otherwise) over regular CPython.

    If you think it has anything to do with their memory management, I can't
    help you, I'm afraid.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From cross@cross@spitfire.i.gajendra.net (Dan Cross) to comp.lang.lisp on Wed Jul 8 01:46:26 2026
    From Newsgroup: comp.lang.lisp

    In article <jwvik6qreff.fsf-monnier+comp.lang.lisp@gnu.org>,
    Stefan Monnier <monnier@iro.umontreal.ca> wrote:
    Lawrence DrCOOliveiro [2026-07-06 01:10:30] wrote:
    On Sun, 05 Jul 2026 11:02:49 -0400, Stefan Monnier wrote:
    Lawrence DrCOOliveiro [2026-07-05 01:46:21] wrote:
    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.
    So you say. I don't have my own numbers to back my claim, and AFAIK
    neither do you. I'm only stating a general consensus among
    practitioners.
    Do your rCLpractitionersrCY include OS kernel developers?

    No, "practitioners" of the art of implementing memory management.

    I am an "OS kernel developer". As usual, Lawrence is full of
    it. He thinks he is being oh-so clever by pointing out that
    many operating systems use reference counts to keep track of
    objects in use; however, there are two things he conveniently
    omits from his sophomoric attempt at the socratic method.

    First, many things that have references attached to them in the
    OS domain are long-lived objects that exist outside of memory;
    for instance, files (or the things that represent files) on a
    storage device, etc.

    Second, to the extent that reference counting is often used for
    objects inside of an OS kernel in memory, it's often because the
    OS is written in a language like C, where the challenge of doing
    something more elaborate (like mark-and-sweep garbage
    collection) is too challenging to be worth it. It is often a
    source of pain in that context, though, and it's not super fast:
    consider what it takes to increment (or decrement) a reference
    count in _most_ implementations: at a minimum, it's an atomic
    RMW cycle; at worst, it's taking a lock, modifying a variable,
    a memory barrier, and then releasing said via a store.

    Third, Lawrence's lack of imagination and experience is showing.
    Of course there exist systems that _have_ been implemented in
    garbage collected languages; Lisp has a long history here. More
    recently, the Biscuit system done at MIT was implemented in Go
    and made heavy use of the garbage collector.

    Finally, of course OS developers have to implement memory
    management of various kinds; ironically, so many of the methods
    used in modern systems (RCU, QSBR, EBR, etc) are all like just
    shy of proper garbage collection; again, often the language is
    to blame here.

    I also mentioned alternative purely-garbage-collected Python
    implementations, that never seemed able to offer any significant
    benefits (performance or otherwise) over regular CPython.

    If you think it has anything to do with their memory management, I can't
    help you, I'm afraid.

    No one can.

    - Dan C.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Tue Jul 7 19:30:24 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> writes:
    So you say. I don't have my own numbers to back my claim, and AFAIK
    neither do you.

    Here's a blog post about a recent (CPython 3.14 and later) optimization
    to CPython refcounting: https://rushter.com/blog/python-refcount/

    Unfortunately it doesn't give profiler output on the actual cpu usage of refcounting in CPython, though it mentions:

    For hot loops, this can lead to significant overhead due to the
    frequent incrementing and decrementing of reference counts. The
    counter must be updated whenever an object is referenced or
    dereferenced, which hurts performance and trashes CPU caches... So,
    when you read a variable in Python, you actually -write- to the
    memory as well.

    The optimizations amount to letting the bytecode compiler bypass some
    refcount optimizations when it knows it's safe to do so. And we do see
    some observable speedups in recent Python benchmarks, though idk how
    much of it comes from that optimization.

    What we do know is that Python's interpreter is pretty slow. Let's say
    that refcounting is using 5% of its CPU cycles. Nothing wrong with
    wanting to speed that to 0% but I wouldn't consider 5% to be a hot spot.
    If my Lisp application spends 5% of its time in GC, then I'm satisfied
    with the GC performance and look mostly for other possible speedups.

    Now here's the thing. Let's say we can make CPython (not counting
    memory management) 10x faster, so it's competitive with SBCL, but the refcounting overhead stays the same. So an "old" CPython app might take
    100 CPU seconds computing plus about 5.26 seconds (5% of the total)
    diddling refcounts.

    The "new" version spends 10 seconds computing and still 5.26 seconds on refcounts, thus 34.5%. Not good. I usually don't see GC use anywhere
    near 34.5% in typical operation of Lisp system.

    I'd like to see actual data instead of made-up numbers in the above, but
    you can see the shape of things.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Tue Jul 7 19:34:03 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:
    I'd like to see actual data instead of made-up numbers in the above,
    but you can see the shape of things.

    Here's some allocator data from a different post on the same blog:

    https://rushter.com/blog/python-object-allocation-statistics/

    Some approaches to Lisp also do tons of allocations (generate lots of
    garbage) but that's usually based on design decisions involving ephmeral
    GC's that quickly dispose of temporary objects.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Jul 8 03:04:09 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 07 Jul 2026 11:52:16 -0400, Stefan Monnier wrote:

    Lawrence DrCOOliveiro [2026-07-06 01:10:30] wrote:

    On Sun, 05 Jul 2026 11:02:49 -0400, Stefan Monnier wrote:

    Lawrence DrCOOliveiro [2026-07-05 01:46:21] wrote:

    It is garbage collection that is more likely to suffer from
    performance issues than reference-counting.

    So you say. I don't have my own numbers to back my claim, and
    AFAIK neither do you. I'm only stating a general consensus among
    practitioners.

    Do your rCLpractitionersrCY include OS kernel developers?

    No, "practitioners" of the art of implementing memory management.

    You donrCOt think thatrCOs a key part of OS kernel development?

    Linux, in particular uses reference-counting heavily to keep track of
    in-kernel objects. And itrCOs well-known as one of the
    highest-performance OSes out there.

    I also mentioned alternative purely-garbage-collected Python
    implementations, that never seemed able to offer any significant
    benefits (performance or otherwise) over regular CPython.

    If you think it has anything to do with their memory management, I
    can't help you, I'm afraid.

    I wonder what else you think it might be to do with, hmmm?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp on Wed Jul 8 19:07:57 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    Alan Bawden <alan@csail.mit.edu> writes:
    For example, PDP-10 MacLisp....

    Thanks for this long and interesting post. I don't have much of a
    response but I can say that I read all of it with appreciation. Today,
    I guess that in such an implementation, CPU instructions are so much
    faster than memory accesses that there's not much slowdown from checking arithmetic results for belonging in the permanently allocated set. Can
    I ask if that was an issue in the Maclisp era?

    I don't know what metering may have been done at the time, but I'm
    pretty sure that the real motivation here is to avoid cluttering up heap
    space with lots of copies of small numbers like zero and one. An 18-bit address space is pretty small. Once you are running a program like
    Macsyma, which would regularly run out of memory, anything you can do
    to reduce the size of the heap is worth a few extra instructions every
    time you cons a fixnum.

    So it is not about the speed of instructions vs. the speed of memory,
    but more about just not having enough address space.
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 08:06:38 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:
    On Tue, 30 Jun 2026 13:47:55 -0700, Paul Rubin wrote:

    Every value in Python is an object.

    Every value in CL is an object, every object belongs to a class. You can't subclass some builtin classes. Functions and classes are classes.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 08:06:39 2026
    From Newsgroup: comp.lang.lisp

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:

    The understanding that native Python code is slow while
    C-extensioned code runs at C-speed (known as the "glue
    language" paradigm) has been a foundational truth about
    Python throughout its history, and I'm a bit surprised that
    where you once worked they only found this out the hard way.


    We knew. We'd just made (I think: it's a long time ago) three mistakes:
    the Java compiler was much better than we assumed, the Java version version
    of the search code was quicker than we assumed, and the Python bottleneck
    ate more of the performance than we assumed.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 09:15:06 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:
    On Mon, 29 Jun 2026 09:47:23 -0000 (UTC), tfb wrote:



    But if the cost is a peak use of several times the actual total size
    of the live objects at any one time, then that shows why
    reference-counting can be a worthwhile option, doesnrCOt it?


    Nobody is claiming reference-counting is not useful in very
    memory-constrained systems. That is, for instance, one of the reasons Interlisp-D used it: Wikipedia thinks a Dandelion could have 1.5MB: I think
    the could have 3.something (we had Dandytigers though, but I think the difference was just hardware floating-point), and the Daybreak could have 3.7MB. These systems supported a fully-fledged graphical environment whose image sizes were much larger than the physical memory of the machine.

    However the memory overhead for a generational copying GC doesn't need to
    be more than the size of the largest generation.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 09:26:46 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:


    Lisp doesnrCOt have operator overloading.


    What a stupid thing to say.

    (a) Most Lisps do not have special-case infix operators at all, but rather everything is syntactically (<op> ...).

    (b) 'Lisp' includes probably thousands of different but related languages.
    At least some of these have operator overloading for the operator in a
    form. Some were pretty much built on it: Oaklisp an example if I remember correctly.

    (c) Common Lisp, which is a somewhat clunky Lisp, does have operator overloading. It does not allow you to overload most operators defined by
    the standard. But like all Lisps it is really about language construction,
    and it is straightforward, for instance, to define a language in CL which
    is in every way like CL except that, say '=' is something which can be overloaded.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 09:47:56 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> wrote:


    It's usually not a problem. It just illustrates that there can be
    different notions of "reachable".

    A thing I realised later: c's reachability depends on the scope rules of
    the language, and in particular in a dynamically-scoped Lisp (which elisp
    was / is still perhaps by default) any binding is reachable anywhere within
    its dynamic scope.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 09:47:57 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:
    On Thu, 02 Jul 2026 13:41:43 -0400, Stefan Monnier wrote:


    So why doesnrCOt the language spec resolve the ambiguity, then?


    Some do. Scheme says that in

    (define (foo n)
    (define x (cons n n))
    (if (<= n 0) x (foo (- n 1))))

    that only one binding of x is ever reachable atvany one time. CL does not
    say this.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 09:57:50 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe <kehoea@parhasard.net> wrote:


    Why, with a modern OS? For the sake of leak-tracking?


    Because LW can build executables: these contain the Lisp image, and you
    often want those images to be as small as possible. Even then, this is not
    a very good reason: who, actually, has to care? But people do care.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 11:34:19 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:
    yeti <yeti@tilde.institute> writes:
    Python with braces. Because Python is awesome, but whitespace is awful.

    "Although some people have initial resistance to the
    ( indentation as block structure | parentheses)
    most come to ( accept | deeply appreciate ) them."

    Peter Norvig, Python vs Lisp comparison (May 2000) https://www.norvig.com/python-lisp.html


    And he's right. I've written lots of Python, and I have a fairly deep
    hatred of the language as a result. But indentation as block structure is entirely a non-issue for me: it's entirely fine. This is not a thing which
    is wrong with Python.

    What I do find amusing us when some bozo turns up and reformats

    (defun foo (...)
    (...
    ...
    (...
    (... ...))))

    As

    (defun foo (...)
    (...
    ...
    (... ...)
    )
    )

    I mean, for

    def foo (...):
    if ...:
    if ...:
    ...

    do they leave two lines which are blank except for suitable numbers of
    leading spaces after the definition?
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 11:41:28 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote:


    Every value in CL is an object, every object belongs to a class. You can't subclass some builtin classes. Functions and classes are classes.


    Sorty: functions and classes are objects which belong to classes (which are objects ...)
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Thu Jul 9 12:04:18 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    (a) Most Lisps do not have special-case infix operators at all, but rather >everything is syntactically (<op> ...).

    Cambridge Notation


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 12:26:19 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?


    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement
    a garbage collector in C. There is a famous counterexample: the Boehm GC.
    It would probably be possible to use that in an OS kernel written in C but
    I expect it would be very hard to retrofit it to an existing kernel. It's
    also (because C) not a copying collector.

    C was a deeply appropriate language to write an OS for the PDP-11. At
    every point since then there's been the choice of continuing to use C and either a port of that OS or an implementation of a compatible OS or of implementing a new, incompatible, OS. For at least 30 years there's really only been one answer to that question. And so, today, by a series of
    perfectly reasonable choices, we've ended up with a vast OS implemented in
    a language which is now deeply inappropriate.

    Sadly we've also ended up with programmers who think the machines they
    program for are giant PDP-11s, and as a result machines which spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 12:31:05 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:

    What on earth makes you spout nonsense like this?

    It's obvious he's a troll at this point. But he's also the kind of troll
    we've seen before on CLL: the circular troll.

    At some point I and others explained to him how copying GCs work. A week
    or so later he started claiming that GCs inherently trawl through dead
    objects. Someone explained that this is false. In a week he'll claim that
    GCs trawl through dead objects. There are other cycles you can see if you
    look at this exchange: he claims x, someone refutes the claim ... he claims
    x, someone refutes the claim ...

    He either doesn't learn, or forgets in a week or so.

    Past experience says that these people *never* give up: they will cycle
    around their mental loops for ever, in a kind of sad DoS attack on everyone else.

    The *only* thing to do is to ignore him: he will not, or can not, learn,
    and he will go on for ever if you let him. If you respond you end up
    trapped in his cycles as well. I don't want to think what the mental state
    of someone doing this must be like, but it can't be good.

    The terror is that, like the previous CLL troll, he will become
    tail-recursive: responding endlessly to his own arguments long after
    everyone else has left, keeping at it for years. If that happens then CLL
    will die, again. Let's hope it doesn't.

    But please everyone: stop responding. Let him 'win', because he can never admit he is wrong and he will endlessly recycle the same refuted claims.

    I am as guilty -- more guilty -- as anyone of responding to him, but it
    needs to stop.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 12:31:06 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?


    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement
    a garbage collector in C. There is a famous counterexample: the Boehm GC.
    It would probably be possible to use that in an OS kernel written in C but
    I expect it would be very hard to retrofit it to an existing kernel. It's
    also (because C) not a copying collector.

    C was a deeply appropriate language to write an OS for the PDP-11. At
    every point since then there's been the choice of continuing to use C and either a port of that OS or an implementation of a compatible OS or of implementing a new, incompatible, OS. For at least 30 years there's really only been one answer to that question. And so, today, by a series of
    perfectly reasonable choices, we've ended up with a vast OS implemented in
    a language which is now deeply inappropriate.

    Sadly we've also ended up with programmers who think the machines they
    program for are giant PDP-11s, and as a result machines which spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Thu Jul 9 13:15:38 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    What I do find amusing us when some bozo turns up and reformats
    (defun foo (...)
    (...
    ...
    (...
    (... ...))))
    As
    (defun foo (...)
    (...
    ...
    (... ...)
    )
    )

    I'd not call a change a "reformat" when a gentleman changes
    the number of parentheses and who knows what else ("...").


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 13:24:22 2026
    From Newsgroup: comp.lang.lisp

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:


    I'd not call a change a "reformat" when a gentleman changes
    the number of parentheses and who knows what else ("...").


    Yeah, I fucked up, but but you get the point.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Thu Jul 9 13:26:31 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    We knew. We'd just made (I think: it's a long time ago) three mistakes:
    the Java compiler was much better than we assumed, the Java version version >of the search code was quicker than we assumed, and the Python bottleneck
    ate more of the performance than we assumed.

    When Java dropped back in '96, Python was actually faster
    a lot of the time. But that vibe only lasted for like two or
    three years. Back then, I was out here teaching Java courses
    and totally ghosting Python.

    Fast forward to the 2010s when I finally started messing with
    Python. By then, the narrative was already set in stone: Python
    is cute, but it's slow. So I had zero clue about that whole
    1996 situation until I literally just looked it up right now.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.lisp on Thu Jul 9 14:01:49 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote:
    Paul Rubin <no.email@nospam.invalid> wrote:
    yeti <yeti@tilde.institute> writes:
    Python with braces. Because Python is awesome, but whitespace is awful.

    "Although some people have initial resistance to the
    ( indentation as block structure | parentheses)
    most come to ( accept | deeply appreciate ) them."

    Peter Norvig, Python vs Lisp comparison (May 2000)
    https://www.norvig.com/python-lisp.html


    And he's right. I've written lots of Python, and I have a fairly deep
    hatred of the language as a result. But indentation as block structure is entirely a non-issue for me: it's entirely fine. This is not a thing which is wrong with Python.

    What I do find amusing us when some bozo turns up and reformats

    (defun foo (...)
    (...
    ...
    (...
    (... ...))))

    As

    (defun foo (...)
    (...
    ...
    (... ...)
    )
    )

    I mean, for

    def foo (...):
    if ...:
    if ...:
    ...

    do they leave two lines which are blank except for suitable numbers of leading spaces after the definition?

    In many cases there is quantitative difference. Consider the following
    simple function:

    NRTreplaceAllLocalReferences(form) ==
    $devaluateList : local := []
    NRTputInLocalReferences(form)

    It gets translated to:

    (DEFUN |NRTreplaceAllLocalReferences| (|form|)
    (PROG (|$devaluateList|)
    (DECLARE (SPECIAL |$devaluateList|))
    (RETURN
    (PROGN (SETQ |$devaluateList| NIL) (|NRTputInLocalReferences| |form|)))))

    Since the second is mechanically generated using output of Lisp printer
    is OK. But hand written version probably would use 5 indentation levels:

    (DEFUN |NRTreplaceAllLocalReferences| (|form|)
    (PROG (|$devaluateList|)
    (DECLARE (SPECIAL |$devaluateList|))
    (RETURN
    (PROGN
    (SETQ |$devaluateList| NIL)
    (|NRTputInLocalReferences| |form|)))))

    That is still managable, but there is some temptation to make structure clearer. And since Lisp version has a lot of parentheses why do not
    take advantage of them to make structure more visible?

    Of course, hand written version almost surely would get rid of
    'RETURN' and following 'PROGN', but in general Lisp tend to need
    a lot of indentation levels and structure may get more complicated.

    Consider:

    (defun c_args_as_string (arguments)
    (cond
    ((null arguments) "")
    (t (let ((res (c_type_as_string (nth 1 (car arguments)))))
    (dolist (el (rest arguments))
    (setf res (concatenate 'string res ", "
    (c_type_as_string (nth 1 el)))))
    res)))
    )

    I do not say it is great code, but I find it easier to handle than
    more traditional Lisp style.

    I am not a big fan of indented syntax, but for me it is in not
    a big trouble. And when using indented syntax I feel less pressure
    to put end markers on syntactic constructs (compared to Lisp or C).
    Part of the reason is that in indented syntax indentation can not
    be misleading, while in Lisp there is always some danger that
    author of the code has indented it in incorrect way. But
    possibly it is just normal human inconsistence.
    --
    Waldek Hebisch
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 14:39:29 2026
    From Newsgroup: comp.lang.lisp

    Waldek Hebisch <antispam@fricas.org> wrote:


    Consider:

    (defun c_args_as_string (arguments)
    (cond
    ((null arguments) "")
    (t (let ((res (c_type_as_string (nth 1 (car arguments)))))
    (dolist (el (rest arguments))
    (setf res (concatenate 'string res ", "
    (c_type_as_string (nth 1 el)))))
    res)))
    )

    I do not say it is great code, but I find it easier to handle than
    more traditional Lisp style.


    OK, that's just weird. Everything is fine and you've got lots of close
    parens at the ends of lines in the standard way, but then something breaks
    and you have the final close paren on its own at the left margin. I can't
    even begin to understand what motivates that.

    But the same question: if you wrote it in Python, would you leave an extra little blank line for that weird closing paren?
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.lisp on Thu Jul 9 14:42:22 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote:
    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:


    Lisp doesnrCOt have operator overloading.


    What a stupid thing to say.

    There are a few releated things and terminology is somewhat mixed.
    I distinguish the following:
    - overloading, that is compile time choice of function to call
    based on types. Possible only in statically typed languages.
    - dynamic dispatch, done at runtime. Happens in dynamically typed
    languages or in OO settings (like Lisp generic functions)
    - ability to redefine functions at runtime.

    From point of view of language user dynamic dispatch and overloading
    at first may look very similar. But there is important difference:
    overloading is static, given call site will always call the same
    function. Dynamic dispatch may call different functions, depending
    on actual runtime types of arguments.

    Ability to redefine functions is really a different thing. It
    may be used in implementation of dynamic dispatch, but alone
    does not change much for overloading and dynamic dispatch:
    between redefinitions system behaves the same as system
    without ability to redefine functions at runtime.
    --
    Waldek Hebisch
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 19:33:52 2026
    From Newsgroup: comp.lang.lisp

    Waldek Hebisch <antispam@fricas.org> wrote:

    There are a few releated things and terminology is somewhat mixed.
    I distinguish the following:

    I think everyone knows what the Python documentation means when it talks
    about 'operator overloading', and nobody cares about whether it's dynamic, static, or smells of elderberries.

    Much more interesting than counting angels is the vast gulfs between
    languages which have a whole slew of special syntax fir infix or other operators, languages which do that but allow you to define new ones in interesting ways, and languages which simply say 'fuck all that, we'll have
    a regular syntax'.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.lisp on Thu Jul 9 21:03:02 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote:
    Waldek Hebisch <antispam@fricas.org> wrote:


    Consider:

    (defun c_args_as_string (arguments)
    (cond
    ((null arguments) "")
    (t (let ((res (c_type_as_string (nth 1 (car arguments)))))
    (dolist (el (rest arguments))
    (setf res (concatenate 'string res ", "
    (c_type_as_string (nth 1 el)))))
    res)))
    )

    I do not say it is great code, but I find it easier to handle than
    more traditional Lisp style.


    OK, that's just weird. Everything is fine and you've got lots of close parens at the ends of lines in the standard way, but then something breaks and you have the final close paren on its own at the left margin. I can't even begin to understand what motivates that.

    If you look at rational factors: I need to see where given piece of
    code ends. In bigger function with multiple blocks inside I would
    put some parentheses in separate lines to signal ends of blocks.
    There is also issue of seeing what is changed. Code frequently
    gets added at end of existing functions. Separate "end"
    parenthesis means that in such case old lines are unchanged and
    only new lines get added. Version with parentheses at end of
    line needs to move closing parentheses from old line to new
    one.

    I trying to be conservative with putting end parentheses on
    separate lines. One, doing this on too many constructs would
    add too many extra lines. Second, putting such parentheses
    in too many places would limit their value, they would be no
    longer good cue. Third, really small pieces of code are
    managable without extra cues, it is bigger pieces when it
    matters. Fourh, I want to limit dissatisfaction of Lispers
    used to traditional style in case they need to work on code
    that I write.

    But the same question: if you wrote it in Python, would you leave an extra little blank line for that weird closing paren?

    First, I write very little Python, but I make a lot of use of
    other compiler using indentation based syntax. In code that I
    write I normally put blank line between functions (that regardless
    of indentation based syntax, I do the same in Lisp and C). I
    experimented with putting 2 blank lines between functions, but
    currently it seems that 1 blank line works better for me. I do
    not put blank lines between blocks. Transition between block is
    a good place to put comment if I need one but I do not put comments
    just to mark end of a block. I may decide that I need such comment
    if a block is really large, but I do not remember writing such
    block.

    BTW: I apply rule "no tabs except when requied by syntax" and
    "no trailing white space".
    --
    Waldek Hebisch
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Jul 9 21:23:15 2026
    From Newsgroup: comp.lang.lisp

    Waldek Hebisch <antispam@fricas.org> wrote:


    If you look at rational factors: I need to see where given piece of
    code ends.

    It ends when the next top-level definition starts at the left margin. Same thing fir Python. How hard can it be? I mean, may be if you're using ed
    to type in your code?

    But I give up: weird-paren cranks may be unique to Lisp but they're still cranks.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.lisp on Thu Jul 9 21:29:33 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote:
    Waldek Hebisch <antispam@fricas.org> wrote:

    There are a few releated things and terminology is somewhat mixed.
    I distinguish the following:

    I think everyone knows what the Python documentation means when it talks about 'operator overloading', and nobody cares about whether it's dynamic, static, or smells of elderberries.

    Some people care. Especially people who (like me) look seriously
    at statically typed languages.

    Much more interesting than counting angels is the vast gulfs between languages which have a whole slew of special syntax fir infix or other operators, languages which do that but allow you to define new ones in interesting ways, and languages which simply say 'fuck all that, we'll have
    a regular syntax'.

    A few of languages I use have nontrivial syntax, but after parsing
    operators are the same as other functions, so the differnce is only
    syntax. One of them allows user defined syntax, in other syntax is
    almost hardcoded (almost because source of the parser is available
    and adding operators is just adding new position to syntax table).

    For me this is not big thing: I do not want to change syntax
    without strong reason and when I have strong reason I am
    willing to spent effort regardless if language makes such
    change easy or not.
    --
    Waldek Hebisch
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 9 23:04:28 2026
    From Newsgroup: comp.lang.lisp

    On 9 Jul 2026 13:26:31 GMT, Stefan Ram wrote:

    When Java dropped back in '96, Python was actually faster a lot of
    the time. But that vibe only lasted for like two or three years.
    Back then, I was out here teaching Java courses and totally ghosting
    Python.

    I remember, back during peak Java hype, Corel announced that they were
    going to rewrite their entire office suite in Java.

    That didnrCOt last long. They soon discovered how terrible the
    performance was, and gave up.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 9 23:08:39 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 9 Jul 2026 14:01:49 -0000 (UTC), Waldek Hebisch wrote:

    I am not a big fan of indented syntax, but for me it is in not a big
    trouble. And when using indented syntax I feel less pressure to put
    end markers on syntactic constructs (compared to Lisp or C). Part of
    the reason is that in indented syntax indentation can not be
    misleading ...

    It is the lack of redundancy that can be misleading, and that can
    occur either way.

    In traditional free-format languages, you have statement bracketing
    symbols to denote program structure. Human programmers usually arrange
    the code with indented layout as well, which the compiler is supposed
    to pay no attention to. But the two ways of saying the same thing help
    to make things clearer to a human reader.

    In an indentation-controlled language, there are no statement
    bracketing symbols. But again, it can be helpful to add comments to
    provide the bracketing hints, even if the compiler pays no attention
    them; the two ways of saying the same thing help to make things
    clearer to a human reader.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Jul 9 23:09:47 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 9 Jul 2026 21:03:02 -0000 (UTC), Waldek Hebisch wrote:

    I trying to be conservative with putting end parentheses on separate
    lines. One, doing this on too many constructs would add too many
    extra lines. Second, putting such parentheses in too many places
    would limit their value, they would be no longer good cue.

    So long as beginning and ending parentheses are at the same
    indentation level, they can still provide a very useful cue.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Jul 10 07:37:51 2026
    From Newsgroup: comp.lang.lisp

    Waldek Hebisch <antispam@fricas.org> wrote:
    tfb <tfb@work.it.out> wrote:

    I think everyone knows what the Python documentation means when it talks
    about 'operator overloading', and nobody cares about whether it's dynamic, >> static, or smells of elderberries.

    Some people care. Especially people who (like me) look seriously
    at statically typed languages.


    There are two groups of people (at least) who use the term 'longwave' or
    'LW'. One group uses it to describe electromagnetic radiation with
    wavelengths in the range 4 to 100 (perhaps 3 to 100) microns. The other
    uses it to describe electromagnetic radiation with wavelengths greater than about 1,000 metres.

    This term has a meaning which depends who is using it and in which context
    it is used.

    Imagine, now, if someone from one of these groups of people turned up in a forum where people from the other group discuss things and said "you can't
    use 'LW' like that: you have to use our definition. You need to use this
    other term instead. You must change all your papers and documents to use
    this other term". What do you think the result would be?

    This person does not understand something important about natural language.
    That is that terms, like 'LW', are part of the *jargon* of a domain of interest, and jargons are domain-dependent: the same term can mean
    different things when used in different domains and this is absolutely
    fine.

    This person also don't understand just how rude it is when someone turns up
    in a group of people who work in some domain and starts telling them that,
    from his (it is always his) vast experience in some other, superior,
    domain, they are all wrong and are using the wrong words and ... I'm a physicist, an old physicist even, so I know all about this phenomenon.

    You are being this person. Please stop.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Fri Jul 10 10:17:33 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    Imagine, now, if someone from one of these groups of people turned up in a >forum where people from the other group discuss things and said "you can't >use 'LW' like that: you have to use our definition.

    Anyone can just make up definitions for words whenever they want.
    But if people actually wanna talk to each other, they gotta get
    on the same page about what the heavy-hitting terms mean.

    In pretty much every language - like C++, C#, Rust, or Kotlin -
    operator overloading is static. Python is the only one doing its
    own thing and keeping it dynamic.

    Anyway, here's how

    ISO/IEC 2382-15
    "Information Technology rCo Vocabulary",
    Second edition / 1998

    defines "to overload":

    15.01.08
    to overload
    To assign more than one meaning to a lexical token.
    Example: The lexical token "+" can mean integer addition, real addition,
    set union, concatenation, etc.

    Honestly, I usually just tell people that trying to talk about
    programming concepts in the abstract is a total headache. It's way
    easier to just pick a specific language so everyone's actually on
    the same page with the vocab. Since we're literally hanging out in
    comp.lang.lisp, we might as well talk Lisp.

    Honestly, I think the term "overloading" just isn't really a
    thing in Lisp circles.

    |This technique of selectively shadowing CL symbols and
    |replacing them with our own implementations gives us
    |something akin to "operator overloading."
    "Common Lisp Recipes" - Edmund Weitz

    |Which one gets invoked ("dispatch") is decided at run-time,
    |in contrast to many other languages with "overloading".
    "An Introduction to the Common Lisp Object System"
    - Gregor Kiczales, Jim des Rivi|?res, and Daniel G. Bobrow?


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Jul 10 03:35:16 2026
    From Newsgroup: comp.lang.lisp

    ram@zedat.fu-berlin.de (Stefan Ram) writes:
    In pretty much every language - like C++, C#, Rust, or Kotlin -
    operator overloading is static. Python is the only one doing its
    own thing and keeping it dynamic.

    Ruby? Smalltalk(?)? For that matter, Common Lisp as someone mentioned.
    You can redefine + as a generic function in CLOS. It looks messy
    though.

    https://github.com/jrm-code-project/generic-arithmetic
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Jul 11 14:55:59 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 9 Jul 2026 12:31:05 -0000 (UTC), tfb <tfb@work.it.out> wrote:

    Paul Rubin <no.email@nospam.invalid> wrote:

    What on earth makes you spout nonsense like this?

    It's obvious he's a troll at this point. But he's also the kind of troll >we've seen before on CLL: the circular troll.

    :

    Past experience says that these people *never* give up: they will cycle >around their mental loops for ever, in a kind of sad DoS attack on everyone >else.

    :

    The terror is that, like the previous CLL troll, he will become >tail-recursive: responding endlessly to his own arguments long after
    everyone else has left, keeping at it for years. If that happens then CLL >will die, again. Let's hope it doesn't.

    But please everyone: stop responding. Let him 'win', because he can never >admit he is wrong and he will endlessly recycle the same refuted claims.

    I am as guilty -- more guilty -- as anyone of responding to him, but it
    needs to stop.


    Even worse ... now he's attempting to start the same argument in
    comp.arch. Though not a regular topic, GC does get discussed there occasionally [mostly from the hardware effects viewpoint].
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Jul 11 16:04:04 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 9 Jul 2026 09:15:06 -0000 (UTC), tfb <tfb@work.it.out> wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:
    On Mon, 29 Jun 2026 09:47:23 -0000 (UTC), tfb wrote:



    But if the cost is a peak use of several times the actual total size
    of the live objects at any one time, then that shows why
    reference-counting can be a worthwhile option, doesnrCOt it?


    Nobody is claiming reference-counting is not useful in very >memory-constrained systems. That is, for instance, one of the reasons >Interlisp-D used it: Wikipedia thinks a Dandelion could have 1.5MB: I think >the could have 3.something (we had Dandytigers though, but I think the >difference was just hardware floating-point), and the Daybreak could have >3.7MB. These systems supported a fully-fledged graphical environment whose >image sizes were much larger than the physical memory of the machine.

    However the memory overhead for a generational copying GC doesn't need to
    be more than the size of the largest generation.

    Not exactly.

    The largest generation typically is the 'long-lived' objects, and
    usually it has zero additional memory overhead because it is handled
    by compaction rather than by copying.
    [Yes, compaction is achieved by copying, but the two approaches are
    considered different by the literature.]


    Allocations made in Lisp family and functional languages often have
    80+% mortality in their birthing generation, and 90+% mortality within
    2 collections.

    OTOH, the same studies have shown that 80% /retention/ may be expected
    for objects which survive past 2 collections [but see above about
    compacting long-lived objects].

    So the birthing space often can be sized expecting, e.g., 250KB or
    less to survive from 1MB of allocation, and there are copier
    implementations that share a single space hi/lo rather than using 2
    separate spaces.

    Obviously there must be a fallback to handle situations where the 'to'
    space is not big enough. Generally, if the 'to' space is exhausted,
    all its objects are promoted en-mass into the next generation and then
    the interrupted collection continues. You just hope that doesn't
    happen very often.


    There is a copier implementation using N+1 spaces all the same size.
    One space is selected as the birthing space, and when it fills, a 'to'
    space is selected (typically round-robin) from among the other spaces.
    If the currently selected 'to' space becomes filled, collection spills
    into another space, and the filled space itself is queued for
    collection.

    This is not 'generational' in the classic sense because objects of
    similar ages may be spread through the address space. But in fact it
    works quite well, and it doesn't require using different approaches to
    handle objects of different ages.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Jul 11 16:06:35 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 9 Jul 2026 12:26:19 -0000 (UTC), tfb <tfb@work.it.out> wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?


    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement
    a garbage collector in C. There is a famous counterexample: the Boehm GC. >It would probably be possible to use that in an OS kernel written in C but
    I expect it would be very hard to retrofit it to an existing kernel. It's >also (because C) not a copying collector.

    C was a deeply appropriate language to write an OS for the PDP-11. At
    every point since then there's been the choice of continuing to use C and >either a port of that OS or an implementation of a compatible OS or of >implementing a new, incompatible, OS. For at least 30 years there's really >only been one answer to that question. And so, today, by a series of >perfectly reasonable choices, we've ended up with a vast OS implemented in
    a language which is now deeply inappropriate.

    Sadly we've also ended up with programmers who think the machines they >program for are giant PDP-11s, and as a result machines which spend a huge >amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    There is, in fact, a copying collector for C++ [not for C]. It is
    conservative in the stack but relies on perfect knowledge of heap
    allocations.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sat Jul 11 15:03:35 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:
    There is, in fact, a copying collector for C++ [not for C]. It is conservative in the stack but relies on perfect knowledge of heap allocations.

    Also just yesterday or so, there was yet another report of a serious use-after-free bug that's been in the Linux kernel for 15 years. Maybe
    we'd be better off if Linux had used GC.

    https://thehackernews.com/2026/07/15-year-old-ghostlock-flaw-enables-root.html --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jul 13 12:12:07 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:
    On Thu, 9 Jul 2026 09:15:06 -0000 (UTC), tfb <tfb@work.it.out> wrote:


    However the memory overhead for a generational copying GC doesn't need to
    be more than the size of the largest generation.

    Not exactly.

    The largest generation typically is the 'long-lived' objects, and
    usually it has zero additional memory overhead because it is handled
    by compaction rather than by copying.
    [Yes, compaction is achieved by copying, but the two approaches are considered different by the literature.]


    Yes, my point really was that it will not be more: the very worst case I
    can think of is a collector which needs to allocate space equal to the size
    of the largest (which as you say is usually the long-lived-object)
    generation to copy it. In practice you can do better almost always.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jul 13 12:12:09 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:
    George Neuner <gneuner2@comcast.net> writes:
    There is, in fact, a copying collector for C++ [not for C]. It is
    conservative in the stack but relies on perfect knowledge of heap
    allocations.

    Also just yesterday or so, there was yet another report of a serious use-after-free bug that's been in the Linux kernel for 15 years. Maybe
    we'd be better off if Linux had used GC.


    That's an important point. A subtext in the 'if x is so good, why doesn't popular thing y use x?' family of questions is that y, being popular, is somehow the best thing possible, when often y, being a thing made by
    humans, is in fact a pile of steaming shit. I am not implying Linux is a
    pile of steaming shit, but many things are.

    'Good' and 'popular' are not synonyms.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Mon Jul 13 14:59:39 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 13 Jul 2026 12:12:07 -0000 (UTC), tfb <tfb@work.it.out> wrote:

    George Neuner <gneuner2@comcast.net> wrote:
    On Thu, 9 Jul 2026 09:15:06 -0000 (UTC), tfb <tfb@work.it.out> wrote:


    However the memory overhead for a generational copying GC doesn't need to >>> be more than the size of the largest generation.

    Not exactly.

    The largest generation typically is the 'long-lived' objects, and
    usually it has zero additional memory overhead because it is handled
    by compaction rather than by copying.
    [Yes, compaction is achieved by copying, but the two approaches are
    considered different by the literature.]


    Yes, my point really was that it will not be more: the very worst case I
    can think of is a collector which needs to allocate space equal to the size >of the largest (which as you say is usually the long-lived-object)
    generation to copy it. In practice you can do better almost always.

    Apologies ... I was reacting the word "overhead", which generally is
    taken to mean "extra" needed.

    In fact, the long-lived object space / last generation typically is
    where overly "large" [for some definition] allocations are made. An
    example might be image buffers.
    [I used to do image processing: at various times I did HRT industrial
    QA/QC, and medical imaging processing CT and MRI, so this is one I
    know well. 8-)]

    I can't imagine what you'd ever allocate that would be the size of the
    whole LL space: e.g., a file normally would be copied in reasonably
    sized chunks, and you'd reuse the buffer(s) rather than dispose of
    them.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Mon Jul 13 15:55:15 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 13 Jul 2026 12:12:09 -0000 (UTC), tfb <tfb@work.it.out> wrote:

    Paul Rubin <no.email@nospam.invalid> wrote:
    George Neuner <gneuner2@comcast.net> writes:
    There is, in fact, a copying collector for C++ [not for C]. It is
    conservative in the stack but relies on perfect knowledge of heap
    allocations.

    Also just yesterday or so, there was yet another report of a serious
    use-after-free bug that's been in the Linux kernel for 15 years. Maybe
    we'd be better off if Linux had used GC.


    That's an important point. A subtext in the 'if x is so good, why doesn't >popular thing y use x?' family of questions is that y, being popular, is >somehow the best thing possible, when often y, being a thing made by
    humans, is in fact a pile of steaming shit. I am not implying Linux is a >pile of steaming shit, but many things are.

    'Good' and 'popular' are not synonyms.

    Certainly there is junk out there, but more often the "popular" choice
    just is something that worked ok for its original purpose, and somehow
    received a lot of attention [and emulation].

    Bringing it back to the conversation: RC happens to work ok for an OS
    kernel because the OS is /not/ spinning complicated webs of objects,
    but rather only dealing with lists, or at worst, simple trees.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Mon Jul 13 20:37:45 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:

    Certainly there is junk out there, but more often the "popular" choice
    just is something that worked ok for its original purpose, and somehow received a lot of attention [and emulation].

    I agree. As I think I've said previously here(*) I think both C and Unix
    were just astonishingly good designs ... for the PDP-11. Not so great (especially C) on today's systems.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 15:53:47 2026
    From Newsgroup: comp.lang.lisp

    --=-=-=
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8bit

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    try using the --version option at the cmd line.

    That can print any number it likes. How do you verify the number if
    prints actually means something?

    by reading the binary or the assembler. but yes a computer program
    may print something inaccurately. this why most people use a
    signature file. I think that just checking the md5 is sufficient.

    Checking against what?

    the damn software you are checking and the author's md5!

    Remember, the issue was determining which version of the source code
    was involved in creating this binary. How does an md5 of source code
    relate in any way to that of the binary?

    lint?

    I think I should end the thread here; the old version will not match
    your current version via md5. this is why most people post an md5 for
    the tarballed software, source code, and the binary. I have been collecting music for a
    while; using shorten or flac seems to be a very good solution.

    steve@tpl:~/src$ gcc -fverbose-asm mkfontmap.c -S mkfontmap.s

    steve@tpl:~/src$ head mkfontmap.s 10
    mkfontmap.s <==
    .file "mkfontmap.c"
    # GNU C23 (GCC) version 16.1.1 20260515 (Red Hat 16.1.1-2) (x86_64-redhat-linux)
    # compiled by GNU C version 16.1.1 20260515 (Red Hat 16.1.1-2), GMP version 6.3.0, MPFR version 4.2.2, MPC version 1.4.1, isl version none
    # GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
    # options passed: -mtune=generic -march=x86-64 -mtls-dialect=gnu2
    .text
    .section .rodata
    .LC0:
    .string "Copyright"
    .LC1:

    Like I said most programs will include this information; you just need
    to read the assembler.

    I will not include a tutorial on disassembling a binary. or Gnu PGP, or
    digital signatures.


    --=-=-=
    Content-Type: text/plain
    Content-Disposition: attachment; filename=mkfontmap.c
    Content-Description: mkfontmap for ghostscript

    /*
    * Rewritten: 2008-01-26 00:52
    * Description: spit out a font map for ghostscript
    *
    * Update: 2008-08-01 22:05:02-05:00
    *
    * Supports open type fonts, truetype fonts, and type 1 binary and ascii.
    *
    */

    #if !defined (_GNU_SOURCE)
    # define _GNU_SOURCE
    #endif

    #include <string.h>
    #include <fcntl.h>
    #include <assert.h>
    #ifndef __GNUC__
    # error Need gnu cc/cpp to compile
    #endif

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <stdarg.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <stddef.h>
    #include <locale.h>

    extern char *program_invocation_short_name;

    #define T1_MAX_BUFFER 8192
    #define streq(x,y) (strcmp((x),(y)) == 0)

    #define Fatal() ({ perror (strerror (errno)); exit (EXIT_FAILURE); })
    #define FatalSysCall(fn) \
    ({ perror (strerror (errno)); exit (EXIT_FAILURE); } )


    void eprintf (const char *fmt, ...)
    __attribute__ ((noreturn, format (printf, 1, 2)));

    /* Truetype name fields */
    enum truetype_fields {
    TTF_COPYRIGHT = 0,
    TTF_FAMILY = 1,
    TTF_STYLE = 2,
    TTF_UNIQUEID = 3,
    TTF_FULLNAME = 4,
    TTF_VERSION = 5,
    TTF_PSNAME = 6,
    TTF_TRADEMARK = 7,
    TTF_FOUNDRY = 8,
    TTF_DESIGNER = 9,
    TTF_DESCRIPTION = 10,
    TTF_VENDOR_URL = 11,
    TTF_DESIGNER_URL = 12,
    TTF_VENDOR_URL_Ex = 13,
    TTF_DESIGNER_URL_Ex = 14,
    TTF_RESERVED = 15,
    TTF_WIN_FAMILY = 16,
    TTF_WIN_SUBFAMILY = 17,
    TTF_MAC_FULLNAME = 18,
    TTF_MAX_FIELD = 18,

    TTF_EXTENDED = 13,
    #define TTF_LICENSE TTF_VENDOR_URL_Ex

    TTF_MAX_NAMEDATA = 9,
    #define TTF_MAX_RECORD TTF_MAX_FIELD
    };

    static const char *
    ttf_field_names [] = {
    /**
    (while (not (eobp)) (forward-line 1) (end-of-line) (while
    (not (eq (preceding-char) ?\ ))
    (forward-char -1)) (capitalize-word 1) (unless (eolp) (forward-char 1) (capitalize-word 1)) (end-of-line))
    **/
    [0] = "Copyright",
    [1] = "Family",
    [2] = "Style",
    [3] = "UniqueID",
    [4] = "Fullname",
    [5] = "Version",
    [6] = "Psname",
    [7] = "Trademark",
    [8] = "Foundry",
    [9] = "Designer",
    [10] = "Description",
    [11] = "Vendor URL",
    [12] = "Designer URL",
    [13] = "Vendor URL Ex",
    [14] = "Designer URL Ex",
    [15] = "Reserved",
    [16] = "Win Family",
    [17] = "Win Subfamily",
    [18] = "Mac Fullname",
    [19] = "Max_Field",
    [20] = (char *)0,
    };


    /* Truetype name table records */

    typedef struct ttf_name_record {
    int platform_id;
    int encoding_id;
    int name_id;
    int offset;
    int length;
    int language_id;
    int ttfversion;
    } ttf_name_record;

    #define IsEnglish(language_id) (((language_id) & 0xFF) == 0x09)

    const char *
    program_name (void)
    {
    return program_invocation_short_name;
    }

    void
    eprintf (const char *template, ...)
    {
    va_list ap;
    typeof (errno) errno_saved = errno;
    va_start (ap, template);
    vfprintf (stderr, template, ap);
    va_end (ap);
    fprintf (stderr, ": %s\n", strerror (errno_saved));
    exit (1);
    }

    static void *
    xmalloc (size_t size)
    {
    void *ptr = malloc (size);
    if (ptr)
    {
    memset (ptr, 0, size);
    return ptr;
    }
    abort ();
    }

    static inline int
    maxint (int a, int b) { return ((a > b) ? a : b); }

    static inline int
    minint (int a, int b) { return ((a < b) ? a : b); }

    static off_t
    filelength (int fd)
    {
    off_t pos, end;
    pos = lseek (fd, 0, SEEK_CUR);
    end = lseek (fd, 0, SEEK_END);
    if (lseek (fd, pos, SEEK_SET) == pos)
    return end;
    FatalSysCall ("lseek");
    }

    static ssize_t
    readn (int fd, void *vptr, size_t n)
    {
    size_t nleft;
    ssize_t nread;
    char *ptr;

    ptr = vptr;
    nread = read (fd, ptr, n);
    nleft = n - nread;
    if (nleft == 0)
    return nread;
    else if (nread < 0)
    return nread;

    while (nleft > 0) {
    if ((nread = read (fd, ptr, nleft)) < 0) {
    if (errno == EINTR)
    nread = 0;
    else
    return -1;
    } else if (nread == 0)
    break;
    nleft -= nread;
    ptr += nread;
    }
    return (n - nleft);
    }

    static ssize_t
    read_nbytes (int fd, void *vptr, size_t n)
    {
    ssize_t nread;
    nread = readn (fd, vptr, n);
    if (nread < 0)
    FatalSysCall(read);
    return nread;
    }

    static u_int32_t
    ttf_read_long (FILE *fp)
    {
    u_int32_t x;
    unsigned char vec [4];
    fread (vec, sizeof (unsigned char), 4, fp);
    x = vec [0] << 24;
    x |= vec [1] << 16;
    x |= vec [2] << 8;
    x |= vec [3];
    return x;
    }

    static u_int16_t
    ttf_read_short (FILE *fp)
    {
    u_int16_t byte;
    unsigned char vec [] = { 0, 0 } ;
    fread (vec, sizeof (unsigned char), 2, fp);
    byte = (vec [0] << 8 | vec [1]);
    return byte;
    }

    static void
    ttf_read_record (int vec [], FILE *fp)
    {
    unsigned char tem [12];
    memset (tem, 0, sizeof (tem [0]));
    fread (tem, sizeof (unsigned char), 12, fp);
    vec [0] = (tem [0] << 8 | tem [1]);
    vec [1] = (tem [2] << 8 | tem [3]);
    vec [2] = (tem [4] << 8 | tem [5]);
    vec [3] = (tem [6] << 8 | tem [7]);
    vec [4] = (tem [8] << 8 | tem [9]);
    vec [5] = (tem [10] << 8 | tem [11]);
    }

    inline static int
    ttf_valid_record_p (const ttf_name_record *rec, int file_length)
    {
    return ((rec->offset > -1)
    && ((rec->offset - rec->length) <= file_length));
    }

    static int
    ttf_extract_table_offset (FILE *fp, char *name, int table_count)
    {
    char vec [16]; /* Each directory entry is 16 bytes */
    int table_offset = 0;
    fseek (fp, 12, SEEK_SET); /* Start of directory table */
    while ((fread (vec, 1, 16, fp)) > 0 && table_count -- >= 0)
    if (! strncasecmp (vec, name, 4)) {
    fseek (fp, -8, SEEK_CUR);
    table_offset = ttf_read_long (fp);
    (void) ttf_read_long (fp); /* table size */
    break;
    }
    return table_offset;
    }

    static int
    ttf_read_name (FILE *fp, const ttf_name_record *rec, int bufsize, char *name)
    {
    int size;
    char *buffer;
    if (bufsize <= 0)
    return 0;
    size = minint (rec->length, bufsize);
    buffer = (char *) alloca (size);
    fseek (fp, rec->offset, SEEK_SET);
    fread (buffer, sizeof (buffer [0]), size, fp);

    if (buffer [0] == '\0'
    && size > 3 && buffer [2] == '\0') {
    /* Probably a unicode string */
    int i;
    for (i = 1; i < size; i += 2)
    *name++ = buffer [i];
    *name = '\0';
    } else {
    memcpy (name, buffer, size);
    name [size] = '\0';
    }
    return (rec->length > bufsize);
    }

    static int
    ttf_extract_name_offsets (FILE *fp,
    int maxfield,
    int fields [],
    ttf_name_record *recs)
    {
    int storage_offset, table_offset, record_count, table_count, found, idx;
    int32_t version;

    /* First four bytes is the true type version number */
    // fseek (fp, 4, SEEK_SET);
    version = ttf_read_long (fp);
    table_count = ttf_read_short (fp);

    if (ferror (fp)) /* possibly hit end of stream */
    return -1;

    table_offset = ttf_extract_table_offset (fp, "name", table_count);
    if (table_offset < 1)
    return -1;

    /* Skip format selector, always zero */
    if (fseek (fp, table_offset + 2, SEEK_SET))
    return -1;

    record_count = ttf_read_short (fp);
    storage_offset = ttf_read_short (fp) + table_offset;

    for (idx = found = 0; idx < record_count; idx++) {
    int vec [6];
    int name_id, fidx;
    ttf_read_record (vec, fp);
    name_id = vec [3];
    for (fidx = 0; fidx < maxfield; fidx++) {
    if (fields [fidx] == name_id) {
    recs [fidx].platform_id = vec [0];
    recs [fidx].encoding_id = vec [1];
    recs [fidx].language_id = vec [2];
    recs [fidx].name_id = vec [3];
    recs [fidx].length = vec [4];
    recs [fidx].offset = vec [5] + storage_offset;
    if (IsEnglish (recs [fidx].language_id)
    || (recs [fidx].platform_id == 0
    && recs [fidx].encoding_id != 0)) {
    fields [fidx] = -1;
    found++;
    if (found >= maxfield)
    break;
    }
    }
    }
    }
    return found;
    }

    static int
    ttf_extract_field (const char *file, int field,
    char *result, int result_size)
    {
    FILE *fp;
    ttf_name_record recs [1];
    int fields [1];
    int record_found_p;

    if ((fp = fopen (file, "rb")) == NULL)
    return 0;
    memset (&recs [0], 0, sizeof (ttf_name_record));
    fields [0] = field;
    record_found_p = ttf_extract_name_offsets (fp, 1, fields, &recs[0]);
    if (record_found_p < 1) {
    fclose (fp);
    return 0;
    }
    if ((result_size > 0) && (result != NULL)) {
    memset (result, 0, result_size);
    ttf_read_name (fp, &recs [0], result_size, result);
    }
    fclose (fp);
    return recs [0].length;
    }

    static int
    t1_extract_slash_name (const char *string, size_t string_size,
    const char *buffer, size_t buffer_size,
    char *result, int result_size)
    {
    ptrdiff_t namesize; int tem_size;
    const char *ptr, *start, *end;
    ptr = (const char *) memmem (buffer, buffer_size, string, string_size);
    if (ptr == NULL)
    return 0;

    for (start = ptr+string_size+1; start < buffer+buffer_size; start++) {
    if (! isspace (*start))
    break;
    }
    if (start >= buffer+buffer_size)
    return 0;
    if (*start != '/')
    return 0;
    start++; /* move past slash */
    tem_size = buffer_size - (start - buffer);
    assert (tem_size > 0);
    end = memchr (start, ' ', tem_size);
    if (end == NULL) {
    end = memchr (start, '\n', tem_size);
    if (end == NULL)
    end = memchr (start, '\r', tem_size);
    }
    if (end == NULL)
    return 0;

    namesize = end - start;
    assert (namesize > 0);
    if (namesize < result_size) {
    strncpy (result, start, namesize);
    result [namesize] = 0;
    }
    return namesize;
    }


    static int
    t1_dictionary_size (int fd)
    {
    int dict_size, nread;
    char buffer [8];
    nread = read_nbytes (fd, buffer, 8);

    /* Find the size of the font dictionary */
    if (buffer [0] == (char)128) { /* Binary type1 font */
    if (buffer [1] == (char)1) { /* ASCII section */
    dict_size = (int32_t) (buffer [2] & 0xFF);
    dict_size |= (int32_t) (buffer [3] & 0xFF) << 8;
    dict_size |= (int32_t) (buffer [4] & 0xFF) << 16;
    dict_size |= (int32_t) (buffer [5] & 0xFF) << 24;
    return (dict_size);
    }
    } /* else: font is probably unix ascii format */
    return 0;
    }

    static int
    t1_extract_name (const char *file, char *result, int result_size)
    {
    char *buffer;
    int bufsize, fd, nread;
    fd = open (file, O_RDONLY);
    if (fd < 0) return -1;
    bufsize = t1_dictionary_size (fd);
    if (bufsize < 1) bufsize = T1_MAX_BUFFER;
    buffer = (char *) alloca (bufsize+1);
    nread = read_nbytes (fd, buffer, bufsize);
    close (fd);
    if (nread < 1) return 0;
    buffer [nread] = 0;
    return t1_extract_slash_name
    ("/FontName", 9, buffer, nread, result, result_size);
    }

    static void
    print_gs_entry (const char *filename, const char *fontname)
    {
    if (fontname) {
    int name_len = strlen (fontname);
    int spaces = 32 - name_len;
    if (memchr (fontname, ' ', name_len) != NULL) {
    spaces--;
    putchar ('(');
    fputs (fontname, stdout);
    putchar (')');
    } else {
    putchar ('/');
    fputs (fontname, stdout);
    }
    do
    putchar (' ');
    while (--spaces > 0);
    putchar ('(');
    fputs (filename, stdout);
    puts (");");
    }
    }

    static void
    usage (void) {
    fprintf (stderr, "Usage: %s [-g] [FONTFILE(s)]\n\n\t"
    "Creates a Fontmap entry suitable for "
    "use with ghostscript. FONTFILE\n\tmay be a ttf,otc,ttc font "
    "or a type1 binary or ascii (.pfb or .pfa) file.\n\t"
    "If -g is not supplied print font data for FONTFILE to stdout.\n\n"
    , program_invocation_short_name);
    }


    /****
    typedef struct list {
    unsigned int count;
    char *filename;
    char *fontname;
    struct list *next;
    } List;

    List *
    push_file (const char *filename)
    {
    List *new;
    new = (List *)xmalloc (sizeof (List));
    new->filename = strdup (filename);
    new->fontname = 0;
    }
    ***/

    static int
    ttf_file_p ( char *file)
    {
    char *ptr;
    ptr = strrchr (file, '.');
    if (ptr && *ptr == '.')
    {
    if ((strcasecmp (ptr, ".ttf") == 0) ||
    (strcasecmp (ptr, ".ttc") == 0) ||
    (strcasecmp (ptr, ".otf") == 0))
    return 1;
    }
    return 0;
    }

    static int
    type1_font_p ( char *file)
    {
    char *ptr;
    ptr = strrchr (file, '.');
    if (ptr && *ptr == '.')
    {
    if ((strcasecmp (ptr, ".pfb") == 0) ||
    strcasecmp (ptr, ".pfa") == 0)
    return 1;
    }
    else
    {
    int fd;
    fd = open (file, O_RDONLY | O_NOATIME);
    if (fd > 0)
    {
    unsigned char x;
    read (fd, &x, 1);
    close (fd);
    if (x == 128)
    return 1;
    }
    }
    return 0;
    }

    int
    main (int argc, char **argv)
    {
    char buffer [4096];
    unsigned int i = 1;
    int ghostscript_flag = 0;
    int ttf_max_field_len = 0;
    if (argc < 1) {
    usage ();
    exit (EXIT_SUCCESS);
    }
    if (argc == 1) {
    usage ();
    exit (1);
    }
    if (argc > 1)
    {
    if (strcmp (argv[1], "-g") == 0)
    ghostscript_flag = 1;
    }

    {
    int x = 0, len;
    for (x = 0; x < TTF_MAX_FIELD; x++) {
    len = strlen (ttf_field_names[x]);
    if (len > ttf_max_field_len) {
    ttf_max_field_len = len;
    }
    }
    }
    setlocale (LC_ALL, "C"); /* for isspace etc. */
    if (ghostscript_flag)
    i = 1;
    else {
    i = 0;
    }
    for (; i < argc; i++)
    {
    if (ttf_file_p (argv[i]))
    {
    if (ghostscript_flag)
    {
    ttf_extract_field (argv [i], TTF_PSNAME,
    buffer, sizeof (buffer));
    print_gs_entry (argv[i], buffer);
    }
    else
    {
    int x;
    for (x = 0; x < TTF_MAX_FIELD; x++)
    {
    bzero (buffer, sizeof (buffer));
    ttf_extract_field (argv [1], x, buffer, sizeof (buffer));
    printf ("\e[08;36m%*s:\e[0m %s\n",
    ttf_max_field_len, ttf_field_names[x], buffer);
    }
    }
    }
    else if (type1_font_p (argv[i]))
    {
    t1_extract_name (argv [i], buffer, sizeof (buffer));
    if (ghostscript_flag)
    print_gs_entry (argv[i], buffer);
    else
    printf ("%s\n", buffer);
    }
    else if (strcmp (argv[i], "-g") == 0)
    {
    fprintf (stderr, "Formatting ghostscript output.\n");
    ghostscript_flag = 1;
    }
    else
    {
    fprintf (stderr, "Unknown font type: %s\n", argv [i]);
    }
    }
    return (0);
    }

    --=-=-=--
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 15:55:43 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 10:44:15 -0000 (UTC), tfb wrote:

    Obviously this is just the same as using eq for numbers being a bad
    idea in CL ...

    Luckily, thatrCOs not a problem in Python, because it allows custom
    overloads for standard operators like rCL==rCY, which can do the right
    thing in a type-specific fashion.

    seriously; operating overloading? is there a performance issue? No of
    course not, it is done at runtime...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 16:08:10 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 07:33:05 -0000 (UTC), tfb wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    If a GC is not finding long-dead objects to reclaim, then what
    exactly is it doing? IsnrCOt that exactly what the rCLgarbagerCY is, that >>> it is supposed to rCLcollectrCY?

    Like I said: you do not understand, at all, how a copying GC works.

    ThatrCOs what we call a rCLpassive-aggressiverCY response: trying to imply IrCOm wrong, but not specifically enough so that I can call you up on it.

    Where did you study psychology; I mean social worker class.

    from google

    Passive-aggressive behavior is the indirect expression of hostile or
    negative feelingsrCosuch as anger, annoyance, or resentment. Instead of
    talking openly about a problem, a person shows their frustration through actions like the silent treatment, sarcasm, or uncooperativity.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 16:15:25 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?


    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement
    a garbage collector in C. There is a famous counterexample: the Boehm GC. It would probably be possible to use that in an OS kernel written in C but
    I expect it would be very hard to retrofit it to an existing kernel. It's also (because C) not a copying collector.

    thank god for vfork. The use of ``C++ for the linux kernel'' is really a very old
    topic of discussion, please leave it alone.

    C was a deeply appropriate language to write an OS for the PDP-11. At
    every point since then there's been the choice of continuing to use C and either a port of that OS or an implementation of a compatible OS or of implementing a new, incompatible, OS. For at least 30 years there's really only been one answer to that question. And so, today, by a series of perfectly reasonable choices, we've ended up with a vast OS implemented in
    a language which is now deeply inappropriate.

    Sadly we've also ended up with programmers who think the machines they program for are giant PDP-11s, and as a result machines which spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    you are an insult.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 16:18:01 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    George Neuner <gneuner2@comcast.net> wrote:

    Certainly there is junk out there, but more often the "popular" choice
    just is something that worked ok for its original purpose, and somehow
    received a lot of attention [and emulation].

    I agree. As I think I've said previously here(*) I think both C and Unix were just astonishingly good designs ... for the PDP-11. Not so great (especially C) on today's systems.

    Let me guess, you can squeeze more scheme into the cput if it were
    buffer and had more silicon. people usually use what works. You do not
    like C because it is not python. get over it.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 16:21:08 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?


    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement
    a garbage collector in C. There is a famous counterexample: the Boehm GC. It would probably be possible to use that in an OS kernel written in C but
    I expect it would be very hard to retrofit it to an existing kernel. It's also (because C) not a copying collector.


    Introduction to GC:

    The GC package contains the Boehm-Demers-Weiser conservative garbage
    collector, which can be used as a garbage collecting replacement for the
    C malloc function or C++ new operator. It allows you to allocate memory basically as you normally would, without explicitly deallocating memory
    that is no longer useful. The collector automatically recycles memory
    when it determines that it can no longer be otherwise accessed. The
    collector is also used by a number of programming language
    implementations that either use C as intermediate code, want to
    facilitate easier interoperation with C libraries, or just prefer the
    simple collector interface. Alternatively, the garbage collector may be
    used as a leak detector for C or C++ programs, though that is not its
    primary goal.

    this is what guile uses and GCC can use.

    C was a deeply appropriate language to write an OS for the PDP-11. At
    every point since then there's been the choice of continuing to use C and either a port of that OS or an implementation of a compatible OS or of implementing a new, incompatible, OS. For at least 30 years there's really only been one answer to that question. And so, today, by a series of perfectly reasonable choices, we've ended up with a vast OS implemented in
    a language which is now deeply inappropriate.

    let me guess assembler is not your programming language of choice.
    henceforth C.

    Sadly we've also ended up with programmers who think the machines they program for are giant PDP-11s, and as a result machines which spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 16:26:56 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    If garbage collection is so good, why donrCOt OS kernels use it?

    You are probably using a shitty OS. I remeber that Linux kernel demands 10%
    of free user space (physical) and it get pissed off without a swap file.
    No `real` operating system on earth does not use reclamation. unless you
    are using MS-DOS.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 16:31:22 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> writes:

    Similarly, I don't think the JVM for desktop java has ever been lauded
    for being very performant and lean on resource usage.


    this is like DPS (display Postscript) it worked wonderfully on X11 as openwindows. I think the scrollbar was excellent. postscript is a
    complicated language in my mind, especially when compared to C.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Wed Jul 29 17:32:44 2026
    From Newsgroup: comp.lang.lisp

    ram@zedat.fu-berlin.de (Stefan Ram) writes:

    tfb <tfb@work.it.out> wrote or quoted:
    Imagine, now, if someone from one of these groups of people turned up in a >>forum where people from the other group discuss things and said "you can't >>use 'LW' like that: you have to use our definition.

    Anyone can just make up definitions for words whenever they want.
    But if people actually wanna talk to each other, they gotta get
    on the same page about what the heavy-hitting terms mean.

    [ ... ]

    https://datatracker.ietf.org/doc/html/rfc2119


    In pretty much every language - like C++, C#, Rust, or Kotlin -
    operator overloading is static. Python is the only one doing its
    own thing and keeping it dynamic.

    not really. in garnet (a non-CLOS object system) all action menssages
    are dynamic, allowing the objects to be where they are.

    Anyway, here's how

    ISO/IEC 2382-15
    "Information Technology rCo Vocabulary",
    Second edition / 1998


    I am sure python the programming languages is much better suited for
    people's needs. you must remeber programmers are very stubborn; it does
    not help to hear that their work of 20 years is wrong.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Jul 29 22:06:32 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> wrote:

    Let me guess, you can squeeze more scheme into the cput if it were
    buffer and had more silicon. people usually use what works. You do not
    like C because it is not python. get over it.


    You think I like Python? Can you read? OK, rhetorical question, sorry:
    you can't,
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Jul 29 23:46:26 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 29 Jul 2026 15:55:43 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 10:44:15 -0000 (UTC), tfb wrote:

    Obviously this is just the same as using eq for numbers being a
    bad idea in CL ...

    Luckily, thatrCOs not a problem in Python, because it allows custom
    overloads for standard operators like rCL==rCY, which can do the right
    thing in a type-specific fashion.

    seriously; operating overloading?

    Yeah. In a language which has bona-fide rCLoperatingsrCY, too.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Jul 29 23:48:46 2026
    From Newsgroup: comp.lang.lisp

    On 10 Jul 2026 10:17:33 GMT, Stefan Ram wrote:

    |Which one gets invoked ("dispatch") is decided at run-time,
    |in contrast to many other languages with "overloading".
    "An Introduction to the Common Lisp Object System"
    - Gregor Kiczales, Jim des Rivi|?res, and Daniel G. Bobrow?

    Maybe that doesnrCOt mean what you think it means. Remember, theyrCOre
    using rCLdispatchrCY specifically for a language without infix operators. Smalltalk was doing dynamic operator overloading before Common Lisp
    was even thought of.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Jul 29 23:50:47 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 29 Jul 2026 16:26:56 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    If garbage collection is so good, why donrCOt OS kernels use it?

    You are probably using a shitty OS.

    So where is there a rCLnon-shitty OSrCY that uses garbage collection in
    its kernel? Does the one *you* use have garbage collection in its
    kernel?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Jul 29 23:52:45 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 29 Jul 2026 16:31:22 -0400, steve g wrote:

    postscript is a complicated language in my mind, especially when
    compared to C.

    PostScript is a language that can make Lisp look complicated. It
    offers homoiconicity, like Lisp does, but with less syntax: so much
    less that it doesnrCOt even need macros or rCLspecial formsrCY, or much of a compile-time mechanism at all.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Jul 29 23:53:51 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 29 Jul 2026 16:08:10 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 07:33:05 -0000 (UTC), tfb wrote:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    If a GC is not finding long-dead objects to reclaim, then what
    exactly is it doing? IsnrCOt that exactly what the rCLgarbagerCY is,
    that it is supposed to rCLcollectrCY?

    Like I said: you do not understand, at all, how a copying GC works.

    ThatrCOs what we call a rCLpassive-aggressiverCY response: trying to
    imply IrCOm wrong, but not specifically enough so that I can call you
    up on it.

    Where did you study psychology; I mean social worker class.

    Specific substantive response still lacking.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Fri Jul 31 07:17:43 2026
    From Newsgroup: comp.lang.lisp

    On 30/07/2026 4:21 AM, steve g wrote:
    tfb <tfb@work.it.out> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?

    I think you are mistaken about OS kernels. They do garbage collection.
    Just not in the way you think about it. It's for instance how killing processes in Linux "cleans up" memory. I disagree with this design
    choice, and do not use Linux when I can avoid it.



    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement >> a garbage collector in C. There is a famous counterexample: the Boehm GC. >> It would probably be possible to use that in an OS kernel written in C but >> I expect it would be very hard to retrofit it to an existing kernel. It's >> also (because C) not a copying collector.


    Introduction to GC:

    The GC package contains the Boehm-Demers-Weiser conservative garbage collector, which can be used as a garbage collecting replacement for the
    C malloc function or C++ new operator. It allows you to allocate memory basically as you normally would, without explicitly deallocating memory
    that is no longer useful. The collector automatically recycles memory
    when it determines that it can no longer be otherwise accessed. The
    collector is also used by a number of programming language
    implementations that either use C as intermediate code, want to
    facilitate easier interoperation with C libraries, or just prefer the
    simple collector interface. Alternatively, the garbage collector may be
    used as a leak detector for C or C++ programs, though that is not its
    primary goal.

    this is what guile uses and GCC can use.

    And I guess you're ignorant of the Ravenbrook /Memory Pool System/, or
    you'd have mentioned it already.

    https://github.com/Ravenbrook/mps

    I have it on stand by for a future project. I'll see if it's easier to
    use that, than to write my own. Cross posted to comp.lang.c to irritate
    the annoying regulars there.


    C was a deeply appropriate language to write an OS for the PDP-11. At
    every point since then there's been the choice of continuing to use C and
    either a port of that OS or an implementation of a compatible OS or of
    implementing a new, incompatible, OS. For at least 30 years there's really >> only been one answer to that question. And so, today, by a series of
    perfectly reasonable choices, we've ended up with a vast OS implemented in >> a language which is now deeply inappropriate.

    let me guess assembler is not your programming language of choice.
    henceforth C.

    I do a bit of assembly now and then. Which one is your favorite?


    Sadly we've also ended up with programmers who think the machines they
    program for are giant PDP-11s, and as a result machines which spend a huge >> amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Thu Jul 30 21:05:43 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 29 Jul 2026 16:15:25 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:

    tfb <tfb@work.it.out> writes:

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    Have they come up with any excuses as to why OS kernels donrCOt use
    garbage collection?

    Here is why: they're written either in C or in languages which must be
    memory & call compatible with C. It is essentially impossible to implement >> a garbage collector in C.

    Of course you meant "for C." Many collectors are/were written "in C."

    ... There is a famous counterexample: the Boehm GC.
    It would probably be possible to use that in an OS kernel written in C but >> I expect it would be very hard to retrofit it to an existing kernel. It's >> also (because C) not a copying collector.

    Bartlett, Detlefs, and Yip all have created /copying/ (ie. moving)
    collectors for C++.
    [Sorry don't have URLs handy - my sources are dead trees.]


    C++ new() specifies the type of object to be allocated whereas C
    malloc() specifies only a size in bytes. A collector based upon new()
    can have perfect knowledge of objects in the heap [and their layouts].

    The details differ, but basically they can move heap objects pointed
    to only by globals or other heap objects, but can't move objects that
    appear to be pointed to by registers, correctly aligned stack resident
    datums, or by union members. Such objects are considered to be
    "pinned" in place for the current GC cycle - perhaps in the next cycle
    they will be movable again.

    So the collector's "new" space is logical and includes pinned objects
    as well ones that have been relocated.


    ----
    BTW: Detlefs and Ellis submitted a standard's proposal for GC to be
    officially supported by C++. The proposal is not for any particular
    collector, but rather calls for changes to code generators that would
    make a collector's job easier.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Thu Jul 30 21:37:16 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 29 Jul 2026 23:48:46 -0000 (UTC), Lawrence D-|Oliveiro
    <ldo@nz.invalid> wrote:

    On 10 Jul 2026 10:17:33 GMT, Stefan Ram wrote:

    |Which one gets invoked ("dispatch") is decided at run-time,
    |in contrast to many other languages with "overloading".
    "An Introduction to the Common Lisp Object System"
    - Gregor Kiczales, Jim des Rivi|?res, and Daniel G. Bobrow?

    Maybe that doesnrCOt mean what you think it means. Remember, theyrCOre
    using rCLdispatchrCY specifically for a language without infix operators. >Smalltalk was doing dynamic operator overloading before Common Lisp
    was even thought of.

    Maybe you missed the word "many" in the quote.

    You are quite correct that Smalltalk preceded and even somewhat
    influenced Common Lisp ... but your comparison of them is not valid.

    Smalltalk methods dispatch on the runtime type of the object, but the
    types of the arguments are not considered. If an argument is used
    incorrectly you get an error. If a given method wants to handle an
    argument that may be any of multiple types, it has to manually test
    for them.

    Common Lisp multimethods (aka generic functions) are not attached to
    any object and dispatch considers the runtime types of all arguments.
    You handle different types of arguments by writing different overload
    functions - which do not have to test argument types because dispatch
    has already done it.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Jul 31 08:01:26 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:

    Of course you meant "for C." Many collectors are/were written "in C."

    Yes, and specifically 'for large existing C programs which you are not
    willing to completely reengineer'. At any point since it started running
    on machines where a GC would be a practical proposition[*], the Unix kernel
    was such a program.

    There is more, I think: the Sapir-Whorf hypothesis is at least partly true
    for programming languages: the language determines what its programmers can (easily) think. You obviously could write GC-friendly C programs, but C programmers exposed to large existing C programs probably would find them
    so alien they probably wouldn't actually write them. You really need a new language (which, in turn, would influence how people think, but in
    different ways).

    And let's leave out compatibility questions: 'you mean to port my device
    driver I have to ...?'

    All of this means that, once you've got large C programs and a culture
    around them you can't just drop in GC.

    [*] Yes, I do not claim GC is suitable for all machines. I've written
    programs for the 1802.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp,comp.lang.c on Fri Jul 31 12:21:51 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which
    spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent
    fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Sat Aug 1 01:48:56 2026
    From Newsgroup: comp.lang.lisp

    On 31/07/2026 11:21 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which
    spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent
    fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.

    The fun is in writing atypical applications, and then finding yourself
    looking at the disassembly in SBCL.

    Personally, I love writing in C, even though it's more verbose.

    That said, and to be mildly on-topic in comp.lang.lisp, have

    * /The Common Lisp Condition System/, and

    * /Programming Algorithms in Lisp/

    been mentioned before as resources for learning common lisp?

    These two books look lovely in my programming shelf, next to

    * /Common Lisp Recipes/, and

    * /Practical Common Lisp/,

    which must have been mentioned. They're interspersed with

    * /Low Level Programming/,

    * /String Algorithms in C/, and

    * /The Joys of Hashing/,

    which come in handy when you want to implement your own Common
    Lisp system.


    Enjoy!
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp,comp.lang.c,comp.lang.python on Fri Jul 31 22:46:45 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 31 Jul 2026 12:21:51 -0300, Anton Antimo wrote:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct.

    What a dumb idea. Common Lisp is full of legacy baggage to cater to
    proprietary pre-POSIX OSes which are now extinct.

    Python can offer basic facilities like these in its standard library: <https://docs.python.org/3/library/subprocess.html> <https://docs.python.org/3/library/select.html>; where are the Common
    Lisp equivalents?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c,comp.lang.asm on Sat Aug 1 07:38:32 2026
    From Newsgroup: comp.lang.lisp

    On 01/08/2026 6:46 AM, Lawrence DrCOOliveiro wrote:
    On Fri, 31 Jul 2026 12:21:51 -0300, Anton Antimo wrote:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct.

    What a dumb idea. Common Lisp is full of legacy baggage to cater to proprietary pre-POSIX OSes which are now extinct.

    As always, you start off by mouthing your own ignorance.

    * OpenVMS is both sold and ported to the x86. https://vmssoftware.com/

    * OS/2 is being sold and supported, under a new brand name.
    https://www.arcanoae.com/

    * MenuetOS is written in assembly language, so I replaced
    comp.lang.python with comp.lang.asm. https://www.menuetos.net/


    Python can offer basic facilities like these in its standard library: <https://docs.python.org/3/library/subprocess.html> <https://docs.python.org/3/library/select.html>; where are the Common
    Lisp equivalents?

    You mean this? https://www.sbcl.org/manual/#running-external-programs
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Fri Jul 31 23:52:27 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Wed, 29 Jul 2026 16:26:56 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    If garbage collection is so good, why donrCOt OS kernels use it?

    You are probably using a shitty OS.

    So where is there a rCLnon-shitty OSrCY that uses garbage collection in
    its kernel? Does the one *you* use have garbage collection in its
    kernel?

    It depends on how the kernel is compiled. be it BSD or linux; I can no
    longer compile windows without a credit card. So the options are shit...
    OS/2? I liked PC-DOS.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp,comp.lang.c on Fri Jul 31 23:59:43 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which
    spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent
    fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.


    Wait until you read LISP:Lisp In Small Pieces. it's published in france.



    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Aug 1 05:24:05 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 31 Jul 2026 23:52:27 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Wed, 29 Jul 2026 16:26:56 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    If garbage collection is so good, why donrCOt OS kernels use it?

    You are probably using a shitty OS.

    So where is there a rCLnon-shitty OSrCY that uses garbage collection in
    its kernel? Does the one *you* use have garbage collection in its
    kernel?

    It depends on how the kernel is compiled.

    What a load of nonsense. There is no OS kernel you have access to,
    that uses garbage collection for internal memory management. Just
    admit it instead of trying to bullshit.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Sat Aug 1 16:12:36 2026
    From Newsgroup: comp.lang.lisp

    On 01/08/2026 11:59 AM, steve g wrote:
    Anton Antimo <anton@safunu.org> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which
    spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent
    fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.


    Wait until you read LISP:Lisp In Small Pieces. it's published in france.




    I read the French edition. /Principes d'Implantation de Scheme et
    Lisp/, and it's now available as ebook on Amazon. I recommend it,
    it's a really fun book. I believe it's the /second edition/, and
    may have a little bit different content than the English one, which
    I haven't read.

    Do you read French?
    --
    Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
    I'm not from the Internet, I just work there. | via Easynews.com
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp,comp.lang.c,comp.lang.python on Sat Aug 1 09:08:16 2026
    From Newsgroup: comp.lang.lisp

    It is 2042. A dry wind blows over a desolate landscape, raising flurries
    of dust from the burnt ground. Feral dogs, tumours proliferating on their skin, pick through the debris, raking through yellow bones in the hope of
    rats. In the distance the remains of a city, a city whose name will soon
    be remembered by nobody. Some of the buildings appear curiously melted.

    A structure made of corrugated iron, rusting, deformed panels torn from
    some vehicle, and papier m|och|-. A turbine atop a tower made partly of
    garden furniture, creaking in the wind. A collection of car batteries.

    In the shed a thin figure crouches: ragged clothes and open sores. He
    types at a keyboard, poking a stick into the switches of the missing keys.
    The screen is cracked and dim.

    The camera's eye moves, we can see, barely, the text on the screen.

    PYTHON IS THE ONLY TRUE SOLUTION PYTHON HAS BEEN THE BEST THE ONLY
    LANGUAGE FOR CENTURIES REFERENCE COUNTING WILL NOT CORRUPT YOUR PRECIOUS BODILY FLUIDS GARBAGE COLLECTION IS THE WORK OF SATAN PYTHON IS THE
    STANDARD REFERENCE COUNTING MAKES THE BIRDS SING AND THE GRASS GREEN
    GARBAGE COLLECTORS ARE CONTINUALLY TRAWLING THROUGH DEAD DATA LISP IS OBSOLETE EVIL NOBODY USES LISP USE PYTHON LIKE ME USE PYTHON REFERENCE
    PYTHON LISP SLOW FAST PYTHON BEST YES PYTHON GARBAGE BAD PYTHON OBSOLETE

    Flecks of foam and blood land on the keyboard. No birds sing; what once
    was grass is now dust and ash.

    Still he types, faster and faster now, singing and chanting.

    From the computer in the shack a cable runs. The camera follows it, to its end: copper cores poking through charred insulation.

    Fade.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul@nospam@needed.invalid to comp.lang.lisp,comp.lang.c,comp.lang.python on Sat Aug 1 07:49:41 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 8/1/2026 5:08 AM, tfb wrote:
    It is 2042.

    Fade.

    The land may be parched, but the surface is populated
    by shiny machines filled with the pretense of AI inside.

    When I asked an LLM-AI to draw me a picture of something,
    it said "here is your Python Card, execute this and your
    picture will appear". As usual, some cosmetic changes were
    required to the Card, but the code did run and meet the objective.
    I do not recollect asking for a Python Card, I asked
    for a picture. As an ordinary end-user, I was expected to know
    what Python was ("the one true language") :-) The LLM-AI
    didn't even say "Do you know what Python is ?" . It just
    said "here is your Python Card", like everyone knows what
    that is.

    You see, the LLM-AI had decided what the chosen language is,
    and it happens to be Python :-) Insert cackling laughter.

    *******

    I just asked it explicitly now, and it really IS hilarious.

    "If you are given a programming task to do, and the
    programming language is not specified, what language
    do you choose for the task and why do you choose
    that particular language ?
    "

    CoPilot Answer:

    If the task doesnrCOt specify a programming language, the smartest choice
    is the language that gives you the fastest, clearest, least-painful path
    to a correct solution. For most general, unspecified tasks, that tends
    to be Python - and hererCOs why.

    Efoa Short answer

    I choose Python, because it minimizes friction: fast to write, easy to read, huge standard library, and excellent for everything from quick scripts to complex algorithms.
    ...

    So there you have it, it wasn't an "accident" after all.
    It really does mean it, when it hands out Python Cards
    like they were candy. Yikes! Looks like the language
    wars are over.

    My resume in the year 2042:

    Languages: Python
    (And when I have to, English)

    *******

    Well, that was only a leg-pull. Here is another paragraph of that slop,
    to provide some balance.

    Efoa When I wouldnrCOt choose Python
    If the task hints at certain domains, I pivot:

    HighrCaperformance numeric computing raA C++ or Rust

    Systems programming / OSrCalevel tasks raA C or Rust

    Web frontrCaend raA JavaScript/TypeScript

    Enterprise backend raA Java or C#

    Embedded / microcontrollers raA C

    Functional programming or concurrency-heavy tasks raA Haskell, Elixir, or Rust

    But if the prompt gives no domain clues, Python is the most rational starting point.

    *******

    You Rust programmers, your job is safe for now.

    And Rust never sleeps.

    Paul
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp,comp.lang.c,comp.lang.python on Sat Aug 1 23:37:28 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 1 Aug 2026 07:49:41 -0400, Paul wrote:

    Well, that was only a leg-pull. Here is another paragraph of that
    slop, to provide some balance.

    Enterprise backend raA Java or C#

    This <https://www.infoworld.com/article/4091447/spring-ai-tutorial-get-started-with-spring-ai.html>
    is supposed to be an example of how you do AI programming in Java.

    Is anybody still mystified why normal people would rather use Python
    instead?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Chris M. Thomasson@chris.m.thomasson.1@gmail.com to comp.lang.lisp,comp.lang.c,comp.lang.python on Sat Aug 1 16:54:12 2026
    From Newsgroup: comp.lang.lisp

    On 8/1/2026 4:37 PM, Lawrence DrCOOliveiro wrote:
    On Sat, 1 Aug 2026 07:49:41 -0400, Paul wrote:

    Well, that was only a leg-pull. Here is another paragraph of that
    slop, to provide some balance.

    Enterprise backend raA Java or C#

    This <https://www.infoworld.com/article/4091447/spring-ai-tutorial-get-started-with-spring-ai.html>
    is supposed to be an example of how you do AI programming in Java.

    Is anybody still mystified why normal people would rather use Python
    instead?

    Yeah. I see normal people that use python all the time in the store...
    Give me a break!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp,comp.lang.c,comp.lang.python on Sun Aug 2 07:39:42 2026
    From Newsgroup: comp.lang.lisp

    Paul <nospam@needed.invalid> wrote:
    [... Python, Rust ...]

    Woosh.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From kotorifan@mindyourownbiz@noemail.fuck to comp.lang.lisp on Sun Aug 2 16:42:37 2026
    From Newsgroup: comp.lang.lisp

    Am Fri, 20 Feb 2026 22:53:00 +0100 schrieb Mario Rosell:

    Hello everyone!

    I want to learn Common Lisp, but I don't really know what resources to
    use.

    What did you all use to learn? Is that even relevant? Is this newsgroup active?

    Thanks for everyone in advice

    For learning the basics about the language I highly recommend the book "Practical Common Lisp" by Peter Seibel. It is available for free over
    here: https://gigamonkeys.com/book/ and explains the basic concepts like macros, loops, CLOS, and so on in detail. From all resources I know, this
    has been the most helpful in learning CL. Other than that you should check
    out the Hyperspec when stuck, it's essentially something akin to man
    pages, but for CL, and documents the language well. It is not really a
    good beginner resource, however, for that rather read the book.

    Also it does help to have a background in Emacs Lisp, which you will need anyway when dealing with SLIME/Sly, Emacs, and CL, so it's a good idea to
    get acquainted with Elisp in parallel, even if your knowledge is only very rudimentary, it still helps.

    -- kotorifan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Aug 2 22:53:23 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 02 Aug 2026 16:42:37 +0000, kotorifan wrote:

    For learning the basics about the language I highly recommend the
    book "Practical Common Lisp" by Peter Seibel.

    Common Lisp is a museum-worthy spec by this point. There needs to be
    something more modern, not so full of legacy baggage tied to old,
    proprietary, pre-POSIX OS platforms which are all extinct by now.

    Also it does help to have a background in Emacs Lisp ...

    Emacs Lisp contains some useful functionality beyond that specified by
    Common Lisp, but it still isnrCOt really enough for a general-purpose programming language. Not in this day and age.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Sun Aug 2 16:56:20 2026
    From Newsgroup: comp.lang.lisp

    kotorifan <mindyourownbiz@noemail.fuck> writes:
    For learning the basics about the language I highly recommend the book "Practical Common Lisp" by Peter Seibel.... Also it does help to have
    a background in Emacs Lisp

    It might be enough to start with an understanding of Scheme from SICP (Structure and Interpretation of Computer Programs). My own "road to
    Lisp" basically was studying the Emacs source code and grokking Emacs
    Lisp that way, followed by using CLTL1 to see that CL was a
    generalization of the same ideas.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Tue Aug 4 00:49:45 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 5 Jul 2026 01:49:41 -0000 (UTC), I wrote:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Python's inventors insist that it's not a Lisp, but we Lispers can
    see that it's just a weird Lisp implementation with some surface
    syntax added.

    Lisp doesnrCOt have operator overloading.

    Also: Python doesnrCOt need the whole multiple-value-return
    Heath-Robinsonesque mechanism. It has something simpler: destructuring assignment.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Tue Aug 4 09:56:23 2026
    From Newsgroup: comp.lang.lisp

    On 04/08/2026 8:49 AM, Lawrence DrCOOliveiro wrote:
    On Sun, 5 Jul 2026 01:49:41 -0000 (UTC), I wrote:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    Python's inventors insist that it's not a Lisp, but we Lispers can
    see that it's just a weird Lisp implementation with some surface
    syntax added.

    Lisp doesnrCOt have operator overloading.

    Also: Python doesnrCOt need the whole multiple-value-return Heath-Robinsonesque mechanism. It has something simpler: destructuring assignment.

    Again, you're wallowing in error and dizziness. What do you call this?

    (destructuring-bind (a b c) (list 1 2 3)
    (print a) (print b) (print c))

    You just return a list, and destructure it on the receiving end.
    --
    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
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?Niocl=C3=A1is=C3=ADn_C=C3=B3il=C3=ADn_Glost=C3=A9ir?=@thanks-to@Taf.com to comp.lang.lisp on Tue Aug 4 18:35:36 2026
    From Newsgroup: comp.lang.lisp

    |------------------------------------------------------------------------------|
    |" Ar an c||igi|| l|i de m|! I||il, scr|!obh Lawrence DrCOOliveiro: |
    | |
    | > On Sun, 05 Jul 2026 22:14:32 +0100, Aidan Kehoe wrote: |
    | > |
    | > > Ar an nao|| l|i is fiche de m|! Meitheamh, scr|!obh tfb: |
    | > > |
    | > >> steve g <Sgonedes1977@gmail.com> wrote: |
    | > >>> |
    | > >>> Does any program actually free or return memory to the kernel |
    | > >>> before it exits? |
    | > >>> |
    | > >> Absolutely. LispWorks even has a function to do just this. |
    | > > |
    | > > Why, with a modern OS? For the sake of leak-tracking? |
    | > |
    | > rCLModernrCY OSes support multitasking. That means there are going to be |
    | > other processes running and doing useful things in their way, not just |
    | > yours. |
    | > |
    | > Giving up memory yourCOre not using is just part of acting like a |
    | > well-behaved resident of the userland ecosystem. Because, at least on |
    | > Linux, being too much of a memory hog is liable to awaken the Dreaded |
    | > OOM Killer. |
    | > |
    | > And you do not want that. |
    | |
    |I broadly agree with that; my question above was from a misinterpretation of: |
    | |
    | > >>> Does any program actually free or return memory to the kernel |
    | > >>> before it exits? |
    | > >>> |
    | > >> Absolutely. LispWorks even has a function to do just this. |
    | |
    |I took the question to mean rCLright before it exits,rCY which would be a waste of|
    |time." |
    |------------------------------------------------------------------------------|
    arsa Aodh|in mac Eochadha.

    N|! c||is n|iire sin!

    Is mise le meas,
    Niocl|is|in Caile|in Glost|-ir
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Wed Aug 5 05:46:17 2026
    From Newsgroup: comp.lang.lisp

    On 05/08/2026 2:35 AM, Niocl|iis|!n C||il|!n Glost|-ir wrote:
    |------------------------------------------------------------------------------|
    |" Ar an c||igi|| l|i de m|! I||il, scr|!obh Lawrence DrCOOliveiro: |
    | |
    | > On Sun, 05 Jul 2026 22:14:32 +0100, Aidan Kehoe wrote: |
    | > |
    | > > Ar an nao|| l|i is fiche de m|! Meitheamh, scr|!obh tfb: |
    | > > |
    | > >> steve g <Sgonedes1977@gmail.com> wrote: |
    | > >>> |
    | > >>> Does any program actually free or return memory to the kernel |
    | > >>> before it exits? |
    | > >>> |
    | > >> Absolutely. LispWorks even has a function to do just this. |
    | > > |
    | > > Why, with a modern OS? For the sake of leak-tracking? |
    | > |
    | > rCLModernrCY OSes support multitasking. That means there are going to be |
    | > other processes running and doing useful things in their way, not just |
    | > yours. |
    | > |
    | > Giving up memory yourCOre not using is just part of acting like a |
    | > well-behaved resident of the userland ecosystem. Because, at least on |
    | > Linux, being too much of a memory hog is liable to awaken the Dreaded |
    | > OOM Killer. |
    | > |
    | > And you do not want that. |
    | |
    |I broadly agree with that; my question above was from a misinterpretation of: |
    | |
    | > >>> Does any program actually free or return memory to the kernel |
    | > >>> before it exits? |
    | > >>> |
    | > >> Absolutely. LispWorks even has a function to do just this. |
    | |
    |I took the question to mean rCLright before it exits,rCY which would be a waste of|
    |time." |
    |------------------------------------------------------------------------------|
    arsa Aodh|in mac Eochadha.

    N|! c||is n|iire sin!

    Is mise le meas,
    Niocl|is|in Caile|in Glost|-ir
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)

    To do that, you use mmap() and its ilk to allocate the memory. Then you
    can munmap() that to return this bunch of memory to the operating
    system.

    This is for instance not a bad idea to allocate memory for text editor
    buffers, because if you decide to "edit" a 16GB log file, you don't need
    to keep those 16GB unused address space allocated to the application
    once you close the buffer.

    You can make use of the regular heap for the rest of the editor runtime,
    with or without a Common Lisp system.

    That said, while this is technically possible, rather few applications
    do this, and I have not bothered to look up ready made interfaces in
    SBCL for this as I write this post. If missing, it's /trivial/ for
    some value of trivial, to just add it to SBCL.


    Best wishes, and happy munmap()ping!
    --
    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
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Tue Aug 4 22:08:42 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 31 Jul 2026 08:01:26 -0000 (UTC), tfb <tfb@work.it.out> wrote:

    George Neuner <gneuner2@comcast.net> wrote:

    Of course you meant "for C." Many collectors are/were written "in C."

    Yes, and specifically 'for large existing C programs which you are not >willing to completely reengineer'. At any point since it started running
    on machines where a GC would be a practical proposition[*], the Unix kernel >was such a program.

    There is more, I think: the Sapir-Whorf hypothesis is at least partly true >for programming languages: the language determines what its programmers can >(easily) think. You obviously could write GC-friendly C programs, but C >programmers exposed to large existing C programs probably would find them
    so alien they probably wouldn't actually write them. You really need a new >language (which, in turn, would influence how people think, but in
    different ways).

    Yes and no. It actually is difficult to write GC-friendly programs in
    C - there are all kinds of constraints you have to obey. See below.


    And let's leave out compatibility questions: 'you mean to port my device >driver I have to ...?'

    All of this means that, once you've got large C programs and a culture
    around them you can't just drop in GC.

    [*] Yes, I do not claim GC is suitable for all machines. I've written >programs for the 1802.


    I'm sure *you* (tfb) know this, but for those who don't:



    C pointers are not positively identifiable at runtime, so GC has to be "conservative" - only /potential/ pointers can be identified, and the
    objects they point to, in general, can't be moved without corrupting
    program data. You don't need to worry about objects on the stack -
    only objects on the heap.

    In C the situation is complicated even beyond simply not being able to
    find pointers because the standard explicitly permits idioms and code optimizations that can obscure what pointers are there.


    The standard permits a pointer into the interior of an object to be
    the /only/ pointer to that object. So, e.g., the only pointer
    referencing a structure might be not point to the structure itself but
    instead to one of its data members. Similarly for an array, the only
    pointer might point at some random element rather than the start of
    the array.

    For arrays it even is worse because the only pointer might in fact
    point to the non-existent element one index past the array's end.


    At the source level in C, you might think that you could just ensure
    there always is a pointer to the base of each object, or the start of
    each data structure. However, the compiler is permitted to elide
    pointers [and indexing] it determines are superfluous.

    E.g., in the following fragment

    :
    int *a = (int*) malloc( 32 * sizeof(int) );

    int *p = a;
    for ( int i = 0; i < 32; ++i )
    p[i] = ...
    :

    you might think 'a' always points to the base of the array ... but in
    fact the compiler is permitted to completely ignore 'p', or if 'a' is
    not used again, the compiler can forget about 'a' after the assignment
    to 'p'. Similarly it can turn the indexing into simple counting, and
    simply walk one of the pointers over the array.

    Consider where the pointer might be if GC occurs when 'i' is not zero.
    If the compiler used 'a' to walk over the array, did it reset 'a' to
    point to the base of the array following the loop? Lacking another use
    of a[] or call to free(a), it isn't required to.


    And, of course, C allows casting values of one type into another, and
    creating unions that overlay at the same location values of different
    types at different times.

    And then there are tricky idioms like declaring a structure to have a
    zero length array as its last member, then allocating a chunk of
    memory large enough to contain both the structure and an array of some
    non-zero length.


    Basically, for uncooperative languages such as C, the GC has to
    consider as a /potential/ pointer every set of [pointer-length] bytes
    having the correct alignment to be a pointer. It must compare the
    value of each potential to the set of known heap objects, allowing for
    the pointer's value to be anywhere within [or even past] the bounds of
    the referenced object.

    Since GC can't be sure that any value that appears to be a pointer
    actually /is/ a pointer, in general, it can't move the referenced
    objects. Moving an object requires also changing all the pointers to
    it, but changing datums that really are not pointers but only appear
    to be ... well, that would corrupt the data.



    A bit more can be done with C++ because, in C++, structures are a kind
    of object (a POD object) and [at least modern] programmers are more
    likely to use stdlib array objects rather than C-style arrays.

    Detlefs created a GC for C++ he called "mostly moving" which was able
    to pin only those heap objects directly referenced by register or
    stack resident [potential] pointers. Heap objects pointed to only by
    other heap objects could be moved.



    Many of the issues with moving GC could be solved by changing the
    compiler to guarantee that object and array base pointers always are
    maintained regardless, and by making object layouts available at
    runtime. The latter could be done with various types of maps or by
    compiler generating an enumeration function for each type of object
    [including stack frames].

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Tue Aug 4 22:22:10 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Wed, 29 Jul 2026 16:08:10 -0400, steve g wrote:


    Specific substantive response still lacking.


    I am actually nor familiar with this. thank you for mentioning it! I
    will certainly discuss this with a friend whois Dr Psychology. This will
    be a great discussion. seriously I think I can use this to impress him
    :)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp,comp.lang.c,comp.lang.asm on Tue Aug 4 22:26:33 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 01/08/2026 6:46 AM, Lawrence DrCOOliveiro wrote:
    On Fri, 31 Jul 2026 12:21:51 -0300, Anton Antimo wrote:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct.
    What a dumb idea. Common Lisp is full of legacy baggage to cater to
    proprietary pre-POSIX OSes which are now extinct.

    As always, you start off by mouthing your own ignorance.

    * OpenVMS is both sold and ported to the x86. https://vmssoftware.com/

    I am actually glad to heear this! the women of the 70's loved these
    things :)


    * OS/2 is being sold and supported, under a new brand name.
    https://www.arcanoae.com/

    not the best solution in the world but it did/does work.
    I still think that PC-DOS was worth it's weight. Automatic IRQ, DMA,
    HIGHMEM managment all automated. Wow!


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp,comp.lang.c,comp.lang.python on Tue Aug 4 22:39:06 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:


    Flecks of foam and blood land on the keyboard. No birds sing; what once
    was grass is now dust and ash.

    Still he types, faster and faster now, singing and chanting.

    From the computer in the shack a cable runs. The camera follows it, to its end: copper cores poking through charred insulation.

    Fade.


    you are quite the poet.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Tue Aug 4 22:47:33 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Fri, 31 Jul 2026 23:52:27 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Wed, 29 Jul 2026 16:26:56 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Mon, 29 Jun 2026 17:37:24 -0700, Paul Rubin wrote:

    If garbage collection is so good, why donrCOt OS kernels use it?

    You are probably using a shitty OS.

    So where is there a rCLnon-shitty OSrCY that uses garbage collection in
    its kernel? Does the one *you* use have garbage collection in its
    kernel?

    It depends on how the kernel is compiled.

    What a load of nonsense. There is no OS kernel you have access to,
    that uses garbage collection for internal memory management. Just
    admit it instead of trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp,comp.lang.c on Tue Aug 4 22:50:09 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 01/08/2026 11:59 AM, steve g wrote:
    Anton Antimo <anton@safunu.org> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which >>>>>> spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent >>> fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.
    Wait until you read LISP:Lisp In Small Pieces. it's published in france.


    I read the French edition. /Principes d'Implantation de Scheme et
    Lisp/, and it's now available as ebook on Amazon. I recommend it,
    it's a really fun book. I believe it's the /second edition/, and
    may have a little bit different content than the English one, which
    I haven't read.

    Do you read French?

    No I do not read french; just the algorithms. It is a fantastic book. I
    can also apparently read german algorithms but the comments and the
    docstrings can be difficult.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Aug 5 02:54:18 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 04 Aug 2026 22:47:33 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is no OS kernel you have access to, that uses garbage
    collection for internal memory management. Just admit it instead of
    trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.

    Try using past tense. ItrCOs a dead project. Wonder why?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Tue Aug 4 23:05:53 2026
    From Newsgroup: comp.lang.lisp

    antispam@fricas.org (Waldek Hebisch) writes:

    tfb <tfb@work.it.out> wrote:
    Waldek Hebisch <antispam@fricas.org> wrote:


    Consider:

    (defun c_args_as_string (arguments)
    (cond
    ((null arguments) "")
    (t (let ((res (c_type_as_string (nth 1 (car arguments)))))
    (dolist (el (rest arguments))
    (setf res (concatenate 'string res ", "
    (c_type_as_string (nth 1 el)))))
    res)))
    )

    I do not say it is great code, but I find it easier to handle than
    more traditional Lisp style.


    OK, that's just weird. Everything is fine and you've got lots of close
    parens at the ends of lines in the standard way, but then something breaks >> and you have the final close paren on its own at the left margin. I can't >> even begin to understand what motivates that.

    If you look at rational factors: I need to see where given piece of
    code ends. In bigger function with multiple blocks inside I would
    put some parentheses in separate lines to signal ends of blocks.
    There is also issue of seeing what is changed. Code frequently
    gets added at end of existing functions. Separate "end"
    parenthesis means that in such case old lines are unchanged and
    only new lines get added. Version with parentheses at end of
    line needs to move closing parentheses from old line to new
    one.

    Hear Hear! IMHO python looks like pascal. Pascal is a great language but
    do not mess up the begin/end statements! The semicolons should be
    standard. I have the same issue with GO. This is starting to remind me
    of sendmail.cf :)


    I trying to be conservative with putting end parentheses on
    separate lines. One, doing this on too many constructs would
    add too many extra lines. Second, putting such parentheses
    in too many places would limit their value, they would be no
    longer good cue. Third, really small pieces of code are
    managable without extra cues, it is bigger pieces when it
    matters. Fourh, I want to limit dissatisfaction of Lispers
    used to traditional style in case they need to work on code
    that I write.

    But the same question: if you wrote it in Python, would you leave an extra >> little blank line for that weird closing paren?



    [ ... ]
    "no trailing white space".

    Hear hear!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Tue Aug 4 23:11:08 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Tue, 04 Aug 2026 22:47:33 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is no OS kernel you have access to, that uses garbage
    collection for internal memory management. Just admit it instead of
    trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.

    Try using past tense. ItrCOs a dead project. Wonder why?

    No, I do not wonder about microsoft or why their stuff fails.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Aug 5 07:31:41 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 04 Aug 2026 23:11:08 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Tue, 04 Aug 2026 22:47:33 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is no OS kernel you have access to, that uses garbage
    collection for internal memory management. Just admit it instead
    of trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.

    Try using past tense. ItrCOs a dead project. Wonder why?

    No, I do not wonder about microsoft or why their stuff fails.

    Funny, you were just talking about it. Suddenly backpedalling when you
    realize itrCOs actually destroying rather than strengthening your
    argument?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 5 18:26:34 2026
    From Newsgroup: comp.lang.lisp

    On 05/08/2026 10:54 AM, Lawrence DrCOOliveiro wrote:
    On Tue, 04 Aug 2026 22:47:33 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is no OS kernel you have access to, that uses garbage
    collection for internal memory management. Just admit it instead of
    trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.

    Try using past tense. ItrCOs a dead project. Wonder why?

    Now, now, Lawrence, you're totally misunderstanding the situation. As
    always. Garbage collection is /not bad/. And we have a practical de- monstration of this in OpenSSL, hence adding comp.lang.c to the dis-
    cussion, where their lack of GC was causing a problem in the real world.


    https://securityaffairs.com/195588/hacking/openssl-fixes-hollowbyte-memory-exhaustion-bug.html

    I don't know why you're always trying to "sound smart" when everyone can
    see that you're just making a fool of yourself. /Every/. /Time/.

    You can stop being a troll any time you want. All you have to do, is to
    start to use the Illumos operating system for your desktop, with CDE as
    is proper on a Unix workstation. You can even use Xlibre because they
    love their X server on all kinds of operating system, unlike x.org.

    Now, once you've been illuminated enough by the Illumos operating system
    your outer troll shell will turn into stone. There won't be a speck of
    Rust on you.

    And then, only then, can you stop being a troll on 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 https://bsky.app/profile/myrkraverk.bsky.social
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 5 19:02:34 2026
    From Newsgroup: comp.lang.lisp

    On 05/08/2026 10:50 AM, steve g wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 01/08/2026 11:59 AM, steve g wrote:
    Anton Antimo <anton@safunu.org> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    [...]

    Sadly we've also ended up with programmers who think the machines >>>>>>> they program for are giant PDP-11s, and as a result machines which >>>>>>> spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent >>>> fast code that I'd write in C, where speed matters. In other words, I >>>> seem to gain nothing (other than more work) by writing typical
    applications in C.
    Wait until you read LISP:Lisp In Small Pieces. it's published in france. >>>

    I read the French edition. /Principes d'Implantation de Scheme et
    Lisp/, and it's now available as ebook on Amazon. I recommend it,
    it's a really fun book. I believe it's the /second edition/, and
    may have a little bit different content than the English one, which
    I haven't read.

    Do you read French?

    No I do not read french; just the algorithms. It is a fantastic book. I
    can also apparently read german algorithms but the comments and the docstrings can be difficult.

    That's good. If you want to brush up on your German, this course looks
    solid,


    https://shop.thegreatcourses.com/learning-german-a-journey-through-language-and-culture

    and I've been meaning to take it. Note that if you buy it now online,
    you only get it streaming, so if you want to download it, you can look
    for a DVD copy on Ebay.

    I haven't checked if it's available on the binary discussion groups of
    Usenet.

    Now is there some particular book you feel is worth my time in German?
    For either studying some C or Lisp arcana? Preferably not some basics,
    as those are already covered in English.
    --
    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
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 5 11:29:17 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:
    In C the situation is complicated even beyond simply not being able to
    find pointers because the standard explicitly permits idioms and code optimizations that can obscure what pointers are there.


    I wonder how the Symbolics C compiler dealt with all this horror? That's
    not a rhetorical question: if anyone knows, I'd be interested, because it
    must have been painful.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp,comp.lang.c on Wed Aug 5 13:13:42 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 31/07/2026 11:21 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which
    spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent
    fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.

    The fun is in writing atypical applications, and then finding yourself looking at the disassembly in SBCL.

    I actually do that every now and then just to learn a bit more about
    assembly, something I find so cool about SBCL (and lacking in other close-to-the-language tools).

    Speaking of which, I decided to try Common Lisp about 2 years ago,
    having struggled to deal with Racket for over ten years, nevertheless considering Racket the most elegant Lisp around ever since its birth.
    And, boy, did I never look back.

    (*) A critique of Racket

    To be fair, a big part of my struggle is the thick layer of Racket on
    top of POSIX. For instance, try to locate the equivalent select-call on
    it. It's so hard to recognize exactly how your Racket maps to the lower
    level. I understand that may a strong point of Racket's design, but it certainly hits my weakness.

    How about the macro system? So perfect, yet so annoying. One thing I
    love about Common Lisp is precisely macro's (lack of) hygiene. I'm
    totally fine with complete guarantee. Anaphoric macros are so useful.
    (No idea how to implement them in Racket---impossible?)

    Personally, I love writing in C, even though it's more verbose.

    That said, and to be mildly on-topic in comp.lang.lisp, have

    * /The Common Lisp Condition System/, and

    * /Programming Algorithms in Lisp/

    been mentioned before as resources for learning common lisp?

    These two books look lovely in my programming shelf, next to

    * /Common Lisp Recipes/, and

    * /Practical Common Lisp/,

    which must have been mentioned. They're interspersed with

    * /Low Level Programming/,

    * /String Algorithms in C/, and

    * /The Joys of Hashing/,

    which come in handy when you want to implement your own Common
    Lisp system.


    Enjoy!

    Enjoyed a lot! Thanks so much for sharing very useful references.

    Let me try to contribute with

    Let Over Lambda
    Doug Hoyte, 2008
    ISBN 978-1-4357-1275-1

    --8<-------------------------------------------------------->8---
    Let Over Lambda (ISBN 978-1-4357-1275-1, 376+iv pp.) is one of the
    most hardcore computer programming books out there. Starting with the
    fundamentals, it describes the most advanced features of the most
    advanced language: COMMON LISP. The point of this book is to expose
    you to ideas that you might otherwise never be exposed to.

    This book is about macros, that is programs that write
    programs. Macros are what make lisp the greatest programming language
    in the world. When used properly, macros enable amazing feats of
    abstraction, programmer productivity, and code efficiency and security
    that are unheard of elsewhere. Macros let you do things you simply
    cannot do in other languages.
    --8<-------------------------------------------------------->8---

    Source:
    Doug Hoyte, https://letoverlambda.com/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Madhu@enometh@meer.net to comp.lang.lisp on Wed Aug 5 23:46:00 2026
    From Newsgroup: comp.lang.lisp


    * tfb <114v6qd$2u5ab$1@dont-email.me> :
    Wrote on Wed, 5 Aug 2026 11:29:17 -0000 (UTC):

    George Neuner <gneuner2@comcast.net> wrote:
    In C the situation is complicated even beyond simply not being able to
    find pointers because the standard explicitly permits idioms and code
    optimizations that can obscure what pointers are there.


    I wonder how the Symbolics C compiler dealt with all this horror? That's
    not a rhetorical question: if anyone knows, I'd be interested, because it must have been painful.

    For the C standard of those decades,,

    Here's a llm remake of a 80s project that implements k&r c and the unix
    v7 c library. (I stopped reading after looking at the commits page)

    https://github.com/ChristineTham/lisp-cc https://raw.githubusercontent.com/ChristineTham/lisp-cc/main/README.md
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Chris M. Thomasson@chris.m.thomasson.1@gmail.com to comp.lang.lisp,comp.lang.c on Wed Aug 5 13:05:19 2026
    From Newsgroup: comp.lang.lisp

    On 8/5/2026 3:26 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 05/08/2026 10:54 AM, Lawrence DrCOOliveiro wrote:
    On Tue, 04 Aug 2026 22:47:33 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is no OS kernel you have access to, that uses garbage
    collection for internal memory management. Just admit it instead of
    trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.

    Try using past tense. ItrCOs a dead project. Wonder why?

    Now, now, Lawrence, you're totally misunderstanding the situation.-a As always.-a Garbage collection is /not bad/.

    Yeah. Until its really bad. If you find yourself "needing" a GC, try to reevaluate your system.


    [...]
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 5 21:48:57 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    To be fair, a big part of my struggle is the thick layer of Racket
    on top of POSIX. For instance, try to locate the equivalent
    select-call on it. It's so hard to recognize exactly how your Racket
    maps to the lower level. I understand that may a strong point of
    Racket's design, but it certainly hits my weakness.

    Sounds very Java-like. Though perhaps not as irritating as Java.

    Compare Python <https://docs.python.org/3/library/select.html> --
    thatrCOs less than 10 pages (i.e. number of times I have to hit
    Page-Down in the browser) of docs.

    Let Over Lambda
    Doug Hoyte, 2008
    ISBN 978-1-4357-1275-1

    This book is about macros, that is programs that write programs.
    Macros are what make lisp the greatest programming language in the
    world. When used properly, macros enable amazing feats of
    abstraction, programmer productivity, and code efficiency and
    security that are unheard of elsewhere. Macros let you do things
    you simply cannot do in other languages.

    Given this is posted to comp.lang.c, itrCOs always worth mentioning
    these are not macros in the style of #define, but they work at the AST
    level. Which is really the only sensible way to implement a workable
    macro system.

    And no longer unique to Lisp.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Aug 5 22:00:45 2026
    From Newsgroup: comp.lang.lisp

    If garbage collection is so good, why donrCOt high-performance operating
    system kernels use it? Why do they prefer reference-counting instead?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 5 22:34:52 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:
    If garbage collection is so good, why donrCOt high-performance operating system kernels use it? Why do they prefer reference-counting instead?


    All that is old is new again.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From David Brown@david.brown@hesbynett.no to comp.lang.lisp,comp.lang.c on Thu Aug 6 09:05:38 2026
    From Newsgroup: comp.lang.lisp

    On 05/08/2026 23:48, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    Given this is posted to comp.lang.c, itrCOs always worth mentioning
    these are not macros in the style of #define, but they work at the AST
    level. Which is really the only sensible way to implement a workable
    macro system.

    And no longer unique to Lisp.

    Given that this is entirely about Lisp (or at least it has absoltuely
    nothing to do with C), it should be posted only in comp.lang.list - not comp.lang.c. It would be very nice if the absurd level of pointless cross-postings we have seen recently were to stop. It is fine to have occasional cross-postings and "outside influence" in a newsgroup, but a
    few trolls have taken to cross-posting meaningless ramblings to all
    sorts of groups. I would ask all reasonable participants in Usenet
    threads to check the newsgroup lists on their posts, and trim them where
    it makes sense (or simply not to respond to the worst trolls).

    As for macros in programming languages, AST macros are /not/ the only "sensible" way to have macros. They are a very different thing from text-based macros as supported by the C pre-processor. The two types of
    macro have their advantages and disadvantages, and can be used for
    different purposes. The mistake is not in having one or the other, but
    in calling them both "macros". It is reasonable to note, however, that
    AST macros must be part of the language while text-based macros can be provided by a generic external tool (like m4).



    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Thu Aug 6 09:57:32 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 04 Aug 2026 23:05:53 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:

    antispam@fricas.org (Waldek Hebisch) writes:

    tfb <tfb@work.it.out> wrote:
    Waldek Hebisch <antispam@fricas.org> wrote:


    Consider:

    (defun c_args_as_string (arguments)
    (cond
    ((null arguments) "")
    (t (let ((res (c_type_as_string (nth 1 (car arguments)))))
    (dolist (el (rest arguments))
    (setf res (concatenate 'string res ", "
    (c_type_as_string (nth 1 el)))))
    res)))
    )

    I do not say it is great code, but I find it easier to handle than
    more traditional Lisp style.


    OK, that's just weird. Everything is fine and you've got lots of close
    parens at the ends of lines in the standard way, but then something breaks >>> and you have the final close paren on its own at the left margin. I can't >>> even begin to understand what motivates that.

    If you look at rational factors: I need to see where given piece of
    code ends. In bigger function with multiple blocks inside I would
    put some parentheses in separate lines to signal ends of blocks.
    There is also issue of seeing what is changed. Code frequently
    gets added at end of existing functions. Separate "end"
    parenthesis means that in such case old lines are unchanged and
    only new lines get added. Version with parentheses at end of
    line needs to move closing parentheses from old line to new
    one.

    Hear Hear!

    I also like to demarcate code /blocks/ vertically - be it with
    parentheses or curly braces or begin/end.


    IMHO python looks like pascal. Pascal is a great language but
    do not mess up the begin/end statements! The semicolons should be
    standard. I have the same issue with GO. This is starting to remind me
    of sendmail.cf :)

    I liked Modula 3 much better ... Pascal with most of its issues fixed.
    But there still were begin/end to demarcate lists of statements.

    Begin/End didn't bother me at all - code is meant for humans to read
    as well as computers to run. Pascal and its follow-on languages are
    easy to read ... and unlike C/C++ there is only one syntax to
    dereference a pointer.


    But Python looks more to me like Logo than like Pascal. And it's
    performance is pitiful if you don't liberally make use of libraries
    written in C.

    YMMV.

    I trying to be conservative with putting end parentheses on
    separate lines. One, doing this on too many constructs would
    add too many extra lines. Second, putting such parentheses
    in too many places would limit their value, they would be no
    longer good cue. Third, really small pieces of code are
    managable without extra cues, it is bigger pieces when it
    matters. Fourh, I want to limit dissatisfaction of Lispers
    used to traditional style in case they need to work on code
    that I write.

    But the same question: if you wrote it in Python, would you leave an extra >>> little blank line for that weird closing paren?



    [ ... ]
    "no trailing white space".

    Hear hear!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Chris M. Thomasson@chris.m.thomasson.1@gmail.com to comp.lang.lisp on Thu Aug 6 11:33:54 2026
    From Newsgroup: comp.lang.lisp

    On 8/6/2026 12:05 AM, David Brown wrote:
    On 05/08/2026 23:48, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    Given this is posted to comp.lang.c, itrCOs always worth mentioning
    these are not macros in the style of #define, but they work at the AST
    level. Which is really the only sensible way to implement a workable
    macro system.

    And no longer unique to Lisp.

    Given that this is entirely about Lisp (or at least it has absoltuely nothing to do with C), it should be posted only in comp.lang.list - not comp.lang.c.-a It would be very nice if the absurd level of pointless cross-postings we have seen recently were to stop.-a It is fine to have occasional cross-postings and "outside influence" in a newsgroup, but a
    few trolls have taken to cross-posting meaningless ramblings to all
    sorts of groups.-a I would ask all reasonable participants in Usenet
    threads to check the newsgroup lists on their posts, and trim them where
    it makes sense (or simply not to respond to the worst trolls).

    As for macros in programming languages, AST macros are /not/ the only "sensible" way to have macros.-a They are a very different thing from text-based macros as supported by the C pre-processor.-a The two types of macro have their advantages and disadvantages, and can be used for
    different purposes.-a The mistake is not in having one or the other, but
    in calling them both "macros".-a It is reasonable to note, however, that
    AST macros must be part of the language while text-based macros can be provided by a generic external tool (like m4).

    Speaking of macros... Well, hold on to your horses:

    https://github.com/rofl0r/chaos-pp

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Thu Aug 6 15:49:21 2026
    From Newsgroup: comp.lang.lisp

    David Brown <david.brown@hesbynett.no> writes:

    On 05/08/2026 23:48, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:
    Given this is posted to comp.lang.c, itrCOs always worth mentioning
    these are not macros in the style of #define, but they work at the AST
    level. Which is really the only sensible way to implement a workable
    macro system.
    And no longer unique to Lisp.

    Given that this is entirely about Lisp (or at least it has absoltuely
    nothing to do with C), it should be posted only in comp.lang.list -
    not comp.lang.c. It would be very nice if the absurd level of
    pointless cross-postings we have seen recently were to stop. It is
    fine to have occasional cross-postings and "outside influence" in a newsgroup, but a few trolls have taken to cross-posting meaningless
    ramblings to all sorts of groups. I would ask all reasonable
    participants in Usenet threads to check the newsgroup lists on their
    posts, and trim them where it makes sense (or simply not to respond to
    the worst trolls).

    As for macros in programming languages, AST macros are /not/ the only "sensible" way to have macros. They are a very different thing from text-based macros as supported by the C pre-processor. The two types
    of macro have their advantages and disadvantages, and can be used for different purposes. The mistake is not in having one or the other,
    but in calling them both "macros". It is reasonable to note, however,
    that AST macros must be part of the language while text-based macros
    can be provided by a generic external tool (like m4).

    With all due respect, what's amusingly absurd is that while you protest
    the off-topic nature of the topic for comp.lang.c, you follow up on
    things like the C pre-processor, evidently showing the subject has at
    least a margin of connection to C programming.

    It's not the case anymore that comp.lang.c hosts that high volume of the
    late nineties. I vote for comp.lang.c to relax a bit until the USENET
    faces that exponentially growing volume once again---even if the article
    is from Lawrence D'Oliveiro or another author of manuals such as how to
    make friends on the USENET.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Thu Aug 6 19:25:26 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Tue, 04 Aug 2026 23:11:08 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Tue, 04 Aug 2026 22:47:33 -0400, steve g wrote:

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    There is no OS kernel you have access to, that uses garbage
    collection for internal memory management. Just admit it instead
    of trying to bullshit.

    well thanks. as Microsoft's Singularity apparently uses a GC.

    Try using past tense. ItrCOs a dead project. Wonder why?

    No, I do not wonder about microsoft or why their stuff fails.

    Funny, you were just talking about it. Suddenly backpedalling when you realize itrCOs actually destroying rather than strengthening your
    argument?

    The question I have is "what argument"?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp,comp.lang.c on Thu Aug 6 19:36:33 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:


    Now is there some particular book you feel is worth my time in German?
    For either studying some C or Lisp arcana? Preferably not some basics,
    as those are already covered in English.

    my answer would be using ITU (international morse code) and looking at
    American (or military) CW (continious wave). Many people claim they have learned both from just listening to it on the radio.

    Unfortunately radio is all but dead. This is a good thing; less "traffic police".

    As to english books I do have an excellent book one of my teachers gave
    me. it contains all the funky rules of american enhlish. I am not at
    "home" right now so I look it up and I can't remeber the name. She said
    just read and re-scim this book before writing papers in college. This
    is bothering me now...

    I personally think that you need to practice the language to understand
    it.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Thu Aug 6 19:41:05 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    George Neuner <gneuner2@comcast.net> wrote:
    In C the situation is complicated even beyond simply not being able to
    find pointers because the standard explicitly permits idioms and code
    optimizations that can obscure what pointers are there.


    I wonder how the Symbolics C compiler dealt with all this horror? That's
    not a rhetorical question: if anyone knows, I'd be interested, because it must have been painful.

    It has been some time since I fired up the machine; but it is getting
    rather old (made in 1986 or so) and of course I do not have access to
    it. I do believe there was talk about a C interpreter. The hardest part
    would be writing the backend to support computers that are 30 years
    older than the machine.

    I think any C compiler is a nightmare in the parsing area.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Thu Aug 6 20:23:08 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 6 Aug 2026 09:05:38 +0200, David Brown
    <david.brown@hesbynett.no> wrote:

    As for macros in programming languages, AST macros are /not/ the only >"sensible" way to have macros.

    Depends on your definition of "sensible". <grin>


    ... They are a very different thing from
    text-based macros as supported by the C pre-processor. The two types of >macro have their advantages and disadvantages, and can be used for
    different purposes. The mistake is not in having one or the other, but
    in calling them both "macros".

    I believe that particular confusion is all on C.

    Lisp's AST macros were invented in the summer of 1963. By the time C
    came along in 1972, the major Lisps[*] all included them. https://dspace.mit.edu/handle/1721.1/6111


    [*] not Common Lisp, but its predecessors


    ... It is reasonable to note, however, that
    AST macros must be part of the language while text-based macros can be >provided by a generic external tool (like m4).
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Thu Aug 6 18:05:34 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> writes:
    Let me try to contribute with
    Let Over Lambda
    Doug Hoyte, 2008
    ISBN 978-1-4357-1275-1

    For something easier (beginner friendly) I liked Land of Lisp,
    landoflisp.com. It even has a Lispy music video on its home page,
    plugging the book:

    https://www.youtube.com/watch?v=HM1Zb3xmvMc
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From antispam@antispam@fricas.org (Waldek Hebisch) to comp.lang.lisp on Fri Aug 7 09:36:27 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:
    On Thu, 6 Aug 2026 09:05:38 +0200, David Brown
    <david.brown@hesbynett.no> wrote:

    As for macros in programming languages, AST macros are /not/ the only >>"sensible" way to have macros.

    Depends on your definition of "sensible". <grin>

    Do you think that reader macros are sensible?
    --
    Waldek Hebisch
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 7 11:58:37 2026
    From Newsgroup: comp.lang.lisp

    Waldek Hebisch <antispam@fricas.org> wrote:

    Do you think that reader macros are sensible?


    I think nonstandard reader macros are used much less than ordinary macros
    in CL. I may be wrong.

    But reader macros are also not at all the same as C preprocessor macros:
    The C preprocessor accepts text and turns it into other text, while a CL
    reader macro accepts text and turns it into anything at all, which almost
    never is text. Consider the macro associated with '(' in the standard readtable, for instance.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sat Aug 8 22:00:22 2026
    From Newsgroup: comp.lang.lisp

    On 05/08/2026 10:22 AM, steve g wrote:
    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Wed, 29 Jul 2026 16:08:10 -0400, steve g wrote:


    Specific substantive response still lacking.


    I am actually nor familiar with this. thank you for mentioning it! I
    will certainly discuss this with a friend whois Dr Psychology. This will
    be a great discussion. seriously I think I can use this to impress him
    :)


    I'm starting to think Lawrence has a list of words on a piece of paper,
    and uses dice to select them for his replies on Usenet. Nothing he says
    ever makes sense.

    I mean, at least he could do would be to run an L.L.M. and generate the
    words for him. It's less work, and doesn't require throwing all these
    dice.
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sat Aug 8 22:05:17 2026
    From Newsgroup: comp.lang.lisp

    On 06/08/2026 6:00 AM, Lawrence DrCOOliveiro wrote:
    If garbage collection is so good, why donrCOt high-performance operating system kernels use it? Why do they prefer reference-counting instead?

    Dear Lawrence,

    I don't know which operating system kernels you mean, you don't specify,
    and I don't want to read your mind. Apart from being impolite on my
    end, I think it'll be fruitless on your end.

    Please go to your nearest public library, and pick out the book

    /Garbage Collection/
    /Algorithms for Automatic/
    /Dynamic Memory Management/

    by Richard Jones, and Rafael Lins. Published in 1996.

    It explicitly states that reference counting is a discipline of garbage collectors. If you have reference counting, you have a garbage collect-
    or.


    Happy garbage deliveries!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?St=C3=A9phane?= CARPENTIER@sc@fiat-linux.fr to comp.lang.lisp on Sat Aug 8 14:14:08 2026
    From Newsgroup: comp.lang.lisp

    Le 08-08-2026, Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> a |-crit-a:
    On 05/08/2026 10:22 AM, steve g wrote:
    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Wed, 29 Jul 2026 16:08:10 -0400, steve g wrote:


    Specific substantive response still lacking.


    I am actually nor familiar with this. thank you for mentioning it! I
    will certainly discuss this with a friend whois Dr Psychology. This will
    be a great discussion. seriously I think I can use this to impress him
    :)


    I'm starting to think Lawrence has a list of words on a piece of paper,
    and uses dice to select them for his replies on Usenet. Nothing he says
    ever makes sense.

    I mean, at least he could do would be to run an L.L.M. and generate the
    words for him. It's less work, and doesn't require throwing all these
    dice.

    I guess I understand what you mean and that's why I disagree. Sometimes,
    he's very serious and what he says does make sense and is very
    interesting. And some other times his replies are senseless or
    uncorrelated with the message he's answering or plain dead stupid.

    So, I believe the game is to guess if one should laugh or answer seriously.
    --
    Si vous avez du temps |a perdre :
    https://scarpet42.gitlab.io
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Sat Aug 8 14:45:24 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    I'm starting to think Lawrence has a list of words on a piece of paper,
    and uses dice to select them for his replies on Usenet. Nothing he says
    ever makes sense.

    I mean, at least he could do would be to run an L.L.M. and generate the
    words for him. It's less work, and doesn't require throwing all these
    dice.

    I think he (it?) may well *be* an LLM. In particular he (it?) has, at
    least twice, done this weird looping thing, asking the same question which
    has already been answered. That looks like something losing context.

    If it wasn't for the fact that usenet is moribund, an obvious way of
    acquiring training data for LLMs would be to set up troll bots and then use
    all the human responses to them as training data. Perhaps it's bit as
    moribund as I thought and someone is in fact doing this.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Sun Aug 9 02:11:52 2026
    From Newsgroup: comp.lang.lisp

    On 07/08/2026 7:36 AM, steve g wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:


    Now is there some particular book you feel is worth my time in German?
    For either studying some C or Lisp arcana? Preferably not some basics,
    as those are already covered in English.

    my answer would be using ITU (international morse code) and looking at American (or military) CW (continious wave). Many people claim they have learned both from just listening to it on the radio.

    Unfortunately radio is all but dead. This is a good thing; less "traffic police".

    As to english books I do have an excellent book one of my teachers gave
    me. it contains all the funky rules of american enhlish. I am not at
    "home" right now so I look it up and I can't remeber the name. She said
    just read and re-scim this book before writing papers in college. This
    is bothering me now...

    I personally think that you need to practice the language to understand
    it.

    I try to keep in shape by reading books in languages I'm not using. Or converse with people about programming languages I don't use anymore,
    such as Pascal.

    I've managed to keep my French more or less intact, but could use a
    brush up on Danish, and of course German as I said. I'm sure I'll
    find something to inspire me to keep practicing German. After all,
    I'm struggling to read Asterisk and Obelisk in Latin.


    Best wishes, and happy language studies in 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 https://bsky.app/profile/myrkraverk.bsky.social | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sun Aug 9 02:18:33 2026
    From Newsgroup: comp.lang.lisp

    On 08/08/2026 10:45 PM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    I'm starting to think Lawrence has a list of words on a piece of paper,
    and uses dice to select them for his replies on Usenet. Nothing he says
    ever makes sense.

    I mean, at least he could do would be to run an L.L.M. and generate the
    words for him. It's less work, and doesn't require throwing all these
    dice.

    I think he (it?) may well *be* an LLM. In particular he (it?) has, at
    least twice, done this weird looping thing, asking the same question which has already been answered. That looks like something losing context.

    If it wasn't for the fact that usenet is moribund, an obvious way of acquiring training data for LLMs would be to set up troll bots and then use all the human responses to them as training data. Perhaps it's bit as moribund as I thought and someone is in fact doing this.


    Well, I have a friend who's playing L.L.M. training, and I just sent him
    a .zip file of all my posts since ca. 2019.

    Can you imagine, an L.L.M. that knows how to talk like me?

    Personally, I don't want to have anything to do with these things. But
    I don't begrudge people who train their own. All the more power to
    them, and their power bill.

    I much prefer to make my own mistakes, when coding Common Lisp, than to
    have a machine make them for me.


    Happy Lisping!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Kaz Kylheku@046-301-5902@kylheku.com to comp.lang.lisp on Sat Aug 8 19:02:48 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-07, Waldek Hebisch <antispam@fricas.org> wrote:
    George Neuner <gneuner2@comcast.net> wrote:
    On Thu, 6 Aug 2026 09:05:38 +0200, David Brown
    <david.brown@hesbynett.no> wrote:

    As for macros in programming languages, AST macros are /not/ the only >>>"sensible" way to have macros.

    Depends on your definition of "sensible". <grin>

    Do you think that reader macros are sensible?

    I've not implemented them in TXR Lisp. It's not that they are
    "insensible" or any other epithet.

    They have a disruptive effect in the ecosystem.

    In a project that is rife with someone's custom reader macros, your
    editor settings for the language probably don't work, for starters.

    Files of the langauge cannot be machine read without executing the
    directives which alter the read syntax. (Packages also have
    this problem, by the way).

    Reader macros usually have the deficiency that the syntax they
    accept cannot be printed and in the CL design that is not easily
    fixable: only CLOS objects can have custom printing.

    The output of a read macro that produces cons structure will print
    as cons structure.

    (Hardly ever would you want a read macro to produce a CLOS object;
    that would be useful if there were a standard method protocol to
    handle a CLOS object in syntax: like some method that transforms
    it to something else during the macro walk. I.e. during the read
    phase, the read macro goes to a CLOS object. Then during the processing
    of the form as code, the CLOS object is recognized and some
    predetermind protocol method is invoked on it; whatever it returns
    is substituted for the object.)

    This means that user-defined read macros are second-class citizens
    compared to built in ones like ' for quote: expressions like (quote X)
    do actually print as 'X.

    Read macros are basically a hack for situations when someone wants
    a certain notational input convenience so badly that they dismiss
    the disadvantages.

    In my project, I decided that the benevolent dictator for life should
    decide all the read syntax, and that read syntax will be a combination
    of the right amount of tasteful choices that nobody will need anything
    else.

    If the language controls read syntax, you can do some things that
    are slightlly hard to parse for just dispatch tables.

    An example of this is the consing dot. You can't just wire a
    self-contained, context-free function dispatched on the character #\. to implement the consing dot. The parsing context for scanning a list has
    to recognize and handle it.
    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @Kazinator@mstdn.ca
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sun Aug 9 05:26:34 2026
    From Newsgroup: comp.lang.lisp

    On 06/08/2026 12:13 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 31/07/2026 11:21 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    [...]

    Sadly we've also ended up with programmers who think the machines
    they program for are giant PDP-11s, and as a result machines which >>>>>> spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent >>> fast code that I'd write in C, where speed matters. In other words, I
    seem to gain nothing (other than more work) by writing typical
    applications in C.

    The fun is in writing atypical applications, and then finding yourself
    looking at the disassembly in SBCL.

    I actually do that every now and then just to learn a bit more about assembly, something I find so cool about SBCL (and lacking in other close-to-the-language tools).

    Speaking of which, I decided to try Common Lisp about 2 years ago,
    having struggled to deal with Racket for over ten years, nevertheless considering Racket the most elegant Lisp around ever since its birth.
    And, boy, did I never look back.

    (*) A critique of Racket

    To be fair, a big part of my struggle is the thick layer of Racket on
    top of POSIX. For instance, try to locate the equivalent select-call on
    it. It's so hard to recognize exactly how your Racket maps to the lower level. I understand that may a strong point of Racket's design, but it certainly hits my weakness.

    How about the macro system? So perfect, yet so annoying. One thing I
    love about Common Lisp is precisely macro's (lack of) hygiene. I'm
    totally fine with complete guarantee. Anaphoric macros are so useful.
    (No idea how to implement them in Racket---impossible?)


    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.


    Personally, I love writing in C, even though it's more verbose.

    That said, and to be mildly on-topic in comp.lang.lisp, have

    * /The Common Lisp Condition System/, and

    * /Programming Algorithms in Lisp/

    been mentioned before as resources for learning common lisp?

    These two books look lovely in my programming shelf, next to

    * /Common Lisp Recipes/, and

    * /Practical Common Lisp/,

    which must have been mentioned. They're interspersed with

    * /Low Level Programming/,

    * /String Algorithms in C/, and

    * /The Joys of Hashing/,

    which come in handy when you want to implement your own Common
    Lisp system.


    Enjoy!

    Enjoyed a lot! Thanks so much for sharing very useful references.

    Let me try to contribute with

    Let Over Lambda
    Doug Hoyte, 2008
    ISBN 978-1-4357-1275-1


    [snip]

    Thank you. I went to a bookstore, and put a copy in my shopping cart.

    I'm not in a hurry, and I'm not sure when I'll exit the bookstore, for
    I have other books to buy. It might take a month, or more.

    By the time I have further need for macros in Common Lisp, I'm all for
    reading this book.

    Have a nice book shopping day!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Sun Aug 9 05:33:22 2026
    From Newsgroup: comp.lang.lisp

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    To be fair, a big part of my struggle is the thick layer of Racket
    on top of POSIX. For instance, try to locate the equivalent
    select-call on it. It's so hard to recognize exactly how your Racket
    maps to the lower level. I understand that may a strong point of
    Racket's design, but it certainly hits my weakness.

    Sounds very Java-like. Though perhaps not as irritating as Java.

    Compare Python <https://docs.python.org/3/library/select.html> --
    thatrCOs less than 10 pages (i.e. number of times I have to hit
    Page-Down in the browser) of docs.


    I admit I'm not sure why the select system call seems to be missing from
    this selection of networking functions, so I'm impelled to ask, what is
    is that you use select for, in Python?

    https://www.sbcl.org/manual/#networking


    Let Over Lambda
    Doug Hoyte, 2008
    ISBN 978-1-4357-1275-1

    This book is about macros, that is programs that write programs.
    Macros are what make lisp the greatest programming language in the
    world. When used properly, macros enable amazing feats of
    abstraction, programmer productivity, and code efficiency and
    security that are unheard of elsewhere. Macros let you do things
    you simply cannot do in other languages.

    Given this is posted to comp.lang.c, itrCOs always worth mentioning
    these are not macros in the style of #define, but they work at the AST
    level. Which is really the only sensible way to implement a workable
    macro system.

    And no longer unique to Lisp.

    Indeed. If you want to manipulate C code at the AST level, in C, all
    you need to do is to hook your code with libclang. It's annoying to
    use, because it's a private API for the fruit vendor, and mostly un- documented. That's why I basically gave up on using it in my own pro-
    jects.


    Good luck with libclang!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Aug 8 18:37:40 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 9 Aug 2026 05:26:34 +0800, Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:


    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.

    I don't find writing macros annoying, but I also don't do it very
    often. I bother only when I find myself frequently repeating a bunch
    of boilerplate.

    As it happens, nowadays I'm doing DBMS middleware and backend systems,
    and there tends to be quite a bit of surrounding code that is the same
    [or nearly so] for every database query.

    MMV.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Aug 8 19:08:50 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo <anton@safunu.org>
    wrote:


    (*) A critique of Racket

    To be fair, a big part of my struggle is the thick layer of Racket on
    top of POSIX. For instance, try to locate the equivalent select-call on
    it. It's so hard to recognize exactly how your Racket maps to the lower >level. I understand that may a strong point of Racket's design, but it >certainly hits my weakness.

    To be fair, you need to understand that Racket is multi-platform,
    needs to run on Windows, and Windows [for the most part] does not
    implement POSIX functions.

    Racket's network [and filesystem, and ... ] implementation tries to
    abstract over equivalent behaviors on all the target platforms.


    How about the macro system? So perfect, yet so annoying. One thing I
    love about Common Lisp is precisely macro's (lack of) hygiene. I'm
    totally fine with complete guarantee. Anaphoric macros are so useful.
    (No idea how to implement them in Racket---impossible?)

    Racket has its roots in Scheme. Scheme is defined in terms of source
    /text/ rather than the compiler's AST. So there is no real equivalent
    of Lisp's AST macros.

    That said, Racket does support Lisp-like unhygienic macros with
    'define-macro'. Apologies for the ridiculous length of the URL.

    https://docs.racket-lang.org/compatibility/defmacro.html#%28form._%28%28lib._compatibility%2Fdefmacro..rkt%29._define-macro%29%29
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Sun Aug 9 08:52:28 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.


    It is so weird that people use a language whose defining feature is the incremental construction of languages and then say they don't use that
    feature. I mean, I'm aware people do that, but it's just so fucking weird.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Sun Aug 9 11:50:07 2026
    From Newsgroup: comp.lang.lisp


    Ar an naoi|| l|i de m|! L||nasa, scr|!obh tfb:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.

    It is so weird that people use a language whose defining feature is the incremental construction of languages and then say they don't use that feature. I mean, I'm aware people do that, but it's just so fucking weird.

    I donrCOt find macros annoying, but I will use macrolet much more than defmacro.
    Usually no point making a utility macro available in the run-time namespace. (This is XEmacs Lisp, so reader macros not available.)

    Common Lisp is big and thererCOs plenty worth using in the rest of the language.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sun Aug 9 23:01:46 2026
    From Newsgroup: comp.lang.lisp

    On 09/08/2026 6:50 PM, Aidan Kehoe wrote:

    Ar an naoi|| l|i de m|! L||nasa, scr|!obh tfb:

    > Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:
    > >
    > > I've found the Common Lisp macro system annoying enough that I rarely
    > > use it. I'm OK with functions most of the time, and CLOS the rest of
    > > the time. And only resort to macros when I can't do anything else in
    > > the situation.
    >
    > It is so weird that people use a language whose defining feature is the
    > incremental construction of languages and then say they don't use that
    > feature. I mean, I'm aware people do that, but it's just so fucking weird.

    I donrCOt find macros annoying, but I will use macrolet much more than defmacro.
    Usually no point making a utility macro available in the run-time namespace. (This is XEmacs Lisp, so reader macros not available.)

    I've never really gotten the hang of when I need to use (gensym) and
    and when I don't. If I ever reach those heights of Common Lisp arcana,
    I may change my mind and use macros all the time.

    Chances are, I won't. I have this feeling that macros should be used as
    a last resort, and not as the first /weapon of choice/ when coding Comm-
    on Lisp.


    Common Lisp is big and thererCOs plenty worth using in the rest of the language.


    Indeed, and QuickLisp makes it bigger. It's perhaps the major reason I
    find myself faster at coding certain tasks in Common Lisp than most
    other programming languages. Though packages of various types are now commonplace in other common programming languages.

    Perhaps the major beauty of the Common Lisp social culture, is the disc-
    ipline of keeping interfaces stable. As far as I've heard, the /Python-
    ic/ interfaces are always in flux, perhaps because their Python is ever writhing? It didn't help when they ditched the syntax of Python 2.7.
    Many people whose code got obsolete decided never to use that language
    again. And with good reason.

    Of course, cultures change, but Common Lisp is eternal. I'm sure we can
    still code all of our websites with Hunchentoot without ever having the
    need to learn something new, several hundred years from now.


    Happy coding in Common Lisp!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Aug 9 20:34:23 2026
    From Newsgroup: comp.lang.lisp

    If garbage collection is so good, why donrCOt high-performance operating
    system kernels use it? Why do they prefer reference-counting instead?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sun Aug 9 20:36:33 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 09 Aug 2026 11:50:07 +0100, Aidan Kehoe wrote:

    Common Lisp is big and thererCOs plenty worth using in the rest of the language.

    It leaves out too many things we take for granted in this era of
    pretty much universal POSIX availability.

    Where are the Common Lisp equivalents of these?

    <https://docs.python.org/3/library/subprocess.html> <https://docs.python.org/3/library/threading.html> <https://docs.python.org/3/library/select.html>
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Mon Aug 10 05:32:45 2026
    From Newsgroup: comp.lang.lisp

    On 10/08/2026 4:36 AM, Lawrence DrCOOliveiro wrote:
    On Sun, 09 Aug 2026 11:50:07 +0100, Aidan Kehoe wrote:

    Common Lisp is big and thererCOs plenty worth using in the rest of the
    language.

    It leaves out too many things we take for granted in this era of
    pretty much universal POSIX availability.

    Where are the Common Lisp equivalents of these?

    <https://docs.python.org/3/library/subprocess.html> <https://docs.python.org/3/library/threading.html> <https://docs.python.org/3/library/select.html>

    Now now Lawrence, you don't get to cause trouble for the other students
    of Common Lisp. Just because you're lazy doesn't mean you can expect
    everyone else to look things up for you.

    Please tell us in exquisite details what you're missing from

    https://www.sbcl.org/manual/

    and maybe we can just add it to Steel Bank's Common Lisp!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Aug 9 18:42:29 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 6:00 AM, Lawrence DrCOOliveiro wrote:
    If garbage collection is so good, why donrCOt high-performance operating
    system kernels use it? Why do they prefer reference-counting instead?

    to be a high performance kernel you should not need to do garbage
    collection. GC is for user space, not kernel space. Kernel developers
    are usually very good programmers.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Aug 9 18:47:01 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:


    I think he (it?) may well *be* an LLM.


    I was asked a psychiatrist what an LLM is. Large Language Model makes no
    sense. What is behind this LLM, neural nets? I was thkng that semantic
    nets. How do I go about writing an LLM, no I do not want to use one; I
    want to write one (list is comp.lang.lisp afterall).
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp,comp.lang.c on Sun Aug 9 18:49:36 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    I try to keep in shape by reading books in languages I'm not using. Or converse with people about programming languages I don't use anymore,
    such as Pascal.

    I've managed to keep my French more or less intact, but could use a
    brush up on Danish, and of course German as I said. I'm sure I'll
    find something to inspire me to keep practicing German. After all,
    I'm struggling to read Asterisk and Obelisk in Latin.


    Best wishes, and happy language studies in comp.lang.lisp!


    Have you tried shortwave radio? You'll get all kinds of people talking different languages; not to mention it is rather entertaining.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Aug 9 18:59:19 2026
    From Newsgroup: comp.lang.lisp

    Kaz Kylheku <046-301-5902@kylheku.com> writes:


    Do you think that reader macros are sensible?

    I've not implemented them in TXR Lisp. It's not that they are
    "insensible" or any other epithet.

    They have a disruptive effect in the ecosystem.


    I remeber the orinial discussion that reader macros do nothing more than
    slow down compilation. Not to mention the confusions.

    I liked the idea of

    (with-current-readtable (xyz)
    ...)

    i think franz was doing this, and they added the case of symbols.

    At readtime they can be usefull. When I'm done using the reader macro I reinstall the old one.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Aug 9 19:02:00 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    It is so weird that people use a language whose defining feature is the incremental construction of languages and then say they don't use that feature. I mean, I'm aware people do that, but it's just so fucking weird.

    I do not use CLOS. I already know I am weird.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Aug 9 19:09:04 2026
    From Newsgroup: comp.lang.lisp

    Jyyohann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    I've never really gotten the hang of when I need to use (gensym) and
    and when I don't. If I ever reach those heights of Common Lisp arcana,
    I may change my mind and use macros all the time.

    using macros to enhance performance is usually a bad idea. The macros
    save time.

    (macrolet ((def-optimize (name args &body forms)
    ;; Optimize a function for inlining.
    (assert (symbolp name))
    `(progn
    (declaim (inline ,name))
    (defun ,name ,args
    ;; these
    (declare (optimize speed (compilation-speed 0) (debug 1) (safety 2) (space 0)))
    ,@forms))))

    (def-optimize list-length=1 (lst)
    (declare (list lst))
    "Return T or nil if length of the list <lst> is one."
    (and (consp lst) (null (cdr lst)))
    ))

    I find this better than rewriting a bunch of code or implementing
    defsubst. Macros should not be an initial response. wait until you think
    you need them... IMHO




    Chances are, I won't. I have this feeling that macros should be used as
    a last resort, and not as the first /weapon of choice/ when coding Comm-
    on Lisp.

    Common Lisp is big and thererCOs plenty worth using in the rest of the
    language.


    Indeed, and QuickLisp makes it bigger. It's perhaps the major reason I
    find myself faster at coding certain tasks in Common Lisp than most
    other programming languages. Though packages of various types are now commonplace in other common programming languages.

    Perhaps the major beauty of the Common Lisp social culture, is the disc- ipline of keeping interfaces stable. As far as I've heard, the /Python-
    ic/ interfaces are always in flux, perhaps because their Python is ever writhing? It didn't help when they ditched the syntax of Python 2.7.
    Many people whose code got obsolete decided never to use that language
    again. And with good reason.

    Of course, cultures change, but Common Lisp is eternal. I'm sure we can still code all of our websites with Hunchentoot without ever having the
    need to learn something new, several hundred years from now.


    Happy coding in Common Lisp!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Sun Aug 9 19:12:49 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:

    To be fair, you need to understand that Racket is multi-platform,
    needs to run on Windows, and Windows [for the most part] does not
    implement POSIX functions.

    Can you use CYGwin? it is a bit ugly but it is POSIX. Microsoft should
    be able to introduce a POSIX level (xyz) rather easily; they just don't
    do that. It's like the Xterminal.

    dunno, I cannot use windows 11; it needs a credit card. God bless the
    Free Software Project!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Stefan Monnier@monnier@iro.umontreal.ca to comp.lang.lisp on Sun Aug 9 11:51:34 2026
    From Newsgroup: comp.lang.lisp

    Do you think that reader macros are sensible?
    I've not implemented them in TXR Lisp. It's not that they are
    "insensible" or any other epithet.
    They have a disruptive effect in the ecosystem.

    +1

    Reader macros have been proposed/requested for ELisp several times, but
    we've managed to resist the temptation so far.


    === Stefan
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Mon Aug 10 00:56:32 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-09, tfb wrote:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.


    It is so weird that people use a language whose defining feature is the incremental construction of languages and then say they don't use that feature. I mean, I'm aware people do that, but it's just so fucking weird.

    Why should it be termed "weird" at all? Is this one of these things
    where somebody comes up with a definition of the "normal" way to do
    things and points fingers at anyone who deviates from that? Or is macro
    system usage somehow mandatory for Lisp programming?
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Aug 10 01:46:13 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 06 Aug 2026 19:25:26 -0400, steve g wrote:

    The question I have is "what argument"?

    Since you mentioned MicrosoftrCOs Singularity, letrCOs look in a bit
    more detail at it, shall we?

    It was some kind of OS rCLresearch projectrCY. rCLLetrCOs build yet another microkernelrCY, they thought. As if that wasnrCOt a bad enough idea, they
    also thought rCLletrCOs include garbage collection in the kernelrCY. Perhaps two sufficiently bad ideas, mashed together sufficiently thoroughly,
    will add up to something good?

    So what came out of that research project? Nothing, that I can see. It
    was abandoned, and then disappeared without leaving any trace on the
    world of computer science. Can you find some published papers on it?
    Do they say anything more than rCLthis is not something that should be
    tried againrCY?

    Because if you go to the website, the link to the downloadable
    software disappears off into the ether. It would have gone to
    MicrosoftrCOs old Codeplex site, but that got subsumed into GitHub.
    Except I donrCOt think the Singularity stuff survived the transition.
    Somebody probably thought rCLthis is best forgottenrCY.

    Feel free to prove me wrong. But somehow I donrCOt think you would know
    where to start.

    Of course, you could always regurgitate some AI slop, if you think it
    will help ...
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Aug 10 01:48:49 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    On Wed, 5 Aug 2026 22:00:45 -0000 (UTC), Lawrence DrCOOliveiro wrote:

    If garbage collection is so good, why donrCOt high-performance
    operating system kernels use it? Why do they prefer
    reference-counting instead?

    to be a high performance kernel you should not need to do garbage
    collection.

    But isnrCOt that supposed to be better than reference-counting? Offering
    higher performance or something?

    GC is for user space, not kernel space. Kernel developers are
    usually very good programmers.

    Do different laws of physics apply in kernel space or something?
    And/or is that an admission that garbage collection is not for rCLvery
    good programmersrCY?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Aug 10 00:48:59 2026
    From Newsgroup: comp.lang.lisp

    Stefan Monnier <monnier@iro.umontreal.ca> writes:
    Reader macros have been proposed/requested for ELisp several times, but
    we've managed to resist the temptation so far.

    I remember using them in CL for some kind of embedded DSL, but that kind
    of thing is normally not done with Emacs.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Mon Aug 10 00:54:06 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:
    It is so weird that people use a language whose defining feature is
    the incremental construction of languages and then say they don't use
    that feature. I mean, I'm aware people do that, but it's just so
    fucking weird.

    For a long time, Scheme didn't have macros, but it was still considered
    cool.

    Lisp macros are generally a way for user code to get hold of unevaluated
    args in a sexp. If your language has lazy evaluation (Haskell) and/or syntactic support for your likely macro use cases (lots of languages),
    macros become less important. As Lispers like to say, syntax is no big
    deal. So why obsess about being able to redefine it?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp,comp.lang.c on Mon Aug 10 01:11:03 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    I admit I'm not sure why the select system call seems to be missing from
    this selection of networking functions, so I'm impelled to ask, what is
    is that you use select for, in Python?

    Select is used to listening to a bunch of file descriptors
    simultaneously and unblocking as soon as data becomes available on one
    or more of the fd's. These days it's somewhat superseded by epoll or
    io_uring or a few other alternatives.

    I actually don't see any of these in the sbcl manual, though maybe I
    didn't look hard enough. I'd expect to see it in the streams or
    concurrency modules. You could use threads and mailboxes instead, but
    that's often overkill, especially with posix threads.

    I see a mention of:

    *Recursive Event Loop*: SBCL provides a recursive event loop
    (serve-event) for doing non-blocking IO on multiple streams without
    using threads.

    But I don't see anything more about that in the manual. There's a
    reddit thread saying it's poorly supported:

    https://old.reddit.com/r/Common_Lisp/comments/kdk6mq/how_to_use_serveevent_from_sbcl/

    Anyway that is basically what select is for.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Andreas Eder@a_eder_muc@web.de to comp.lang.lisp on Mon Aug 10 14:21:38 2026
    From Newsgroup: comp.lang.lisp

    On So 09 Aug 2026 at 05:26, Johann 'Myrkraverk' Oskarsson wrote:

    On 06/08/2026 12:13 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 31/07/2026 11:21 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    [...]

    Sadly we've also ended up with programmers who think the machines >>>>>>> they program for are giant PDP-11s, and as a result machines which >>>>>>> spend a huge amount of effort pretending to be giant PDP-11s.

    It's all a tragedy.

    The tragedy is not using Common Lisp for everything.

    I loved this bit and I have a feeling you're correct. My little
    experience with Common Lisp is that it allows me to write the equivalent >>>> fast code that I'd write in C, where speed matters. In other words, I >>>> seem to gain nothing (other than more work) by writing typical
    applications in C.

    The fun is in writing atypical applications, and then finding yourself
    looking at the disassembly in SBCL.
    I actually do that every now and then just to learn a bit more about
    assembly, something I find so cool about SBCL (and lacking in other
    close-to-the-language tools).
    Speaking of which, I decided to try Common Lisp about 2 years ago,
    having struggled to deal with Racket for over ten years, nevertheless
    considering Racket the most elegant Lisp around ever since its birth.
    And, boy, did I never look back.
    (*) A critique of Racket
    To be fair, a big part of my struggle is the thick layer of Racket on
    top of POSIX. For instance, try to locate the equivalent select-call on
    it. It's so hard to recognize exactly how your Racket maps to the lower
    level. I understand that may a strong point of Racket's design, but it
    certainly hits my weakness.
    How about the macro system? So perfect, yet so annoying. One thing I
    love about Common Lisp is precisely macro's (lack of) hygiene. I'm
    totally fine with complete guarantee. Anaphoric macros are so useful.
    (No idea how to implement them in Racket---impossible?)

    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.

    That us exactly where it should be used - when there is no other way.

    'Andreas
    --
    ceterum censeo redmondinem esse delendam
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Andreas Eder@a_eder_muc@web.de to comp.lang.lisp on Mon Aug 10 14:44:46 2026
    From Newsgroup: comp.lang.lisp

    On Mi 05 Aug 2026 at 11:29, tfb wrote:

    George Neuner <gneuner2@comcast.net> wrote:
    In C the situation is complicated even beyond simply not being able to
    find pointers because the standard explicitly permits idioms and code
    optimizations that can obscure what pointers are there.


    I wonder how the Symbolics C compiler dealt with all this horror? That's
    not a rhetorical question: if anyone knows, I'd be interested, because it must have been painful.

    The ZetaLisp C compiler is now in public domain.
    You can have a look at http://www.bitsavers.org/bits/TI/Explorer/zeta-c/

    Apparently there is also a C compiler for Common Lisp at https://github.com/vsedach/Vacietis

    But I never use any, so take that with enough grains of salt.

    'Andreas
    --
    ceterum censeo redmondinem esse delendam
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Mon Aug 10 10:48:48 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:

    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo <anton@safunu.org>
    wrote:


    (*) A critique of Racket

    To be fair, a big part of my struggle is the thick layer of Racket on
    top of POSIX. For instance, try to locate the equivalent select-call
    on it. It's so hard to recognize exactly how your Racket maps to the
    lower level. I understand that may a strong point of Racket's design,
    but it certainly hits my weakness.

    To be fair, you need to understand that Racket is multi-platform,
    needs to run on Windows, and Windows [for the most part] does not
    implement POSIX functions.

    Racket's network [and filesystem, and ... ] implementation tries to
    abstract over equivalent behaviors on all the target platforms.

    I understand that. I shouldn't have written "a critique of Racket" as
    my post is really personal. It's my weakness. I think in terms of POSIX---likely because I started there. I got to know Racket after
    giving myself a year of C and UNIX. Now, in my defense, I think my
    situation would be worse if I had started out in Racket and then later discovered C and UNIX, say. Call me stupid or whatever, but I'm happy
    where I am.

    And by the way some of my complains can also be exactly applied to
    Common Lisp. For instance, I think Common Lisp doesn't have the
    semantics of POSIX's read(2). I suppose there are libraries out there
    that might go lower level (than Common Lisp's) and then give you an
    abstraction that mimics read(2), but that's beside the point.

    In the end I think we need to deal with the likely-fact that we can't
    really write every program as something 100% portable (and not to be
    totally slow at the same time, say).

    But anyway I totally understand your point here. Thanks for sharing.

    How about the macro system? So perfect, yet so annoying. One thing I
    love about Common Lisp is precisely macro's (lack of) hygiene. I'm
    totally fine with complete guarantee. Anaphoric macros are so useful.
    (No idea how to implement them in Racket---impossible?)

    Racket has its roots in Scheme. Scheme is defined in terms of source
    /text/ rather than the compiler's AST. So there is no real equivalent
    of Lisp's AST macros.

    Interesting. I bet this has been one my major difficulties because I had
    never quite understood that and I probably still don't. I had realized
    I always needed to manipulate the syntax objects as opposed to sexps and
    it was always confusing to insert a new identifier into the generating
    code and so on. The blame is of course always on me, but yeah---difficult-to-understand stuff. Common Lisp is a lot simpler, I
    feel. (Let me also say that I was never able to understand Scheme
    compilers' error messages, Racket included.)

    Is there an article out there that elaborate your paragraph here? I'd
    like to learn more about these differences. I suppose the Scheme people
    would have very strong arguments to go their way.

    That said, Racket does support Lisp-like unhygienic macros with 'define-macro'. Apologies for the ridiculous length of the URL.

    https://docs.racket-lang.org/compatibility/defmacro.html#%28form._%28%28lib._compatibility%2Fdefmacro..rkt%29._define-macro%29%29

    We need a project that can promise to shorten and maintain URLs for 50
    years, say. (I say fifty so a single hacker can keep it running during
    his lifetime. After 50 years, a young hacker takes it on for another
    50.) It'a pity that Google Inc. let us down with goo.gl.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From cross@cross@spitfire.i.gajendra.net (Dan Cross) to comp.lang.lisp on Mon Aug 10 14:57:40 2026
    From Newsgroup: comp.lang.lisp

    [-comp.lang.c]

    In article <87jypyqtt4.fsf@nightsong.com>,
    Paul Rubin <no.email@nospam.invalid> wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    I admit I'm not sure why the select system call seems to be missing from
    this selection of networking functions, so I'm impelled to ask, what is
    is that you use select for, in Python?

    Select is used to listening to a bunch of file descriptors
    simultaneously and unblocking as soon as data becomes available on one
    or more of the fd's. These days it's somewhat superseded by epoll or >io_uring or a few other alternatives.

    I actually don't see any of these in the sbcl manual, though maybe I
    didn't look hard enough. I'd expect to see it in the streams or
    concurrency modules. You could use threads and mailboxes instead, but
    that's often overkill, especially with posix threads.

    You can use `select` (or `poll`, `epoll`, `kqueue`, etc) from
    SBCL using the FFI, but most programs use `usocket` or `iolib`
    instead.

    - Dan C.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From cross@cross@spitfire.i.gajendra.net (Dan Cross) to comp.lang.lisp on Mon Aug 10 15:05:07 2026
    From Newsgroup: comp.lang.lisp

    In article <87zeyuvru2.fsf@gmail.com>, steve g <Sgonedes1977@gmail.com> wrote: >Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 6:00 AM, Lawrence DrCOOliveiro wrote:
    If garbage collection is so good, why donrCOt high-performance operating >>> system kernels use it? Why do they prefer reference-counting instead?

    to be a high performance kernel you should not need to do garbage
    collection. GC is for user space, not kernel space. Kernel developers
    are usually very good programmers.

    The problem with wrestling with a pig is that you get covered in
    shit and the pig likes it. Kinda like arguing with Lawrence.

    Of course modern operating systems do things equivalent to
    garbage collection; what does he think RCU is? It is used
    pervasively in his one-true-OS, Linux. Or, really, any of the
    deferred memory reclamation techniques used for high performance
    lock-free data structures in non-GC languages.

    For that matter, there are kernels implemented in garbage
    collected languages; biscuit comes to mind as an example: https://github.com/mit-pdos/biscuit

    - Dan C.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Chris M. Thomasson@chris.m.thomasson.1@gmail.com to comp.lang.lisp,comp.lang.c on Mon Aug 10 13:08:53 2026
    From Newsgroup: comp.lang.lisp

    On 8/8/2026 11:11 AM, Johann 'Myrkraverk' Oskarsson wrote:
    On 07/08/2026 7:36 AM, steve g wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:


    Now is there some particular book you feel is worth my time in German?
    For either studying some C or Lisp arcana?-a Preferably not some basics, >>> as those are already covered in English.

    my answer would be using ITU (international morse code) and looking at
    American (or military) CW (continious wave). Many people claim they have
    learned both from just listening to it on the radio.

    Unfortunately radio is all but dead. This is a good thing; less "traffic
    police".

    As to english books I do have an excellent book one of my teachers gave
    me. it contains all the funky rules of american enhlish. I am not at
    "home" right now so I look it up and I can't remeber the name. She said
    just read and re-scim this book before writing papers in college. This
    is bothering me now...

    I personally think that you need to practice the language to understand
    it.

    I try to keep in shape by reading books in languages I'm not using.-a Or converse with people about programming languages I don't use anymore,
    such as Pascal.

    I've managed to keep my French more or less intact, but could use a
    brush up on Danish, and of course German as I said.-a I'm sure I'll
    find something to inspire me to keep practicing German.-a After all,
    I'm struggling to read Asterisk and Obelisk in Latin.






    Best wishes, and happy language studies in comp.lang.lisp!

    Kind of makes my ears go all pointy wrt, is that from an ai?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Chris M. Thomasson@chris.m.thomasson.1@gmail.com to comp.lang.lisp,comp.lang.c on Mon Aug 10 13:10:14 2026
    From Newsgroup: comp.lang.lisp

    On 8/10/2026 1:11 AM, Paul Rubin wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    I admit I'm not sure why the select system call seems to be missing from
    this selection of networking functions, so I'm impelled to ask, what is
    is that you use select for, in Python?

    Select is used to listening to a bunch of file descriptors
    simultaneously and unblocking as soon as data becomes available on one
    or more of the fd's. These days it's somewhat superseded by epoll or io_uring or a few other alternatives.

    I actually don't see any of these in the sbcl manual, though maybe I
    didn't look hard enough. I'd expect to see it in the streams or
    concurrency modules. You could use threads and mailboxes instead, but
    that's often overkill, especially with posix threads.

    I see a mention of:

    *Recursive Event Loop*: SBCL provides a recursive event loop
    (serve-event) for doing non-blocking IO on multiple streams without
    using threads.

    But I don't see anything more about that in the manual. There's a
    reddit thread saying it's poorly supported:

    https://old.reddit.com/r/Common_Lisp/comments/kdk6mq/how_to_use_serveevent_from_sbcl/

    Anyway that is basically what select is for.

    select works fine, but put it under pressure... Well, no so much... ;^o
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp,comp.lang.c on Mon Aug 10 17:41:30 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    To be fair, a big part of my struggle is the thick layer of Racket
    on top of POSIX. For instance, try to locate the equivalent
    select-call on it. It's so hard to recognize exactly how your Racket
    maps to the lower level. I understand that may a strong point of
    Racket's design, but it certainly hits my weakness.
    Sounds very Java-like. Though perhaps not as irritating as Java.
    Compare Python <https://docs.python.org/3/library/select.html> --
    thatrCOs less than 10 pages (i.e. number of times I have to hit
    Page-Down in the browser) of docs.


    I admit I'm not sure why the select system call seems to be missing from
    this selection of networking functions, [...]

    It would be like writing C in Lisp notation. For select (called unix-fast-select in SBCL), see sb-unix.

    (defun wait-for-stdin-select ()
    (sb-alien:with-alien ((read-fds (sb-alien:struct sb-unix:fd-set)))
    (sb-unix:fd-zero read-fds)
    (sb-unix:fd-set 0 read-fds)
    (format t "Waiting up to 5 seconds for input on stdin... Type something!~%")
    (force-output)
    (multiple-value-bind (count err)
    (sb-unix:unix-fast-select 1 (sb-alien:addr read-fds) nil nil 5 0)
    (cond
    ((null count)
    (format t "Select failed with errno: ~A~%" err))
    ((zerop count)
    (format t "Timeout! No input received.~%"))
    ((sb-unix:fd-isset 0 read-fds)
    (format t "Data is ready to be read from stdin!~%"))
    (t
    (format t "Something else woke up select!~%"))))))

    ;; run it
    (wait-for-stdin-select)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp,comp.lang.c on Mon Aug 10 23:53:00 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 10 Aug 2026 17:41:30 -0300, Anton Antimo wrote:

    For select (called unix-fast-select in SBCL), see sb-unix.

    select(2) is considered an archaic way of doing things these days,
    because of its ABI limitations. The modern way is poll() <https://manpages.debian.org/poll(2)> (POSIX) or even epoll() <https://manpages.debian.org/epoll(7)> (Linux-specific).
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Mon Aug 10 23:55:36 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 10 Aug 2026 10:48:48 -0300, Anton Antimo wrote:

    I think in terms of POSIX---likely because I started there.

    Nothing wrong with that. I agree, and I didnrCOt even start there.

    The general rule nowadays is: beware of language-specific APIs that
    try to abstract away too much of POSIX.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Aug 10 21:10:47 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Thu, 06 Aug 2026 19:25:26 -0400, steve g wrote:

    The question I have is "what argument"?

    Since you mentioned MicrosoftrCOs Singularity, letrCOs look in a bit
    more detail at it, shall we?

    It was some kind of OS rCLresearch projectrCY. rCLLetrCOs build yet another microkernelrCY, they thought. As if that wasnrCOt a bad enough idea, they also thought rCLletrCOs include garbage collection in the kernelrCY. Perhaps two sufficiently bad ideas, mashed together sufficiently thoroughly,
    will add up to something good?

    Any programmer that puts anivirus software on a dedicated database server is weird.


    So what came out of that research project? Nothing, that I can see. It
    was abandoned, and then disappeared without leaving any trace on the
    world of computer science.

    how much money did they burn through for their "talking paper clip AI"
    that was introduced to in the 90s that destroyed the then excellent
    microsoft help system?

    Can you find some published papers on it?
    Do they say anything more than rCLthis is not something that should be
    tried againrCY?

    I wish... From what I understand they are hiring not so great
    programmers, and I would love to hear the boards direction... Luckily I
    only have stock in Microsoft on the India exchange (NO! I am just
    kidding. I do not own stock).

    They do have a new news channel on the TV, it is called MSNOW. I am sure
    this channel will scare us into more of their safety concepts :)

    I can go on and on about this. Microsoft pioneered the concept that
    software should be bought only if it is broken. What ever happened to
    SEARS?

    visio, visual basic v6, msstudio 2005, mp3, dvd, microsoft publisher;
    just to name a few. I got really pissed off when fontographer was not
    permitted to run. They kept a black list of programs that they could
    sink. dunno how they make money...

    Because if you go to the website, the link to the downloadable
    software disappears off into the ether.

    just like microsofts help system.

    Feel free to prove me wrong. But somehow I donrCOt think you would know
    where to start.

    Yes, microsoft makes lots of money by scaring people into thinking that microsoft can fix the problem (the problem that they create of course).

    Of course, you could always regurgitate some AI slop, if you think it
    will help ...

    I already brought up the damn talking paper clip help system from the
    90s :)

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Aug 10 21:18:36 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> writes:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    On Wed, 5 Aug 2026 22:00:45 -0000 (UTC), Lawrence DrCOOliveiro wrote:

    If garbage collection is so good, why donrCOt high-performance
    operating system kernels use it? Why do they prefer
    reference-counting instead?

    to be a high performance kernel you should not need to do garbage
    collection.

    But isnrCOt that supposed to be better than reference-counting? Offering higher performance or something?

    you must be kidding me. GC is always been considered slow.


    GC is for user space, not kernel space. Kernel developers are
    usually very good programmers.

    Do different laws of physics apply in kernel space or something?

    Yes they do. It is like radio circuits; Take ohms law and throw it out.

    And/or is that an admission that garbage collection is not for rCLvery
    good programmersrCY?

    Most programmers that are talented enough to write a kernel can probably
    handle malloc and free. That is why they don't use them.

    People who are not interested in maximum speed would probably have no
    problem with using a GC. Reference counting is not unholy - it is like
    using a goto statement.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Mon Aug 10 21:25:16 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> writes:


    And by the way some of my complains can also be exactly applied to
    Common Lisp. For instance, I think Common Lisp doesn't have the
    semantics of POSIX's read(2). I suppose there are libraries out there
    that might go lower level (than Common Lisp's) and then give you an abstraction that mimics read(2), but that's beside the point.

    In common lisp your can link to C; like visual basic 6. SBCL has
    sb-posix:write already built in. it is the POSIX one, not the cl:write.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Tue Aug 11 11:19:08 2026
    From Newsgroup: comp.lang.lisp


    Ar an deichi|| l|i de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    [...] GC is for user space, not kernel space. Kernel developers are usually very good programmers.

    Do different laws of physics apply in kernel space or something?
    And/or is that an admission that garbage collection is not for rCLvery
    good programmersrCY?

    Let me digress for a moment:

    Within medicine, my day job, decision making should be and mostly is (absent resource constraints) guided by what is right for the patient. (This sounds obvious but it does need to be re-emphasised and re-emphasised as part of training, because it is not always intuitive in the details of every decision made. Every six year old who bumps his or her head should not have a CT brain, for example.) Now, you can obviously ask patients (or parents in that last example) what they feel would be right for the patient, and that is often helpful, but it is not the case that every patient has thought through every specific clinical situation before, and it is not the case that every patient has an informed command of the relevant research.

    In practice, you have to develop a mental picture of what is right for almost everyone. Practically no-one wants to die young (and if they do, practically none of their family members want them to die young, and practically no-one continues to want to die young once the twelve Buckfasts have worn off or their depression is treated). Practically everyone wants to continue to be able to walk. Practically everyone wants to continue to have control of their bowels and bladders. Practically no-one wants to have dementia. No-one wants to die of metastatic cancer. Frail people in their high eighties may not want colonoscopy if they have a change to their bowel habit with some blood in their stool, and, if they are unlikely to be fit for treatment of any bowel cancer that is found, that is very reasonable and it is not a good use of time to attempt to talk them round to the investigation.

    This becomes more important when the patient is not paying directly for their care (they are paying through their taxes, or they have health insurance), since the body that pays for the care is incentivised to minimise investigations and management. If you are employed directly by the body that pays for care part of the job is, often and effectively, to market the investigations and management as necessary to other people in the organisation.

    Digression ended.

    When I returned to software I found it helpful, by analogy to rCLwhat is right for the patientrCY above, to consider what is right for the end user.

    If there were no resource constraints, a fully informed user aware of what is possible would like bug-free software that does exactly what is desired as quickly as the hardware can do it.

    This would require essentially assembler written with the quality of the Apollo code, without an operating system. (IrCOm sure everyone reading this accepts that
    good assembler, if it has no bugs, is going to make better use of the hardware than their language of choice.) This is not going to happen, because we have resource constraints; no-one is going to pay for that. But itrCOs helpful to keep it in mind as a possibility.

    Operating systems, virtual memory, and non-assembler languages are all examples of tools that make programming less demanding and less likely to have bugs. This means that the cost (in time and often in money) of developing software to do a given thing goes down. Portable non-assembler languages have the additional advantage that the development time can be amortised over multiple generations of hardware, reducing the cost further.

    The trade-off is that the resulting software is slower than the above ideal, and, e.g. that my Windows install decides that it is going to update whether I like it or not and the Cygwin terminal that I had open, in the middle of debugging something, with a command history that I would ideally like to have kept, evaporates.

    The question just becomes what point in the trade-off of increasing development time versus decreasing does-exactly-what-I-want-making-best-use-of-the-hardware a given piece of software should make.

    For me, garbage collection as it is actually implemented (I would phrase this -+real existierende Garbage-Collection-2 in German, by analogy with -+real existierender Sozialismus) has a non-negligible runtime cost. This is usually acceptable but sometimes not.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Tue Aug 11 10:00:43 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe <kehoea@parhasard.net> writes:

    Ar an deichi|| l|i de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    [...] GC is for user space, not kernel space. Kernel developers are usually very good programmers.

    Do different laws of physics apply in kernel space or something?
    And/or is that an admission that garbage collection is not for rCLvery good programmersrCY?

    Let me digress for a moment:

    Within medicine, my day job, [...]

    Very cool that we have people from areas such as medicine here. (In
    reality, there's no academic discipline called programming---people in
    Computer Science are more often than not not programmers at all.)
    Medicine, in particular, is an unexpected one. Can you share a bit more
    about your history as in how did you get interested in medicine and
    computers (and Lisp specially)? That'd be cool to hear. (Assuming a
    little social chat is acceptable here given the current low volume.)

    This would require essentially assembler written with the quality of
    the Apollo code, without an operating system. (IrCOm sure everyone
    reading this accepts that good assembler, if it has no bugs, is going
    to make better use of the hardware than their language of choice.)

    Perfectly reasonable.

    The trade-off is that the resulting software is slower than the above
    ideal, and, e.g. that my Windows install decides that it is going to
    update whether I like it or not and the Cygwin terminal that I had
    open, in the middle of debugging something, with a command history
    that I would ideally like to have kept, evaporates.

    Isn't that irritating? Windows is a system that's really not very
    respectful at all with what the user is doing---lots of interruptions
    such as alerts by Windows Defender and whatnot. Many other programmers
    on Windows follow suit, so it's not Microsoft's fault completely. And
    that might be the same thing in the usual GNU system these days. For
    window management, I run CWM, which is one that really only lets
    anything happen that the user has actively made it happen.

    And speaking of Medicine, how is it disrespectful these days as well,
    but I won't digress on this (and it's perhaps just something that
    plagues the entirety of society).
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From scott@scott@slp53.sl.home (Scott Lurndal) to comp.lang.lisp,comp.lang.c on Tue Aug 11 14:29:47 2026
    From Newsgroup: comp.lang.lisp

    Lawrence =?iso-8859-13?q?D=FFOliveiro?= <ldo@nz.invalid> writes:
    On Mon, 10 Aug 2026 17:41:30 -0300, Anton Antimo wrote:

    For select (called unix-fast-select in SBCL), see sb-unix.

    select(2) is considered an archaic way of doing things these days,
    because of its ABI limitations. The modern way is poll() ><https://manpages.debian.org/poll(2)> (POSIX) or even epoll() ><https://manpages.debian.org/epoll(7)> (Linux-specific).

    Both poll(2) and select(2) are fully supported POSIX interfaces.

    select derives from BSD, poll derives from System V.

    There are issues with select (due to the defintion of fd_set)
    that make it unsuitable for certain applications (such as those
    that use file descriptors greater than FD_SETSIZE).

    https://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html https://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Tue Aug 11 11:38:21 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 09 Aug 2026 18:47:01 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:

    tfb <tfb@work.it.out> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:


    I think he (it?) may well *be* an LLM.


    I was asked a psychiatrist what an LLM is. Large Language Model makes no >sense. What is behind this LLM, neural nets? I was thkng that semantic
    nets. How do I go about writing an LLM, no I do not want to use one; I
    want to write one (list is comp.lang.lisp afterall).

    An LLM is an emulation of a neural net. There's plenty of study
    material regarding neural nets.


    Modern implementations forgo the traditional graph representation and
    instead are based on matrix math. Ie. you take a bunch of inputs,
    multiply each input by a weight, offset the result by adding some
    value, then summ and pass the summ put through a (possibly per node)
    equation to get an output. That ptoentially feeds into the inputs of
    the next layer of nodes.

    The difficulty is in getting the topology correct. Too many nodes,
    the nodes start to specialize, too few nodes the results are fuzzy.
    Bad connection scheme - either it doesn't work or training becomes
    very difficult. NNs have been studied since the 1970s, and there are
    known topologies to create various kinds of recognizers and types of
    (app specific) memories. You can (sort of) plug and play using these
    as modules. But still a lot of it is just trial and error. That's why
    so much effort is needed to build them.


    LLMs [I agree it's a stupid name] are hidden node models having tens
    of thousands (or more) of nodes, and many millions of inputs [and
    weights and offsets]. You can't build one without a supercomputer.

    There's a PHd and potential billions of $$$ waiting if you can figure
    out how to make a NN reliably forget something it has learned, without retraining from scratch and without affecting anything else it knows.


    Have fun!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Tue Aug 11 11:45:17 2026
    From Newsgroup: comp.lang.lisp

    On Sun, 09 Aug 2026 19:12:49 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:

    George Neuner <gneuner2@comcast.net> writes:

    To be fair, you need to understand that Racket is multi-platform,
    needs to run on Windows, and Windows [for the most part] does not
    implement POSIX functions.

    Can you use CYGwin? it is a bit ugly but it is POSIX. Microsoft should
    be able to introduce a POSIX level (xyz) rather easily; they just don't
    do that. It's like the Xterminal.

    I'm not aware that Racket can run over Cygwin. If it can, I would bet
    that GUI/graphical programs won't work.

    Certainly you can create an interface to Cygwin and use it directly.
    [You can do this with pretty much any library.]


    dunno, I cannot use windows 11; it needs a credit card. God bless the
    Free Software Project!
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Tue Aug 11 12:20:00 2026
    From Newsgroup: comp.lang.lisp

    On Mon, 10 Aug 2026 10:48:48 -0300, Anton Antimo <anton@safunu.org>
    wrote:

    George Neuner <gneuner2@comcast.net> writes:

    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo <anton@safunu.org>
    wrote:

    How about the [Racket] macro system? So perfect, yet so annoying.
    One thing I love about Common Lisp is precisely macro's (lack of) >>>hygiene. I'm totally fine with complete guarantee. Anaphoric
    macros are so useful. (No idea how to implement them in Racket >>>---impossible?)

    Racket has its roots in Scheme. Scheme is defined in terms of source
    /text/ rather than the compiler's AST. So there is no real equivalent
    of Lisp's AST macros.

    Interesting. I bet this has been one my major difficulties because I had >never quite understood that and I probably still don't. I had realized
    I always needed to manipulate the syntax objects as opposed to sexps and
    it was always confusing to insert a new identifier into the generating
    code and so on. The blame is of course always on me, but >yeah---difficult-to-understand stuff. Common Lisp is a lot simpler, I
    feel. (Let me also say that I was never able to understand Scheme
    compilers' error messages, Racket included.)

    Is there an article out there that elaborate your paragraph here? I'd
    like to learn more about these differences. I suppose the Scheme people >would have very strong arguments to go their way.


    It is implicit in the semantics sections of the R_RS documents. Might
    be explicit in some of them, I don't recall - the earlier documents
    tended to contain more detail about intent, but I haven't (re)read any
    of them in ages. I'm sure I've seen it explicitly stated somewhere,
    but it may have been in some book.
    [One of my college professors was Mitchell Wand who co-wrote
    "Essentials of Programming Languages" and served on the Scheme
    defining committee for many years.]

    TLDR; Scheme's formal semantics are based on the syntax of forms in
    the /external/ representation - ie. the source text - not on any
    compiler's internal representation.


    Also Racket itself technically is not a Scheme, although it evolved
    from (PLT) Scheme, has many similarities to Scheme, and easily can
    emulate Scheme. The current distribution includes an interworking
    emulation of R6RS.


    That said, Racket does support Lisp-like unhygienic macros with
    'define-macro'. Apologies for the ridiculous length of the URL.

    https://docs.racket-lang.org/compatibility/defmacro.html#%28form._%28%28lib._compatibility%2Fdefmacro..rkt%29._define-macro%29%29

    We need a project that can promise to shorten and maintain URLs for 50
    years, say. (I say fifty so a single hacker can keep it running during
    his lifetime. After 50 years, a young hacker takes it on for another
    50.) It'a pity that Google Inc. let us down with goo.gl.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Tue Aug 11 18:31:24 2026
    From Newsgroup: comp.lang.lisp


    Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh Anton Antimo:

    Aidan Kehoe <kehoea@parhasard.net> writes:

    Ar an deichi|| l|i de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    [...] GC is for user space, not kernel space. Kernel developers are usually very good programmers.

    Do different laws of physics apply in kernel space or something? And/or is that an admission that garbage collection is not for rCLvery good programmersrCY?

    Let me digress for a moment:

    Within medicine, my day job, [...]

    Very cool that we have people from areas such as medicine here. (In reality, there's no academic discipline called programming---people in Computer Science are more often than not not programmers at all.) Medicine, in particular, is an unexpected one. Can you share a bit more about your history as in how did you get interested in medicine and computers (and Lisp specially)? That'd be cool to hear. (Assuming a little social chat is acceptable here given the current low volume.)

    My first degree was 1998-2002 and the professor (clearly taking shelter from the first AI winter) assigned the GNU Emacs manual as required reading for the first class. (This is, I understand, not typical.) At that point XEmacs was a better editor so after using GNU Emacs for a few weeks I switched to XEmacs. It still meets my needs and I have no plan to switch away from it.

    2002 was the Dot Com bust, and after six months unemployment following a 2.1 degree from the best university in my country, I ended up in technical support.
    To my surprise, I really enjoyed solving peoplerCOs problems then and there. Continued working in IT here in Europe (got out of technical support given it was clear that was moving to India, was in software development roles) realised I was not going to be able to comfortably raise a family in the roles I was doing.

    2007 my parents pointed me towards a new rCLGraduate Entry MedicinerCY course in
    Dublin, on the US model of requiring another degree but being only four years in length; I realised from the technical support experience that I would likely enjoy the day-to-day of this, and you can comfortably raise a family in medicine in Ireland.

    Studied medicine 2008-2012, worked like a demon 2013-2021, and am no longer at the point where I have to work and study relentlessly to make forward progress.
    Very happy with the job and with my day-to-day, and I finally have a bit of breathing space to be back on Usenet.

    If you use any emacs itrCOs hard to avoid Lisp. Emacs Lisp is not a paragon of good design nor of good implementation-- (aset (symbol-name nil) 0 ?\u0192) , (fillarray obarray 0) , anyone?--so the natural thing is to look around for something better. The consensus within XEmacs was that Common Lisp was better. On investigating, yes, it is. But, XEmacs needs work, no-one else is doing it, so my software work these days is C with a very Common-Lisp-oriented Emacs Lisp.

    This would require essentially assembler written with the quality of
    the Apollo code, without an operating system. (IrCOm sure everyone
    reading this accepts that good assembler, if it has no bugs, is going
    to make better use of the hardware than their language of choice.)

    Perfectly reasonable.

    The trade-off is that the resulting software is slower than the above ideal, and, e.g. that my Windows install decides that it is going to update whether I like it or not and the Cygwin terminal that I had
    open, in the middle of debugging something, with a command history
    that I would ideally like to have kept, evaporates.

    Isn't that irritating? Windows is a system that's really not very respectful at all with what the user is doing---lots of interruptions
    such as alerts by Windows Defender and whatnot. Many other programmers
    on Windows follow suit, so it's not Microsoft's fault completely. And
    that might be the same thing in the usual GNU system these days. For
    window management, I run CWM, which is one that really only lets
    anything happen that the user has actively made it happen.

    The comment wasnrCOt intended to be specifically about Windows, that just happened to be the most recent example that sprung to mind. All the common operating systems take time to boot, time which would ideally be spent doing what you, as the user, actually wish to do. Even resume-from-hibernation is not instant. All of the common operating systems update, often requiring a reboot, taking time which would ideally be spent doing what you, as the user, actually wish to do.

    Even if the update process is manual, e.g. when IrCOm using Debian and migrating
    a server to a new VM, I do not actually want to spend my time working out with trial and error what invocation of certbot will allow me to put Letsencrypt certificates on a new server that already has Apache installed. (Spoiler; spin down Apache, use certbot --certonly, which spins up its own HTTP server.)

    (I certainly donrCOt want to have to migrate well-written PHP of twenty years ago
    that carefully wrapped access to a database using then-best-practice APIs because those APIs are unmaintained and removed, but that is entirely on me, we all know PHP is terrible, and I knew it then. But Debian shouldnrCOt be terrible,
    and in the grand scheme of things it isnrCOt terrible.)

    There are reasons and many of them are good for these things. I donrCOt plan to switch my day-to-day to TempleOS. But that we have them is a trade off.

    And speaking of Medicine, how is it disrespectful these days as well,
    but I won't digress on this (and it's perhaps just something that
    plagues the entirety of society).

    What do you mean? Respect towards and from medicine varies by country. Doctors are regularly assaulted in India by family members of patients unhappy with the patientsrCO care. I get Christmas presents.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Tue Aug 11 18:35:58 2026
    From Newsgroup: comp.lang.lisp

    |------------------------------------------------------------------------------|
    |"If there were no resource constraints, a fully informed user aware of what is|
    |possible would like bug-free software that does exactly what is desired as |
    |quickly as the hardware can do it. |
    | |
    |[. . .] |
    |Operating systems, [. . .] are all examples |
    |of tools that make programming [. . .] less likely to have bugs." |
    |------------------------------------------------------------------------------|
    arsa Aodh|in || Ceoth|inaigh ar an 11|| l|i de mh|! L||nasa 2026.

    Windows is buggy.

    |------------------------------------------------------------------------------|
    |"This means that the cost ([. . .] often in money) of developing software to |
    |do a given thing goes down. [. . .] |
    |[. . .] |
    | |
    |[. . .] |
    |[. . .] my Windows install decides that it is going to update whether I |
    |like it or not" |
    |------------------------------------------------------------------------------|
    arsa Aodh|in || Ciothaigh ar an 11|| l|i de mh|! L||nasa 2026.

    A license for Windows costs money.

    |------------------------------------------------------------------------------|
    |"and the Cygwin terminal that I had open, in the middle of |
    |debugging something, with a command history that I would ideally like to have |
    |kept, evaporates." |
    |------------------------------------------------------------------------------|
    arsa Aodh|in mac Eochadha ar an 11|| l|i de mh|! L||nasa 2026.

    Is BASh on Windoze without its features on gratis operating systems?


    cat .bash_profile
    [. . .]

    unset HISTSIZE
    unset HISTFILESIZE
    mkdir -p ~/backed_up_shell_histories
    cp $HISTFILE ~/"backed_up_shell_histories/bash_history_""`date --reference=$HISTFILE '+timestamped_%Y-%m-%d_%H:%M'`""_backed_up_by_Process"$$"_on_""`date '+%Y-%m-%d_%H:%M'`"
    HISTTIMEFORMAT="%s"

    [. . .]

    shopt -s histappend
    PROMPT_COMMAND='history -a'

    [. . .]



    info bash
    [. . .]

    [. . .]

    'PROMPT_COMMAND'
    If this variable is set, and is an array, the value of each set
    element is interpreted as a command to execute before printing the
    primary prompt ('$PS1'). If this is set but not an array variable,
    its value is used as a command to execute instead.

    [. . .]

    'history'
    history [N]
    history -c
    history -d OFFSET
    history -d START-END
    history [-anrw] [FILENAME]
    history -ps ARG

    With no options, display the history list with line numbers. Lines
    prefixed with a '*' have been modified. An argument of N lists
    only the last N lines. If the shell variable 'HISTTIMEFORMAT' is
    set and not null, it is used as a format string for STRFTIME to
    display the time stamp associated with each displayed history
    entry. No intervening blank is printed between the formatted time
    stamp and the history line.

    Options, if supplied, have the following meanings:

    [. . .]

    '-a'
    Append the new history lines to the history file. These are
    history lines entered since the beginning of the current Bash
    session, but not already appended to the history file.


    ls backed_up_shell_histories/bash_history_timestamped_2023* | wc --lines
    1897

    ls backed_up_shell_histories/bash_history_timestamped_2024* | wc --lines
    2658

    ls backed_up_shell_histories/bash_history_timestamped_2025* | wc --lines
    2963

    wc --bytes backed_up_shell_histories/bash_history_timestamped_2023*
    [. . .]
    48862565 total

    wc --bytes backed_up_shell_histories/bash_history_timestamped_2024*
    [. . .]
    74706247 total

    wc --bytes backed_up_shell_histories/bash_history_timestamped_2025*
    [. . .]
    87638922 total


    Is mise le meas,
    Niocl|iis|!n C||il|!n Glost|-ir
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Tue Aug 11 19:35:58 2026
    From Newsgroup: comp.lang.lisp

    |--------------------------------------------------------|
    |"degree from the best university in my country, [. . .]"| |--------------------------------------------------------|
    arsa Aodh|in ua Ciothaigh ar an 11|| l|i de mh|! L||nasa 2026.

    Chan in |eirinn d'ollscoil ar bith!

    Is mise le meas,
    Niocl|is P||l Caile|in de Ghloucester
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Tue Aug 11 20:56:01 2026
    From Newsgroup: comp.lang.lisp


    Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh C||il|!n Niocl|is|!n Glost|-ir:

    |--------------------------------------------------------|
    |"degree from the best university in my country, [. . .]"| |--------------------------------------------------------|
    arsa Aodh|in ua Ciothaigh ar an 11|| l|i de mh|! L||nasa 2026.

    Chan in |eirinn d'ollscoil ar bith!

    Hmm? The University of Dublin, founded 1592 by Queen Elizabeth as Trinity College Dublin, four Nobel laureates, alumni including Samuel Beckett,
    Oscar Wilde, Denis Burkitt of BurkittrCOs lymphoma is not a university? Where did
    you study, G||ttingen? Heidelberg? Padua?
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Tue Aug 11 21:14:46 2026
    From Newsgroup: comp.lang.lisp


    Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh C||il|!n Niocl|is|!n Glost|-ir:

    |------------------------------------------------------------------------------|
    |"If there were no resource constraints, a fully informed user aware of what is|
    |possible would like bug-free software that does exactly what is desired as |
    |quickly as the hardware can do it. |
    | |
    |[. . .] |
    |Operating systems, [. . .] are all examples |
    |of tools that make programming [. . .] less likely to have bugs." |
    |------------------------------------------------------------------------------|
    arsa Aodh|in || Ceoth|inaigh ar an 11|| l|i de mh|! L||nasa 2026.

    Windows is buggy.

    T|i a fhios agam.

    |------------------------------------------------------------------------------|
    |"This means that the cost ([. . .] often in money) of developing software to |
    |do a given thing goes down. [. . .] |
    |[. . .] |
    | |
    |[. . .] |
    |[. . .] my Windows install decides that it is going to update whether I |
    |like it or not" |
    |------------------------------------------------------------------------------|
    arsa Aodh|in || Ciothaigh ar an 11|| l|i de mh|! L||nasa 2026.

    A license for Windows costs money.

    T|i a fhios agam. Bh|!os ag scr|!obh go ginear|ilta. T|i fadhbanna ag Linux, ag OpenBSD; n|!l aon gh|i le airgead chun OpenBSD a us|iid.

    |------------------------------------------------------------------------------|
    |"and the Cygwin terminal that I had open, in the middle of |
    |debugging something, with a command history that I would ideally like to have |
    |kept, evaporates." |
    |------------------------------------------------------------------------------|
    arsa Aodh|in mac Eochadha ar an 11|| l|i de mh|! L||nasa 2026.

    Is BASh on Windoze without its features on gratis operating systems?

    If I am going to configure my Cygwin environment I will install zsh and turn on its history. ThatrCOs more work, beyond what I actually currently want to do with the computer; thank you for supporting my point.

    I notice you got the leagan Gaeilge of my surname completely wrong on first and second attempts and then the thirdq attempt was much closer to the actuality. Are you by any chance writing your posts using a large language model?

    Is mise le meas,
    Niocl|iis|!n C||il|!n Glost|-ir
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Kaz Kylheku@046-301-5902@kylheku.com to comp.lang.lisp on Tue Aug 11 20:20:47 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-10, Paul Rubin <no.email@nospam.invalid> wrote:
    tfb <tfb@work.it.out> writes:
    It is so weird that people use a language whose defining feature is
    the incremental construction of languages and then say they don't use
    that feature. I mean, I'm aware people do that, but it's just so
    fucking weird.

    For a long time, Scheme didn't have macros, but it was still considered
    cool.

    Lisp macros are generally a way for user code to get hold of unevaluated
    args in a sexp. If your language has lazy evaluation (Haskell) and/or syntactic support for your likely macro use cases (lots of languages),
    macros become less important.

    Suppressing evaluation is not the same thing as delaying evaluation.
    Macfros suppress evaluation so that the expression can be given an
    arbitrary meaning. One such meaning could be that evaluation is delayed,
    e.g. classic (delay <form>) macro, returning a promise. That's only a
    small point in a large universe.

    As Lispers like to say, syntax is no big
    deal. So why obsess about being able to redefine it?

    "Syntax is no big deal" means that in Lisp we drop most of the /bike
    shedding/ about how to design syntax, not that we don't want syntax.
    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @Kazinator@mstdn.ca
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Tue Aug 11 20:21:27 2026
    From Newsgroup: comp.lang.lisp

    |-------------------------------------------------------------------------|
    |" Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh C||il|!n Niocl|is|!n Glost|-ir: |
    | |
    | > |--------------------------------------------------------| |
    | > |"degree from the best university in my country, [. . .]"| |
    | > |--------------------------------------------------------| |
    | > arsa Aodh|in ua Ciothaigh ar an 11|| l|i de mh|! L||nasa 2026. |
    | > |
    | > Chan in |eirinn d'ollscoil ar bith! |
    | | |Hmm? The University of Dublin, founded 1592 by Queen Elizabeth as Trinity| |College Dublin, four Nobel laureates, alumni including Samuel Beckett, | |Oscar Wilde, Denis Burkitt of BurkittrCOs lymphoma is not a university?" | |-------------------------------------------------------------------------| arsa Aodh P||l ua Ceoth|inaigh.

    Dar liom!

    |-------------------------------------------------------------------------| |"Where did | |you study[. . .]?" | |-------------------------------------------------------------------------| arsa Aodh|in ua Ciothaigh.

    Le deirfi||r daoibh.

    Is mise le meas,
    Niocl|is|in Caile|in Glost|-ir
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Tue Aug 11 21:01:23 2026
    From Newsgroup: comp.lang.lisp

    |-------------------------------------------------------------------------------|
    |" Ar an t-aon|| l|i d|-ag" |
    |-------------------------------------------------------------------------------|
    arsa tusa ar an aon|| l|| dh|-ag den mh|! so. (So is not a misspelling of seo.)

    |-------------------------------------------------------------------------------|
    |" de m|! L||nasa, scr|!obh C||il|!n Niocl|is|!n Glost|-ir:" |
    |-------------------------------------------------------------------------------|
    arsa tusa i rith lae de mh|!.

    Aidan Kehoe <kehoea@Parhasard.net> wrote: |-------------------------------------------------------------------------------|
    |"[. . .] T|i fadhbanna ag Linux, ag |
    |OpenBSD; [. . .]" |
    |-------------------------------------------------------------------------------|

    B|!onn ceart agat.

    |--------------------------------------------------------------------------------|
    |"I notice you got the leagan Gaeilge of my surname completely wrong on first and|
    |second attempts [. . .]" |
    |--------------------------------------------------------------------------------|

    Wieso?

    |-------------------------------------------------------------------------------|
    |"Are you by any chance writing your posts using a large language model?" |
    |-------------------------------------------------------------------------------|

    Nein. However, the most recent (almost finished but still unfinished) refereeing by me is for a typescript whose name includes "LLMs".

    Is mise le meas,
    Niocl|is P||l Caile|in de Gloucester
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Tue Aug 11 22:44:49 2026
    From Newsgroup: comp.lang.lisp


    Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh C||il|!n Niocl|is|!n Glost|-ir:

    |Hmm? The University of Dublin, founded 1592 by Queen Elizabeth as Trinity| |College Dublin, four Nobel laureates, alumni including Samuel Beckett, | |Oscar Wilde, Denis Burkitt of BurkittrCOs lymphoma is not a university?" |
    |-------------------------------------------------------------------------| arsa Aodh P||l ua Ceoth|inaigh.

    Dar liom!

    |-------------------------------------------------------------------------| |"Where did | |you study[. . .]?" | |-------------------------------------------------------------------------| arsa Aodh|in ua Ciothaigh.

    Le deirfi||r daoibh.

    Is mise le meas,

    N|!l mor|in meas le l|-amh sa teachtaireacht sin.

    To be clear, for anyone else reading this; if yourCOre going to write to me in Irish and choose to use the Irish version of my name, the Irish version of my name is Aodh|in Mac Eochaidh. Use that. Or use the English version, I donrCOt care, but get one of them right, and stick with that. Nick has been varying the spelling of my surname with each paragraph of each posting, after I made it clear to him that he was doing this.

    In his not particularly humble opinion, one of the universities I attended, details already given, is not a university. He is unwilling to give a useful answer to what university he went to in order to clarify if, in fact, he went to Heidelberg, or G||ttingen, or Padua, or theoretically Stanford, UChicago, Oxford, McMaster, UToronto, where I could seem some argument for a superiority complex. (Three months ago I would have accepted Cambridge in that, but I have recently been very entertained by the saga of Dr Jason Arday.)

    rCLIs mise le meas,rCY is a standard closing to letters in Irish, rCLI am, with respect [to you, the adressee],rCY the undersigned. I donrCOt see much respect in
    that message. I donrCOt plan to respond to Nick beyond this.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Kaz Kylheku@046-301-5902@kylheku.com to comp.lang.lisp on Tue Aug 11 22:14:09 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-10, Andreas Eder <a_eder_muc@web.de> wrote:
    On So 09 Aug 2026 at 05:26, Johann 'Myrkraverk' Oskarsson wrote:
    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.

    That us exactly where it should be used - when there is no other way.

    I don't agree, because that amounts to macros never being used.

    It's never the case that there is no other way, because in place of
    any macro, you can write the expansion by hand.

    Macros should be used when it's better to use them than not.
    It makes the code easier to write, read, maintain.
    That's it.

    When you use CLOS and functions, you are using macros; your program
    is free of macro definitions because you are using ones that
    were provided like defclass and defmethod.

    Macros allowed that CLOS stuff to be developd more like a software project---people experimenting with and iterating on implementations
    of an object system---rather than a committee; though of course
    there was that too.
    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @Kazinator@mstdn.ca
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Tue Aug 11 22:50:15 2026
    From Newsgroup: comp.lang.lisp

    Sorry.

    I believe that no university exists in Ireland. I have the misfortune
    to be a graduate of an Irish fake university.

    No "university" which I used to go to is a real university. I used to
    be enrolled at or be employed at 5 fake universities in 4
    countries. Aidan Kehoe is a graduate of a more prestigous purported
    university (namely Dublin University) than I am a graduate
    of. Lecturer Micheal mac an Airchinnigh of an elite purported
    university of which Aidan Kehoe is a graduate lamented to me about
    lecturing with ProLog instead of a language which Micheal mac an
    Airchinnigh prefers.

    A different employee from that purported university used not
    understand English Word "sycophantic", so she asked me what does
    "sycophantic" mean. That different employee used to work under a
    different highly ranked scientist from the same purported university,
    who expressed ignorance of front-page news which she caused.

    That racist purported university made migrant Doctor Gerald Morgan
    homeless because he is a better English professor than a person of
    Aidan Kehoe's nationality.

    Cf.
    HTTPS://TrinityNews.Ie/2008/10/morgan-facing-potential-eviction
    and this email by Doctor Morgan reproduced by the
    Defending-Academic-Freedom LISTSERV ( HTTPS://WWW.JISCMail.ac.UK/cgi-bin/wa.exe?A0=defending-academic-freedom
    ):

    "Please confirm receipt of this email. As you know, in addition to
    banning me from giving lectures and seminars and launching books in
    College, cancelling at short notice my introduction to the showing of Casablanca on 14 April 2016, returning my post to sender even though
    the College itself has made me homeless, Dublin University (TCD) is
    also interfering in my work (and hence also in the work of the Centre
    of Medieval and Renaissance Studies) by blocking (with what legality,
    I am bound to wonder) emails to former colleagues with email addresses
    in College.

    Hence I ask you to confirm receipt of this email.

    I remind you that the College owes me an apology for the systematic
    violation of my rights as a Fellow since 7 October 2002 and another
    apology for the false allegation of the physical intimidation and
    harassment of a female colleague in the School of English on 6 October
    2002 accompanied by an immediate suspension and ban.

    If there was intimidation of any kind it was intimidation by sheer
    intellectual brilliance, as Carl Schmidt himself intimidated poor
    Denis Bethell (a brilliant medieval historian in hisown right) at UCD
    and CliftonTerrace, Monkstown, in 1969.

    In some ways Trinity College Dublin (78 or 160 in the World-|s
    rankings, way beneath the standard I have aways been accustomed to
    since I entered Jesus College, like Lawrence of Arabia and Harold
    Wilson, as a Meyricke Exhibitioner in 1961) reminds me of English
    referees in banning Danny Simpson [. . .]

    Or perhaps TCD will remind you of the South Yorkshire Police in a
    persistent and intransigent distaste for the truth. -|Truth-| is a philosophically profound matter,of course. What is truth when it comes
    to distinguishing between the incompetent police opening the
    floodgates and the Liverpool supporters climbing over a closed
    barrier?

    As it is I am only at halftime in the 27 year progress to -|truth and justice-|. That is, 13 and a half years,almost precisely, since I was
    suspended and banned without prior interview on 7 October 2002.

    Finally, may I thank you for your work as General Editor in making
    possible the publication of this book in honour of a great scholar at
    a great College (Balliol College, Oxford).

    Very best wishes, Gerald Morgan, FTCD (English Parliamentary Party, 2001)

    England-|s greatest Chaucer scholar from Central (not Upper or Lower) Lydbrook.

    Dr Gerald Morgan, FTCD (1993)
    Lydbrook School (1946-1953),
    Monmouth School (1953-1961),
    Meyricke Exhibitioner, Jesus College, Oxford (1961-1964),
    The Chaucer Hub."

    One can give more examples about that Irish fake university.

    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 07:51:39 2026
    From Newsgroup: comp.lang.lisp

    On 11/08/2026 7:53 AM, Lawrence DrCOOliveiro wrote:
    On Mon, 10 Aug 2026 17:41:30 -0300, Anton Antimo wrote:

    For select (called unix-fast-select in SBCL), see sb-unix.

    select(2) is considered an archaic way of doing things these days,
    because of its ABI limitations. The modern way is poll() <https://manpages.debian.org/poll(2)> (POSIX) or even epoll() <https://manpages.debian.org/epoll(7)> (Linux-specific).

    Dear Lawrence,

    You really don't keep up with the times. The /modern/ way to do this
    is to install FreeBSD over whatever other Unix you may have installed,
    and I suspect it's still S.C.O. UnixWare for you, and then use kqueues.

    https://man.freebsd.org/cgi/man.cgi?kqueue

    On the other hand, if you insist on using the illuminated operating sys-
    stem without cross porting the kqueue mechanism, there's always the port
    API.

    https://www.illumos.org/man/3C/port_create


    Happy queuing!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 07:59:49 2026
    From Newsgroup: comp.lang.lisp

    On 11/08/2026 4:41 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    To be fair, a big part of my struggle is the thick layer of Racket
    on top of POSIX. For instance, try to locate the equivalent
    select-call on it. It's so hard to recognize exactly how your Racket
    maps to the lower level. I understand that may a strong point of
    Racket's design, but it certainly hits my weakness.
    Sounds very Java-like. Though perhaps not as irritating as Java.
    Compare Python <https://docs.python.org/3/library/select.html> --
    thatrCOs less than 10 pages (i.e. number of times I have to hit
    Page-Down in the browser) of docs.


    I admit I'm not sure why the select system call seems to be missing from
    this selection of networking functions, [...]

    It would be like writing C in Lisp notation. For select (called unix-fast-select in SBCL), see sb-unix.

    (defun wait-for-stdin-select ()
    (sb-alien:with-alien ((read-fds (sb-alien:struct sb-unix:fd-set)))
    (sb-unix:fd-zero read-fds)
    (sb-unix:fd-set 0 read-fds)
    (format t "Waiting up to 5 seconds for input on stdin... Type something!~%")
    (force-output)
    (multiple-value-bind (count err)
    (sb-unix:unix-fast-select 1 (sb-alien:addr read-fds) nil nil 5 0)
    (cond
    ((null count)
    (format t "Select failed with errno: ~A~%" err))
    ((zerop count)
    (format t "Timeout! No input received.~%"))
    ((sb-unix:fd-isset 0 read-fds)
    (format t "Data is ready to be read from stdin!~%"))
    (t
    (format t "Something else woke up select!~%"))))))

    ;; run it
    (wait-for-stdin-select)

    Thank you. This is indeed helpful. Unhelpfully, Lawrence is always
    talking about some sort of select in Python, and then talks about
    polling in Linux, when he knows we don't care about the Linux kernel
    here in comp.lang.lisp, because the Steel Banks Common Lisp encapsulates
    the kernel for us.

    I also admit to just using the two or three available socket libraries
    in QuickLisp, whenever I need to deal with raw sockets. I once imple-
    mented a D.N.S. server -- or service -- in Common Lisp, that replied un- helpfully with an error message to every query, as a practice in the
    D.N.S. protocol. I'm not sure if that source code is still public.

    You can trivially make your own, if you need the D.N.S. protocol in
    Common Lisp.

    That code was then adopted and the D.N.S. protocol removed, to do some-
    thing with raw U.D.P. datagrams. That is the beauty of sharing source
    code; one never knows what other people do with it.

    And no, I don't know why Lawrence is always pretending to be a Python influencer here in comp.lang.lisp. I hope he's getting paid for it.


    Happy network coding in Common Lisp!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Aug 12 01:20:35 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 11 Aug 2026 18:35:58 -0000 (UTC), C||il|!n Niocl|is|!n Glost|-ir wrote:

    Is BASh on Windoze without its features on gratis operating systems?

    ItrCOs not about gratis, itrCOs about libre.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Aug 12 01:19:28 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 11 Aug 2026 11:19:08 +0100, Aidan Kehoe wrote:

    This would require essentially assembler written with the quality of
    the Apollo code, without an operating system.

    The Apollo code *did* have an operating system. And remember, it
    crashed twice during the Apollo 11 landing. And got very confused by
    that lightning strike during the Apollo 12 launch.

    For me, garbage collection as it is actually implemented (I would
    phrase this -+real existierende Garbage-Collection-2 in German, by
    analogy with -+real existierender Sozialismus) has a non-negligible
    runtime cost. This is usually acceptable but sometimes not.

    My point exactly. And that cost is greater than that for
    reference-counting, for reasons I have already mentioned. Which is why
    Python and Perl prefer to use reference-counting as a first resort,
    only falling back to garbage collection when there is actual garbage
    to be collected.

    Some stubborn people keep refusing to accept this point.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Wed Aug 12 01:35:24 2026
    From Newsgroup: comp.lang.lisp

    On Tue, 11 Aug 2026 18:31:24 +0100, Aidan Kehoe wrote:

    If you use any emacs itrCOs hard to avoid Lisp. Emacs Lisp is not a
    paragon of good design nor of good implementation-- (aset
    (symbol-name nil) 0 ?\u0192) , (fillarray obarray 0) , anyone?--so
    the natural thing is to look around for something better. The
    consensus within XEmacs was that Common Lisp was better. On
    investigating, yes, it is.

    ItrCOs a museum-worthy spec. Needs updating to, at least support POSIX-type features that we take for granted nowadays.

    Even if the update process is manual, e.g. when IrCOm using Debian and migrating a server to a new VM, I do not actually want to spend my
    time working out with trial and error what invocation of certbot
    will allow me to put Letsencrypt certificates on a new server that
    already has Apache installed. (Spoiler; spin down Apache, use
    certbot --certonly, which spins up its own HTTP server.)

    But you need to be able to keep the certs up to date without having to
    shut down Apache (or whatever web server yourCOre using) each time.

    Trust the standard Debian packages to take care of this automatically.

    (I certainly donrCOt want to have to migrate well-written PHP of
    twenty years ago that carefully wrapped access to a database using then-best-practice APIs because those APIs are unmaintained and
    removed, but that is entirely on me, we all know PHP is terrible,
    and I knew it then.

    I have never developed any web app from scratch in PHP. The only time
    IrCOve used it is to maintain existing code, or write plugins for
    existing code (WordPress, WooCommerce).

    As a language, its features read like a shopping list of sadness.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Tue Aug 11 23:30:53 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe <kehoea@parhasard.net> writes:

    Ar an deichi|| l|i de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    [...] GC is for user space, not kernel space. Kernel developers are usually very good programmers.

    Do different laws of physics apply in kernel space or something?
    And/or is that an admission that garbage collection is not for rCLvery good programmersrCY?

    Let me digress for a moment:

    Within medicine, my day job, decision making should be and mostly is (absent resource constraints) guided by what is right for the patient.

    thank you for your service.

    (This sounds obvious but it does need to be re-emphasised and
    re-emphasised as part of training, because it is not always intuitive
    in the details of every decision made. Every six year old who bumps
    his or her head should not have a CT brain, for example.) Now, you can obviously ask patients (or parents in that last example) what they
    feel would be right for the patient, and that is often helpful, but it
    is not the case that every patient has thought through every specific clinical situation before, and it is not the case that every patient
    has an informed command of the relevant research.

    Oh another doctor that has to mention a CT scan. I slipped last winter
    and hit the back of my head. They took like 10 CT scans over time. They couldn't believe that I was still able to walk. I should mention I weigh
    200 pounds and am 5'7" .

    I believe the purpose of a doctor is to meet the patient at their
    current level of the disease process. At first I was squirting blood all
    over the place. So I cortorized the wound by placing my head in snow;
    while waiting for the ambulance.

    Once they stapled my head back together they started the CT scans. Point
    is CT scans before staples is not a good idea.

    In practice, you have to develop a mental picture of what is right for almost everyone. Practically no-one wants to die young (and if they do, practically none of their family members want them to die young, and practically no-one continues to want to die young once the twelve Buckfasts have worn off or their
    depression is treated). Practically everyone wants to continue to be able to walk. Practically everyone wants to continue to have control of their bowels and bladders. Practically no-one wants to have dementia. No-one wants to die of
    metastatic cancer. Frail people in their high eighties may not want colonoscopy
    if they have a change to their bowel habit with some blood in their stool, and,
    if they are unlikely to be fit for treatment of any bowel cancer that is found,
    that is very reasonable and it is not a good use of time to attempt to talk them round to the investigation.

    we may have a difference of things. It is much easier to lose a child
    then to lose a teenager. Not to mention they are easier to target.
    Memory is a bitch.

    This becomes more important when the patient is not paying directly for their care (they are paying through their taxes, or they have health insurance), since the body that pays for the care is incentivised to minimise investigations and management. If you are employed directly by the body that pays for care part of the job is, often and effectively, to market the investigations and management as necessary to other people in the organisation.

    sadly this is so true in the USA. I live in New Jersey, "The welfare state".

    Digression ended.

    When I returned to software I found it helpful, by analogy to rCLwhat is right
    for the patientrCY above, to consider what is right for the end user.

    yes transference is a bitch.

    If there were no resource constraints, a fully informed user aware of what is possible would like bug-free software that does exactly what is desired as quickly as the hardware can do it.

    In mycology (did I mention I am a bit goofy :) they call it senescence.

    This would require essentially assembler written with the quality of the Apollo
    code, without an operating system. (IrCOm sure everyone reading this accepts that
    good assembler, if it has no bugs, is going to make better use of the hardware
    than their language of choice.) This is not going to happen, because we have resource constraints; no-one is going to pay for that. But itrCOs helpful to keep it in mind as a possibility.

    they actually used a lot of wire wrapping. I've seen some pictures from
    the outside. It is fucking crazy.

    Operating systems, virtual memory, and non-assembler languages are all examples
    of tools that make programming less demanding and less likely to have bugs. This means that the cost (in time and often in money) of developing software to
    do a given thing goes down. Portable non-assembler languages have the additional advantage that the development time can be amortised over multiple generations of hardware, reducing the cost further.

    the business world has a mantra, The good programmers will eliminate
    their job, so you just hire 1000 monkeys to press the keyboard until one
    of them does it right.

    The trade-off is that the resulting software is slower than the above ideal, and, e.g. that my Windows install decides that it is going to update whether I
    like it or not and the Cygwin terminal that I had open, in the middle of debugging something, with a command history that I would ideally like to have kept, evaporates.

    That is assuming you give microsoft your credit card. God bless the free software movement. I am sure many people believe that stallman is crazy;
    he is sometimes very prophetic. I recommend reading his essay on the
    right to read. (it has been some time) He basically describes our (USA)
    current education crisis. The children are not taught to read/write cursive, nor read a clock! It is getting scary; when kids insist that a reality
    agent is zillow.

    The question just becomes what point in the trade-off of increasing development
    time versus decreasing does-exactly-what-I-want-making-best-use-of-the-hardware
    a given piece of software should make.

    For me, garbage collection as it is actually implemented (I would phrase this -+real existierende Garbage-Collection-2 in German, by analogy with -+real existierender Sozialismus) has a non-negligible runtime cost. This is usually acceptable but sometimes not.

    I leave you with this:

    ``Quantum Physics and Human Consciousness

    I don't think there's anything unique about human intelligence. We
    can someday replicate that on a machine.'' -

    Bill Gates in The Most Intriguing People of the Century, p. 101
    People Weekly, People Weekly Books, 1997''.

    I will stay away from my deviance Digression!

    what a plesant conversation. You just made my day a bit brighter and you
    did not even tell me to quit smoking cigarettes :)

    thanx doc.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Tue Aug 11 23:35:39 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> writes:

    Aidan Kehoe <kehoea@parhasard.net> writes:

    Ar an deichi|| l|i de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    [...] GC is for user space, not kernel space. Kernel developers are
    usually very good programmers.

    Do different laws of physics apply in kernel space or something?
    And/or is that an admission that garbage collection is not for rCLvery
    good programmersrCY?

    Let me digress for a moment:

    Within medicine, my day job, [...]

    Very cool that we have people from areas such as medicine here. (In
    reality, there's no academic discipline called programming---people in Computer Science are more often than not not programmers at all.)
    Medicine, in particular, is an unexpected one. Can you share a bit more about your history as in how did you get interested in medicine and
    computers (and Lisp specially)? That'd be cool to hear. (Assuming a
    little social chat is acceptable here given the current low volume.)

    Yes, yes; I want to hear more from the doc!


    This would require essentially assembler written with the quality of
    the Apollo code, without an operating system. (IrCOm sure everyone
    reading this accepts that good assembler, if it has no bugs, is going
    to make better use of the hardware than their language of choice.)

    Perfectly reasonable.

    The trade-off is that the resulting software is slower than the above
    ideal, and, e.g. that my Windows install decides that it is going to
    update whether I like it or not and the Cygwin terminal that I had
    open, in the middle of debugging something, with a command history
    that I would ideally like to have kept, evaporates.

    Isn't that irritating? Windows is a system that's really not very
    respectful at all with what the user is doing---lots of interruptions
    such as alerts by Windows Defender and whatnot. Many other programmers
    on Windows follow suit, so it's not Microsoft's fault completely. And
    that might be the same thing in the usual GNU system these days. For
    window management, I run CWM, which is one that really only lets
    anything happen that the user has actively made it happen.

    And speaking of Medicine, how is it disrespectful these days as well,
    but I won't digress on this (and it's perhaps just something that
    plagues the entirety of society).

    The same way programming is, some people are more talented and more
    motivated to be the best person they can. Some people just don't give a
    shit - they have what we call an external locust of controll. They care
    about perception that science.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Tue Aug 11 20:39:34 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe <kehoea@parhasard.net> writes:
    once the twelve Buckfasts have worn off

    I had to look that up. Wow, that's the medicine we all need, lol.

    https://en.wikipedia.org/wiki/Buckfast_Tonic_Wine
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Tue Aug 11 20:51:21 2026
    From Newsgroup: comp.lang.lisp

    Kaz Kylheku <046-301-5902@kylheku.com> writes:
    Suppressing evaluation is not the same thing as delaying evaluation.

    Laziness can of course suppress evaluation. In Lisp you might have COND
    as a primitive and implement IF as a macro that turns into a COND.
    Haskell has pattern matching as a primitive. It has IF but doesn't
    really need it. You could implement IF like this:

    if' :: Bool -> a -> a
    if' condition val1 val2 = case condition of
    True -> val1
    False -> val2

    Evaluation of one of (val1, val2) is delayed, and the other is
    suppressed.

    The single quote (pronounced prime) being ok to use in identifiers is
    nothing special for Lispers, but it has always made me smile. It's
    intended for math-y names like x' or y', but it also means you can have function names like "isn't", "don't", and so on.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp,comp.lang.c on Tue Aug 11 20:59:34 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    https://man.freebsd.org/cgi/man.cgi?kqueue

    Is this something like io_uring? Is it just for i/o on open fd's or can
    you also use it for stuff like opening files?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 13:07:53 2026
    From Newsgroup: comp.lang.lisp

    On 12/08/2026 11:59 AM, Paul Rubin wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    https://man.freebsd.org/cgi/man.cgi?kqueue

    Is this something like io_uring? Is it just for i/o on open fd's or can
    you also use it for stuff like opening files?

    I admit ignorance of how io_uring works. I haven't done low level code
    like this in Linux for a very long time, and I believe back then io_ur-
    ing didn't exist.

    The kqueue() is for open file descriptors, created as sockets or open
    files, or anything else the FreeBSD kernel decides is a file. I'm not
    aware of any interface to create one and open a file with the same func-
    tion call.


    Hope that helps!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 13:18:40 2026
    From Newsgroup: comp.lang.lisp

    On 09/08/2026 4:52 PM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.


    It is so weird that people use a language whose defining feature is the incremental construction of languages and then say they don't use that feature. I mean, I'm aware people do that, but it's just so fucking weird.


    No the subject of /weird/, I've also found it highly bizarre, if not
    outright disturbing, that people don't use do ... while(); in C. It's
    an eminently useful structured programming pattern.

    On the subject of Common Lisp, I find it more than disturbing when a
    codebase lacks the basic usage of hash tables.

    https://www.sbcl.org/manual/#hash-table-extensions


    Happy coding disturbing things!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp,comp.lang.c on Wed Aug 12 03:23:45 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 12/08/2026 11:59 AM, Paul Rubin wrote:
    Is this something like io_uring? Is it just for i/o on open fd's or can
    you also use it for stuff like opening files?
    The kqueue() is for open file descriptors, created as sockets or open
    files, or anything else the FreeBSD kernel decides is a file. I'm not
    aware of any interface to create one and open a file with the same func-
    tion call.

    I _think_ what Paul was asking was is it possible to get notified when a specific file in the file system is opened. If that's what he's asking,
    then the answer is: yes kqueue/kevent can do that. You open the file in question using O_PATH, and then create a kevent using that descriptor
    with filter EVFILT_VNODE and event NOTE_OPEN.
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 07:50:22 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 12 Aug 2026 03:23:45 -0400, Alan Bawden wrote:

    I _think_ what Paul was asking was is it possible to get notified
    when a specific file in the file system is opened. If that's what
    he's asking, then the answer is: yes kqueue/kevent can do that. You
    open the file in question using O_PATH, and then create a kevent
    using that descriptor with filter EVFILT_VNODE and event NOTE_OPEN.

    There is no POSIX API for this. Linux has inotify(7) for watching
    particular files, and certain kinds of directory operations, and
    fanotify(7) for more general watching of entire
    directories/filesystems.

    <https://manpages.debian.org/inotify(7)> <https://manpages.debian.org/fanotify(7)>
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From bixbox@noreply@example.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 10:16:25 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 09/08/2026 4:52 PM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:
    No the subject of /weird/, I've also found it highly bizarre, if not
    outright disturbing, that people don't use do ... while(); in C. It's
    an eminently useful structured programming pattern.

    Finally, every time that I open a PR with that pattern I get questioned
    and frown. It's such disturbing.


    On the subject of Common Lisp, I find it more than disturbing when a
    codebase lacks the basic usage of hash tables.

    https://www.sbcl.org/manual/#hash-table-extensions

    unless you find some code base that use hash table all over the place.
    :)

    bix
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Wed Aug 12 09:12:55 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> wrote: |-----------------------------------------------------------------------|
    |"> Is BASh on Windoze without its features on gratis operating systems?|
    | | |ItrCOs not about gratis, itrCOs about libre." | |-----------------------------------------------------------------------|

    I use a probably gratis copy of a libre operating system. One can buy
    a libre non-gratis copy.
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp,comp.lang.c on Wed Aug 12 02:22:57 2026
    From Newsgroup: comp.lang.lisp

    Alan Bawden <alan@csail.mit.edu> writes:
    I _think_ what Paul was asking was is it possible to get notified when a specific file in the file system is opened.

    No in linux that's called inotify. io_uring is basically an alternative
    system call interface that's relatively new, and maybe not complete.
    You send off a request to do the system call, and get back a queued
    response when the call is completed, unlike traditional syscalls that
    appear to be synchronous.

    One of the calls you can do that way is opening a file. Historically in
    Unix and Linux, there was no way to do that asynchronously. If you used
    open() and the operation was slow (for example NFS, or even anything on
    a hard disk), your program would be blocked until the call returned. If
    you don't want to block, you have to do the open() in a separate thread.
    GHC and Erlang BEAM have lightweight threads/processes, but they also
    had a pool of OS threads to handle operations like opening files.

    io_uring lets you open files asynchronously, so you can in principle
    simulate an OS in a single user-level process. More typically though,
    io_uring is used as an alternative to something like epoll, for
    listening on lots of sockets at the same time. There are a lot of
    benchmarks around that I think say io_uring is a little faster.
    io_uring also can replace AIO, which never worked very well. AIO was
    for asynchronous disk i/o operations after the file was already open.

    I haven't had occasion to use io_uring yet but I saw its importance when
    it first appeared.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp,comp.lang.c on Wed Aug 12 09:01:41 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 11/08/2026 4:41 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    To be fair, a big part of my struggle is the thick layer of Racket
    on top of POSIX. For instance, try to locate the equivalent
    select-call on it. It's so hard to recognize exactly how your Racket >>>>> maps to the lower level. I understand that may a strong point of
    Racket's design, but it certainly hits my weakness.
    Sounds very Java-like. Though perhaps not as irritating as Java.
    Compare Python <https://docs.python.org/3/library/select.html> --
    thatrCOs less than 10 pages (i.e. number of times I have to hit
    Page-Down in the browser) of docs.


    I admit I'm not sure why the select system call seems to be missing from >>> this selection of networking functions, [...]

    It would be like writing C in Lisp notation. For select (called
    unix-fast-select in SBCL), see sb-unix.
    (defun wait-for-stdin-select ()
    (sb-alien:with-alien ((read-fds (sb-alien:struct sb-unix:fd-set)))
    (sb-unix:fd-zero read-fds)
    (sb-unix:fd-set 0 read-fds)
    (format t "Waiting up to 5 seconds for input on stdin... Type something!~%")
    (force-output)
    (multiple-value-bind (count err)
    (sb-unix:unix-fast-select 1 (sb-alien:addr read-fds) nil nil 5 0) >> (cond
    ((null count)
    (format t "Select failed with errno: ~A~%" err))
    ((zerop count)
    (format t "Timeout! No input received.~%"))
    ((sb-unix:fd-isset 0 read-fds)
    (format t "Data is ready to be read from stdin!~%"))
    (t
    (format t "Something else woke up select!~%"))))))
    ;; run it
    (wait-for-stdin-select)

    Thank you. This is indeed helpful.

    But don't assume I'd ever write something like that in Lisp. Again,
    that's like C programming in Lisp notation. See IOLib, for example.

    Unhelpfully, Lawrence is always talking about some sort of select in
    Python, and then talks about polling in Linux, when he knows we don't
    care about the Linux kernel here in comp.lang.lisp, because the Steel
    Banks Common Lisp encapsulates the kernel for us.

    No sarcasm here. Lawrence has been doing a great service to the current
    USENET. We can say whatever we want about his knowledge or opinions or whatever, but he keeps a lot of people distracted here and I'm sure
    these people are all looking for a distraction. And his distractions
    are not all inadequate. He's usually bring up on-topic things that
    allows people here to exercise their own skills. If these contributions
    are too shallow---well---I'd say that's something we can say about most
    USENET traffic these days. Because we're very low volume these days, I
    think shallow contributions are better than nothing. I prefer the
    shallow chat than no chat at all.

    And no, I don't know why Lawrence is always pretending to be a Python influencer here in comp.lang.lisp. I hope he's getting paid for it.

    From what I can tell, Lawrence never really caught the Lisp culture---it
    can be seen in how he writes Lisp in the occasion he does it. This
    means his criticism aren't very serious. He loves Python, which is a
    way of saying---``thanks, Lisp, for the things you've done for me.''
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 15:23:48 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> wrote:

    I liked the idea of

    (with-current-readtable (xyz)
    ...)


    That is unuseful unless the body is a bunch of file compilations / loads.
    It should be apparent why.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 15:23:49 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> wrote:


    using macros to enhance performance is usually a bad idea.

    Macros are for building languages in which you can express ideas concisely.

    There are two laws of programming:

    (1) All sufficiently large programming systems become programming
    languages.
    (2) However soon you think (1) applies, it applies sooner than
    that.

    Blub languages (not my term) are largely those in which building languages
    is hard. Using Lisp as a blub language has always seemed weird to me.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 15:23:52 2026
    From Newsgroup: comp.lang.lisp

    steve g <Sgonedes1977@gmail.com> wrote:


    using macros to enhance performance is usually a bad idea.

    Macros are for building languages in which you can express ideas concisely.

    There are two laws of programming:

    (1) All sufficiently large programming systems become programming
    languages.
    (2) However soon you think (1) applies, it applies sooner than
    that.

    Blub languages (not my term) are largely those in which building languages
    is hard. Using Lisp as a blub language has always seemed weird to me.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 15:30:03 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> wrote:

    Why should it be termed "weird" at all? Is this one of these things
    where somebody comes up with a definition of the "normal" way to do
    things and points fingers at anyone who deviates from that? Or is macro system usage somehow mandatory for Lisp programming?


    A very long time ago, Lisp had many unique features. Today it has exactly
    one, but that feature is critical. It just seems weird to me to ignore its defining characteristic. Not wrong: weird.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 15:52:47 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:


    For a long time, Scheme didn't have macros, but it was still considered
    cool.


    Scheme-the standard did not: pretty much every implementation did.

    Lisp macros are generally a way for user code to get hold of unevaluated
    args in a sexp.

    Oh please, stop. You are describing fexprs. You can implement fexprs
    with macros (I have like six such fir CL, I can't even remember if I've published any (looks like I have, actually). You can't, in CL or any
    language with semantics anything like similar to it, go the other way.

    If your language has [...]
    syntactic support for your likely macro use cases (lots of languages),
    macros become less important.

    Right, if the language you already has supports every construct anyone
    might ever want to do anything, then nobody needs macros. That language
    is, of course, for all practical purposes, infinite. Its implementation
    will take an infinite amount of time. After, that is, people have agreed
    what the useful constructs *are*.

    As Lispers like to say, syntax is no big
    deal. So why obsess about being able to redefine it?


    Do they say that? Which ones? This one thinks that domain-specific and application-specific languages are useful and thinks that languages with facilities which allow the simple incremental construction of such
    languages are therefore also useful.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 16:25:03 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:


    The Apollo code *did* have an operating system. And remember, it
    crashed twice during the Apollo 11 landing. And got very confused by
    that lightning strike during the Apollo 12 launch.


    It had an OS in roughly the same sense that the 1802 code I used to write
    had an OS.

    It did not crash during the Apollo 11 powered descent. It detected that it couldn't handle all the data, said this, then threw away the data it
    couldn't handle and carried on. It did that by resetting itself, but
    that's not a crash: that was how it was designed to deal with this
    eventuality.

    I think that during the Apollo 12 event the AGC (which was not in use at
    the time: the DSKY was covered up by a checklist until it was removed
    during the event) did say true things: they did in fact lose the platform
    and it didn't know the attitude of the spacecraft as a result. Fortunately
    it didn't need to as the IU was running the ascent
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Wed Aug 12 16:28:06 2026
    From Newsgroup: comp.lang.lisp

    Lawrence DrCOOliveiro <ldo@nz.invalid> wrote: |---------------------------------------------------------------------|
    |"On Tue, 11 Aug 2026 18:31:24 +0100, Aidan Kehoe wrote: |
    |[. . .] |
    (I certainly donrCOt want to have to migrate well-written PHP of | twenty years ago that carefully wrapped access to a database using | then-best-practice APIs because those APIs are unmaintained and | removed, but that is entirely on me, we all know PHP is terrible, |
    and I knew it then. |
    | |
    |I have never developed any web app from scratch in PHP. The only time|
    |IrCOve used it is to maintain existing code, or write plugins for | |existing code (WordPress, WooCommerce). |
    | |
    |As a language, its features read like a shopping list of sadness." | |---------------------------------------------------------------------|

    WordPress. Ugh!
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Wed Aug 12 16:31:01 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    A very long time ago, Lisp had many unique features. Today it has exactly >one, but that feature is critical. It just seems weird to me to ignore its >defining characteristic. Not wrong: weird.

    Reddit concluded that with macros they were now supposed to learn
    to read several entirely unique, personalized programming languages,
    and preferred to rewrite their system in Python.

    Python's wrappers and resource contexts give developers a way to
    pass executable blocks to functions or objects achieving what devel-
    opers often use macros for without exposing the chaotic power of
    full AST manipulation.

    Python Example (without the implementation of the "macros")

    @html_element("div")
    def render_page():
    with html_block("p"):
    print(" Hello, world! This is nested content.")

    render_page()

    Output

    <div>
    <p>
    Hello, world! This is nested content.
    </p>
    </div>

    Python Example (with the implementation of the "macros")

    import functools
    from contextlib import contextmanager

    def html_element(tag):
    def decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
    print(f"<{tag}>")
    result = func(*args, **kwargs)
    print(f"</{tag}>")
    return result
    return wrapper
    return decorator

    @contextmanager
    def html_block(tag):
    print(f" <{tag}>")
    try:
    yield
    finally:
    print(f" </{tag}>")

    @html_element("div")
    def render_page():
    with html_block("p"):
    print(" Hello, world! This is nested content.")

    render_page()


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Wed Aug 12 16:52:32 2026
    From Newsgroup: comp.lang.lisp

    Steve G <SGonedes1977@GMail.com> wrote: |----------------------------------------------------------------------------| |"Aidan Kehoe <kehoea@parhasard.net> writes: | |[. . .] | | | |[. . .] | |[. . .] stallman [. . .] | |he is sometimes very prophetic. I recommend reading his essay on the | |right to read." | |----------------------------------------------------------------------------|

    Dear Mister Stephen G:

    I had bought many books. They have been robbed. I never got to read
    them :(

    |----------------------------------------------------------------------------| |"[. . .] He basically describes our (USA) | |current education crisis. The children are not taught to read/write cursive,| |[. . .]" | |----------------------------------------------------------------------------|

    I do not write cursive writings. I am an Asperger autist.

    A neighbor in Ireland recently alleged to me that children here are
    not taught to write handwriting at all - not just not cursive
    handwritings! Handwriting is too important to be neglected!

    A journalist reported more than 3 years ago that a primary school
    which is located at the end of a route of circa 5.5 miles (according
    to
    HTTPS://WWW.ViaMichelin.com
    ) from me stopped using books! A primary school might be what you call
    an elementary school. The pupils in a primary school are younger than teenagers. A neighbor is related to a teacher here. This teacher
    laughed at a relative because this non-teacher relative uses a
    dictionary instead of Google.

    |----------------------------------------------------------------------------| |"[. . .] you | |did not even tell me to quit smoking cigarettes :)" | |----------------------------------------------------------------------------|

    Do not smoke :)
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Wed Aug 12 13:06:51 2026
    From Newsgroup: comp.lang.lisp


    ADDENDUM

    On Tue, 11 Aug 2026 12:20:00 -0400, George Neuner
    <gneuner2@comcast.net> wrote:

    On Mon, 10 Aug 2026 10:48:48 -0300, Anton Antimo <anton@safunu.org>
    wrote:

    George Neuner <gneuner2@comcast.net> writes:

    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo <anton@safunu.org>
    wrote:

    How about the [Racket] macro system? So perfect, yet so annoying.
    One thing I love about Common Lisp is precisely macro's (lack of) >>>>hygiene. I'm totally fine with complete guarantee. Anaphoric
    macros are so useful. (No idea how to implement them in Racket >>>>---impossible?)

    Racket has its roots in Scheme. Scheme is defined in terms of source
    /text/ rather than the compiler's AST. So there is no real equivalent
    of Lisp's AST macros.

    :
    Is there an article out there that elaborate your paragraph here? I'd
    like to learn more about these differences. I suppose the Scheme people >>would have very strong arguments to go their way.

    :

    It is implicit in the semantics sections of the R_RS documents. Might
    be explicit in some of them, I don't recall - the earlier documents
    tended to contain more detail about intent, but I haven't (re)read any
    of them in ages. I'm sure I've seen it explicitly stated somewhere,
    but it may have been in some book.
    [One of my college professors was Mitchell Wand who co-wrote
    "Essentials of Programming Languages" and served on the Scheme
    defining committee for many years.]

    TLDR; Scheme's formal semantics are based on the syntax of forms in
    the /external/ representation - ie. the source text - not on any
    compiler's internal representation.

    R6RS has in Appendix (A) a discussion of the formal semantics in which
    they do state that Scheme's denotation semantics are based on
    /strings/. Unfortunately the statement is offhand and the discussion
    itself is non-normative.

    So far I haven't been able to find it stated explicitly in any
    normative (authoritative) source, but I don't have access to the ISO
    or IEEE standard documents.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 17:07:09 2026
    From Newsgroup: comp.lang.lisp

    Stefan Ram <ram@zedat.fu-berlin.de> wrote:

    Reddit concluded that with macros they were now supposed to learn
    to read several entirely unique, personalized programming languages,
    and preferred to rewrite their system in Python.

    If that's a problem for you, I'd suggest doing the same. But, if this was
    the reason (fully willing to believe it was the reason) what it actually
    means is that their development practices were deeply, deeply shit. In particular they had so little coordination that they allowed individual developers to implement their own sets of, presumably undocumented,
    macrology, so people couldn't read each other's code. what they should have been doing is developing *a* language to deal with the problem domain, not
    six.

    Presumably the macros themselves were poorly designed, because half the
    purpose of well-designed constructs is to be easy to read. It shouldn't be hard for anyone who writes Lisp to guess what

    (for ((e (in-list l)
    (i (in-vector v)))
    ...)

    does, or

    (destructuring-match thing
    ((a) ...)
    ((a b) ...)
    (otherwise ...))

    does.

    More to the point by 2005 there were loads of Python web frameworks and
    loads of mostly-replacable Python programmers: what company wouldn't want
    that.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Wed Aug 12 17:16:00 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> wrote:

    R6RS has in Appendix (A) a discussion of the formal semantics in which
    they do state that Scheme's denotation semantics are based on
    /strings/. Unfortunately the statement is offhand and the discussion
    itself is non-normative.

    I think it's pretty clear. If you look at the formal syntax there is, for instance a definition of a list (it's one of the options for <datum>, but a procedure call is (<operator> <operand>*): it's not defined in terms of a
    list at all.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Wed Aug 12 17:20:24 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> wrote or quoted:
    Stefan Ram <ram@zedat.fu-berlin.de> wrote:
    Reddit concluded that with macros they were now supposed to learn
    to read several entirely unique, personalized programming languages,
    and preferred to rewrite their system in Python.
    If that's a problem for you, I'd suggest doing the same. But, if this was >the reason (fully willing to believe it was the reason)

    AFAIK it was not the only reason.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Chris M. Thomasson@chris.m.thomasson.1@gmail.com to comp.lang.lisp,comp.lang.c on Wed Aug 12 12:59:36 2026
    From Newsgroup: comp.lang.lisp

    On 8/11/2026 8:59 PM, Paul Rubin wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    https://man.freebsd.org/cgi/man.cgi?kqueue

    Is this something like io_uring? Is it just for i/o on open fd's or can
    you also use it for stuff like opening files?

    io_uring is meant for io completion. Its more low level than IOCP over
    on the windozer. Heck, on win, we can use it (IOCP) for files and
    sockets. io_uring takes special care with padding and alignment to get
    the mmapped memory to work with the kernel.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Wed Aug 12 23:23:32 2026
    From Newsgroup: comp.lang.lisp


    Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh Paul Rubin:

    Aidan Kehoe <kehoea@parhasard.net> writes:
    once the twelve Buckfasts have worn off

    I had to look that up. Wow, that's the medicine we all need, lol.

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

    If you ever visit the UK (or Ireland), I strongly recommend that you do not try Buckfast. You likely will not end up in the Emergency Department, but it will add nothing constructive to your stay. (And you *might* end up in the Emergency Department, and you might start a fight with someone you would otherwise not have started a fight with, and, well, itrCOs great to have a working mandible.q)
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Alan Bawden@alan@csail.mit.edu to comp.lang.lisp,comp.lang.c on Wed Aug 12 20:55:55 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    Alan Bawden <alan@csail.mit.edu> writes:
    I _think_ what Paul was asking was is it possible to get notified when a
    specific file in the file system is opened.

    No in linux that's called inotify. io_uring is basically an alternative system call interface that's relatively new, and maybe not complete.
    You send off a request to do the system call, and get back a queued
    response when the call is completed, unlike traditional syscalls that
    appear to be synchronous.

    Ah! I didn't understand your original question because I didn't have
    the context of knowing what io_uring was. Thanks for introducing me to something new.
    --
    Alan Bawden
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Thu Aug 13 11:20:20 2026
    From Newsgroup: comp.lang.lisp

    On 12/08/2026 8:01 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 11/08/2026 4:41 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    To be fair, a big part of my struggle is the thick layer of Racket >>>>>> on top of POSIX. For instance, try to locate the equivalent
    select-call on it. It's so hard to recognize exactly how your Racket >>>>>> maps to the lower level. I understand that may a strong point of
    Racket's design, but it certainly hits my weakness.
    Sounds very Java-like. Though perhaps not as irritating as Java.
    Compare Python <https://docs.python.org/3/library/select.html> --
    thatrCOs less than 10 pages (i.e. number of times I have to hit
    Page-Down in the browser) of docs.


    I admit I'm not sure why the select system call seems to be missing from >>>> this selection of networking functions, [...]

    It would be like writing C in Lisp notation. For select (called
    unix-fast-select in SBCL), see sb-unix.
    (defun wait-for-stdin-select ()
    (sb-alien:with-alien ((read-fds (sb-alien:struct sb-unix:fd-set)))
    (sb-unix:fd-zero read-fds)
    (sb-unix:fd-set 0 read-fds)
    (format t "Waiting up to 5 seconds for input on stdin... Type something!~%")
    (force-output)
    (multiple-value-bind (count err)
    (sb-unix:unix-fast-select 1 (sb-alien:addr read-fds) nil nil 5 0) >>> (cond
    ((null count)
    (format t "Select failed with errno: ~A~%" err))
    ((zerop count)
    (format t "Timeout! No input received.~%"))
    ((sb-unix:fd-isset 0 read-fds)
    (format t "Data is ready to be read from stdin!~%"))
    (t
    (format t "Something else woke up select!~%"))))))
    ;; run it
    (wait-for-stdin-select)

    Thank you. This is indeed helpful.

    But don't assume I'd ever write something like that in Lisp. Again,
    that's like C programming in Lisp notation. See IOLib, for example.

    Unhelpfully, Lawrence is always talking about some sort of select in
    Python, and then talks about polling in Linux, when he knows we don't
    care about the Linux kernel here in comp.lang.lisp, because the Steel
    Banks Common Lisp encapsulates the kernel for us.

    No sarcasm here. Lawrence has been doing a great service to the current USENET. We can say whatever we want about his knowledge or opinions or whatever, but he keeps a lot of people distracted here and I'm sure
    these people are all looking for a distraction. And his distractions
    are not all inadequate. He's usually bring up on-topic things that
    allows people here to exercise their own skills. If these contributions
    are too shallow---well---I'd say that's something we can say about most USENET traffic these days. Because we're very low volume these days, I
    think shallow contributions are better than nothing. I prefer the
    shallow chat than no chat at all.

    And I prefer polite chat, such as the one we are now having. Thank you.

    I can only talk about my own skillset in Common Lisp, which I will prob-
    ably have to say is not that great, having used it much less in anger
    than C -- and prior to that, C++ but that's a different story -- and so
    I got myself all the Lisp books I have amassed, most or all of them al-
    ready mentioned in various topics here in comp.lang.lisp.

    That said, life happened, and continues to happen, so I don't know when
    I'll get to increase my skillset in Lisp. As everyone in comp.lang.c
    knows, I'm currently going through Appel's compiler book in C, and well,
    also took a detour by re-reading Loudon's /Mastering Algorithms in C/,
    which while somewhat basic in the C, is very good at giving practical
    examples of the data structures in question.

    I've previously mentioned a similar book in Lisp, by Domkin. I'll get
    to it one of these decades.


    And no, I don't know why Lawrence is always pretending to be a Python
    influencer here in comp.lang.lisp. I hope he's getting paid for it.

    From what I can tell, Lawrence never really caught the Lisp culture---it
    can be seen in how he writes Lisp in the occasion he does it. This
    means his criticism aren't very serious. He loves Python, which is a
    way of saying---``thanks, Lisp, for the things you've done for me.''

    I'm not sure I did either, to be honest. I just find it fascinating in
    many ways, and wish to increase my own skillset in Lisp, and of course,
    get a better immersion in the culture.

    Personally, I think Lisp people need -- well, need is a strong word, but
    I'll go with it -- to get a little bit more behind the notion of practi- cality. I mean, the Steel Banks Common Lisp is fine, but many others
    aimed at beginners are exclusively geared towards facing the programmer
    him- -- or her- -- self. There is very little attention paid to the de-
    tails of creating binaries to share with friends. And by this, I mean
    the parts of the programmer facing documentation. I believe the Steel
    Banks Common Lisp manual does not mention how to create binary executa-
    bles? I believe I learned that from /Stack Overflow/ which everyone
    here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    Games with Gabe wrote* about that extensively in his YouTube video, at

    https://www.youtube.com/watch?v=IbDAmvUwo5c

    and I heartily agree.

    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.

    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp. I mean, the Steel Banks Common
    Lisp garbage collector cannot be worse than the old one in Unity, and
    I currently believe C.L.O.S. is eminently suitable for three dimensional
    game objects.

    What do you think?


    * Here I'm making fun of the YouTubian culture of only ever talk** about videos, and never anything published in books. "This guy made a video
    about something, and I'm going to talk about too" is the typical intro
    duction, if I remember correctly. I don't watch much of YouTube any-
    more.

    ** I'm going to leave this grammatical error.
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Thu Aug 13 11:33:20 2026
    From Newsgroup: comp.lang.lisp

    On 12/08/2026 3:50 PM, Lawrence DrCOOliveiro wrote:
    On Wed, 12 Aug 2026 03:23:45 -0400, Alan Bawden wrote:

    I _think_ what Paul was asking was is it possible to get notified
    when a specific file in the file system is opened. If that's what
    he's asking, then the answer is: yes kqueue/kevent can do that. You
    open the file in question using O_PATH, and then create a kevent
    using that descriptor with filter EVFILT_VNODE and event NOTE_OPEN.

    There is no POSIX API for this. Linux has inotify(7) for watching
    particular files, and certain kinds of directory operations, and
    fanotify(7) for more general watching of entire
    directories/filesystems.

    <https://manpages.debian.org/inotify(7)> <https://manpages.debian.org/fanotify(7)>

    Lawrence, we don't care about Posix here in comp.lang.lisp, nor do we
    care about what the Linux kernel people think is a good idea. They al-
    most never have good ideas anyway.

    So stop trying to force Posix discussion into kqueues and Illumos ports,
    unless you're also working for the Open Group, and trying to get some
    things standardized.
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.lang.c on Thu Aug 13 11:37:29 2026
    From Newsgroup: comp.lang.lisp

    On 12/08/2026 3:23 PM, Alan Bawden wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 12/08/2026 11:59 AM, Paul Rubin wrote:
    Is this something like io_uring? Is it just for i/o on open fd's or can >>> you also use it for stuff like opening files?
    The kqueue() is for open file descriptors, created as sockets or open
    files, or anything else the FreeBSD kernel decides is a file. I'm not
    aware of any interface to create one and open a file with the same func-
    tion call.

    I _think_ what Paul was asking was is it possible to get notified when a specific file in the file system is opened. If that's what he's asking,
    then the answer is: yes kqueue/kevent can do that. You open the file in question using O_PATH, and then create a kevent using that descriptor
    with filter EVFILT_VNODE and event NOTE_OPEN.


    Thank you. Are you aware of any book on this subject? One that teaches
    the ins and outs of how to use kqueues in FreeBSD? Something similar to /Advanced Programming in the UNIX Environment/ by Stevens?
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Wed Aug 12 20:46:39 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp.

    I mentioned Land of Lisp a couple days ago. Its sample programs are
    games, if that helps. They're closer to Hunt the Wumpus than to a
    modern AAA game, but it's a start.

    You might also like Tim Sweeney's old slide deck about a hypothetical
    new language for game dev:

    https://groups.csail.mit.edu/cag/crg/papers/sweeney06games.pdf
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Aug 13 05:03:50 2026
    From Newsgroup: comp.lang.lisp

    On Wed, 12 Aug 2026 16:28:06 -0000 (UTC), C||il|!n Niocl|is|!n Glost|-ir wrote:

    WordPress. Ugh!

    WordPress is, I suspect one of the better collections of PHP code
    around, simply through sheer necessity, after its developers have had
    their heads banged together multiple times over security holes and the
    like.

    But it still has its bits of sadness. Like the way it does multisite
    support by duplicating table schemas with different prefixes assigned
    to the table names. That is rCLUgh!rCY indeed.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Thu Aug 13 14:28:06 2026
    From Newsgroup: comp.lang.lisp

    On 13/08/2026 11:46 AM, Paul Rubin wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp.

    I mentioned Land of Lisp a couple days ago. Its sample programs are
    games, if that helps. They're closer to Hunt the Wumpus than to a
    modern AAA game, but it's a start.

    Yes, thank you. It's still in my shopping cart since a few days ago,
    and is likely to remain there until I start to get paychecks again.

    Sadly the new job I have lined up doesn't make use of Common Lisp yet,
    yet I have high hopes I can change that.


    You might also like Tim Sweeney's old slide deck about a hypothetical
    new language for game dev:

    https://groups.csail.mit.edu/cag/crg/papers/sweeney06games.pdf


    I'll keep it in mind.
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From bixbox@noreply@example.invalid to comp.lang.lisp on Thu Aug 13 11:46:25 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> writes:

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp.

    I mentioned Land of Lisp a couple days ago. Its sample programs are
    games, if that helps. They're closer to Hunt the Wumpus than to a
    modern AAA game, but it's a start.

    I second Land of Lisp, not only because there is an example of game, but moreover because, as I have to work with C/C++ at work, the way that the
    design is approached is very Lispy and refreshing to me, and something
    that in my day to day job I have no opportunity to explore and learn
    and practice.

    bix
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From bixbox@noreply@example.invalid to comp.lang.lisp on Thu Aug 13 12:35:00 2026
    From Newsgroup: comp.lang.lisp

    Mario Rosell <mario@mariorosell.es> writes:

    Hello everyone!

    I want to learn Common Lisp, but I don't really know what resources to
    use.

    What did you all use to learn? Is that even relevant? Is this newsgroup active?

    Book already mentioned that was very useful to me, apologies to re-post
    1. Practical Common Lisp
    2. OnLisp
    3. Land Of Lisp

    one of my favorites but it's maybe controversial is Let Over Lambda

    A proper setup with Emacs with Sly, and lately I was able to enable
    open local HyperSpec from a symbol ( that was a game changer for my brain
    that can not hold to much info and unfortunately I have to use C++ at work).

    Quicklisp is very very handy, and I'm trying to setup quicklisp lookup
    textinfo from symbol as well similar to the HyperSpec, but the mileage
    vary here.


    bix


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anthk GM@anthk@disroot.org to comp.lang.lisp on Thu Aug 13 13:40:15 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-02, Lawrence DrCOOliveiro <ldo@nz.invalid> wrote:
    On Sun, 02 Aug 2026 16:42:37 +0000, kotorifan wrote:

    For learning the basics about the language I highly recommend the
    book "Practical Common Lisp" by Peter Seibel.

    Common Lisp is a museum-worthy spec by this point. There needs to be something more modern, not so full of legacy baggage tied to old, proprietary, pre-POSIX OS platforms which are all extinct by now.

    Also it does help to have a background in Emacs Lisp ...

    Emacs Lisp contains some useful functionality beyond that specified by
    Common Lisp, but it still isnrCOt really enough for a general-purpose programming language. Not in this day and age.

    SBCL tells me otherwise, ditto with the Kandria engine,
    or projects like Nyxt. Also, Coalton + Quilc in quantum
    mechanics basically makes any 'legacy' assumption on
    CL laughable.

    Good luck with the Scheme maze of SRFI's, ice-9's
    in guile vs eggs in Chicken and then the RSRx's.
    And, yes, I love SICP, and doing Chicken Scheme
    through it. But fragmentation made Scheme a broken
    dream.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Thu Aug 13 11:42:36 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe <kehoea@parhasard.net> writes:

    Ar an t-aon|| l|i d|-ag de m|! L||nasa, scr|!obh Anton Antimo:

    Aidan Kehoe <kehoea@parhasard.net> writes:

    Ar an deichi|| l|i de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Sun, 09 Aug 2026 18:42:29 -0400, steve g wrote:

    [...] GC is for user space, not kernel space. Kernel developers are usually very good programmers.

    Do different laws of physics apply in kernel space or something? And/or
    is that an admission that garbage collection is not for rCLvery good programmersrCY?

    Let me digress for a moment:

    Within medicine, my day job, [...]

    Very cool that we have people from areas such as medicine here. (In reality,
    there's no academic discipline called programming---people in Computer Science are more often than not not programmers at all.) Medicine, in particular, is an unexpected one. Can you share a bit more about your history as in how did you get interested in medicine and computers (and Lisp
    specially)? That'd be cool to hear. (Assuming a little social chat is acceptable here given the current low volume.)

    My first degree was 1998-2002 and the professor (clearly taking
    shelter from the first AI winter) assigned the GNU Emacs manual as
    required reading for the first class. (This is, I understand, not
    typical.)

    Very atypical these days. Your first degree must have been Computer
    Science? So you got two degrees. Having a degree or not in such areas,
    I think that understanding the fundamentals of computers and programming
    is a pretty good skill these days. There might be other areas I miss
    for sheer lack of wisdom here.

    I took a ``programming 102'' engineering class a few years ago in which
    the professor offered us a ZIP package containing the GNU EMACS set up
    with Python. Students on the first day of class protested against their ``programming 101'' (a Python primer) saying it was essentially useless
    with no real-world anything (which I fully agree: that course's real
    objective was to teach us the syntax of Python [with no OOP, which is
    the job of ``programming 102'']).

    The professor replied saying he would present us with some illustrations
    of real-world stuff. To my surprise, one of these things was the GNU
    EMACS. His EMACS came with all of its default configuration but some additional ones for people to run Python and ESHELL. (To run it, we'd
    double click on a icon on the desktop.) Students were welcome to ignore
    it all and use Python's IDLE or whatever, which I think 99% of them did.
    What students couldn't ignore, which was cool (lol), was that the way to
    turn in homework was through fossil. The professor introduced us to
    fossil in another lecture, saying he chose fossil over git due to
    slightly greater simplicity (compared to git, which I couldn't quite
    see). I was likely the one exception that didn't struggle with
    fossil----I had never heard of it until then, but I've been using git
    for years. Anyway, after these lectures, he went on with the course,
    which didn't work very well at all because I think after the GNU EMACS
    and fossil most students had already given up on him---there were many
    other professors teaching the same course in a way that it had a lot
    less new things to learn.

    At that point XEmacs was a better editor so after using GNU Emacs for
    a few weeks I switched to XEmacs. It still meets my needs and I have
    no plan to switch away from it.

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my intuition
    says XEmacs started out with coloring? IIRC, Stallman or someone would
    have said that the idea was not properly designed. I can't recall, but
    I might research the question and report back here.

    2002 was the Dot Com bust, and after six months unemployment following
    a 2.1 degree from the best university in my country, I ended up in
    technical support. To my surprise, I really enjoyed solving peoplerCOs problems then and there. Continued working in IT here in Europe (got
    out of technical support given it was clear that was moving to India,
    was in software development roles) realised I was not going to be able
    to comfortably raise a family in the roles I was doing.

    Understandable. (I began in technical support as well, but ``I ended
    up'' a mathematician.)

    2007 my parents pointed me towards a new rCLGraduate Entry MedicinerCY
    course in Dublin, on the US model of requiring another degree but
    being only four years in length; I realised from the technical support experience that I would likely enjoy the day-to-day of this, and you
    can comfortably raise a family in medicine in Ireland.

    That makes sense.

    Studied medicine 2008-2012, worked like a demon 2013-2021, and am no
    longer at the point where I have to work and study relentlessly to
    make forward progress. Very happy with the job and with my
    day-to-day, and I finally have a bit of breathing space to be back on
    Usenet.

    Cool!

    If you use any emacs itrCOs hard to avoid Lisp. Emacs Lisp is not a paragon of
    good design nor of good implementation-- (aset (symbol-name nil) 0 ?\u0192) , (fillarray obarray 0) , anyone?--so the natural thing is to look around for something better. The consensus within XEmacs was that Common Lisp was better.
    On investigating, yes, it is. But, XEmacs needs work, no-one else is doing it,
    so my software work these days is C with a very Common-Lisp-oriented Emacs Lisp.

    I tried the code above on the GNU EMACS. The first crashes it
    immediately. The second doesn't seem to do its job anymore, throwing a
    type error. They must have created a new type called obarray. Saying
    (type-of obarray) produces obarray, while fillarray expects a vector.

    --8<-------------------------------------------------------->8---
    fillarray is a primitive-function in rCyC source coderCO.

    (fillarray ARRAY ITEM)

    Store each element of ARRAY with ITEM.
    ARRAY is a vector, string, char-table, or bool-vector.

    [back]
    --8<-------------------------------------------------------->8---

    This would require essentially assembler written with the quality of
    the Apollo code, without an operating system. (IrCOm sure everyone reading this accepts that good assembler, if it has no bugs, is going
    to make better use of the hardware than their language of choice.)

    Perfectly reasonable.

    The trade-off is that the resulting software is slower than the above ideal, and, e.g. that my Windows install decides that it is going to update whether I like it or not and the Cygwin terminal that I had
    open, in the middle of debugging something, with a command history
    that I would ideally like to have kept, evaporates.

    Isn't that irritating? Windows is a system that's really not very respectful at all with what the user is doing---lots of interruptions
    such as alerts by Windows Defender and whatnot. Many other programmers
    on Windows follow suit, so it's not Microsoft's fault completely. And that might be the same thing in the usual GNU system these days. For window management, I run CWM, which is one that really only lets
    anything happen that the user has actively made it happen.

    The comment wasnrCOt intended to be specifically about Windows, that
    just happened to be the most recent example that sprung to mind. All
    the common operating systems take time to boot, time which would
    ideally be spent doing what you, as the user, actually wish to
    do. Even resume-from-hibernation is not instant.

    It'll be very cool when that is so. (A quick tangent.)

    Incidentally, two things I don't like in computers---(1) I don't like to
    keep them on if they're not being used; (2) I don't like a slow start-up
    nor messy output on the screen. Don't get me wrong: my favorite
    start-up output is by OpenBSD because they've kept the old-style boot
    process and it seems the system is never blankly waiting for anything.
    What I really dislike about the Linux kernel is how it quickly puts the
    video in some high-resolution mode, which flashes the screen. I wish it
    had stuck with the old-style of only changing video mode when starting X up---or at least when it had a readable text output like OpenBSD does.
    (And no I wouldn't like to see a graphical something instead of kernel messages: I like kernel messages because they're very informative. I
    put the Linux kernel in loglevel=7, one less than the greatest.)

    I've tried various things with it---for example, here's a kernel
    argument I use: video=eDP-2:800x600. But it still switches resolution
    during boot.

    All of the common operating systems update, often requiring a reboot,
    taking time which would ideally be spent doing what you, as the user, actually wish to do.

    Even if the update process is manual, e.g. when IrCOm using Debian and migrating a server to a new VM, I do not actually want to spend my
    time working out with trial and error what invocation of certbot will
    allow me to put Letsencrypt certificates on a new server that already
    has Apache installed. (Spoiler; spin down Apache, use certbot
    --certonly, which spins up its own HTTP server.)

    Speaking of which, I think the renewal should be easier. Having to shut
    down your web server to renew certificates is pretty odd to me. I know
    one can renew it via zone authentication and it can be automated using
    APIs, but that's also frustrating---most DNS hosts have their own
    specific API, forcing one to have to program the solution out. Oh, and wildcarded certificates /must/ be renewed via DNS (IIRC), that is, you
    can't spin a web server to authenticate and renew.

    (I certainly donrCOt want to have to migrate well-written PHP of twenty
    years ago that carefully wrapped access to a database using then-best-practice APIs because those APIs are unmaintained and
    removed, but that is entirely on me, we all know PHP is terrible, and
    I knew it then. But Debian shouldnrCOt be terrible, and in the grand
    scheme of things it isnrCOt terrible.)

    What did you write 20 years ago? That's indeed PHP's prime time. I
    know the language. I used it seriously back then as well. I never went
    into PHP 4, remaining in PHP 3 for as long as I could until I gave up on
    PHP completely---I've always appreciated language stability.

    There are reasons and many of them are good for these things. I donrCOt
    plan to switch my day-to-day to TempleOS. But that we have them is a
    trade off.

    Lol. TempleOS. I watched some documentaries on it (on YouTube). I was
    happy to see such systems out there and I think they're likely pretty
    good learning opportunities, obviously for the genius who made it, but certainly as well for anyone who looks into it, specially now with the
    help of these smart-systems (may we enjoy them while they last?).

    And speaking of Medicine, how is it disrespectful these days as
    well, but I won't digress on this (and it's perhaps just something
    that plagues the entirety of society).

    What do you mean? Respect towards and from medicine varies by
    country. Doctors are regularly assaulted in India by family members of patients unhappy with the patientsrCO care. I get Christmas presents.

    It is indeed. If my sources are correct, in the United States (for
    example), we get deaths due to medical error top ranked---I don't mean
    top 1st, but highly ranked (top 3 a while ago?).

    But what I had meant was that I get the feeling from hearing from the population that the attention and time doctors spend with patients now
    has been greatly reduced; that doctors are often rude, get easily
    irritated and so on. That then makes me think they might be working too
    much. I in fact see a parallel with programmers: in the typical
    company, the typical programmer can be slightly arrogant, easily
    irritated, the explanation for which might be too much work, not very
    competent and not living very joyful days. So in the end I don't see
    anything specific to Medicine, but something much larger. I'm a student
    at a large university---what can I say about professors? They're very
    easily offended with students' lack of interest; they inadvertently and incorrectly take a lot of things personally; my overall conclusion is
    that they're not doing very well health-wise, not living very joyful
    days (they might miss days in which there was more glamour in the
    profession, when they feel they would be better regarded). Something
    like that.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Aug 13 15:39:50 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> wrote:

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my intuition
    says XEmacs started out with coloring? IIRC, Stallman or someone would
    have said that the idea was not properly designed. I can't recall, but
    I might research the question and report back here.


    The Emacs schism was not fundamentally technical: it happened because cooperation with RMS is impossible. Lucid needed some features in what
    would have been Emacs 19 to support a programming environment (for C++, I think, not Lisp, despite them being Lucid) and were willing to donate the
    time to implement them & donate the results (remember Emacs 18 had an
    entirely minimal interface to X: equivalent to running it in a terminal emulator). And ... cooperation with RMS turned out to be impossible. So LEmacs happened, which became XEmacs after Lucid died.

    I wasn't there, but I was around a few months later and perhaps before the split was really final. I perhaps no longer have the trove of emails from
    the split: they made depressing reading.

    (If you're thinking of posting a followup explaining why cooperation with
    RMS is, in fact, possible, just ... don't, please.)
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Thu Aug 13 12:46:56 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:

    ADDENDUM

    On Tue, 11 Aug 2026 12:20:00 -0400, George Neuner
    <gneuner2@comcast.net> wrote:

    On Mon, 10 Aug 2026 10:48:48 -0300, Anton Antimo <anton@safunu.org>
    wrote:

    George Neuner <gneuner2@comcast.net> writes:

    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo <anton@safunu.org>
    wrote:

    How about the [Racket] macro system? So perfect, yet so annoying. >>>>>One thing I love about Common Lisp is precisely macro's (lack of) >>>>>hygiene. I'm totally fine with complete guarantee. Anaphoric >>>>>macros are so useful. (No idea how to implement them in Racket >>>>>---impossible?)

    Racket has its roots in Scheme. Scheme is defined in terms of source
    /text/ rather than the compiler's AST. So there is no real equivalent >>>> of Lisp's AST macros.

    :
    Is there an article out there that elaborate your paragraph here? I'd >>>like to learn more about these differences. I suppose the Scheme people >>>would have very strong arguments to go their way.

    :

    It is implicit in the semantics sections of the R_RS documents. Might
    be explicit in some of them, I don't recall - the earlier documents
    tended to contain more detail about intent, but I haven't (re)read any
    of them in ages. I'm sure I've seen it explicitly stated somewhere,
    but it may have been in some book.
    [One of my college professors was Mitchell Wand who co-wrote
    "Essentials of Programming Languages" and served on the Scheme
    defining committee for many years.]

    TLDR; Scheme's formal semantics are based on the syntax of forms in
    the /external/ representation - ie. the source text - not on any
    compiler's internal representation.

    R6RS has in Appendix (A) a discussion of the formal semantics in which
    they do state that Scheme's denotation semantics are based on
    /strings/. Unfortunately the statement is offhand and the discussion
    itself is non-normative.

    So far I haven't been able to find it stated explicitly in any
    normative (authoritative) source, but I don't have access to the ISO
    or IEEE standard documents.

    That's okay---you've already enlightened me enough here, which I
    appreciate.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Thu Aug 13 12:19:58 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 12/08/2026 8:01 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 11/08/2026 4:41 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    [...]

    Unhelpfully, Lawrence is always talking about some sort of select in
    Python, and then talks about polling in Linux, when he knows we don't
    care about the Linux kernel here in comp.lang.lisp, because the Steel
    Banks Common Lisp encapsulates the kernel for us.

    No sarcasm here. Lawrence has been doing a great service to the
    current USENET. We can say whatever we want about his knowledge or
    opinions or whatever, but he keeps a lot of people distracted here
    and I'm sure these people are all looking for a distraction. And his
    distractions are not all inadequate. He's usually bring up on-topic
    things that allows people here to exercise their own skills. If
    these contributions are too shallow---well---I'd say that's something
    we can say about most USENET traffic these days. Because we're very
    low volume these days, I think shallow contributions are better than
    nothing. I prefer the shallow chat than no chat at all.

    And I prefer polite chat, such as the one we are now having. Thank you.

    Yeah---rudeness in USENET is a reflection of the health state of its participants.

    I can only talk about my own skillset in Common Lisp, which I will prob-
    ably have to say is not that great, having used it much less in anger
    than C -- and prior to that, C++ but that's a different story -- and so
    I got myself all the Lisp books I have amassed, most or all of them al-
    ready mentioned in various topics here in comp.lang.lisp.

    That said, life happened, and continues to happen, so I don't know when
    I'll get to increase my skillset in Lisp. As everyone in comp.lang.c
    knows, I'm currently going through Appel's compiler book in C, and well,
    also took a detour by re-reading Loudon's /Mastering Algorithms in C/,
    which while somewhat basic in the C, is very good at giving practical examples of the data structures in question.

    I've previously mentioned a similar book in Lisp, by Domkin. I'll get
    to it one of these decades.

    I've thankfully read this one by Kyle Loudon as well. Keep your
    studying going slowly, but constantly. There's no rush. Things
    meaningfully evolve as fast as everybody says. There's no royal road to knowledge and wisdom; no AI-road either. Keep it up; be careful with
    your time on the USENET.

    And no, I don't know why Lawrence is always pretending to be a Python
    influencer here in comp.lang.lisp. I hope he's getting paid for it.

    From what I can tell, Lawrence never really caught the Lisp
    culture---it can be seen in how he writes Lisp in the occasion he
    does it. This means his criticism aren't very serious. He loves
    Python, which is a way of saying---``thanks, Lisp, for the things
    you've done for me.''

    I'm not sure I did either, to be honest. I just find it fascinating in
    many ways, and wish to increase my own skillset in Lisp, and of course,
    get a better immersion in the culture.

    Try to understand when, why and how people did what they did. In other
    words, I think history is very important in studying. New is not always better.

    Personally, I think Lisp people need -- well, need is a strong word, but
    I'll go with it -- to get a little bit more behind the notion of practi- cality. I mean, the Steel Banks Common Lisp is fine, but many others
    aimed at beginners are exclusively geared towards facing the programmer
    him- -- or her- -- self. There is very little attention paid to the de- tails of creating binaries to share with friends. And by this, I mean
    the parts of the programmer facing documentation. I believe the Steel
    Banks Common Lisp manual does not mention how to create binary executa-
    bles? I believe I learned that from /Stack Overflow/ which everyone
    here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    See SBCL's sb-ext:save-lisp-and-die.

    (sb-ext:save-lisp-and-die #P"my-executable.exe"
    :toplevel #'my-package:main
    :executable t
    :save-runtime-options t)

    Source:
    https://www.sbcl.org/manual/

    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.

    That's what Racket claims. They claim it to be real-world, batteries
    included and whatnot. They also create executable binaries like SBCL
    does above.

    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp. I mean, the Steel Banks Common
    Lisp garbage collector cannot be worse than the old one in Unity, and
    I currently believe C.L.O.S. is eminently suitable for three
    dimensional game objects.

    What do you think?

    I never think about games, thankfully. I've played video-games from 11
    to 14 years old, replacing them completely with UNIX, a great
    investment.

    Economically speaking, if CL had more users, there'd be more books. I
    don't have much need for Common Lisp (strictly speaking) books myself.
    I'm not trying myself to read more books on the language. What I'm
    doing is writing more Common Lisp and reading more of it. What
    certainly helps me is for people to use it, which then indirectly asks
    for more books (but for the wrong reasons: the beginner often thinks
    that something new is required for him to invest his time; reading an
    old book seems like a waste of time for so many of them, but that's only because they're beginners and might be for the rest of their lives).

    * Here I'm making fun of the YouTubian culture of only ever talk** about videos, and never anything published in books. "This guy made a video
    about something, and I'm going to talk about too" is the typical intro duction, if I remember correctly. I don't watch much of YouTube any-
    more.

    ** I'm going to leave this grammatical error.

    Yeah---knowing how to use a natural language includes knowing how to
    violate ``its grammar'' as well.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Thu Aug 13 16:14:56 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.


    In practise the answer is 'raco exe' which makes an executable. You have
    to have a suitable main function &c, but it's not hard.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 01:24:03 2026
    From Newsgroup: comp.lang.lisp

    On 13/08/2026 11:19 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 12/08/2026 8:01 PM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 11/08/2026 4:41 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 06/08/2026 5:48 AM, Lawrence DrCOOliveiro wrote:
    On Wed, 05 Aug 2026 13:13:42 -0300, Anton Antimo wrote:

    [...]

    Unhelpfully, Lawrence is always talking about some sort of select in
    Python, and then talks about polling in Linux, when he knows we don't
    care about the Linux kernel here in comp.lang.lisp, because the Steel
    Banks Common Lisp encapsulates the kernel for us.

    No sarcasm here. Lawrence has been doing a great service to the
    current USENET. We can say whatever we want about his knowledge or
    opinions or whatever, but he keeps a lot of people distracted here
    and I'm sure these people are all looking for a distraction. And his
    distractions are not all inadequate. He's usually bring up on-topic
    things that allows people here to exercise their own skills. If
    these contributions are too shallow---well---I'd say that's something
    we can say about most USENET traffic these days. Because we're very
    low volume these days, I think shallow contributions are better than
    nothing. I prefer the shallow chat than no chat at all.

    And I prefer polite chat, such as the one we are now having. Thank you.

    Yeah---rudeness in USENET is a reflection of the health state of its participants.

    I can only talk about my own skillset in Common Lisp, which I will prob-
    ably have to say is not that great, having used it much less in anger
    than C -- and prior to that, C++ but that's a different story -- and so
    I got myself all the Lisp books I have amassed, most or all of them al-
    ready mentioned in various topics here in comp.lang.lisp.

    That said, life happened, and continues to happen, so I don't know when
    I'll get to increase my skillset in Lisp. As everyone in comp.lang.c
    knows, I'm currently going through Appel's compiler book in C, and well,
    also took a detour by re-reading Loudon's /Mastering Algorithms in C/,
    which while somewhat basic in the C, is very good at giving practical
    examples of the data structures in question.

    I've previously mentioned a similar book in Lisp, by Domkin. I'll get
    to it one of these decades.

    I've thankfully read this one by Kyle Loudon as well. Keep your
    studying going slowly, but constantly. There's no rush. Things
    meaningfully evolve as fast as everybody says. There's no royal road to knowledge and wisdom; no AI-road either. Keep it up; be careful with
    your time on the USENET.

    And no, I don't know why Lawrence is always pretending to be a Python
    influencer here in comp.lang.lisp. I hope he's getting paid for it.

    From what I can tell, Lawrence never really caught the Lisp
    culture---it can be seen in how he writes Lisp in the occasion he
    does it. This means his criticism aren't very serious. He loves
    Python, which is a way of saying---``thanks, Lisp, for the things
    you've done for me.''

    I'm not sure I did either, to be honest. I just find it fascinating in
    many ways, and wish to increase my own skillset in Lisp, and of course,
    get a better immersion in the culture.

    Try to understand when, why and how people did what they did. In other words, I think history is very important in studying. New is not always better.

    Personally, I think Lisp people need -- well, need is a strong word, but
    I'll go with it -- to get a little bit more behind the notion of practi-
    cality. I mean, the Steel Banks Common Lisp is fine, but many others
    aimed at beginners are exclusively geared towards facing the programmer
    him- -- or her- -- self. There is very little attention paid to the de-
    tails of creating binaries to share with friends. And by this, I mean
    the parts of the programmer facing documentation. I believe the Steel
    Banks Common Lisp manual does not mention how to create binary executa-
    bles? I believe I learned that from /Stack Overflow/ which everyone
    here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    See SBCL's sb-ext:save-lisp-and-die.

    (sb-ext:save-lisp-and-die #P"my-executable.exe"
    :toplevel #'my-package:main
    :executable t
    :save-runtime-options t)

    Source:
    https://www.sbcl.org/manual/

    And herein lies the conundrum. I believe I took a quick glance at the
    manual, looked at the able of contents, and even tried ctrl+f and the
    terms /binary/ or /binaries/, and /executable/, and found nothing.

    Being /technically/ in the manual does not help if one cannot easily
    find what one is looking for. It also doesn't help if one doesn't have expectations of finding it in the first place.

    And now I found myself speaking like 17th century royalty.


    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.

    That's what Racket claims. They claim it to be real-world, batteries included and whatnot. They also create executable binaries like SBCL
    does above.

    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp. I mean, the Steel Banks Common
    Lisp garbage collector cannot be worse than the old one in Unity, and
    I currently believe C.L.O.S. is eminently suitable for three
    dimensional game objects.

    What do you think?

    I never think about games, thankfully. I've played video-games from 11
    to 14 years old, replacing them completely with UNIX, a great
    investment.

    I believe there is something to be learned from making a fully grown
    video game, yet I have never done so. My brief stint as a /professional
    game developer/ was done with Unity, in C#, and I believe the game never
    got finished. What I have done is read a few book about game develop-
    ment -- many of them bought during this time frame -- and am now think-
    ing a small game done with SDL2 or SDL3 is worth exploring simply be-
    cause of the manual game loop. It's not often that we get to make our
    own loop, when we create graphical applications.

    And depending on how we create server applications, we don't either. If
    my recollection is correct about this, Hunchentoot would be a good exam-
    ple.

    There are other /programming patterns/ that show up almost exclusively
    in interactive games, well worth exploring now and then.


    Economically speaking, if CL had more users, there'd be more books. I
    don't have much need for Common Lisp (strictly speaking) books myself.
    I'm not trying myself to read more books on the language. What I'm
    doing is writing more Common Lisp and reading more of it. What
    certainly helps me is for people to use it, which then indirectly asks
    for more books (but for the wrong reasons: the beginner often thinks
    that something new is required for him to invest his time; reading an
    old book seems like a waste of time for so many of them, but that's only because they're beginners and might be for the rest of their lives).


    Well, I don't only mean beginner books. I mean some of the more ad-
    vanced books as well, when it comes to C. Of course /Common Lisp Re-
    cipes/, and /The Common Lisp Condition System/ should be good examples
    that I'll get to read one of these decades. Here I'm thinking of Adam Tornhill's /Patterns in C/. There are even several more, some of which
    I've lost track of, because I believe they were only available as a PDF
    and I neglected to print them out.

    Right now I'm not inclined to cross post this to comp.lang.c, and ask if
    they'd be willing to fill in some of those blanks.

    Hm, as-is, there seems to be a /blank/ in my knowledge, when it comes to thinking of an equivalent book in Lisp. Specifically about these /patt-
    erns/, and how to use them.

    Perhaps there is no need? After all, the original patterns book in Java
    was all about working around deficiencies in the Java programming lang-
    uage, and maybe Common Lisp has few enough of those we don't care about
    a specific set of patterns?

    Or is this simply covered in /Common Lisp Recipes/ and I forgot?


    * Here I'm making fun of the YouTubian culture of only ever talk** about
    videos, and never anything published in books. "This guy made a video
    about something, and I'm going to talk about too" is the typical intro
    duction, if I remember correctly. I don't watch much of YouTube any-
    more.

    ** I'm going to leave this grammatical error.

    Yeah---knowing how to use a natural language includes knowing how to
    violate ``its grammar'' as well.


    Have a nice day, and Lisp well!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 01:31:05 2026
    From Newsgroup: comp.lang.lisp

    On 14/08/2026 12:14 AM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.


    In practise the answer is 'raco exe' which makes an executable. You have
    to have a suitable main function &c, but it's not hard.



    Well, aside from technically correct answers, I was talking about the
    culture. In my recollection, and by now I guess that would be an old
    Racket,* there was no emphasis on creating binaries in the Racket intro- ductory material, nor user interface. It's more like, here's a pro-
    gramming language, use it!

    And until binaries are habitually made with Racket, and by that I mean production binaries, with code signatures for the Microsoft and fruit
    vendor platforms, that's not likely to change.


    Best wishes, and happy Racketteering!

    * Pun totally intended afterwards.
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 01:36:46 2026
    From Newsgroup: comp.lang.lisp

    On 13/08/2026 6:35 PM, bixbox wrote:
    Mario Rosell <mario@mariorosell.es> writes:

    Hello everyone!

    I want to learn Common Lisp, but I don't really know what resources to
    use.

    What did you all use to learn? Is that even relevant? Is this newsgroup
    active?

    Book already mentioned that was very useful to me, apologies to re-post
    1. Practical Common Lisp
    2. OnLisp
    3. Land Of Lisp

    one of my favorites but it's maybe controversial is Let Over Lambda

    A proper setup with Emacs with Sly, and lately I was able to enable
    open local HyperSpec from a symbol ( that was a game changer for my brain that can not hold to much info and unfortunately I have to use C++ at work).

    Quicklisp is very very handy, and I'm trying to setup quicklisp lookup textinfo from symbol as well similar to the HyperSpec, but the mileage
    vary here.

    Yes, I think it's a very good idea to point beginners at both QuickLisp,
    and Peter's book at the same time. It's also not helpful to say /just
    use Slime/ if the beginner in question isn't used to Emacs. It can be
    much more fruitful to just set up a Lisp-enough environment in the text
    editor of choice -- by that I mean the choice of the student -- and then
    let the student move on to Emacs when warranted.

    There are Lisp environments for a lot of text editors out there, and I
    guess such could be called /resources to learn Common Lisp/ as well.


    Happy Lisping!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Thu Aug 13 17:39:43 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote or quoted: >Perhaps there is no need? After all, the original patterns book in Java

    Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M.,
    Fiksdahl-King, I., & Angel, S. (1977). A Pattern Language:
    Towns, Buildings, Construction. Oxford University Press.

    Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994).
    Design Patterns: Elements of Reusable Object-Oriented Software
    (1st ed.). Addison-Wesley Professional. With examples in
    Smalltalk and C++.

    Gabriel, R. P. (1996). Patterns of Software: Tales from the
    Software Community. Oxford University Press.

    1996-01 Release of Java

    Grand, M. (1998). Patterns in Java, Volume 1: A Catalog of
    Reusable Design Patterns Illustrated with UML. John Wiley &
    Sons.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Thu Aug 13 16:52:28 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:

    Anton Antimo <anton@safunu.org> wrote:

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my intuition
    says XEmacs started out with coloring? IIRC, Stallman or someone would
    have said that the idea was not properly designed. I can't recall, but
    I might research the question and report back here.

    The Emacs schism was not fundamentally technical: it happened because cooperation with RMS is impossible. Lucid needed some features in what
    would have been Emacs 19 to support a programming environment (for C++, I think, not Lisp, despite them being Lucid) and were willing to donate the time to implement them & donate the results (remember Emacs 18 had an entirely minimal interface to X: equivalent to running it in a terminal emulator). And ... cooperation with RMS turned out to be impossible. So LEmacs happened, which became XEmacs after Lucid died.

    I wasn't there, but I was around a few months later and perhaps before the split was really final. I perhaps no longer have the trove of emails from the split: they made depressing reading.

    (If you're thinking of posting a followup explaining why cooperation with
    RMS is, in fact, possible, just ... don't, please.)

    Thank you for describing the matter. You must be the best one here to elaborate on the schism? Can you elaborate it more technically? For
    instance, there's font locking today on the GNU EMACS---was it done in a dramatically different way relative to LEmacs?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?B?Q8OzaWzDrW4=?= =?UTF-8?B?IE5pb2Nsw6Fzw61u?= =?UTF-8?B?IEdsb3N0w6lpcg==?=@thanks-to@Taf.com to comp.lang.lisp on Thu Aug 13 20:35:34 2026
    From Newsgroup: comp.lang.lisp

    I suppose that a typical medic is of a different personality type than
    a typical computer programmer. I do not think that being overworked is
    the overriding cause of the behavior of medics and programmers.
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp,comp.emacs.xemacs on Fri Aug 14 05:04:27 2026
    From Newsgroup: comp.lang.lisp

    On 14/08/2026 3:52 AM, Anton Antimo wrote:
    tfb <tfb@work.it.out> writes:

    Anton Antimo <anton@safunu.org> wrote:

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my intuition
    says XEmacs started out with coloring? IIRC, Stallman or someone would
    have said that the idea was not properly designed. I can't recall, but
    I might research the question and report back here.

    The Emacs schism was not fundamentally technical: it happened because
    cooperation with RMS is impossible. Lucid needed some features in what
    would have been Emacs 19 to support a programming environment (for C++, I
    think, not Lisp, despite them being Lucid) and were willing to donate the
    time to implement them & donate the results (remember Emacs 18 had an
    entirely minimal interface to X: equivalent to running it in a terminal
    emulator). And ... cooperation with RMS turned out to be impossible. So
    LEmacs happened, which became XEmacs after Lucid died.

    I wasn't there, but I was around a few months later and perhaps before the >> split was really final. I perhaps no longer have the trove of emails from >> the split: they made depressing reading.

    (If you're thinking of posting a followup explaining why cooperation with
    RMS is, in fact, possible, just ... don't, please.)

    Thank you for describing the matter. You must be the best one here to elaborate on the schism? Can you elaborate it more technically? For instance, there's font locking today on the GNU EMACS---was it done in a dramatically different way relative to LEmacs?

    Just to chime in for the newcomers who don't know about this publicly
    available summary.

    https://www.xemacs.org/Documentation/21.5/html/internals_4.html

    And.

    https://www.xemacs.org/About/XEmacsVsGNUemacs.html

    That said, I do hope tfb is willing to write out a technical summary, or
    even a social one like in the first link.

    Note that since then, GNU Emacs did indeed add loadable modules in C.


    Adding comp.emacs.xemacs to the discussion, because that group shouldn't
    be empty all the time.


    Happy text editing in XEmacs!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Thu Aug 13 18:59:07 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:


    An LLM is an emulation of a neural net. There's plenty of study
    material regarding neural nets.


    thank you.

    Modern implementations forgo the traditional graph representation and
    instead are based on matrix math. Ie. you take a bunch of inputs,
    multiply each input by a weight, offset the result by adding some
    value, then summ and pass the summ put through a (possibly per node)
    equation to get an output. That ptoentially feeds into the inputs of
    the next layer of nodes.

    The difficulty is in getting the topology correct. Too many nodes,
    the nodes start to specialize, too few nodes the results are fuzzy.
    Bad connection scheme - either it doesn't work or training becomes
    very difficult. NNs have been studied since the 1970s, and there are
    known topologies to create various kinds of recognizers and types of
    (app specific) memories. You can (sort of) plug and play using these
    as modules. But still a lot of it is just trial and error. That's why
    so much effort is needed to build them.

    I think I'm starting to see how loose these LLMs can get.


    LLMs [I agree it's a stupid name] are hidden node models having tens
    of thousands (or more) of nodes, and many millions of inputs [and
    weights and offsets]. You can't build one without a supercomputer.

    This is an excellent point I neglected to think about. I will be telling
    him how this kinda works. Big, Fast computers using lots of energy :) Nothing new...

    There's a PHd and potential billions of $$$ waiting if you can figure
    out how to make a NN reliably forget something it has learned, without retraining from scratch and without affecting anything else it knows.

    another very important point.

    is it possible to use a truth maintenance system? Just curious, it would probably take up too much space and time. Just a jtms is a lot of
    overhead. You could try to use an LTMS but we all know that this just
    leads to more wasted space and aggravation. I would think an ATMS would
    work; I dunno, I do not have a super computer or a billion dollars.

    Have fun!

    thank you so much for your excellent explanation. I really appreciate
    this. Asking someone about LLMs these days and they talk for hours and
    such have you.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From steve g@Sgonedes1977@gmail.com to comp.lang.lisp on Thu Aug 13 19:25:00 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:

    On Sun, 09 Aug 2026 19:12:49 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:


    I'm not aware that Racket can run over Cygwin. If it can, I would bet
    that GUI/graphical programs won't work.

    Certainly you can create an interface to Cygwin and use it directly.
    [You can do this with pretty much any library.]


    Yeah, i figured that no graphics would be their thing. I do remeber the
    cygwin people talking about make an X Window type interface. dunno how
    they plan to do that when the software changes ever other day that it rains.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Aug 13 23:46:05 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 13 Aug 2026 13:40:15 -0000 (UTC), Anthk GM wrote:

    On 2026-08-02, Lawrence DrCOOliveiro <ldo@nz.invalid> wrote:

    Common Lisp is a museum-worthy spec by this point. There needs to
    be something more modern, not so full of legacy baggage tied to
    old, proprietary, pre-POSIX OS platforms which are all extinct by
    now.

    SBCL tells me otherwise, ditto with the Kandria engine, or projects
    like Nyxt. Also, Coalton + Quilc in quantum mechanics basically
    makes any 'legacy' assumption on CL laughable.

    IrCOm sure they do have their own extensions to make up for the
    deficiencies of Common Lisp. But then, they are no longer rCLCommonrCY,
    are they?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Thu Aug 13 23:58:22 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 13 Aug 2026 11:42:36 -0300, Anton Antimo wrote:

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my
    intuition says XEmacs started out with coloring? IIRC, Stallman or
    someone would have said that the idea was not properly designed.

    Why not start here <https://www.xemacs.org/Documentation/21.5/html/xemacs-faq_1.html#Q1_002e6_002e1>.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Thu Aug 13 20:58:01 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 13/08/2026 11:19 PM, Anton Antimo wrote:

    [...]

    Personally, I think Lisp people need -- well, need is a strong word, but >>> I'll go with it -- to get a little bit more behind the notion of practi- >>> cality. I mean, the Steel Banks Common Lisp is fine, but many others
    aimed at beginners are exclusively geared towards facing the programmer
    him- -- or her- -- self. There is very little attention paid to the de- >>> tails of creating binaries to share with friends. And by this, I mean
    the parts of the programmer facing documentation. I believe the Steel
    Banks Common Lisp manual does not mention how to create binary executa-
    bles? I believe I learned that from /Stack Overflow/ which everyone
    here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    See SBCL's sb-ext:save-lisp-and-die.
    (sb-ext:save-lisp-and-die #P"my-executable.exe"
    :toplevel #'my-package:main
    :executable t
    :save-runtime-options t)
    Source:
    https://www.sbcl.org/manual/

    And herein lies the conundrum. I believe I took a quick glance at the manual, looked at the able of contents, and even tried ctrl+f and the
    terms /binary/ or /binaries/, and /executable/, and found nothing.

    Being /technically/ in the manual does not help if one cannot easily
    find what one is looking for. It also doesn't help if one doesn't have expectations of finding it in the first place.

    Try the ``executable'' keyword; you'll find this:

    --8<-------------------------------------------------------->8---
    Executable Delivery: The :executable argument to
    sb-ext:save-lisp-and-die can produce a "standalone" executable
    containing both an image of the current Lisp session and an SBCL
    runtime.
    --8<-------------------------------------------------------->8---

    Source:
    https://www.sbcl.org/manual/

    [...]

    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp. I mean, the Steel Banks Common
    Lisp garbage collector cannot be worse than the old one in Unity, and
    I currently believe C.L.O.S. is eminently suitable for three
    dimensional game objects.

    What do you think?

    I never think about games, thankfully. I've played video-games from
    11
    to 14 years old, replacing them completely with UNIX, a great
    investment.

    By the way, have a look at these (broken) lines above. Your Mozilla Thunderbird is not knowing how to properly handle quotes. I once hacked
    it around to make sure it wouldn't mess up quotes like that, but it
    wasn't too obvious how to do it. (It's also Thunderbird that's making sometimes give too much vertical space and sometimes too little. USENET
    has traditionally used fixed-fonts. With this Thunderbird culture,
    you'll always violate that culture.)

    Economically speaking, if CL had more users, there'd be more books.
    I don't have much need for Common Lisp (strictly speaking) books
    myself. I'm not trying myself to read more books on the language.
    What I'm doing is writing more Common Lisp and reading more of it.
    What certainly helps me is for people to use it, which then
    indirectly asks for more books (but for the wrong reasons: the
    beginner often thinks that something new is required for him to
    invest his time; reading an old book seems like a waste of time for
    so many of them, but that's only because they're beginners and might
    be for the rest of their lives).

    Well, I don't only mean beginner books. I mean some of the more ad-
    vanced books as well, when it comes to C. Of course /Common Lisp Re-
    cipes/, and /The Common Lisp Condition System/ should be good examples
    that I'll get to read one of these decades. Here I'm thinking of Adam Tornhill's /Patterns in C/. There are even several more, some of which
    I've lost track of, because I believe they were only available as a PDF
    and I neglected to print them out.

    Right now I'm not inclined to cross post this to comp.lang.c, and ask if they'd be willing to fill in some of those blanks.

    Hm, as-is, there seems to be a /blank/ in my knowledge, when it comes to thinking of an equivalent book in Lisp. Specifically about these /patt- erns/, and how to use them.

    Perhaps there is no need? After all, the original patterns book in Java
    was all about working around deficiencies in the Java programming lang-
    uage, and maybe Common Lisp has few enough of those we don't care about
    a specific set of patterns?

    Or is this simply covered in /Common Lisp Recipes/ and I forgot?

    I have no idea. It'd be great to have more books on Lisp, but that'd
    take more writers and more readers too. Such is life. Looking on the
    bright side, I think Lisp is one of the easiest languages to read and
    there's more Lisp software out there that I could read likely in my
    lifetime. Who knows, maybe we'd learn more by reading source-code than
    by reading books? (A serious question.) Maybe it's a blessing we don't
    have too many books to read on this language. I propose we try out this possibility.

    Have a nice day, and Lisp well!

    Thank you! You too.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Aug 14 00:11:51 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 13 Aug 2026 11:42:36 -0300, Anton Antimo wrote:

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my
    intuition says XEmacs started out with coloring? IIRC, Stallman or
    someone would have said that the idea was not properly designed.

    A bit more informative as to the details, from someone with first-hand knowledge: <https://www.jwz.org/doc/lemacs.html>.

    (He does describe the XEmacs account I linked to earlier as
    rCLpusillanimousrCY ...)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Thu Aug 13 17:16:06 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> writes:
    Thank you for describing the matter. You must be the best one here to elaborate on the schism? Can you elaborate it more technically? For instance, there's font locking today on the GNU EMACS---was it done in a dramatically different way relative to LEmacs?

    I spoke with RMS about this at some length back in the day. I don't
    remember the specifics but yes it involved disagreements about the X
    interface. I do remember that he said that it was philosophically ok to
    fork a codebase if such a disagreement couldn't be solved. He
    considered that to be one of the virtues of free software.

    That is, he didn't find the XEmacs split to be morally objectionable,
    but he was somewhat disappointed that it had come to that.

    I'm not big on putting blames on personalities in a thing like this, but
    I would say RMS and JWZ can both be difficult. So putting both in the
    same "room" might not have worked out so well.

    I don't know how different GNU Emacs and XEmacs are from each other
    nowadays. I do know that GNU Emacs's X support has gotten fancier since
    those days.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Thu Aug 13 17:31:52 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    Hm, as-is, there seems to be a /blank/ in my knowledge, when it comes to thinking of an equivalent book in Lisp. Specifically about these /patt- erns/, and how to use them.

    Winston and Horn "Lisp" was a favorite way back in the day:

    https://en.wikipedia.org/wiki/LISP_(book)

    It was originally part of the book "Artificial Intelligence" but the
    Lisp part split off into a separate volume, per the Wikipedia article
    above.

    The thing is, CL's design makes some sense, but only up to a point.
    It's not holistic like Scheme, so don't expect too much consistency.
    CL's unifying purpose was to maintain some level of commonality with a
    bunch of incompatible predecessor Lisps of varying origin. It didn't
    try to run earlier dialects without modification, but it tried to keep
    the porting effort manageable, as I understand it. Old timers here will
    know more about this than I do. There are some good history documents
    around whose names I don't remember.

    In my case I found CLTL1 to be pretty understandable after first gaining
    an understanding of Lisp by reading through the Emacs Lisp interpreter
    source code (written in C) and mucking around with some Emacs Lisp code.
    The CADR manual was also enlightening, even though I never actually used
    a CADR or any other Lisp machine (I guess that's a sign of a deprived childhood). See:

    https://tumbleweed.nu/r/lm-3/uv/chinual.html

    As for Scheme, I think of it more as an assembly language for a cosmic
    sized computer, than as something for humans program much in directly.
    Others believe the opposite.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 13:42:08 2026
    From Newsgroup: comp.lang.lisp

    On 14/08/2026 7:58 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 13/08/2026 11:19 PM, Anton Antimo wrote:

    [...]

    Personally, I think Lisp people need -- well, need is a strong word, but >>>> I'll go with it -- to get a little bit more behind the notion of practi- >>>> cality. I mean, the Steel Banks Common Lisp is fine, but many others
    aimed at beginners are exclusively geared towards facing the programmer >>>> him- -- or her- -- self. There is very little attention paid to the de- >>>> tails of creating binaries to share with friends. And by this, I mean >>>> the parts of the programmer facing documentation. I believe the Steel >>>> Banks Common Lisp manual does not mention how to create binary executa- >>>> bles? I believe I learned that from /Stack Overflow/ which everyone
    here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    See SBCL's sb-ext:save-lisp-and-die.
    (sb-ext:save-lisp-and-die #P"my-executable.exe"
    :toplevel #'my-package:main
    :executable t
    :save-runtime-options t)
    Source:
    https://www.sbcl.org/manual/

    And herein lies the conundrum. I believe I took a quick glance at the
    manual, looked at the able of contents, and even tried ctrl+f and the
    terms /binary/ or /binaries/, and /executable/, and found nothing.

    Being /technically/ in the manual does not help if one cannot easily
    find what one is looking for. It also doesn't help if one doesn't have
    expectations of finding it in the first place.

    Try the ``executable'' keyword; you'll find this:

    --8<-------------------------------------------------------->8---
    Executable Delivery: The :executable argument to
    sb-ext:save-lisp-and-die can produce a "standalone" executable
    containing both an image of the current Lisp session and an SBCL
    runtime.
    --8<-------------------------------------------------------->8---

    Source:
    https://www.sbcl.org/manual/


    Please be patient with me. Here is a screenshot. I'm afraid the link
    is ridiculously long, and I don't use url shorteners anymore.


    https://www.dropbox.com/scl/fi/07asmp90gza39utr55wro/SBCL-manual-execu.jpg?rlkey=jd3tcevbchchpsge37xfmjh1j&st=pk2y5hvh&dl=0

    What I'm looking at here seems to be the word "execu" -- or the prefix
    of which -- not being found. Should I have continued to type the whole
    word? I thought this worked like Emacs' incremental search, and as I
    typed more characters, it would search longer words, until it wouldn't
    find what I've typed so far.

    Is this perhaps a matter of not using the right browser? I mean, what
    browser do the team players behind S.B.C.L. habitually use themselves?
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 14:04:59 2026
    From Newsgroup: comp.lang.lisp

    On 14/08/2026 8:31 AM, Paul Rubin wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    Hm, as-is, there seems to be a /blank/ in my knowledge, when it comes to
    thinking of an equivalent book in Lisp. Specifically about these /patt-
    erns/, and how to use them.

    Winston and Horn "Lisp" was a favorite way back in the day:

    https://en.wikipedia.org/wiki/LISP_(book)

    It was originally part of the book "Artificial Intelligence" but the
    Lisp part split off into a separate volume, per the Wikipedia article
    above.

    Thank you. I've added both to my cart. Though I'm likely to just buy
    them next year or something. These bookstores have a nice shelf called
    /save for later/, but will sell to someone else when they run out of
    stock.


    The thing is, CL's design makes some sense, but only up to a point.
    It's not holistic like Scheme, so don't expect too much consistency.
    CL's unifying purpose was to maintain some level of commonality with a
    bunch of incompatible predecessor Lisps of varying origin. It didn't
    try to run earlier dialects without modification, but it tried to keep
    the porting effort manageable, as I understand it. Old timers here will
    know more about this than I do. There are some good history documents
    around whose names I don't remember.

    I once tried to get a hold of LeLisp and other older European Lisps, but
    was unable to, a few years ago. Maybe that situation has changed.

    I've since lost interest in all of these old[er] Lisp dialects, and
    stick to Common Lisp in the general, and the Steel Banks' implementation
    in particular these days.


    In my case I found CLTL1 to be pretty understandable after first gaining
    an understanding of Lisp by reading through the Emacs Lisp interpreter
    source code (written in C) and mucking around with some Emacs Lisp code.
    The CADR manual was also enlightening, even though I never actually used
    a CADR or any other Lisp machine (I guess that's a sign of a deprived childhood). See:

    I've read through some of the XEmacs internals. It's necessary to make loadable extensions in C. I'm not sure I gained much understanding of
    how to code Lisp during that adventure.


    https://tumbleweed.nu/r/lm-3/uv/chinual.html

    Thank you. I'm glancing at this now. It seems interesting at first
    glance, and I may add this to my entertainment reading section. I also
    found an interesting summary at


    https://cnbbooks.github.io/zylisp-guide/part1/01-intro/origins/zetalisp.html

    and please excuse the U.R.L. length. I quote.

    > ZetaLisp's innovations extended beyond Flavors to include proper
    > lexical closures, efficient vectors, stack groups for
    > coroutine-like control structures, locatives for low-level
    > memory access, rational numbers, multiple return values,
    > structures, the generalized assignment mechanism setf, and
    > advanced memory management through CDR-coding. The language was
    > "the Lisp dialect with the most influence on the design of
    > Common Lisp" according to multiple sources, with Flavors
    > evolving into CLOS (Common Lisp Object System). ZetaLisp ran on
    > dedicated Lisp Machine hardware with tagged architecture
    > enabling parallel type checking without performance penalties,
    > supporting applications from the Macsyma computer algebra system
    > to sophisticated AI research.

    And as I'm writing this, I don't know what this cnbbooks zylisp-guide
    is.


    As for Scheme, I think of it more as an assembly language for a cosmic
    sized computer, than as something for humans program much in directly.
    Others believe the opposite.

    Hmm, I guess that's not a bad way to describe Scheme. And follows natu-
    rally from the old S.I.C.P. lectures; which I may want to re-watch in
    the near future, as entertainment. There's only so much tolerance I
    have for the selection at the usual streaming services.
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Fri Aug 14 07:14:34 2026
    From Newsgroup: comp.lang.lisp


    Ar an dara l|i d|-ag de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    On Tue, 11 Aug 2026 18:31:24 +0100, Aidan Kehoe wrote:

    If you use any emacs itrCOs hard to avoid Lisp. Emacs Lisp is not a paragon of good design nor of good implementation-- (aset
    (symbol-name nil) 0 ?\u0192) , (fillarray obarray 0) , anyone?--so
    the natural thing is to look around for something better. The
    consensus within XEmacs was that Common Lisp was better. On
    investigating, yes, it is.

    ItrCOs a museum-worthy spec. Needs updating to, at least support POSIX-type features that we take for granted nowadays.

    ItrCOs better than Emacs Lisp. (I admit, with RMS not as active, GNU Emacs including their Emacs Lisp, has made impressive progress over the last few years, but itrCOs still shaped by years of his technical decisions, and the development culture was shaped by him.)

    Even if the update process is manual, e.g. when IrCOm using Debian and migrating a server to a new VM, I do not actually want to spend my
    time working out with trial and error what invocation of certbot
    will allow me to put Letsencrypt certificates on a new server that
    already has Apache installed. (Spoiler; spin down Apache, use
    certbot --certonly, which spins up its own HTTP server.)

    But you need to be able to keep the certs up to date without having to
    shut down Apache (or whatever web server yourCOre using) each time.

    Trust the standard Debian packages to take care of this automatically.

    This wasnrCOt practical. In any event I wasnrCOt asking for help, just making the
    point that this is work that is not actually what I want to use my computer for.

    [...] I have never developed any web app from scratch in PHP. The only time IrCOve used it is to maintain existing code, or write plugins for existing code (WordPress, WooCommerce).

    As a language, its features read like a shopping list of sadness.

    Yep. And, of course, itrCOs one of the most popular programming languages around.
    Similarly, as far as I can tell the most used Lisp is AutoCAD Lisp. This is not the most full-featured or well-thought-through Lisp out there.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 14:28:42 2026
    From Newsgroup: comp.lang.lisp

    On 13/08/2026 12:31 AM, Stefan Ram wrote:
    tfb <tfb@work.it.out> wrote or quoted:
    A very long time ago, Lisp had many unique features. Today it has exactly >> one, but that feature is critical. It just seems weird to me to ignore its >> defining characteristic. Not wrong: weird.

    Reddit concluded that with macros they were now supposed to learn
    to read several entirely unique, personalized programming languages,
    and preferred to rewrite their system in Python.

    Python's wrappers and resource contexts give developers a way to
    pass executable blocks to functions or objects achieving what devel-
    opers often use macros for without exposing the chaotic power of
    full AST manipulation.
    The price for that is the need to rewrite the codebase in whatever
    dialect of Python is current. I've previously mentioned people ditch-
    ing Python because 2.7 happened; or rather didn't happen.

    And I've heard of instances of Python code becoming unPythonic at a
    3.n to 3.n+1 change. That's liable to escalate in the future.

    Another reaction to macros, in a Lisp code base, would simply be to not
    use them. Or remove them whenever found to be unnecessary. This is
    similar to the discipline needed to maintain a large C++ codebase, so
    it's not like this /social problem/ is unique to Lisp. Nor unknown in
    the industry.

    There are other downsides of choosing Python, which I'll not expand on
    in this fullowup. Suffice to say, that based on hard earned experience,
    it's a very bad programming language/environment to use in production.


    Have a nice day in 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 https://bsky.app/profile/myrkraverk.bsky.social | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Fri Aug 14 14:37:51 2026
    From Newsgroup: comp.lang.lisp

    On 12/08/2026 6:14 AM, Kaz Kylheku wrote:
    On 2026-08-10, Andreas Eder <a_eder_muc@web.de> wrote:
    On So 09 Aug 2026 at 05:26, Johann 'Myrkraverk' Oskarsson wrote:
    I've found the Common Lisp macro system annoying enough that I rarely
    use it. I'm OK with functions most of the time, and CLOS the rest of
    the time. And only resort to macros when I can't do anything else in
    the situation.

    That us exactly where it should be used - when there is no other way.

    I don't agree, because that amounts to macros never being used.

    Thank you for reading my mind. As it happens, you got it wrong, and I
    suggest you take another class in telepathy. At minimum, your license
    should be revoked, and you yourself subjected to a brutal interrogation
    by the /inquisition/ for misusing telepathy. I'm sure Eisenhorn is on
    the case.

    Anyway, what I meant to be getting at, is there are /patterns/ in Lisp
    that cannot be done with mere functions. I forgot exactly which pattern
    I last used in anger that was impossible to make a function, so I'll let
    you divine several examples. Have fun.


    It's never the case that there is no other way, because in place of
    any macro, you can write the expansion by hand.

    They can also be done by the text editor. XEmacs' skeletons come to
    mind.


    Please enjoy rewriting all your macros as skeletons, it should be a good exercise for you!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Fri Aug 14 06:47:23 2026
    From Newsgroup: comp.lang.lisp

    On Fri, 14 Aug 2026 07:14:34 +0100, Aidan Kehoe wrote:

    Ar an dara l|i d|-ag de m|! L||nasa, scr|!obh Lawrence DrCOOliveiro:

    [Common Lisp is] a museum-worthy spec. Needs updating to, at least
    support POSIX-type features that we take for granted nowadays.

    ItrCOs better than Emacs Lisp.

    Emacs Lisp at least has process-control features. Common Lisp is still
    full of baggage from before the prevalence of POSIX features that we
    take for granted now.

    Emacs Lisp, at least, is not burdened by that sort of baggage.

    But you need to be able to keep the certs up to date without having to
    shut down Apache (or whatever web server yourCOre using) each time.

    Trust the standard Debian packages to take care of this automatically.

    This wasnrCOt practical. In any event I wasnrCOt asking for help ...

    But you clearly need it, since you are just making work for yourself.

    As a language, [PHPrCOs] features read like a shopping list of sadness.

    Yep. And, of course, itrCOs one of the most popular programming
    languages around.

    I think the most innovative web applications are primarily being done
    with various forms of JavaScript these days, e.g. Node, Jamstack. Even
    Python can handle WebSockets, which PHP has a bit of trouble with.

    Similarly, as far as I can tell the most used Lisp is AutoCAD Lisp.
    This is not the most full-featured or well-thought-through Lisp out
    there.

    No macros, no lexical binding, suffer the Lisp syntax without the
    benefits ... can you say rCLworst of both worldsrCY?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Fri Aug 14 09:27:47 2026
    From Newsgroup: comp.lang.lisp


    Ar an tri|| l|i d|-ag de m|! L||nasa, scr|!obh Anton Antimo:

    Aidan Kehoe <kehoea@parhasard.net> writes:

    [...] My first degree was 1998-2002 and the professor (clearly taking shelter from the first AI winter) assigned the GNU Emacs manual as required reading for the first class. (This is, I understand, not typical.)

    Very atypical these days. Your first degree must have been Computer Science? So you got two degrees. Having a degree or not in such areas,
    I think that understanding the fundamentals of computers and programming
    is a pretty good skill these days. There might be other areas I miss
    for sheer lack of wisdom here.

    Certainly helpful when IrCOm making LAN changes or switching the practice management software to a new server and can do it on the weekend, rather than close down the place for a day.

    To be honest the fundamentals are not the biggest help; it is the experience debugging things and having a feel for what the underlying problem is likely to be, that allows you to prioritise investigating one plausible cause over another.

    I took a ``programming 102'' engineering class a few years ago in which
    the professor offered us a ZIP package containing the GNU EMACS set up
    with Python. Students on the first day of class protested against their ``programming 101'' (a Python primer) saying it was essentially useless
    with no real-world anything (which I fully agree: that course's real objective was to teach us the syntax of Python [with no OOP, which is
    the job of ``programming 102'']).

    The professor replied saying he would present us with some illustrations
    of real-world stuff. To my surprise, one of these things was the GNU
    EMACS. His EMACS came with all of its default configuration but some additional ones for people to run Python and ESHELL. (To run it, we'd double click on a icon on the desktop.) Students were welcome to ignore
    it all and use Python's IDLE or whatever, which I think 99% of them did. What students couldn't ignore, which was cool (lol), was that the way to turn in homework was through fossil. The professor introduced us to
    fossil in another lecture, saying he chose fossil over git due to
    slightly greater simplicity (compared to git, which I couldn't quite
    see). I was likely the one exception that didn't struggle with
    fossil----I had never heard of it until then, but I've been using git
    for years.

    I hadnrCOt come across it. Anything the SQLite people do or use tends to be excellent, which is a good sign.

    Anyway, after these lectures, he went on with the course, which didn't work very well at all because I think after the GNU EMACS and fossil most students had already given up on him---there were many other professors teaching the same course in a way that it had a lot less new things to learn.

    At that point XEmacs was a better editor so after using GNU Emacs for
    a few weeks I switched to XEmacs. It still meets my needs and I have
    no plan to switch away from it.

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my intuition
    says XEmacs started out with coloring? IIRC, Stallman or someone would
    have said that the idea was not properly designed. I can't recall, but
    I might research the question and report back here.

    I wasnrCOt around then. In 1998 the GNU Emacs GUI was remedial and there was a lot more momentum to XEmacs development and engagement. These have both changed in favour of GNU Emacs.

    [...] If you use any emacs itrCOs hard to avoid Lisp. Emacs Lisp is not a paragon of good design nor of good implementation-- (aset (symbol-name nil) 0 ?\u0192) , (fillarray obarray 0) , anyone?--so the natural thing is to look around for something better. The consensus within XEmacs was that Common Lisp was better. On investigating, yes, it is. But, XEmacs needs work, no-one else is doing it, so my software work these days is C with a very Common-Lisp-oriented Emacs Lisp.

    I tried the code above on the GNU EMACS. The first crashes it
    immediately. The second doesn't seem to do its job anymore, throwing a
    type error. They must have created a new type called obarray. Saying (type-of obarray) produces obarray, while fillarray expects a vector.

    Ah, theyrCOve improved that, then. Unclear to my why they didnrCOt just use a hash
    table. Gerd M||llman implemented the right thing, CL packages, here: https://github.com/gerd-moellmann/emacs-with-cl-packages . Stallman hated that, as is his way, so thatrCOs probably why theyrCOve done what they did. ItrCOs on my
    todo list (and already started) to integrate GerdrCOs code into XEmacs.

    We currently just use a hash table for obarray, but this has the disadvantage that you can #'clrhash on it, which has the same problem as #'fillarray.

    (I certainly donrCOt want to have to migrate well-written PHP of twenty years ago that carefully wrapped access to a database using then-best-practice APIs because those APIs are unmaintained and
    removed, but that is entirely on me, we all know PHP is terrible, and
    I knew it then. But Debian shouldnrCOt be terrible, and in the grand scheme of things it isnrCOt terrible.)

    What did you write 20 years ago?

    Just a blog, some utility code to backup my pinboard.in account, and allow 403 redirects to the underlying URL when I supply a combination of tags from there to a script on my server (I find this means I donrCOt need to port my local bookmarks from machine to machine), and code to access a copyrighted German dictionary whose entries I had extracted from a CDROM. (I was living in Germany at the time and my German was not where it is now.)

    That's indeed PHP's prime time. I know the language. I used it seriously back then as well. I never went into PHP 4, remaining in PHP 3 for as long as I could until I gave up on PHP completely---I've always appreciated language stability.

    Yep, itrCOs very valuable. Though *very* tempting as a language developer to deprecate then remove things.

    [...] And speaking of Medicine, how is it disrespectful these days as well, but I won't digress on this (and it's perhaps just something that plagues the entirety of society).

    What do you mean? Respect towards and from medicine varies by
    country. Doctors are regularly assaulted in India by family members of patients unhappy with the patientsrCO care. I get Christmas presents.

    It is indeed. If my sources are correct, in the United States (for example), we get deaths due to medical error top ranked---I don't mean
    top 1st, but highly ranked (top 3 a while ago?).

    Preventable deaths are mostly diet, exercise, smoking, public health related, together with easy access to a GP.

    I have plenty of US tourists who attend me, and I am impressed by the technical interventions done for previous acute issues they have had. Diet, exercise and easy access to a GP are often not great.

    But what I had meant was that I get the feeling from hearing from the population that the attention and time doctors spend with patients now
    has been greatly reduced; that doctors are often rude, get easily
    irritated and so on. That then makes me think they might be working too much.

    My understanding (though I havenrCOt worked in the US) is that the insurance companies over the last couple of decades introduced pre-authorisations and other overhead that effectively decreases the amount reimbursed for the time spent dealing with the patients. This meant that it was no longer (usually) practical to set up on your own, since the administration work and staff to deal with the insurance companies needed to be amortised over multiple clinicians. So most doctors over there are now employed, and if yourCOre expected
    to work at the intensity of a business owner with little to no financial upside for working harder, itrCOs easy to get irritated. And, in my experience, it is easier to be happy when yourCOre making most of the decisions that influence your
    work environment yourself.

    I in fact see a parallel with programmers: in the typical company, the typical programmer can be slightly arrogant, easily irritated, the explanation for which might be too much work, not very competent and not living very joyful days. So in the end I don't see anything specific to Medicine, but something much larger. I'm a student at a large university---what can I say about professors? They're very easily offended with students' lack of interest; they inadvertently and incorrectly take a lot of things personally; my overall conclusion is that they're not doing very well health-wise, not living very joyful days (they might miss days in which there was more glamour in the profession, when they feel they would be better regarded). Something like that.

    IMO a lot of the Computer Science professors were under-socialised and had no fundamental interest in dealing with people. The lecturers in medicine (who were normally working doctors) were much more socially skilled and teaching came easier to them.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Aug 14 01:33:41 2026
    From Newsgroup: comp.lang.lisp

    Aidan Kehoe <kehoea@parhasard.net> writes:
    ItrCOs better than Emacs Lisp. (I admit, with RMS not as active, GNU Emacs including their Emacs Lisp, has made impressive progress over the last few years, but itrCOs still shaped by years of his technical decisions, and the development culture was shaped by him.)

    Emacs Lisp grew a lot in the past decade or two mostly because computers
    became a lot bigger. Remember Emacs was originally written on a VAX
    11/750 with (iirc) 2MB of memory and < 1/1000th the speed of a modern
    PC. Emacs itself was said, in a not entirely nice way, to stand for
    "eight megabytes and constantly swapping". So it's shaped by the
    technical constraints of historical hardware as well as by anyone's
    personal development approach.

    CL has some weirdness about stuff like file and network operations
    because of its own history, which was to abstract over various other
    Lisps of the 1970s-80s, which were mostly not POSIX hosted. Yes it's
    dated, but it still has attractions or else we wouldn't be here.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Aug 14 01:52:39 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:
    > ZetaLisp's innovations extended beyond Flavors to include proper

    I think that paragraph is a historical misstatement: Zetalisp was
    branched from Lisp Machine Lisp (developed on the CADR) but there were
    other branches too. Most of the stuff in the paragraph was present on
    the CADR, i.e. before the branches happened or the name Zetalisp was
    coined. Zetalisp eventually became the most advanced of the branches
    but that was later. RMS would throw a fit if he saw himself listed as a developer of Zetalisp ;).

    Zylisp looks partly interesting, partly meh.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 14 10:25:46 2026
    From Newsgroup: comp.lang.lisp

    Lawrence D-|Oliveiro <ldo@nz.invalid> wrote:

    IrCOm sure they do have their own extensions to make up for the
    deficiencies of Common Lisp. But then, they are no longer rCLCommonrCY,
    are they?


    Right, right, in just the same way all the other implementations of the
    Python standard implement identical sets of extensions to it ... oh, wait.

    I have to ask: are you consciously trying to pick the most stupid thing to
    say at any point?
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Aug 14 03:27:13 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:
    Right, if the language you already has supports every construct anyone
    might ever want to do anything, then nobody needs macros.

    No language has 100% of constructs anyone might ever want. If it has
    90% and requires a little stretching for the other 10%, it's doing ok.
    Lisp starts maybe 50% and uses macros to make up for the rest. Like
    where other languages have "=" as a generic assignment operator, Lisp
    has a complicated setf macro that handles part of the semantic analysis
    phase of a more traditional compiler.

    Do they say that? Which ones? This one thinks that domain-specific
    and application-specific languages are useful and thinks that
    languages with facilities which allow the simple incremental
    construction of such languages are therefore also useful.

    There's more to language than syntax, even if you find syntax important.
    E.g. some users want fancy type systems including for their DSL's.
    There are Lisp dialects that have that, but it's unfeasible in CL other
    than through the Turing tarpit of macros.

    I've mentioned this link before and it is pretty good:

    https://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 14 10:27:55 2026
    From Newsgroup: comp.lang.lisp

    Anton Antimo <anton@safunu.org> wrote:

    Person A: 'The Emacs schism was not fundamentally technical'

    Person B: 'Can you elaborate it more technically?'

    Can you see the problem here?
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 14 10:27:56 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    And herein lies the conundrum. I believe I took a quick glance at the manual, looked at the able of contents, and even tried ctrl+f and the
    terms /binary/ or /binaries/, and /executable/, and found nothing.

    Being /technically/ in the manual does not help if one cannot easily
    find what one is looking for. It also doesn't help if one doesn't have expectations of finding it in the first place.

    Um, section 2.4.3 Generating Executables, in the manual. It's not quite in
    the first page on my screen, but, ad they say, RTFM.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp,comp.lang.c,comp.os.linux.misc on Fri Aug 14 12:26:56 2026
    From Newsgroup: comp.lang.lisp

    (Given I'm commenting on the content of the online manual on a Linux
    system, I'm adding and followingup-to comp.os.linux.misc.)

    On 2026-08-11, Lawrence DrCOOliveiro wrote:

    On Mon, 10 Aug 2026 17:41:30 -0300, Anton Antimo wrote:

    For select (called unix-fast-select in SBCL), see sb-unix.

    select(2) is considered an archaic way of doing things these days,
    because of its ABI limitations. The modern way is poll() <https://manpages.debian.org/poll(2)> (POSIX) or even epoll() <https://manpages.debian.org/epoll(7)> (Linux-specific).

    The online manual here (a GNU/Linux system) says:

    "poll, ppoll - wait for some event on a file descriptor"

    Perhaps that should be rewritten. Reading further, it's not singular,
    but that description with "*A* file descriptor" does make it sound like
    poll is not a suitable replacement for select.
    --
    Nuno Silva

    (Not subscribed to comp.lang.c)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Aug 14 12:46:45 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-14, Johann 'Myrkraverk' Oskarsson wrote:

    On 14/08/2026 7:58 AM, Anton Antimo wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 13/08/2026 11:19 PM, Anton Antimo wrote:

    [...]

    Personally, I think Lisp people need -- well, need is a strong word, but >>>>> I'll go with it -- to get a little bit more behind the notion of practi- >>>>> cality. I mean, the Steel Banks Common Lisp is fine, but many others >>>>> aimed at beginners are exclusively geared towards facing the programmer >>>>> him- -- or her- -- self. There is very little attention paid to the de- >>>>> tails of creating binaries to share with friends. And by this, I mean >>>>> the parts of the programmer facing documentation. I believe the Steel >>>>> Banks Common Lisp manual does not mention how to create binary executa- >>>>> bles? I believe I learned that from /Stack Overflow/ which everyone >>>>> here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    See SBCL's sb-ext:save-lisp-and-die.
    (sb-ext:save-lisp-and-die #P"my-executable.exe"
    :toplevel #'my-package:main
    :executable t
    :save-runtime-options t)
    Source:
    https://www.sbcl.org/manual/

    And herein lies the conundrum. I believe I took a quick glance at the
    manual, looked at the able of contents, and even tried ctrl+f and the
    terms /binary/ or /binaries/, and /executable/, and found nothing.

    Being /technically/ in the manual does not help if one cannot easily
    find what one is looking for. It also doesn't help if one doesn't have
    expectations of finding it in the first place.

    Try the ``executable'' keyword; you'll find this:

    --8<-------------------------------------------------------->8---
    Executable Delivery: The :executable argument to
    sb-ext:save-lisp-and-die can produce a "standalone" executable
    containing both an image of the current Lisp session and an SBCL
    runtime.
    --8<-------------------------------------------------------->8---

    Source:
    https://www.sbcl.org/manual/


    Please be patient with me. Here is a screenshot. I'm afraid the link
    is ridiculously long, and I don't use url shorteners anymore.

    https://www.dropbox.com/scl/fi/07asmp90gza39utr55wro/SBCL-manual-execu.jpg?rlkey=jd3tcevbchchpsge37xfmjh1j&st=pk2y5hvh&dl=0

    (Please consider changing www. to dl. when sharing dropbox links. It
    seems this one needs the rlkey GET parameter, but it still works as a
    direct link once changed to "dl.".)

    What I'm looking at here seems to be the word "execu" -- or the prefix
    of which -- not being found. Should I have continued to type the whole
    word? I thought this worked like Emacs' incremental search, and as I
    typed more characters, it would search longer words, until it wouldn't
    find what I've typed so far.

    You have "Whole words" enabled, uncheck that.

    Is this perhaps a matter of not using the right browser? I mean, what browser do the team players behind S.B.C.L. habitually use themselves?
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Aug 14 12:52:47 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-13, Johann 'Myrkraverk' Oskarsson wrote:

    On 14/08/2026 12:14 AM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.

    In practise the answer is 'raco exe' which makes an executable. You have
    to have a suitable main function &c, but it's not hard.

    Well, aside from technically correct answers, I was talking about the culture. In my recollection, and by now I guess that would be an old Racket,* there was no emphasis on creating binaries in the Racket intro- ductory material, nor user interface. It's more like, here's a pro-
    gramming language, use it!

    And until binaries are habitually made with Racket, and by that I mean production binaries, with code signatures for the Microsoft and fruit
    vendor platforms, that's not likely to change.

    For students, it'd perhaps be much more valuable to teach them how to
    disable anything that nags if the resulting binary doesn't carry a
    signature made with a certificate from the CA system, especially when it
    needs to be a more expensive certificate and/or requires ID validation.

    And perhaps teach them about more suitable means to sign executables,
    like OpenPGP, that actually is based on a web of trust and not on some centralized issuer?

    Best wishes, and happy Racketteering!

    Running afoul of RICO, are we? :-P

    * Pun totally intended afterwards.
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp,comp.emacs.xemacs on Fri Aug 14 08:16:12 2026
    From Newsgroup: comp.lang.lisp

    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

    On 14/08/2026 3:52 AM, Anton Antimo wrote:
    tfb <tfb@work.it.out> writes:

    Anton Antimo <anton@safunu.org> wrote:

    I never ran XEmacs, but I watched a documentary once that said that
    XEmacs was born out of something to do with font locking---my intuition >>>> says XEmacs started out with coloring? IIRC, Stallman or someone would >>>> have said that the idea was not properly designed. I can't recall, but >>>> I might research the question and report back here.

    The Emacs schism was not fundamentally technical: it happened because
    cooperation with RMS is impossible. Lucid needed some features in what
    would have been Emacs 19 to support a programming environment (for C++, I >>> think, not Lisp, despite them being Lucid) and were willing to donate the >>> time to implement them & donate the results (remember Emacs 18 had an
    entirely minimal interface to X: equivalent to running it in a terminal
    emulator). And ... cooperation with RMS turned out to be impossible. So >>> LEmacs happened, which became XEmacs after Lucid died.

    I wasn't there, but I was around a few months later and perhaps before the >>> split was really final. I perhaps no longer have the trove of emails from >>> the split: they made depressing reading.

    (If you're thinking of posting a followup explaining why cooperation with >>> RMS is, in fact, possible, just ... don't, please.)

    Thank you for describing the matter. You must be the best one here
    to elaborate on the schism? Can you elaborate it more technically?
    For instance, there's font locking today on the GNU EMACS---was it
    done in a dramatically different way relative to LEmacs?

    Just to chime in for the newcomers who don't know about this publicly available summary.

    https://www.xemacs.org/Documentation/21.5/html/internals_4.html

    And.

    https://www.xemacs.org/About/XEmacsVsGNUemacs.html

    That said, I do hope tfb is willing to write out a technical summary, or
    even a social one like in the first link.

    Thank you. I'm still reading, but that's likely enough---let's free tfb
    from the task (unless we have further questions).

    Note that since then, GNU Emacs did indeed add loadable modules in C.

    Adding comp.emacs.xemacs to the discussion, because that group shouldn't
    be empty all the time.

    Yes---the USENET is meant for users, so let's use it.

    Happy text editing in XEmacs!

    Writing this from

    GNU Emacs 30.2 (build 2, x86_64-unknown-linux-gnu, GTK+ Version
    3.24.50, cairo version 1.18.4) of 2026-01-19.

    Have a good day.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Fri Aug 14 08:20:47 2026
    From Newsgroup: comp.lang.lisp

    George Neuner <gneuner2@comcast.net> writes:

    [...]

    LLMs [I agree it's a stupid name] are hidden node models having tens
    of thousands (or more) of nodes, and many millions of inputs [and
    weights and offsets]. You can't build one without a supercomputer.

    On the names. I don't think LLM is such a stupid name---it describes
    what it is (at least for now, since sizes evolve over time). But isn't
    ChatGPT even sillier? Who came up with the idea of tagging GPT on the
    name of the thing? I suppose the idea was to make it very clear it was
    not a person? In that case, they shouldn't be done like it's always
    been done: GPT meaning [G]PT is not a [P]erson, [T]hanks (for asking)! (Lol---I'm so good at this.)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Fri Aug 14 08:04:54 2026
    From Newsgroup: comp.lang.lisp

    C||il|!n Niocl|is|!n Glost|-ir <thanks-to@Taf.com> writes:

    I suppose that a typical medic is of a different personality type than
    a typical computer programmer. I do not think that being overworked is
    the overriding cause of the behavior of medics and programmers.
    (S. HTTP://Gloucester.Insomnia247.NL/ fuer Kontaktdaten!)

    I'd fully agree that it's not the root cause for sure. A depressed
    person could plunge into work, say, but could plunge into alcohol or
    other as well. Don't take all the vagueness I wrote too deeply.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 14 12:16:35 2026
    From Newsgroup: comp.lang.lisp

    Paul Rubin <no.email@nospam.invalid> wrote:

    No language has 100% of constructs anyone might ever want. If it has
    90% and requires a little stretching for the other 10%, it's doing ok.

    No single language has 1% of constructs anyone might ever want. In fact
    there is no number which is small enough that any single language contains
    that proportion, because the number of such constructs is not bounded
    above. If you think it is, then I am sorry for you.

    A 'single language' here means 'a language without functions whose domains
    and ranges are programs', and in particular functions whose domain is
    programs written in some other language and whose range is programs written
    in the base language. Such 'single languages' don't really exist because
    you can always use them to write such functions. And the fact that people endlessly do something equivalent to this should be a hint.

    A weaker definition of 'single language' would be a system where facilities
    for creating functions which do this are not part of the base language.
    Common Lisp is not a single language; the Scheme standards were for a long
    time although probably no implementations were. The Scheme standard no
    longer is. The C standard is(unless it's changed a lot).


    There's more to language than syntax, even if you find syntax important.
    E.g. some users want fancy type systems including for their DSL's.
    There are Lisp dialects that have that, but it's unfeasible in CL other
    than through the Turing tarpit of macros.


    So you mean 'CL can't do this thing if you disallow the facility it has to enable you to do this thing and many other things'. Well, yes that's
    vacuous but true.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 14 12:30:01 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> wrote:

    For students, it'd perhaps be much more valuable to teach them how to
    disable anything that nags if the resulting binary doesn't carry a
    signature made with a certificate from the CA system, especially when it needs to be a more expensive certificate and/or requires ID validation.


    On the Mac, executables built with raco exe don't need signatures at least
    when they're command-line tools and being used on the machine where they
    were created (and perhaps by the user who built them). I don't know about graphical programs but I suspect not then either.

    Students who are trying to ship executables rather than source code ...
    well, they can learn how to do that.

    This whole thing is just another brick in the wall of reasons people give
    not to use Lisp. Somehow that wall never has any bricks at all for Python.
    You might think people are making things up, mightn't you?
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Nuno Silva@nunojsilva@invalid.invalid to comp.lang.lisp on Fri Aug 14 13:30:43 2026
    From Newsgroup: comp.lang.lisp

    On 2026-08-14, Anton Antimo wrote:

    George Neuner <gneuner2@comcast.net> writes:

    [...]

    LLMs [I agree it's a stupid name] are hidden node models having tens
    of thousands (or more) of nodes, and many millions of inputs [and
    weights and offsets]. You can't build one without a supercomputer.

    On the names. I don't think LLM is such a stupid name---it describes
    what it is (at least for now, since sizes evolve over time). But isn't ChatGPT even sillier? Who came up with the idea of tagging GPT on the
    name of the thing? I suppose the idea was to make it very clear it was
    not a person? In that case, they shouldn't be done like it's always
    been done: GPT meaning [G]PT is not a [P]erson, [T]hanks (for asking)! (Lol---I'm so good at this.)

    One I've seen used that's adequate is "Generative Autocomplete".

    I'd also propose "GIGO As A Service".
    --
    Nuno Silva
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From ram@ram@zedat.fu-berlin.de (Stefan Ram) to comp.lang.lisp on Fri Aug 14 12:49:29 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> wrote or quoted:
    One I've seen used that's adequate is "Generative Autocomplete".

    The first "L" in "LLM" is what distinguishes those LLM from
    LMs which can be described as "glorified autocompleters".
    LLMs have additional features like emergent efficient internal
    representations of abstract concepts and their relations.

    For one example, today's chatbots can follow meta-constraints
    (like, "Summarize this article in 50 words"). A raw model
    would just continue writing more text similar to the prompt.

    LLMs have recently solved some math problems human mathematicians
    were not able to solve for decades. There is no way you can subsume
    such behavior under "autocomplete".


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From tfb@tfb@work.it.out to comp.lang.lisp on Fri Aug 14 12:51:30 2026
    From Newsgroup: comp.lang.lisp

    I think it's worth understanding what macros actually mean.

    Most programming languages are dictatorships: a small, usually
    self-elected, self-important group of people designs a language, and
    thousands or millions of serfs have to suffer the consequences of their choices.

    Sometimes there is a pretense of some limited form of democracy: perhaps
    you, as a mere serf, can join the politburo and have a vote on what happens
    to the language. Sometimes this involves a payment to some nebulous
    standards organisation. Sometimes you can comment on suggested changes; sometimes people might listen to those comments. Sometimes the politburo
    is not largely made up of representatives (either explicit or implicit) of
    huge corporations who care not one jot about your interests.

    Changes, when they happen at all, take years. The language is ossified
    almost as soon as it exists.

    Almost always, for large systems, there will be tools built on top of the ossified substrate language which allow people to write programs in a way
    which actually matches their problem domain. Those tools are, in fact, *programming languages*, although they're usually implemented in an ad-hoc
    way by people who don't even realise that what they are doing is designing
    a programming language. They are therefore predictably horrible. If you
    have not used such an ad-hoc language you probably have not worked on a
    large system.

    Sometimes people make a better decision: they take an existing (usually dynamically typed as basically nobody likes static typing in the real
    world, usually either not compiled or dynamically compiled) language which
    has a good interface to the ossified substrate and expose functionality
    written in the ossified substrate to the more flexible surface language.
    NumPy and all its relations are the canonical example of this.

    That's at least better than the thing implemented using m4 on top of
    Fortran or whatever. But the thing written in m4 on top of Fortran is
    *still* better than using Fortran directly (and this is not because
    Fortran, today, is a bad language, which is is not, it's because it's an ossified language).

    Quite often what happens is that user or group of users of a language gets
    so fed up with this process that they design a new language which better
    meets their needs, perhaps starting with one of the ad-hoc languages above.
    That language then develops its own self-important politburo, becomes ossified.

    Recurse.

    Lisp chose something else. Lisp chose not to be a dictatorship, but to
    treat its users as adults capable of making their own decisions: decisions which were as good as the decisions of the politburo if not better.
    Decisions which, certainly, relfected the needs of the users making the decisions rather than some distant observer.

    Lisp looked at what *actually happens* in the world rather than in the
    heads of the politburo members, and it saw that what happened was the
    endless invention of new languages, either for specific problem domains, or just because the existing languages were so terrible. And it said, 'OK,
    let's make that a feature, not something you have to fight your way
    towards. Let's build a language whose defining feature is that it lets you build languages. Let's allow it to let you build languages
    *incrementally*, rather than putting some enormous barrier in your way. So
    you can take an existing language and define some extensions to it, and
    those extensions wil have exactly the same status as the original language does.'

    If you disagree with the decisions of the politburo you don't have to wait
    five years for the members to die and the decision to change, you can just
    make the system do what you want, today.

    Lisp understood that this means you have to make some compromises. The
    most significant is that the syntax of the language must have very low commitment to the semantics. That makes the language rather austere, but
    it means that you, the user of the language, get to say what the semantics
    is, without having to jump through some huge ring of fire and getting
    burned in the process.

    Lisp is a system built by people who understand how utterly stupid the
    claim that any programming language contains 90% of all the constructs
    anyone will ever need is.

    Lisp is a democracy. It is perhaps more than a democracy: it either is or
    is close to an anarchy. Anarchies obviously work only if their citizens
    are actually adults and if they are willing to cooperate with one another. But, well, Lisp assumes you are. If you're not an adult, or if you can't
    deal with cooperating with other people in the design of the language
    you're going to use, or if you like someone telling you what to do then,
    well, do what thou wilt.

    Lisp understands that a consequence of this anarchy is that different
    groups of users working on different projects will end up using differing languages, or dialects (*a shprakh iz a dyalekt mit an armey un flot*, famously), and it also understands that *that's what happens anyway*,
    except the languages and dialects people end up using are usually things created using tools whose only datatype is the string.

    Like I say: if you're happy to live as a serf in a dictactorship, or if you feel you might become a dictator, then that's OK. But please, stay the
    fuck away from those of us who want not to be serfs or dictators, and who
    want to make our own decisions in a community of our equals.
    --
    tfeb.org/computer/
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sat Aug 15 01:19:43 2026
    From Newsgroup: comp.lang.lisp

    On 14/08/2026 6:27 PM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    And herein lies the conundrum. I believe I took a quick glance at the
    manual, looked at the able of contents, and even tried ctrl+f and the
    terms /binary/ or /binaries/, and /executable/, and found nothing.

    Being /technically/ in the manual does not help if one cannot easily
    find what one is looking for. It also doesn't help if one doesn't have
    expectations of finding it in the first place.

    Um, section 2.4.3 Generating Executables, in the manual. It's not quite in the first page on my screen, but, ad they say, RTFM.


    You sir tfb, may get off your arrogant horse, remove the prick from your
    arse hole, stick it down your throat, then print out

    Message-ID: <SUxfS.292910$aXr.34899@fx18.ams4>

    and eat it!
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann 'Myrkraverk' Oskarsson@johann@myrkraverk.invalid to comp.lang.lisp on Sat Aug 15 01:33:32 2026
    From Newsgroup: comp.lang.lisp

    On 14/08/2026 7:52 PM, Nuno Silva wrote:
    On 2026-08-13, Johann 'Myrkraverk' Oskarsson wrote:

    On 14/08/2026 12:14 AM, tfb wrote:
    Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:

    If I'm not mistaken, we also have this problem with Racket. Racket is >>>> aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.

    In practise the answer is 'raco exe' which makes an executable. You have >>> to have a suitable main function &c, but it's not hard.

    Well, aside from technically correct answers, I was talking about the
    culture. In my recollection, and by now I guess that would be an old
    Racket,* there was no emphasis on creating binaries in the Racket intro-
    ductory material, nor user interface. It's more like, here's a pro-
    gramming language, use it!

    And until binaries are habitually made with Racket, and by that I mean
    production binaries, with code signatures for the Microsoft and fruit
    vendor platforms, that's not likely to change.

    For students, it'd perhaps be much more valuable to teach them how to
    disable anything that nags if the resulting binary doesn't carry a
    signature made with a certificate from the CA system, especially when it needs to be a more expensive certificate and/or requires ID validation.

    That would certainly help me. I have repeat nags because my self made
    binaries get modified by CL.EXE when it decides it's a good idea to incrementally link. I think that's not related to signatures, though I
    don't know. But that's also not a discussion for comp.lang.lisp, since
    as far as I know, nobody uses CL.EXE to link Common Lisp.

    That said, have you ever thought to put your own self signed certificate
    into the system? I did that once, when testing H.T.T.P.S. validation on Windows 10 development system. In my tests, the new self signed /system certificate/ just worked. Albeit, I did not do that for code signing.

    I believe that would be an excellent second semester exercise, for
    webservers built on top of Common Lisp. My preference is Hunchentoot,
    though I don't recall ever using it directly with encryption. I usually
    leave that to a front-end Apache, and Apache also runs on Windows.
    There used to a set of binaries done by Microsoft, I believe, and I'm
    not sure who is now making Apache binaries for the eleven Windows, and
    I'm not looking it up since it's outside the scope of comp.lang.lisp.

    So, for people with more experience in eleven Windows than I have, how
    would one create a self signed certificate, start a webserver with
    Hunchentoot -- or another Common Lisp framework -- and encrypt the conn-
    ection with that very same self signed certificate, and have it work in
    regular browsers because it's also part of the system's roots of trust?

    I mean, I did that last step on my own, I'm sure other people can figure
    that out too. /Never mind I forgot how to do it/.


    And perhaps teach them about more suitable means to sign executables,
    like OpenPGP, that actually is based on a web of trust and not on some centralized issuer?

    There are also social issues in the /web of trust/, but we don't need to discuss all of that here in comp.lang.lisp.


    Best wishes, and happy Racketteering!

    Running afoul of RICO, are we? :-P
    No, I'm not so "lucky" to get payments for other people's criminal acti- vities. Do you?
    --
    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 | for ( ;; ) _:;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Aug 14 12:03:18 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:
    No single language has 1% of constructs anyone might ever want.

    If I can code fluently in a language, that is, I can think entirely
    about the application-level problem I'm trying to solve and not putting
    much effort into choosing language constructs, then it's supplying 100%
    of what I want at least at that moment. That's great.

    If I have to sometimes stop and think about language constructs and come
    up with something that works but isn't entirely natural, but this
    doesn't happen too often, I'm still satisfied. That's the 90% that I
    mean.

    If you're saying that even CL only has 1%, then what's so great about
    CL? Do you really think you can fix the other 99% with macros? That
    seems unrealistic.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul Rubin@no.email@nospam.invalid to comp.lang.lisp on Fri Aug 14 12:08:15 2026
    From Newsgroup: comp.lang.lisp

    tfb <tfb@work.it.out> writes:
    Sometimes there is a pretense of some limited form of democracy: perhaps
    you, as a mere serf, can join the politburo and have a vote on what happens to the language.

    I haven't seen this url in a while but I guess it's time to post it
    again.

    https://www.marktarver.com/bipolar.html
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Aidan Kehoe@kehoea@parhasard.net to comp.lang.lisp on Sat Aug 15 10:01:05 2026
    From Newsgroup: comp.lang.lisp


    Ar an ceathr|| l|i d|-ag de m|! L||nasa, scr|!obh Paul Rubin:

    I haven't seen this url in a while but I guess it's time to post it
    again.

    https://www.marktarver.com/bipolar.html

    Thanks, glad to have read that.
    --
    rCyAs I sat looking up at the Guinness ad, I could never figure out /
    How your man stayed up on the surfboard after fourteen pints of stoutrCO
    (C. Moore)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From =?UTF-8?Q?St=C3=A9phane?= CARPENTIER@sc@fiat-linux.fr to comp.lang.lisp on Sat Aug 15 12:58:27 2026
    From Newsgroup: comp.lang.lisp

    Le 14-08-2026, Paul Rubin <no.email@nospam.invalid> a |-crit-a:
    I haven't seen this url in a while but I guess it's time to post it
    again.

    https://www.marktarver.com/bipolar.html

    This url is not that news and I never saw it anywhere. Maybe you already
    sent it but as my ISP is broken, I don't see all the messages. So it's
    the first time I see this link.

    Many thanks for this.

    It tells me things about me which don't concern you. But it told me
    things about LISP which always eluded me.

    The fact is that LISP is almost never used is the real life. I know
    stump, nyxt and guix are LISP programs, but they represent less than
    0.[n]01% of users (I have no clue about the number of zeros represented
    by n here, but I'd say you can put a big number).

    Because if I know that LISP inspired a lot of things actually used in
    other programming languages, I know that nobody actually is learning
    LISP or computer history or anything that could explain why so many
    messages about LISP are shared compared with the number of people using
    it in a day to day basis.

    I'm not a programmer, but as computer science is allowing me to get
    things in my stomach (and as a French guy, what I put in my stomach is
    very important don't belittle that part), I have to follow up on what's happening in computer world. And I found a lot of things about LISP.
    Don't get me wrong. I find something like 1% of blogs/articles/whatever
    related to LISP. You can think it as small, but compared to what LISP is
    used in real life, it's huge. For each article/blog/whatever about C or
    C++ or COBOL, I can see at least ten articles/blog/whatever about LISP.
    And it's something.

    And I wondered about it from a long, long time. And this links explains
    a lot, thanks.
    --
    Si vous avez du temps |a perdre :
    https://scarpet42.gitlab.io
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anthk GM@anthk@disroot.org to comp.lang.lisp on Sat Aug 15 22:29:56 2026
    From Newsgroup: comp.lang.lisp

    On 2026-02-21, Lawrence DrCOOliveiro <ldo@nz.invalid> wrote:
    On Sat, 21 Feb 2026 12:25:06 +0100, Mario Rosell wrote:

    Just for fun. It seems like a pretty interesting language.

    Lisp is a pretty interesting language, but it was never standardized
    to the extent that we expect of languages today. Look at the Common
    Lisp spec, and it still retains a lot of baggage to maintain
    compatibility with obsolete OSes that simply donrCOt matter any more.

    And also, which particular Lisp do you want to learn? There are a
    number in common use today:

    * In the rCLLisp-2rCY camp: Emacs Lisp, SBCL
    * In the rCLLisp-1rCY camp: GNU Guile

    And thatrCOs just what I think of as the most notable ones.

    Guile and every other Scheme it's both lib, SRFI and R_RS incompatible
    with each other. CL with ANSI and the HyperSpec in the end
    can be ironicaly much smaller and compact.
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.lisp on Sat Aug 15 23:38:54 2026
    From Newsgroup: comp.lang.lisp

    On Sat, 15 Aug 2026 22:29:56 -0000 (UTC), Anthk GM wrote:

    On 2026-02-21, Lawrence DrCOOliveiro <ldo@nz.invalid> wrote:

    Lisp is a pretty interesting language, but it was never
    standardized to the extent that we expect of languages today. Look
    at the Common Lisp spec, and it still retains a lot of baggage to
    maintain compatibility with obsolete OSes that simply donrCOt matter
    any more.

    And also, which particular Lisp do you want to learn? There are a
    number in common use today:

    * In the rCLLisp-2rCY camp: Emacs Lisp, SBCL
    * In the rCLLisp-1rCY camp: GNU Guile

    And thatrCOs just what I think of as the most notable ones.

    Guile and every other Scheme it's both lib, SRFI and R_RS
    incompatible with each other. CL with ANSI and the HyperSpec in the
    end can be ironicaly much smaller and compact.

    But is it any better for compatibility? What are these rCLANSIrCY and rCLHyperSpecrCY you talk about? Are they additional, shall we say
    informal, attempts at standards beyond Common Lisp?
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Aug 15 19:44:38 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 13 Aug 2026 11:20:20 +0800, Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote:


    Personally, I think Lisp people need -- well, need is a strong word, but
    I'll go with it -- to get a little bit more behind the notion of practi- >cality. I mean, the Steel Banks Common Lisp is fine, but many others
    aimed at beginners are exclusively geared towards facing the programmer
    him- -- or her- -- self. There is very little attention paid to the de- >tails of creating binaries to share with friends. And by this, I mean
    the parts of the programmer facing documentation. I believe the Steel
    Banks Common Lisp manual does not mention how to create binary executa-
    bles? I believe I learned that from /Stack Overflow/ which everyone
    here in comp.lang.lisp knows is not a good place to learn how to do
    anything; not anymore.

    Games with Gabe wrote* about that extensively in his YouTube video, at

    https://www.youtube.com/watch?v=IbDAmvUwo5c

    and I heartily agree.

    If I'm not mistaken, we also have this problem with Racket. Racket is
    aimed at students, mostly, learning to code in Scheme, or the Scheme
    dialect that is Racket, but not how to create binaries to share their
    work with their loved ones who don't code.


    The biggest issue I see with learning Racket is the sheer weight of
    its documentation. The reference is pushing ~1,800 pages and the user
    guide is twice that.

    It all could use a better [relational] index. The docs /are/ indexed,
    but if you don't know what keyword(s) to search for, it can be hard to
    find relevant information. Racket's preferred terminology is a mashup
    that stems from many sources.


    Racket isn't really aimed at students - its predescessor PLT Scheme
    /was/ aimed at teaching, but Racket is meant for general development.
    Racket is not a Scheme, but it is closely related.

    The main distribution bundle includes a large number of libraries and development tools, and additionally there are hundreds of user
    contributed packages.

    Racket /does/ remain popular for teaching because of the (relative)
    ease of creating DSLs having arbitrary [ie. non-sexpr] syntax that
    will compile to and interoperate with Racket. It is fairly easy to
    mix and match modules written using different DSLs.

    There are a number of subset "teaching languages", R5RS and R6RS
    Scheme implementations, and others, all implemented as DSLs.


    So I believe we need more books about Common Lisp. Especially how to
    make production games in Common Lisp. I mean, the Steel Banks Common
    Lisp garbage collector cannot be worse than the old one in Unity, and
    I currently believe C.L.O.S. is eminently suitable for three dimensional
    game objects.

    YMMV. I think the LAST thing we need is more games. Too many gamers
    need to pull their heads out of the game and go get a life.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From George Neuner@gneuner2@comcast.net to comp.lang.lisp on Sat Aug 15 21:12:15 2026
    From Newsgroup: comp.lang.lisp

    On Thu, 13 Aug 2026 18:59:07 -0400, steve g <Sgonedes1977@gmail.com>
    wrote:

    is it possible to use a truth maintenance system? Just curious, it would >probably take up too much space and time. Just a jtms is a lot of
    overhead. You could try to use an LTMS but we all know that this just
    leads to more wasted space and aggravation. I would think an ATMS would
    work; I dunno, I do not have a super computer or a billion dollars.

    The difficulty would be in interfacing it.

    The notion of "state" in a neural network is a matrix of numeric
    values. That state is distributed over some or all the nodes and
    there is no equivalent of, e.g., a simple string or a token value
    (enum, etc.), that could be passed to a separate oracle to check.

    Technically it is possible to generate such a token as an output, feed
    it to an oracle, and take the oracle's reply back as a new input ...
    but that could represent a significant bottleneck in processing.



    The big problem I see with LLMs is how they are being used.

    Neural networks essentially are fast pattern matchers ... but there is
    no getting around the fact that any matches are statistical, and their
    weight depends crucially on context.

    Likewise the "memory" of the NN is content addressed and matches in
    the memory are statistical. Recall that the "state" is a matrix - you
    put a matrix in, you get another matrix out. Making the "memory"
    larger [encoding more data] only serves to reduce the accuracy of any
    potential matches.

    YMMV. To my thinking, /generating/ output by "learned" associations
    from a fuzzy match of content addressed memory, and /relying/ on that
    output to be somehow accurate is kin to madness.



    I believe NNs absolutely do have a place - input matching for dispatch
    in rule based decision systems. Rule systems can do fuzzy logic, they
    can explain their reasoning when asked, they don't hallucinate, they
    won't lie to the user, and their rule sets can be modified to deal
    with new situations. Moreover, any NNs involved will be (relatively)
    small and easily retrained or replaced if necessary.

    The problem with rule systems mainly is user perception: since the
    advent of LLMs, rule based logic no longer is considered to be "AI".
    This is due to media propaganda and not real technical argument - but
    if you try to sell a rule based system, it is almost guaranteed that
    someone will want to know why you aren't using an "AI" instead.

    YMMV. If it's artificially constructed and it does something
    "intelligent" [for some definition], then I consider that it is AI.

    [Many years of OEM development has taught me that it can be difficult
    to challenge what users have read or heard in the media - no matter
    what the actual truth may be. The Vorlons say, "Understanding is a
    3-edged sword: your side, their side, and the truth." But sometimes I
    have to fight the urge to "educate" someone with a clue bat.]
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Anton Antimo@anton@safunu.org to comp.lang.lisp on Sun Aug 16 13:56:20 2026
    From Newsgroup: comp.lang.lisp

    Nuno Silva <nunojsilva@invalid.invalid> writes:

    On 2026-08-14, Anton Antimo wrote:

    George Neuner <gneuner2@comcast.net> writes:

    [...]

    LLMs [I agree it's a stupid name] are hidden node models having tens
    of thousands (or more) of nodes, and many millions of inputs [and
    weights and offsets]. You can't build one without a supercomputer.

    On the names. I don't think LLM is such a stupid name---it describes
    what it is (at least for now, since sizes evolve over time). But isn't
    ChatGPT even sillier? Who came up with the idea of tagging GPT on the
    name of the thing? I suppose the idea was to make it very clear it was
    not a person? In that case, they shouldn't be done like it's always
    been done: GPT meaning [G]PT is not a [P]erson, [T]hanks (for asking)!
    (Lol---I'm so good at this.)

    One I've seen used that's adequate is "Generative Autocomplete".

    That's a pretty good one.

    I'd also propose "GIGO As A Service".

    That's even better (but only as a nice joke).

    --- Synchronet 3.22a-Linux NewsLink 1.2