from Hacker News

Medley Loops: The Basic System (Lisp Object-Oriented Programming System) [pdf]

by pamoroso on 10/16/24, 2:42 PM with 28 comments

  • by lispm on 10/19/24, 7:10 PM

    LOOPS was one of the early frameworks for AI programming (-> for Knowledge-based Systems -> especially Expert Systems) in Lisp, which also made use of the new graphical user interface of the Interlisp-D Lisp Machine from Xerox. Interlisp-D was a combination of operating system and development environment, and was developed for the same computers, which also ran Smalltalk. Both were image-based and managed the source code in the development environment.

    Remarkable is the fully interactive way of working in the REPL (Lisp's Read Eval Print Loop) and through the GUI, including live editing all classes/etc. via menus. LOOPS extended Interlisp with various ways to do object-oriented programming and a rule-system.

    There is also a "friendly primer" for Xerox LOOPS, from mid 1980s. https://bitsavers.org/pdf/xerox/interlisp-d/198510_Koto/3102...

    Note that LOOPS is an early OOP System, it's not a about iteration in a loop.

  • by pamoroso on 10/16/24, 2:42 PM

    Volume I of the Medley LOOPS series about the Lisp Object-Oriented Programming System, an Interlisp object extension. Volume II is coming in the late fall of 2024, Volume III in the fall of 2025.
  • by Rochus on 10/19/24, 8:31 PM

    What are the major differences to CLOS?
  • by g19205 on 10/20/24, 11:09 PM

    somebody asked what's the different between LOOPS and CLOS, but probably more time relevant question is what's the difference between LOOPS and Flavors. they list Flavors as an inspiration, but also various knowledge management systems, so there must be something additional going on there. maybe lispm knows.

    OP is a very long book, I haven't had a chance to read it fully, but first thing I wanted to see is how they manage message sending, and it's as jank as it is in flavors. I thought considering how custom interlisp can be they'd do something special. nope, it's just send.

    for those who don't know what I'm talking about, an old school smalltalk style object system lets one send arbitrary messages, without prior knowledge of what those messages might be, and treats the receiving object as a blackbox (conceptually anyway). this approach doesn't map well to s-exp, because first symbol in an s-expression drives the logic. in flavors (and in LOOPS) the symbol used is "SEND", so in order to actually send a message you write something like

      (send some-window :set-edge 10 10 40 40)
    
    as you can imagine a very heavily object oriented code becomes littered with sends. LOOPS seems to make it a little bit less painful by making ← an equivalent of send, so above can be written as

      (← SomeWindow SetEdge 10 10 40 40)
    
    this is obviously only a margin improvement.

    clos solved this problem by drifting away from smalltalk's blackbox concept and making everything generic function oriented,

      (set-edge some-window 10 10 40 40)