--- layout: default --- <div class="content-section"> <div class="wrap"> <figure> <img src="images/som-logo.svg" style="margin:auto; display:block" title="The Simple Object Machine" alt="SOM: Simple Object Machine, logo" /> <figcaption><cite>A minimal Smalltalk for <em>teaching</em> of and <em>research</em> on Virtual Machines.</cite></figcaption> </figure> </div> </div> <div class="content-section"> <script> function loadAndShowRepl() { const scriptElem = document.createElement("script"); scriptElem.setAttribute("type", "module"); const src = ` import { setOutHandler } from "./jssom/lib/platform.js"; setOutHandler(function(msg) { document.getElementById("repl-out").innerHTML += msg; }); import { handleReplInput, moveCaretToEnd } from "./jssom/web-repl.js"; document.handleReplInput = handleReplInput; moveCaretToEnd(document.getElementById("repl-in")); document.getElementById("example-div").style.display = "none"; document.getElementById("repl").style.display = "block"; `; const srcElem = document.createTextNode(src); scriptElem.appendChild(srcElem); document.body.appendChild(scriptElem); } </script> <div class="wrap"> <div id="example-div"> <h1 id="example">SOM Language Example</h1> <figure> <span id="try-som"><a href="#" onclick="loadAndShowRepl();">Try SOM in a REPL</a></span> <code>Fibonacci = ( <span class="som comment" title="this is a comment">"defines a subclass of Object"</span> fib: <span class="som arg">n</span> = ( <span class="som comment" title="this is a comment">"defines the fib method with the argument <span class="som arg">n</span>"</span> ^ <span class="som arg">n</span> <= <span class="som number">1</span> ifTrue: <span class="som number">1</span> ifFalse: [ <span class="som self">self</span> fib: (<span class="som arg">n</span> - <span class="som number">1</span>) + (<span class="som self">self</span> fib: (<span class="som arg">n</span> - <span class="som number">2</span>)) ] ) )</code> <figcaption>A simple class implementing <code>#fib:</code> to compute the fibonacci numbers.<br/> For more, see the <a href="https://github.com/SOM-st/SOM">standard library <span class="icon github"> <svg version="1.1" class="github-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"> <path fill-rule="evenodd" clip-rule="evenodd" fill="#C2C2C2" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/> </svg> </span></a> </figcaption> </figure> </div></div> <div id="repl"> <h1>JsSOM Read-Eval-Print Loop</h1> <figure> <code id="repl-out" class="stretch">SOM Shell. </code> <div class="repl-input stretch">---> <textarea id="repl-in" row="1" autofocus oninput="handleReplInput(event)">1 to: 5 do: [:i | i println. ]</textarea></div> <figcaption>Note, this REPL does accepts only simple expressions and does not allow to define classes or methods.<br/>However, the complete <a href="https://github.com/SOM-st/SOM/tree/master/Smalltalk">standard library <span class="icon github"> <svg version="1.1" class="github-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"> <path fill-rule="evenodd" clip-rule="evenodd" fill="#C2C2C2" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z" /> </svg> </span></a> is available. </figcaption> </figure> </div> </div> <div class="content-section"> <div class="wrap"> <h1 id="implementations">Implementations</h1> <ul class="som-impl"> <li class="som-impl"> <img src="images/java-logo.svg" class="lang-logo" alt="Java logo" /> <ul> <li><a href="https://github.com/SOM-st/som-java">SOM</a></li> <li><a href="https://github.com/SOM-st/TruffleSOM">TruffleSOM</a></li></ul> </li> <li class="som-impl"> <div class="lang-logo"><span class="text-logo">C</span></div> <ul><li><a href="https://github.com/SOM-st/CSOM">CSOM</a></li></ul> </li> <li class="som-impl"> <div class="lang-logo" style="width:80px;"><span class="text-logo">C++</span></div> <ul><li><a href="https://github.com/SOM-st/SOMpp">SOM++</a></li></ul> </li> <li class="som-impl"> <img src="images/python-logo.svg" class="lang-logo" alt="Python logo" /> <ul><li><a href="https://github.com/SOM-st/PySOM">PySOM</a></li></ul> </li> <li class="som-impl"> <img src="images/javascript-logo.png" class="lang-logo" alt="JavaScript logo" /> <ul><li><a href="https://github.com/SOM-st/JsSOM">JsSOM</a></li></ul> </li> <li class="som-impl"> <img src="images/rust-logo.svg" class="lang-logo" alt="Rust logo" /> <ul> <li><a href="https://github.com/Hirevo/som-rs">SOM-RS</a></li> <li><a href="https://github.com/softdevteam/yksom/">ykSOM</a></li></ul> </li> <li class="som-impl"> <img src="images/smalltalk-logo.svg" class="lang-logo" alt="Smalltalk logo" /> <ul><li><a href="https://github.com/SOM-st/AweSOM">AweSOM</a></li></ul> </li> </ul></div></div> <div class="content-section"> <div class="wrap"> <h1 id="characteristics">Key Characteristics</h1> <ul class="two-col"> <li>9 main implementations</li> <li>clarity of implementation over absolute performance</li> <li> support for common language features such as objects, classes, closures, and non-local returns </li> <li> support for benchmarks: DeltaBlue, Richards, ..., and the <a href="https://github.com/smarr/are-we-fast-yet" >Are We Fast Yet benchmarks</a > </li> <li>implementations ranging from 2.5k LOC to 8k LOC</li> <li> implementation variations include: <ul> <li>abstract-syntax-tree-based or bytecode-based</li> <li>classic interpreter optimizations</li> <li>green and native threading</li> <li> reference counting, mark/sweep, and generational garbage collectors </li> <li> using metatracing or partial evaluation for just-in-time compilation </li> </ul> </li> </ul> </div> </div> <div class="content-section"> <div class="wrap"> <h1 id="performance">Performance</h1> <figure style="text-align: center"> <img src="images/som-box-overview.svg" alt="Boxplot, performance comparison of SOM implementations." /> <figcaption> Performance of some of the SOM implementations compared to Java.<br /> Based on data from March 2019, using the <a href="https://github.com/smarr/are-we-fast-yet#readme" >Are We Fast Yet benchmarks</a >. </figcaption> </figure> </div> </div> <div class="content-section details-list"> <div class="wrap"> <h1 id="som-details">SOM Implementations Overview</h1> <p> The various implementations support the same language, but use different optimizations, implementation techniques, and run on different platforms. </p> <ul class="som-impl"> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/som-java">SOM</a></h4> <ul> <li>first implementation, in Java</li> <li>bytecode-based</li> <li>basic optimizations, e.g., inline caches</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/AweSOM">AweSOM</a></h4> <ul> <li>bytecode-based</li> <li>implemented in Smalltalk</li> <li>no optimizations</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/CSOM">CSOM</a></h4> <ul> <li>first port to other language, C</li> <li>bytecode-based</li> <li>no optimizations</li> <li>mark/sweep garbage collector</li> <li>supports Emscripten/WebAssembler</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/SOMpp">SOM++</a></h4> <ul> <li>bytecode-based, with jump bytecodes</li> <li>implemented in C++</li> <li>tagged integers</li> <li>mark/sweep, copying, and generational garbage collectors</li> <li>With OMR: GC support and a just-in-time compiler</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/PySOM">PySOM</a></h4> <ul> <li>abstract-syntax-tree or bytecode-based, in Python</li> <li> RPython-compatible, and with metatracing-based just-in-time compilation </li> <li>or as pure Python, no dependencies</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/TruffleSOM">TruffleSOM</a></h4> <ul> <li>implemented in Java, using the Truffle framework</li> <li>abstract-syntax-tree-based</li> <li>highly optimized</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/Hirevo/som-rs">SOM-RS</a></h4> <ul> <li>abstract-syntax-tree-based or bytecode-based, in Rust</li> <li>some optimizations, very similar to other SOM implementations</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/softdevteam/yksom/">ykSOM</a></h4> <ul> <li>a bytecode-like interpreter, in Rust</li> <li>an "clean room" implementation</li> <li>focusing on idiomatic Rust, and fast interpretation</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/SOM-st/JsSOM">JsSOM</a></h4> <ul> <li>abstract-syntax-tree-based, in JavaScript</li> <li>runs on Node.js and in browsers</li> </ul> </li> </ul> </div> </div> <div class="content-section details-list"> <div class="wrap"> <h1 id="offspring">SOM-based Language Implementations</h1> <p> SOM has been a platform for research that inspired a range of language implementations. </p> <ul class="som-impl"> <li class="som-impl"> <h4> <a href="https://github.com/smarr/SOMns" >SOM<sub class="ns">NS</sub></a > </h4> <ul> <li> implementation of <a href="https://newspeaklanguage.org/">Newspeak</a> </li> <li>based on TruffleSOM</li> <li>platform for research on concurrency and tooling</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/gracelang/Moth">Moth</a></h4> <ul> <li>implementation of <a href="https://gracelang.org">Grace</a></li> <li>based on SOM<sub class="ns">NS</sub></li> <li>platform for research on concurrency and tooling</li> </ul> </li> <li class="som-impl"> <h4><a href="https://github.com/charig/TruffleMATE">TruffleMATE</a></h4> <ul> <li> An extension of TruffleSOM with more standard Smalltalk support </li> <li> platform for research on metaobject protocols and the Mate approach </li> </ul> </li> <li class="som-impl"> <h4> <a href="https://github.com/charig/RTruffleMate">TruffleMATE</a> </h4> <ul> <li> An extension of RTruffleSOM with more standard Smalltalk support </li> <li> platform for research on metaobject protocols and the Mate approach </li> </ul> </li> </ul> </div> </div> <div class="content-section"> <div class="wrap"> <h1 id="presentation">Intro Presentation 2019</h1> <figure style="text-align: center"> <script> function showSlides() { document.getElementById("presentation-play").style.display = "none"; document.getElementById("presentation-slides").style.display = "inline-block"; document.getElementById( "presentation-slides" ).innerHTML = `<iframe src="https://onedrive.live.com/embed?cid=30DA3B1EAD53408B&resid=30DA3B1EAD53408B%21247&authkey=ABqBV0RayZwsaPg&em=2" width="402" height="327" frameborder="0" scrolling="no"></iframe>`; } </script> <div style="position: relative; text-align: center" id="presentation-play" > <a href="javascript:showSlides()"> <img src="images/som-2019.png" width="402" height="327" style="border: 1px solid #ccc" /> <div style=" position: absolute; top: 270px; left: 50%; transform: translate(-50%, -50%); font-size: 100px; " > ▶️ </div> </a> </div> <div id="presentation-slides" style="display: none"></div> <figcaption> Overview of the SOM project and what it brings for teaching and research. </figcaption> </figure> </div> </div> <div class="content-section"> <div class="wrap"> <h1 id="teaching">Teaching Material</h1> <p style="margin: 1em auto; width: 60%"> Currently, we do not have much teaching material specific to SOM. We do have however an number of related slide sets, some somewhat historical, that give a basic overview. Other material is more specific, but can also be starting point. </p> <ul style="margin: 0 auto; width: 60%"> <li> Design and Implementation of Object-Oriented Virtual Machines.<br /> University of Aarhus 2001/2002<br /> <a href="https://web.archive.org/web/20080305035237/http://www.daimi.au.dk/~ups/OOVM/" >Course material</a >, <a href="https://web.archive.org/web/20061221205632/http://www.daimi.au.dk/~ups/OOVM/slides/14-2-2002.pdf" >SOM intro</a >, <a href="https://web.archive.org/web/20061221211047/http://www.daimi.au.dk/~ups/OOVM/slides/smalltalk-ultra-quick-intro.pdf" >SOM examples</a > </li> <li> Building Self-Optimizing Interpreters with Truffle or RPython.<br /> A Hands-On Tutorial.<br /> Stefan Marr<br /> <a href="https://stefan-marr.de/downloads/truffle/tutorial/">Slides</a> </li> <li> UCB CS294-113: Virtual Machines and Managed Runtimes<br /> Mario Wolczko<br /> <a href="https://www.wolczko.com/CS294/">Course material</a> </li> </ul> </div> </div> <div class="content-section"> <div class="wrap"> <h1 id="community">Community</h1> <p style="text-align: center"> <br /> For questions, discussions, and updates, you can:<br /><br /> Check all code on <a href="https://github.com/SOM-st/">GitHub</a ><br /><br /> Follow us on Twitter <a style=" position: relative; height: 20px; box-sizing: border-box; padding: 1px 8px 1px 6px; background-color: #1b95e0; color: #fff; border-radius: 3px; font-weight: 500; cursor: pointer; " href="https://twitter.com/SOM_VMs" > <i style=" position: relative; top: 2px; display: inline-block; width: 14px; height: 14px; background: transparent 0 0 no-repeat; background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2072%2072%22%3E%3Cpath%20fill%3D%22none%22%20d%3D%22M0%200h72v72H0z%22%2F%3E%3Cpath%20class%3D%22icon%22%20fill%3D%22%23fff%22%20d%3D%22M68.812%2015.14c-2.348%201.04-4.87%201.744-7.52%202.06%202.704-1.62%204.78-4.186%205.757-7.243-2.53%201.5-5.33%202.592-8.314%203.176C56.35%2010.59%2052.948%209%2049.182%209c-7.23%200-13.092%205.86-13.092%2013.093%200%201.026.118%202.02.338%202.98C25.543%2024.527%2015.9%2019.318%209.44%2011.396c-1.125%201.936-1.77%204.184-1.77%206.58%200%204.543%202.312%208.552%205.824%2010.9-2.146-.07-4.165-.658-5.93-1.64-.002.056-.002.11-.002.163%200%206.345%204.513%2011.638%2010.504%2012.84-1.1.298-2.256.457-3.45.457-.845%200-1.666-.078-2.464-.23%201.667%205.2%206.5%208.985%2012.23%209.09-4.482%203.51-10.13%205.605-16.26%205.605-1.055%200-2.096-.06-3.122-.184%205.794%203.717%2012.676%205.882%2020.067%205.882%2024.083%200%2037.25-19.95%2037.25-37.25%200-.565-.013-1.133-.038-1.693%202.558-1.847%204.778-4.15%206.532-6.774z%22%2F%3E%3C%2Fsvg%3E); " ></i ><span style="margin-left: 3px; white-space: nowrap"> @SOM_VMs</span></a ><br /><br /> Discuss with us on the <a href="https://groups.google.com/g/som-dev">som-dev</a> mailing list,<br /><br /> or <a href="https://som-st.slack.com/">chat with us on Slack</a><br /> (you may need to request an invited via <a href="https://twitter.com/SOM_VMs">twitter.com/SOM_VMs</a>). </p> </div> </div> <div class="content-section"> <div class="wrap"> <h1 id="history">Use in Teaching and Research: A Brief Chronology</h1> <p style="text-align: center"> A brief and incomplete list of papers and universities where SOM has been used in the past. </p> <div class="history"> <div> <img style="width: 130px" src="images/fit-cvut-logo-en.svg" alt="Faculty of Information Technology Czech Technical University in Prague logo" /> <p> In 2023, Filip Říha implemented <a href="https://github.com/rihafilip/HaSOM">HaSOM</a>, a SOM written in Haskell as part of his <a href="https://dspace.cvut.cz/bitstream/handle/10467/109352/F8-BP-2023-Riha-Filip-thesis.pdf" >Bachelor's thesis</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Efficient and Deterministic Record & Replay for Actor Languages<br /> D. Aumayr, S. Marr, C. Béra, E. Gonzalez Boix, H. Mössenböck<br /> Proceedings of the 15th International Conference on Managed Languages and Runtimes, ManLang'18, ACM, 2018, doi: <a href="https://doi.org/10.1145/3237009.3237015" >10.1145/3237009.3237015</a >, <a href="https://stefan-marr.de/downloads/manlang18-aumayr-et-al-efficient-and-deterministic-record-and-replay-for-actor-languages.pdf" >PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Few Versatile vs. Many Specialized Collections: How to design a collection library for exploratory programming?<br /> S. Marr, B. Daloze<br /> Proceedings of Programming Experience Workshop, PX/18, 2018, doi: <a href="https://doi.org/10.1145/3191697.3214334" >10.1145/3191697.3214334</a >, <a href="https://stefan-marr.de/papers/px-marr-daloze-few-versatile-vs-many-specialized-collections/" >HTML</a >, <a href="https://stefan-marr.de/downloads/px18-marr-daloze-few-versatile-vs-many-specialized-collections.pdf" >PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Fully Reflective Execution Environments: Virtual Machines for More Flexible Software<br /> G. Chari, D. Garbervetsky, S. Marr, S. Ducasse<br /> IEEE Transactions on Software Engineering, IEEE TSE, 2018, doi: <a href="https://doi.org/10.1109/TSE.2018.2812715" >10.1109/TSE.2018.2812715</a >, <a href="https://stefan-marr.de/downloads/tse18-chari-et-al-fully-reflective-execution-environments.pdf" >PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> A Concurrency-Agnostic Protocol for Multi-Paradigm Concurrent Debugging Tools<br /> S. Marr, C. Torres Lopez, D. Aumayr, E. Gonzalez Boix, H. Mössenböck<br /> Proceedings of the 13th ACM SIGPLAN International Symposium on Dynamic Languages, DLS'17, ACM, 2017, doi: <a href="https://doi.org/10.1145/3133841.3133842" >10.1145/3133841.3133842</a >, <a href="https://stefan-marr.de/papers/dls-marr-et-al-concurrency-agnostic-protocol-for-debugging/" >HTML</a >, <a href="https://stefan-marr.de/downloads/dls17-marr-et-al-concurrency-agnostic-protocol-for-debugging.pdf" >PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> A Metaobject Protocol for Optimizing Application-Specific Run-Time Variability<br /> G. Chari, D. Garbervetsky, S. Marr<br /> Proceedings of the 11th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems, ICOOOLPS'17. (2017), doi: <a href="https://doi.org/10.1145/3098572.3098577" >10.1145/3098572.3098577</a >, <a href="https://stefan-marr.de/downloads/icooolps17-chari-et-al-a-mop-for-optimizing-run-time-variability.pdf" >PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Toward Virtual Machine Adaption Rather than Reimplementation: Adapting SOM<sub class="ns">NS</sub> for Grace<br /> R. Roberts, S. Marr, M. Homer, J. Noble<br /> Workshop on Modern Language Runtimes, Ecosystems, and VMs, MoreVMs'17. Extended Abstract. (2017), <a href="https://stefan-marr.de/downloads/morevms17-roberts-et-al-toward-virtual-machine-adaption.pdf" >PDF</a >. </p> </div> <div> <img style="width: 130px" src="images/victoria-university-of-wellington_logo.svg" alt="Victoria University of Wellington logo" /> <p> In 2017, James Noble started using SOM<sub class="ns">NS</sub> to implement the <a href="https://gracelang.org">Grace</a> language. Richard Roberts turned it into a working implementation called <a href="https://github.com/moth-project/Moth">Moth</a>. </p> </div> <div> <img src="images/logo_uba.gif" alt="Facultad de Ciencias Exactas y Naturales - Universidad de Buenos Aires, logo" /> <p> <a href="https://github.com/charig/TruffleMATE">TruffleMATE</a>, a SOM variant with the Mate Metaobject protocol, which enables fully reflective execution environments. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Building Efficient and Highly Run-time Adaptable Virtual Machines.<br /> Chari, Guido; Garbervetsky, Diego; and Marr, Stefan.<br /> Proceedings of the 12th Symposium on Dynamic Languages (2016), <a href="https://lafhis.dc.uba.ar/sites/default/files/papers/buildingEfficientReflectiveVMs.pdf" >PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Cross-Language Compiler Benchmarking: Are We Fast Yet?<br /> Marr, Stefan; Daloze, Benoit; and Mössenböck, Hanspeter.<br /> Proceedings of the 12th Symposium on Dynamic Languages (2016), <a href="https://stefan-marr.de/downloads/dls16-marr-et-al-cross-language-compiler-benchmarking-are-we-fast-yet.pdf" >PDF</a >, <a href="https://stefan-marr.de/papers/dls-marr-et-al-cross-language-compiler-benchmarking-are-we-fast-yet/" >HTML</a >. </p> </div> <div> <img style="width: 100px" src="images/IBM-logo.svg" alt="IBM logo" /> <p> In 2016, the J9 team used their new <a href="https://www.youtube.com/watch?v=w5rcBiOHrB0&t=1164" >JitBuilder to speed up SOM++ by 3x-4x</a >. JitBuilder is an API for the J9 just-in-time compiler, which is going to be open sourced as part of the <a href="https://github.com/eclipse/omr#readme">Eclipse OMR project</a >. </p> </div> <div> <img style="width: 100px" src="images/IBM-logo.svg" alt="IBM logo" /> <p> In 2015, the J9 team announced the plans to open source the platform underlying their JVM implementation. As part of their JavaOne talk “<a href="https://www.slideshare.net/charliegracie1/javaone-whats-in-an-object" >What's in an Object? Java Garbage Collection for the Polygot</a >”, they used SOM++ as a case study to show how their garbage collector can be integrated into an existing VM. </p> </div> <div> <img style="width: 100px" src="images/JKU_Logo_kurz_ohne_Wappen_engl.jpg" alt="Johannes Kepler University Linz, logo" /> <p> <a href="https://github.com/smarr/SOMns" >SOM<sub class="ns">NS</sub></a >, a <a href="https://www.newspeaklanguage.org">Newspeak</a> variant with full support for actor concurrency was developed as a platform for research on the interaction of concurrency models. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Tracing vs. Partial Evaluation: Comparing Meta-Compilation Approaches for Self-Optimizing Interpreters.<br /> Marr, Stefan; and Ducasse, Stéphane.<br /> Proceedings of the 2015 ACM International Conference on Object Oriented Programming Systems Languages & Applications, ACM, (2015), <a href="https://stefan-marr.de/downloads/oopsla15-marr-ducasse-meta-tracing-vs-partial-evaluation.pdf" >PDF</a >, <a href="https://stefan-marr.de/papers/oopsla-marr-ducasse-meta-tracing-vs-partial-evaluation/" >HTML</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and without Compromises.<br /> Marr, Stefan; Seaton, Chris; and Ducasse, Stéphane.<br /> Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation, ACM, (2015), doi: <a href="https://doi.org/10.1145/2737924.2737963" >10.1145/2737924.2737963</a >, <a href="https://stefan-marr.de/downloads/pldi15-marr-et-al-zero-overhead-metaprogramming.pdf" >PDF</a >, <a href="https://stefan-marr.de/papers/pldi-marr-et-al-zero-overhead-metaprogramming/" >HTML</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Are We There Yet? Simple Language-Implementation Techniques for the 21st Century.<br /> Marr, Stefan; Pape, Tobias; and De Meuter, Wolfgang.<br /> IEEE Software 31, no. 5 (2014): 60-67, doi: <a href="https://doi.org/10.1109%2FMS.2014.98">10.1109/MS.2014.98</a>, <a href="https://stefan-marr.de/downloads/ieee-soft-marr-et-al-are-we-there-yet.pdf" >PDF</a >, <a href="https://stefan-marr.de/papers/ieee-soft-marr-et-al-are-we-there-yet/" >HTML</a >. </p> </div> <div> <img src="images/software-languages-lab-logo.svg" alt="Software Languages Lab, Vrije Universiteit Brussel, logo" /> <p> The SOM variants were used for a number of experiments such as ActorSOM, a SOM with a event-loop concurrency model similar to AmbientTalk. </p> </div> <div> <img src="images/hhu-dus-logo.svg" alt="Heinrich Heine Universität Düsseldorf, logo" /> <p> SOM++ was optimized and extended with a generational garbage collector as part of a master's thesis. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> CSOM/PL: A Virtual Machine Product Line.<br /> Haupt, Michael; Marr, Stefan and Hirschfeld, Robert.<br /> Journal of Object Technology 10, no. 12 (2011): 1-30, doi: <a href="https://doi.org/10.5381/jot.2011.10.1.a12" >10.5381/jot.2011.10.1.a12</a >, <a href="https://www.jot.fm/issues/issue_2011_01/article12.pdf">PDF</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Type Harvesting: A Practical Approach to Obtaining Typing Information in Dynamic Programming Languages.<br /> Haupt, Michael; Perscheid, Michael and Hirschfeld, Robert.<br /> Proceedings of the 2011 ACM Symposium on Applied Computing, 2011, doi: <a href="https://doi.org/10.1145/1982185.1982464" >10.1145/1982185.1982464</a >, <a href="https://www.hpi.uni-potsdam.de/hirschfeld/publications/media/HauptPerscheidHirschfeld_2011_TypeHarvestingAPracticalApproachToObtainingTypingInformationInDynamicProgrammingLanguages_AcmDL.pdf" >URL</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Virtual Machine Support for Many-Core Architectures: Decoupling Abstract From Concrete Concurrency Models.<br /> Marr, Stefan; Haupt, Michael; Timbermont, Stijn; Adams, Bram; D'Hondt, Theo; Costanza, Pascal and De Meuter, Wolfgang.<br /> Second International Workshop on Programming Languages Approaches to Concurrency and Communication-cEntric Software, York, UK, 2010, doi: <a href="https://doi.org/10.4204/EPTCS.17.6">10.4204/EPTCS.17.6</a>, <a href="https://www.stefan-marr.de/2010/02/virtual-machine-support-for-many-core-architectures-decoupling-abstract-from-concrete-concurrency-models/" >URL</a >. </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> The SOM Family: Virtual Machines for Teaching and Research.<br /> Haupt, Michael; Hirschfeld, Robert; Pape, Tobias; Gabrysiak, Gregor; Marr, Stefan; Bergmann, Arne; Heise, Arvid; Kleine, Matthias and Krahn, Robert. Proceedings of the 15th Annual Conference on Innovation and Technology in Computer Science Education (ITiCSE), 2010, doi: <a href="https://doi.org/10.1145/1822090.1822098" >10.1145/1822090.1822098</a >, <a href="https://www.hpi.uni-potsdam.de/hirschfeld/publications/media/HauptHirschfeldPapeGabrysiakMarrBergmannHeiseKleineKrahn_2010_TheSomFamily_AcmDL.pdf" >PDF</a >. </p> </div> <div> <img src="images/tu-darmstadt-logo.svg" alt="Technische Universität Darmstadt, logo" /> <p> In 2010, SOM was used by Michael Haupt to teach one graduate course at Technische Universität Darmstadt (Germany). </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> NXTalk: Dynamic Object-oriented Programming in a Constrained Environment.<br /> Beck, Martin; Haupt, Michael and Hirschfeld, Robert. Proceedings of the International Workshop on Smalltalk Technologies, 2009, doi: <a href="https://doi.org/10.1145/1735935.1735942" >10.1145/1735935.1735942</a >, <a href="https://haupz.de/d/p/IWST2009a.pdf">PDF</a>. </p> </div> <div> <img src="images/hpi_logo_kl.jpg" alt="Hasso Plattner Institute, logo" /> <p> SOM was used by Michael Haupt between 2007–2009 to teach a course on Virtual Machines at the Hasso Plattner Institute in Potsdam. Many of the feature variants of CSOM for instance support for Smalltalk images, threads, and garbage collection have been developed as part of course work. <a href="https://www.hpi.uni-potsdam.de/hirschfeld/projects/som/" >(more)</a > </p> </div> <div> <img src="images/lancaster-university-logo.svg" alt="Lancaster University logo" /> <p> In 2006, SOM was used by Michael Haupt to teach one undergraduate course at Lancaster University (UK). </p> </div> <div> <img src="images/paper-logo.png" alt="Publication" /> <p> Related to SOM, at least in syntax and spirit:<br /> Design, implementation, and evaluation of the <em>Resilient Smalltalk</em> embedded platform.<br /> Andersen, Jakob R.; Bak, Lars; Grarup, Steffen; Lund, Kasper V.; Eskildsen, Toke; Hansen, Klaus Marius and Torgersen, Mads.<br /> Computer Languages, Systems & Structures 31, no. 3–4 (2005): 127–141, doi: <a href="https://doi.org/10.1016/j.cl.2005.02.003" >10.1016/j.cl.2005.02.003</a >, <a href="https://inria.hal.science/hal-02969117/document#page=91" >PDF</a >. </p> </div> <div> <img src="images/aarhus-university-logo.jpg" alt="Aarhus University (logo)" /> <p> A kind of successor of SOM: OOVM, which went on to become <em>Resilient Smalltalk</em><br /> <a href="https://verdich.dk/kasper/thesis.html" >Revolutionizing Embedded Software</a ><br /> Master's Thesis by Kasper Verdich Lund and Jakob Roland Andersen<br /> </p> </div> <div> <img src="images/aarhus-university-logo.jpg" alt="Aarhus University (logo)" /> <p> SOM was originally implemented at the University of Århus in Denmark by Jakob Roland Andersen, Kasper Verdich Lund, Lars Bak, Mads Torgersen, and Ulrik Pagh Schultz in 2001/2002. It was used for teaching object-oriented VMs and came with the original version of the SOM Smalltalk libraries, test suites, and benchmarks. </p> </div> </div> </div> </div>