Som VS Smalltalk

Compare Som vs Smalltalk and see what are their differences.

Som

Parser, code model, navigable browser and VM for the SOM Smalltalk dialect (by rochus-keller)

Smalltalk

Parser, code model, interpreter and navigable browser for the original Xerox Smalltalk-80 v2 sources and virtual image file (by rochus-keller)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
Som Smalltalk
8 24
22 260
- -
0.0 0.0
over 1 year ago almost 3 years ago
C++ C++
GNU General Public License v3.0 only GNU General Public License v3.0 only
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

Som

Posts with mentions or reviews of Som. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-08-26.
  • Making Smalltalk on a Raspberry Pi (2020)
    3 projects | news.ycombinator.com | 26 Aug 2023
    > Smalltalkish

    Have a look at the SOM dialect which is successfully used in education: http://som-st.github.io/

    Here is an implementation in C++ which runs on LuaJIT: https://github.com/rochus-keller/Som/

    > unfortunately out of print book Smalltalk 80: the language and its implementation is commonly recommended

    I assume you know this link: http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook....

    Here is an implementation in C++ and Lua: https://github.com/rochus-keller/Smalltalk

  • Do transpilers just use a lot of string manipulation and concatenation to output the target language?
    4 projects | /r/ProgrammingLanguages | 27 May 2023
  • Ask HN: Admittedly Useless Side Projects?
    21 projects | news.ycombinator.com | 24 Jun 2022
    - https://github.com/rochus-keller/Smalltalk/ Parser, code model, interpreter and navigable browser for the original Xerox Smalltalk-80 v2 sources and virtual image file

    - https://github.com/rochus-keller/Som/ Parser, code model, navigable browser and VM for the SOM Smalltalk dialect

    - https://github.com/rochus-keller/Simula A Simula 67 parser written in C++ and Qt

    > do you regret those endeavours?

    No, not in any way; the projects were very entertaining and gave me interesting insights.

  • Ask HN: Recommendation for general purpose JIT compiler
    12 projects | news.ycombinator.com | 15 May 2022
    If your DSL is statically typed then I recommend that you have a look at the Mono CLR; it's compatible with the ECMA-335 standard and the IR (CIL) is well documented, even with secondary literature.

    If your DSL is dynamically typed I recommend LuaJIT; the bytecode is lean and documented (not as good as CIL though). LuaJIT also works well with statically typed languages, but Mono is faster in the latter case. Even if it was originally built for Lua any compiler can generate LuaJIT bytecode.

    Both approaches are lean (Mono about 8 MB, LuaJIT about 1 MB), general purpose, available on many platforms and work well (see e.g. https://github.com/rochus-keller/Oberon/ and https://github.com/rochus-keller/Som/).

  • When is Smalltalk's speed an issue?
    2 projects | /r/smalltalk | 21 Feb 2022
    At the latest when you run a benchmark suite like Are-we-fast-yet; here are some measurment results: http://software.rochus-keller.info/are-we-fast-yet_crystal_lua_node_som_pharo_i386_results_2020-12-29.pdf. See also https://github.com/rochus-keller/Som/ and https://github.com/rochus-keller/Smalltalk.
  • LuaJIT for backend?
    6 projects | /r/ProgrammingLanguages | 2 Jan 2022
    LuaJIT is well suited as a backend/runtime environment for custom languages; I did it several times (see e.g. https://github.com/rochus-keller/Smalltalk, https://github.com/rochus-keller/Som/, https://github.com/rochus-keller/Oberon/). I also implemented a bit of infrastructure to ease the reuse: https://github.com/rochus-keller/LjTools. LuaJIT has some limitations though; if you require closures you have to know that the corresponding LuaJIT FNEW bytecode is not yet supported by the JIT, i.e. switches to the interpreter; as a work-around I implemented my own closures; LuaJIT also doesn't support multi-threading, but co-routines; and there is no debugger, and the infrastructure to implement one has limitations (i.e. performance is low when running to breakpoints). For most of my projects this was no issue. Recently I switched to CIL/Mono for my Oberon+ implementation which was a good move. But still I consider LuaJIT a good choice if you can cope with the mentioned limitations. The major advantage of LuaJIT is the small footprint and impressive performance for dynamic languages.
  • Optimizing an old interpreted language: where to begin?
    3 projects | /r/Compilers | 4 May 2021
    One option is to leverage someone else's JIT: you could, for example, rewrite the interpreter to transpile to Lua source, which is then run in LuaJIT. There's a Smalltalk dialect which does this successfully; the Lua version runs in 1/12th the time of the C interpreted version. https://github.com/rochus-keller/Som You can use LuaJIT's FFI to call back into the Stunt server, or else just rewrite it completely in Lua --- large parts of the Stunt server will just go away in a native Lua implementation (e.g. the object database is just a table). Javascript would be another candidate for this.
  • JITted lang which is faster than C?
    6 projects | /r/ProgrammingLanguages | 12 Feb 2021
    This is a completely different kind of measurement; unfortunately this is not clear enough from my Readme. I wanted to find out, how well my naive Bluebook interpreter performs on LuaJIT (using my virtual meta tracing approach) compared to Cog, which is a dedicatd Smalltalk VM optimized with whatever genious approaches over two decades (or even longer considering the long experience record by Elliot). This experiment continues in https://github.com/rochus-keller/Som, because I didn't want to modify the original Smalltalk image. I found that my naive LuaJIT based approach is about factor seven behind the highly optimized Cog/Spur, and further improvements would require similar optimization tricks as in the latter.

Smalltalk

Posts with mentions or reviews of Smalltalk. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-07-02.
  • The Xerox Smalltalk-80 GUI Was Weird
    3 projects | news.ycombinator.com | 2 Jul 2023
    > * I'm assuming the "by the Bluebook" implementation they're referring to is this: *

    Or this: https://github.com/rochus-keller/Smalltalk/

  • The seven programming ur-languages
    4 projects | news.ycombinator.com | 4 May 2023
    > message passing and late binding combined. "Duck typing" is seriously diminishing it

    Actually even ST-72 made synchronous calls, but at least with a token stream interpreted by the receiving object (thus at least a bit of "message passing"). In ST-76 and later versions "message passing" is just nomenclature used by the ST folks for something that is just ordinary method dispatch and call (if you have doubts, you can analyze the innards of the ST-80 VM yourself e.g. with these tools: https://github.com/rochus-keller/Smalltalk ). The major difference is the dispatch based on signature hash (similar to e.g. Java interface method calls) instead of static positions, which enables late binding (at the expense of performance); and since everything including ordinary integers derive from Object, all values and objects are subject to dynamic method dispatch; it's no coincidence that Smalltalk was the first language to allow real duck typing. The unification of scalar values and references, dynamic typing, and likewise the minimal syntax where control structures are implemented by means of runtime constructs were already known from Lisp; also closures (i.e. ST blocks) were already known before they were added to ST.

  • my programming language
    2 projects | /r/ProgrammingLanguages | 15 Dec 2022
    Here is one even in Lua: https://github.com/rochus-keller/Smalltalk/
  • LeanQt – GUI is here, Widgets are near
    5 projects | news.ycombinator.com | 12 Nov 2022
    > 10kSLOC for the entire universe

    It is the nature of idealists that they see the world idealized. Smalltalk-80 itself has nearly 30 kSLOC; it's just more difficult to count, but I wrote tools which can do it (https://github.com/rochus-keller/Smalltalk/).

  • 50 years Smalltalk anniversary celebration at Computer History Museum
    6 projects | news.ycombinator.com | 30 Aug 2022
    Why should "perform" be a message? It's just a method of the Object class, which is the superclass of Integer. You can use my St80ClassBrowser and St80ImageViewer (see https://github.com/rochus-keller/Smalltalk/) to check the ST-80 source code and image if you want; there is a list of all selectors and the classes which implement them. Going up the class hierarchy when doing virtual method dispatch is a fundamental concept of all object-oriented implementations; in contrast to e.g. C++ this can be done dynamically at runtime in Smalltalk or Java (which is also called late binding). In contrast to Smalltalk in Java the class loader verifies that a method for the referenced signature actually exists; in Smalltalk you can try to dispatch any signature which can result in a call to the doesNotUnderstand method of the Object class.
  • A History of Lua
    14 projects | news.ycombinator.com | 10 Aug 2022
    > a large lua game code base, over 4000 files, 1.5 million lines of code

    Interesting; how do you manage to keep consistency? Do you have special tools to e.g. detect inadvertent global variables? I once wrote a Smalltalk VM in Lua (https://github.com/rochus-keller/Smalltalk/blob/master/Inter...) which is a much smaller code base but even with this size I quickly would have lost track of e.g. scopes and names without tools I had to write myself (https://github.com/rochus-keller/LJTools).

  • Smalltalk Squeak 6.0
    3 projects | news.ycombinator.com | 6 Jul 2022
    It is true, that there is uncollected garbage in the original Xerox ST80 image. I've built some tools to analyze the image and also a VM which can be interrupted at any time to analyze the current state of the image (see https://github.com/rochus-keller/Smalltalk).

    There are two zombie processes (OID 6662 and 19ba). There are also a couple of BlockContext and MethodContext which have a nil sender and a reference to an unknown method, but which are still referenced from somewhere (i.e. the collection is prevented even if it is not implemented by reference counting. E.g. OID 79a2 of class BinaryChoice. I have a full list if anybody is interested.

  • Celebrating 50 Years of Smalltalk
    1 project | /r/programming | 4 Jul 2022
    Integers are actually directly stored, i.e. without boxing/indirection by a pointer. The Smalltalk object memory doesn't have pointers in the C sense, but rather indices into the object table. If you're interested I've implemented a couple of tools to study the original Smalltalk-80 VM, see https://github.com/rochus-keller/Smalltalk/.
  • Ask HN: Admittedly Useless Side Projects?
    21 projects | news.ycombinator.com | 24 Jun 2022
    - https://github.com/rochus-keller/Smalltalk/ Parser, code model, interpreter and navigable browser for the original Xerox Smalltalk-80 v2 sources and virtual image file

    - https://github.com/rochus-keller/Som/ Parser, code model, navigable browser and VM for the SOM Smalltalk dialect

    - https://github.com/rochus-keller/Simula A Simula 67 parser written in C++ and Qt

    > do you regret those endeavours?

    No, not in any way; the projects were very entertaining and gave me interesting insights.

  • Minimalism in Programming Language Design
    6 projects | news.ycombinator.com | 24 May 2022

What are some alternatives?

When comparing Som and Smalltalk you can also consider the following projects:

rockstar - Makes you a Rockstar C++ Programmer in 2 minutes

Oberon - Oberon parser, code model & browser, compiler and IDE with debugger

qbe-rs - QBE IR in natural Rust data structures

Lua - Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

ubpf - Userspace eBPF VM

are-we-fast-yet - Are We Fast Yet? Comparing Language Implementations with Objects, Closures, and Arrays

sljit - Platform independent low-level JIT compiler

squeak.org - Squeak/Smalltalk Website

zigbee-lua - Zigbee coordinator and tools for LuaJIT

simplelanguage - A simple example language built using the Truffle API.

watt - Runtime for executing procedural macros as WebAssembly