dice.camp is one of the many independent Mastodon servers you can use to participate in the fediverse.
A Mastodon server for RPG folks to hang out and talk. Not owned by a billionaire.

Administered by:

Server stats:

1.8K
active users

#maclisp

0 posts0 participants0 posts today
Replied in thread

@larsbrinkhoff

Some random trivia about the implications of this change you cite, and then about some related things...

I arrived on scene with MACLISP in 1977. As an undergrad, I managed to get assigned a desk and console in an office with Guy Steele and JonL White (who wrote this announcement). Having such folks, and others, handy made it easy to ask questions. I wrote The Revised Maclisp Manual (later webbed at maclisp.info/pitmanual) a couple years later in order to share what I'd learned.

In '77, DEFUN worked exactly like what you show here, but with some nuance that may have been there from the beginning or may have been added later:

One of the important but easy-to-overlook things about DEFUN, as described there, is that when you compile a DEFUN in MACLISP, it puts the compiled definition in the SUBR or LSUBR property, and when you compile DEFUN FEXPR, it puts the compiled definition in the FSUBR property. So you could write DEFUN and it would work either interpreted or compiled. This is because when you funcalled something, it looked for a definition in any of the SUBR, LSUBR, or EXPR property. But had you used DEFPROP, there was a complex philosophical problem because really the compiled version of (DEFPROP (LAMBDA ...) EXPR) had to willfully turn into (DEFPROP <compiled-lambda> SUBR) or (DEFPROP <compiled-lambda> LSUBR), even though the definition CLEARLY asked for a particular property. DEFUN hid such implementation detail, which was just semantically messy. Much of MACLISP was similarly messy.

The biz about SUBR vs LSUBR, for those who don't know is that there was a thing called a LEXPR which was obtained by (LAMBDA N-ARGS ..body..) where the argument received a number of args and you had to call the ARG function (it was function-like but really a special form) to get the particular arg. That was how you could receive variable numbers of args before &keywords were invented (and also how &keywords were implemented at the low level in Maclisp even after the DEFUN& macro arrived on the scene). A function like (LAMBDA (X Y) ...) compiled to a SUBR but a function like (LAMBDA X ...) compiled to an LSUBR. Except any function of -- if memory serves -- 5 or more args got compiled as an LSUBR even if it had a fixed number of args. Again if memory serves, this was an issue of the SUBR function call sequence needing to use registers and only a fixed number of registers were allocated for args, so if the number of args exceeded that number, the LSUBR calling sequence was used.

MACLISP did not worry excessively about whether compiled code and interpreted code had precisely the same semantics, so the fact that
(DEFPROP FOO (LAMBDA X X) EXPR)
(PRINT (IF (GET 'FOO 'EXPR) 'YES 'NO))
printed a different value interpreted and compiled was not something that surprised many experienced programmers.

Of course, there were other compiled/interpreted differences like that interpreted (LAMBDA (X) (F X)) would special-bind X, while compiled it would not. This is short of saying the X was lexical. There were no closures. But the binding was not available to called functions like F in compiled code even though it was in interpreted code.

The realizations that these various language features mattered at all, and needed to be consistent, were gradual. MACLISP was as much a testbed for new ideas as a language itself. It was a big deal thing (and even very controversial) that Common Lisp had lexical variables.

(Insert obligatory reminder that MACLISP is nothing to do with the modern macintosh. This was long before Apple existed. Project MAC at MIT was something quite unrelated.)

maclisp.infoThe Revised Maclisp Manual (The Pitmanual)

Today I learned that the source code for Franz's original Lisp for the VAX is public and even BSD-licensed: github.com/omasanori/franz-lis

It was originally developed to port Macsyma from the PDP-10 to the VAX, hence it is compatible with MacLisp.

It includes Lisp Machine Lisp's Flavors object system: github.com/omasanori/franz-lis

The source code of Franz Lisp. Contribute to omasanori/franz-lisp development by creating an account on GitHub.
GitHubGitHub - omasanori/franz-lisp: The source code of Franz LispThe source code of Franz Lisp. Contribute to omasanori/franz-lisp development by creating an account on GitHub.
#Lisp#MacLisp#Macsyma
Continued thread

@screwtape

The PDP10 was a 36-bit architecture. Note well: NOT a power of 2. As I heard it, DEC was trying to make it be a lisp-friendly instruction set, so kind of an early lisp machine even though we referred to commercial vendors as "stock hardware". It had a fun instruction set. While the PDP-11 was 32-bit, the PDP-10 was 36-bit. These OS's did not go in order. The PDP-10 (a.k.a, "the 10") was not superseded by the PDP-11 (a.k.a. "the 11"). They were different projects. While the 11 was stack-oriented, the 10 was VERY different. And the 11 was byte-oriented but the 10 wasn't; it was word-addressed with 18-bit pointers, so 256Kwords or about 1.25 MB if you're thinking 7-bit bytes of text (though mostly we didn't; we just said 256K, words was implied).

The 10 I used had a megaword of memory (4x what could be addressed), which was good because disks were slow and when a job (process) blocked, another was in memory and ready to run. And I heard Moon once say that megaword, called a "moby" cost $1M. Yikes.

But back to the word size, the 18 bits per half-word, was perfect for a cons. There were instructions to get one or the other half-word. And ASCII was 7-bit back then, so you could get 5 7-bit characters in a word, with one bit left over (sometimes wasted, sometimes used interestingly). There were ways to extract those efficiently. The first emacs originated in that environment, but not in lisp, in a language called TECO. But yeah, weird and fun 36-bit architecture. People can see here if that piques their interest: pdp10.nocrew.org/docs/instruct
The HLRZ instruction ("Half-left to right padding with zeros", I think it stood for, was the CAR function).

Howard Cannon, inventor of Flavors, the Lisp Machine / Zetalisp precursor to CLOS, had a license plate of HLRZ on his car. Probably few people in the real world understood, but it seemed cool. There were a few other instructions on the PDP10 that were directly Lisp instructions. Obviously HRRZ. I'll leave you to work that out.

Speaking of strange word sizes, Multics was a 72-bit architecture. I was told some address bits would never be non-zero because no one could ever afford that much physical memory. It was a Honeywell machine, not DEC. So I guess it's just coincidence it was twice the number of bits of the PDP-10. Multics was respected for being HIGHLY secure, long before its time, so not appreciated. Just as its primary language, PL/1, was not appreciated for its complex type casts. History is harsh to ideas that arrive too early. You can learn more about it here: multicians.org/
Dave Moon's earlier Maclisp manual (the Moonual), which predated my Revised Maclisp Manual (a.k.a. Pitmanual), was very Multics-leaning is preserved here: softwarepreservation.org/proje

pdp10.nocrew.orgPDP-10

@screwtape

I was doing some listening to back episodes of your Lispy Gopher show on AnonRadio, and I had a couple of supplementary remarks to add to the remarks you made about Lisp history, while recounting what you got out of my Untold Story paper. Far too detailed for on-air but this seemed a useful forum to flesh some of that out.

You asked about the back story of the lisp manual I wrote where I lost money (and got a hard life lesson in intellectual property). Yes, that was my Maclisp Manual, the Pitmanual (originally published in hardcopy at MIT, and later webbed at maclisp.info/pitmanual/index.h). Detailed history here: maclisp.info/pitmanual/history

Dave Moon (usually just called Moon) was a Multics Maclisp implementor and author of the first manual. Maclisp had evolved and changed a lot by time I wrote mine. I was mostly a Maclisp user, not implementor. I wrote a macro library or two. But I shared an office with Guy Steele and JonL White, Maclisp implementors, so I accumulated a lot of trivia that needed not to get lost. And I was having fun playing with Knuth's TeX. In Maclisp, I wrote a special-purpose Maclisp-manual-making language that compiled into TeX. The Pitmanual was written in that, a kind of tabular plain text, and my tool produced the TeX for the typeset book as output.

I should also note, to avoid confusion, that Maclisp was a pre-Common Lisp dialect that ran on the Digital Equipment Corporation (DEC) PDP-10, which was pretty much comparable to the DEC20 (which was really mostly a later and more commercial PDP10, though it ran a very different operating system).

Maclisp was so-named NOT because of the Apple Macintosh, which it long pre-dated, but because it was named after Project MAC (a multi-targeted acronym that meant things like Machine-Aided Cognition, Man and Computers, and other things like that if I recall). But it was an MIT project in using computation generally and had zero overlap with what Apple made. Eventually there as a lisp for the Apple MacOS system, but it was not Maclisp.

More remarks will follow as a separate attachment.

maclisp.infoThe Revised Maclisp Manual (The Pitmanual)

#meta
@amszmidt is right to balkanize #lisp and #scheme .

Whatever lisp was, it died out in the 80s, survived by rnrs and a portability ansi standard to the 32bit x86 era.

Now that the MIT CADR tumbleweed.nu/lm-3/ and (medley) dmachine interlisp.org/ have reincarnated, #CommonLisp should be deported back to #maclisp and #interlisp and used as a portability standard.

In contrast rnrs scheme scheme.org -> (incf n) rnrs scheme scheme.org

tumbleweed.nuLM-3 --- resurrecting the MIT CADR

#lisp y #gopher show on #aNONradio @SDF at 000UTC Wednesday (3 hours from now)
Topics:
- #permacomputer gopher://perma.computer gemini://perma.computer
- - @jns ' phost gopher://gopher.linkerror.com/
- My lispy gopher #cyberlifeplan toot (of gopher links); mastodon.sdf.org/@screwtape/11
- congratulations @stokesauce on 100 live listeners!
- @amszmidt #maclisp
- @amoroso #interlisp
@prahou #comfy show banner !
- I will upload @jamesp 's test show as the backup/second hour