7 ms·
Smalltalk looked at the time like it was going to be important. It had really good marketing. Its main effect on the world, aside from being the implementation
by ncmncm 4y ago
Smalltalk looked at the time like it was going to be important. It had really good marketing.
Its main effect on the world, aside from being the implementation language for the Xerox UI that was demonstrated to Steve Jobs, seems to have been via its influence on the language Self, which then influenced Javascript. And here we are.
- PaulHoule 4y agoOther object oriented languages too.
- ncmncm 4y agoObjective-C, maybe. Not C++ or Java, which trace their lineage to Simula, which Smalltalk also cribbed from. But it is hard to see Objective-C as important, limited as it is to a walled garden. It also once seemed like "object-oriented" would be important. Now it is recognized as a niche technique.
- linguae 4y agoThere is a GCC Objective-C compiler that has existed for a long time, and a large portion of the Cocoa API is available in GNUstep, an open source implementation of the OpenStep API. It’s long been possible to use Objective-C outside of NeXT, Mac, and iOS development, though admittedly Objective-C hasn’t had the same level of adoption as contemporary object-oriented languages such as C++ and Java.
- ncmncm 4y agoI have never heard of Objective-C actually being used in anything I know about, outside the walled garden.
- rileyphone 4y agoEver heard of the World Wide Web? https://github.com/cynthia/WorldWideWeb https://github.com/cynthia/WorldWideWeb
- pjmlp 4y agoCreated on a NeXT workstation, the Objective-C implementation was never ported to other platforms, Mosaic was implemented in C. https://en.wikipedia.org/wiki/Mosaic_(web_browser) https://en.wikipedia.org/wiki/Mosaic_(web_browser)
- Apocryphon 4y agoSimilarly, Doom was created on a NeXT workstation in C, but its editing tools were written in Objective-C https://doomwiki.org/wiki/Development_of_Doom https://doomwiki.org/wiki/Development_of_Doom
- rileyphone 4y agoStill, the Web might have never existed without Objective-C, which is moreso my point. From [0]: > A second phase would almost certainly involve some programming in order to set up a real system at CERN on many machines. An important part of this, discussed below, is the integration of a hypertext system with existing data, so as to provide a universal system, and to achieve critical usefulness at an early stage. > (... and yes, this would provide an excellent project with which to try our new object oriented programming techniques!) TBL March 1989, May 1990 Objective-C had a wonderfully pragmatic approach to OOP, though it remained tied to the systems it was on because of the standard object libraries that enabled it. NeXT promotional materials really liked to showcase its suitedness to rapid application development, whether Jobs himself doing so [1] or in a staged competition with Sun [2] [0] https://www.w3.org/History/1989/proposal.html https://www.w3.org/History/1989/proposal.html [1] https://youtu.be/rf5o5liZxnA?t=1391 https://youtu.be/rf5o5liZxnA?t=1391 [2] https://www.youtube.com/watch?v=UGhfB-NICzg https://www.youtube.com/watch?v=UGhfB-NICzg
- pjmlp 4y agoThe Web would have existed in another form. Hypertext systems preceded it by decades. Objective-C has great as it might have been, didn't brought much to the table to those used to the Windows or Mac IDEs for GUI development. The Next vs Sun marketing video wouldn't have been the same when placed against HyperCard, Visual Basic, Delphi or C++ Builder. NeXT was almost bankrupt when they were pivoting into OpenStep, and not only was Java born out of Objective-C influences at Sun during the OpenStep days, Java EE was born from the ashes of an Objective-C framework for distributed computing at Sun.
- Apocryphon 4y agoMac software aren't inherently walled garden.
- dunham 4y agoAccording to one of the developers of Java, Java was also inspired by Objective-C: https://cs.gmu.edu/~sean/stuff/java-objc.html https://cs.gmu.edu/~sean/stuff/java-objc.html
- pjmlp 4y agoYes, Java is basically the semantics of Smalltalk/Objective-C, with the syntax of C++. The way dynamic code works (classloader, reflection), methods being virtual by default, interfaces, the JAR archives (think NeXT app bundles),... all that is Smalltalk/Objective-C influence.
- Apocryphon 4y agoObject-oriented programming has been important for like three decades now, for better or for worse, and if it's so "niche" now, what paradigm has replaced it?
- ncmncm 4y agoThe world (well, most of it) has recognized that "paradigms" are themselves niche. Of mainstream languages, only Java still tries to shoehorn all programs into its "paradigm".
- Apocryphon 4y agoWhat world are you posting from exactly
- ncmncm 4y agoThe one where C++, C, Java, JavaScript, Python, and Fortran are the mainstream, non-niche languages. Several of those have some support for an OO style, but only Java tries to force it on you.
- macintux 4y agoObjective-C was directly influenced by it.
- Jtsummers 4y agoAnd Self's JIT and VM technology went into Java.
- ncmncm 4y agoThey did, but that was not a Smalltalk heritage.
- twoodfin 4y agoI'd disagree with that characterization. The earliest work in optimizing highly dynamic languages was done in Smalltalk[1] before continuing in Self. David Ungar was the through line and one of the original designers of Self. [1] https://www2.eecs.berkeley.edu/Pubs/TechRpts/1986/5376.html https://www2.eecs.berkeley.edu/Pubs/TechRpts/1986/5376.html
- pjmlp 4y agoIt surely was, here is some learning material. > Strongtalk is a major re-thinking of the Smalltalk-80 programming language and system. While retaining the basic Smalltalk syntax and semantics, it contains a number of significant advances, including: > The Strongtalk system was developed in secret in the mid-90's by a small startup company. Before the Strongtalk system could be released, the company was acquired by Sun Microsystems, Inc. to work on the Java® virtual machine. http://strongtalk.org/ http://strongtalk.org/
- 4y ago
- linguae 4y agoThe Smalltalk community also had an influence on design patterns and testing frameworks that would later get picked up by C++ and Java programmers. If I recall correctly, the Gang of Four (the authors of the famous Design Patterns book) uses Smalltalk in its examples.
- rileyphone 4y agoThe Smalltalk community was also instrumental in the origin of Agile (before familiar bastardization by the industry) with people such as Kent Beck and Ward Cunningham (who also made the original wiki at c2.com).
- ncmncm 4y agoDesign Patterns has itself turned out not to be anywhere near as important as it seemed at the time. The only one I ever hear of nowadays is the "visitor pattern". Anti-patterns have more sticking power. Arguably all patterns are anti-patterns, since each identifies something one's language is too weak to capture in a library. As C++ got more powerful, the patterns vanished into ordinary library components.
- belter 4y ago“Design patterns are bug reports against your programming language” -- Peter Norvig https://news.ycombinator.com/item?id=8735187 https://news.ycombinator.com/item?id=8735187
- mickeyp 4y ago- Decorator pattern, as seen in Python's @decorators; - Factory functions, as seen everywhere, even if people don't bother thinking of them as such; - Memento pattern, a common way of implementing undo-able actions in applications that need it; - Proxy pattern, frequently used when you have a code-generated client that talks to a server from a template. Like generating REST/RPC client code that matches a server spec; - Visitor pattern, but you already mentioned that... but ironically enough, if you have pattern matching support in your language, it's much easier to use that. And that's just off the top of my head. If you use any of these you're no architecture astronaut, nor are you gilding your lillies.
- jonjacky 4y agoI recall Smalltalk had the first unit testing framework, which became a model for other languages.
- pjmlp 4y agoMaybe if IBM had not rebooted their Smalltalk business into Java, Smalltalk would have been kept more relevant than it is nowadays. For the younger generations, the whole set of Visual Age IDEs were written in Smalltalk, SOM (the OS/2 COM like OOP ABI) had support for C, C++ and Smalltalk, making Smalltalk the kind of OS/2's .NET. Then Visual Age became Eclipse, and the Smalltalk business pivoted into Java.
- nl 4y ago> the Smalltalk business pivoted into Java Interestingly OTI (which was purchased by IBM in 1996 and did all the Smalltalk/Visual Age and later Eclipse) had a VM that could run both Smalltalk and Java bytecode: in order to accomodate Java execution, OTI developed what was called the UVM (or Universal Virtual Machine) whcih could execute both Smalltalk and Java byte-codes, and used Smalltalk to implement the Java primitive functions which were implemented in C in the Sun JVM. https://web.archive.org/web/20090611013334/http://talklikeaduck.denhaven2.com/2008/10/15/will-it-go-round-in-circles https://web.archive.org/web/20090611013334/http://talklikead...
- e12e 4y agoI think openstep, objective-c and cocoa owes a great deal to smalltalk. I'm not sure if objective-c ever was any better (or practical) than smalltalk/strongtalk/self (or Java) - but it's at least possible to dream of the macos going for smalltalk, not obj-c.
- Jtsummers 4y agoObjective-C had the primary benefit (over Smalltalk) of being a superset of C, which permitted immediate and easy interaction between Objective-C and C source code. It also integrated better (which was critical, Smalltalk doesn't force using the image model for source code, but it was typical) into existing development workflows. Those are the kinds of practical concerns that can't be neglected when considering language adoption, especially since NeXT (main early adopter) was building on the lineage of the Unix-family of operating systems.
- e12e 4y agoTrue enough. As for other descendants, ruby is of course deeply inspired by smalltalk.
- ErikCorry 4y agoSmalltalk is a major influence on Toit and Ruby. Toit has blocks (lightweight closures), single inheritance, everything-is-an-object (no primitive types). Like Smalltalk the Toit VM is dynamically typed, but unlike classic Smalltalk there are optional types and they are checked at compile time and run time if you choose to use them. The syntax is not much like Smalltalk though, and development is with conventional source files and compilation, not image based like Smalltalk and Self. (In Self the editor was inside the VM and you saved your work by snapshotting the entire VM state which is superficially attractive but makes it really hard to collaborate and use version control.)
- ncmncm 4y agoAre Toit or Ruby important? We used to think Ruby would turn out to be important. Then it didn't, and Python reclaimed its niche. I have probably heard of Toit before, but am unsure. Snapshotting your VM state as the way to deliver programs was probably Smalltalk's chief failing.
- igouy 4y agoLack of standardization across vendors was by-far the chief failing. > the way to deliver programs To judge whether that could be successful, we need to be more specific — deliver what kinds-of programs to what kinds-of end-users?
- StillLrning123 4y agoMicrosoft Excel is very similar to this kind of deployment and is used _extensively_.
- igouy 4y ago> you saved your work by snapshotting the entire VM state That doesn't seem likely, that wasn't the recommended approach to managing source code in Smalltalk — but I have no personal experience with Self. Seems like it might depend on which version of Self is being discussed. "To briefly recap, the Self transporter allows the programmer to take a program that adds some functionality to a snapshot and move that program to another snapshot. It accomplishes this task by writing the slots that comprise the program to a source file that can be read in and evaluated in the new snapshot to recreate the program." https://bluishcoder.co.nz/self/transporter.pdf https://bluishcoder.co.nz/self/transporter.pdf
- cmrdporcupine 4y agoI don't see the Self influence in JS. Perhaps you mean because of prototype inheritance? But the form in JS doesn't look anything like the form in Self. Or particularly thought through at all, really. I fear that Eich may have implemented prototype OO by accident almost? I have a whole book on prototype OO from the 90s, and the languages in there are much better thought through (Self wasn't the only one or the first one. Actually even Smalltalk 72 is kind of prototype-OOish). In other respects, syntax and scoping model etc, I don't think original JS looks anything like a Smalltalk-descended language.
- Jtsummers 4y ago> I don't see the Self influence in JS. I think Eich's own words may be helpful here: https://brendaneich.com/2008/04/popularity/ https://brendaneich.com/2008/04/popularity/ Maybe it was accidental, but he refers to it as being Self-ish. And refers to it as "a quickie love-child of C and Self".
- BrendanEich 4y agoI've co-authored a HOPL IV paper and given lots of talks, do some searches and you will find them (https://dl.acm.org/doi/pdf/10.1145/3386327 https://dl.acm.org/doi/pdf/10.1145/3386327). There's no doubt about this. I knew of Self and liked it but did not have time for multiple parent* slots. I didn't even have time to expose the unstratified (meta- in base-level) __proto__ property until 1997 in SpiderMonkey. I was aiming at Self + Scheme-ish (definitely "ish") first class functions because I had to interop with Java.
- musicale 4y agoI suspect Self and NewtonScript may have helped to popularize prototype-based OOP before JavaScript came around. And of course Self's JIT/VM evolved into HotSpot and probably influenced most future VMs including JavaScript.
- retrac 4y agoSmalltalk influenced nearly every object-oriented language that came after it, by virtue of heavily influencing Lisp. The precursor to Common Lisp's Object System (CLOS) [1] comes rather directly after MIT Lisp hackers [1] encountered Smalltalk in the late 70s. Lisp probably counts as the first major language to have OOP, and along with Smalltalk, was the language that introduced OOP to the wider programming world. Bjarne Stroustrup knowing about Simula (which was always a little esoteric) and trying to turn C into a Simula-like language, is more the exception. Most OOP languages today can trace their OOP heritage to CLOS. [1] https://en.wikipedia.org/wiki/Common_Lisp_Object_System https://en.wikipedia.org/wiki/Common_Lisp_Object_System [2] https://en.wikipedia.org/wiki/Flavors_(programming_language) https://en.wikipedia.org/wiki/Flavors_(programming_language)
- davidgay 4y ago> Most OOP languages today can trace their OOP heritage to CLOS. I'm extremely dubious about this claim and cannot think of any mainstream OO language this applies to (clearly not C++, Java or C#, nor of course Smalltalk, hence neither Objective-C nor Self nor Javascript). For further context: I learned about programming languages, did programming language research starting in the early 90s. CLOS, and multiple-dispatch especially were always a significant outlier.
- lispm 4y agoThere are a bunch of different OOP mainlines. Some have early Lisp influence, long before CLOS. Some are more or less completely without Lisp influence. Simula, Object Pascal, C++, c#, ... (class based OOP with virtual functions) Smalltalk (message passing, classes) Lisp/CLOS (generic functions) -> Dylan, Perl, Julia, R, ... Actors, Self, JavaScript, ... (Prototypes) ....
- pjmlp 4y agoNot really, Smalltalk was influenced by the work being done to add OOP to Interlisp-D at Xerox PARC, LOOPS. https://interlisp.org/saved.html#history https://interlisp.org/saved.html#history Besides Common Lisp, the only languages that have anything on their object model that resembles CLOS are Dylan, Clojure and now Julia.
- AlbertCory 4y ago> the implementation language for the Xerox UI that was demonstrated to Steve Jobs Sorry, I have to correct you on that. Or rather, clarify the proper construction of it, which is: narrow. In https://www.albertcory.io/inventing-the-future https://www.albertcory.io/inventing-the-future, I talk about Smalltalk a lot. It was not used for the Xerox Star, and there was only a limited demo of the UI done in Smalltalk. No one seriously considered building Star on it. However, you're right in that the PARC demo to Jobs did make heavy use of Smalltalk. That's because the demo was done by PARC and not by the Star developers, and they showed him the ideas that inspired Star, ideas that had existed for years before he came.
- ncmncm 4y agoMy recollection is that Star came along rather later. Certainly Alan Kay would have wanted to implement Star in Smalltalk. According to the Arbiter of All Things, the demo was in 1978, and Star came out in 1981.
- AlbertCory 4y agoAlan Kay wasn't involved in Star, except as a PARC influencer.