@[email protected] I think #CommonLisp is ugly as hell and I've been at it on and off for 40 years.

Powerful, yes. But ugly too. (Not the syntax, to be clear, but all the cruft in the created-by-committee language.)

Just my opinion. Most of the Lisp hackers I know don't care about that stuff as much as I do.

@sigue @ksaj to answer the part where says "I think #CommonLisp is ugly as hell ". I would say that some parts aren't that pretty... For example I find it unfortunate that LML was reduced (-> object system removed) & modernized to CLtL1 and then renovated parts (an improved object system) again where brought back in to create ANSI CL.

@lispm @sigue @ksaj

Flavors was the lisp machine's original OO system. For its day, it was quite innovative (and its implementation even more so)!

Some example features of Flavors: multiple inheritance, different inheritance types (e.g., CASE method combination?!), optimizations when instance variable ordering is known, demon methods/wrappers (automatically generated, "the fruit of the immaculate compilation"), and so on.

But CLOS was "better", in that it was more regular rather than the product of a decade of organic growth. True, it was simplified down a bit and didn't contain all the Flavors features. But once you understood the gist of it, you understood all of it, pretty much.

(I thought for sure you were going to argue about the aesthetics of LOOP. For about 2 generations now, purists have complained it's not Lispy enough. Pragmatists have responded with an argument that boils down to "shut up, I'm busy programming a loop here". I'm with the pragmatists, for once.)

@weekend_editor @sigue @ksaj What I see as a problem, that CLtL1 lacked an integrated object system. It had no user extensible operations. Thus the language was growing a few years without one. CONDITIONS (not in CLtL1), are they CLOS or not? Streams, are they CLOS or not? Even ANSI CL does not say. There is only one pathname type, but it is supposed to support different filesystems. When stuff was added back in for ANSI CL, still there was only a shallow commitment to CLOS.
@weekend_editor @sigue @ksaj This is also a question to Carl. Is CLOS really 'better' than Flavors? Flavors has the advantage that operations gets organized around classes. CLOS organizes them around generic functions. Finding operations is easier with a simple taxonomy. With CLOS I need more complex browsers, or new language features like 'protocols' (which Common Lisp lacks).
How about a Lispy Dylan with Flavor inspiration, instead of CLOS?

@lispm @sigue @ksaj

By "better" object system I meant (a) generic functions, which just soothe my brain instead of making me thing message-passing is something different, and (b) a bit more regular in form, from having been designed all at once.

Probably not better along a number of other dimensions!

Personally, I like organizing around what Java folk would call interfaces, and back in the day we called protocols. It's both a class and generic function thing, but it clearly establishes boundaries and Dijkstra-like "separation of concerns" in your code.

Dylan took that even further, by giving very, very heavy weight to being statically analyzable most of the time. (E.g., classes sealed by default, some oddball rules around inheritance, etc. that all mean methods are completely discoverable at library-level compilation time.)

Now, there's also tight vs loose binding, which is Dylan's version of the fragile base class problem. I dunno the solution to that.

I finished out my career hacking stats & applied math in R, and now I fiddle around the edges of Haskell.

@weekend_editor @sigue @ksaj I should not have said generic functions, but multiple dispatch generic functions. I was thinking whether single dispatch makes the code writing and browsing easier...

@lispm @sigue @ksaj

Oh, multi-way dispatch generic functions are a thing of beauty and a joy forever!

I'll never forgive the Java designers for throwing that out and going back to single-dispatch class centrism, crippling a generation of programmers into thinking that was How It Should Be Done.

@weekend_editor @lispm @[email protected]

RE: "[T]here's also tight vs loose binding, which is Dylan's version of the fragile base class problem."

I think that may be one reason why the names were officially changed to "development" and "production" modes. One should compile code in "production" mode when running in production.

@sigue @lispm @ksaj

Oooh, I didn't know that!

So, basically, we still don't know a solution to the problem, but we found a prettier rug to sweep it under.

I've seen worse.