Skip to content
This repository has been archived by the owner on Mar 22, 2019. It is now read-only.
/ SOMns Public archive
forked from smarr/SOMns

SOMns: A Newspeak for Concurrency Research

License

Notifications You must be signed in to change notification settings

SOM-st/SOMns

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SOMns - A Simple Newspeak Implementation

Introduction

Newspeak is a dynamic, class-based, object-oriented language in the tradition of Smalltalk and Self. SOMns is an implementation of the Newspeak Specification Version 0.0.95 derived from the SOM (Simple Object Machine) class libraries, and based on TruffleSOM. It is implemented using the Truffle framework and runs on the JVM platform.

Truffle provides just-in-time compilation based on the Graal compiler, which enables SOMns to reach performance that is on par with state-of-the-art VMs for dynamic languages, including V8.

A simple Hello World program looks like:

class Hello usingPlatform: platform = (
  public main: platform args: args = (
    'Hello World!' println.
    ^ 0
  )
)

Obtaining and Running SOMns

The basic requirements for SOMns are a system with Java 9 or later, git, ant, and Python. Windows is currently not supported, but we test on Linux and macOS.

To checkout the code:

git clone https://github.com/smarr/SOMns.git

Then, SOMns can be build with Ant:

ant compile

Afterwards, the simple Hello World program is executed with:

./som core-lib/Hello.ns

To get an impression of the benefit o

For testing on the command line, the full command is ./som core-lib/Benchmarks/Harness.ns Mandelbrot 500 0 500

Additionally, there are JUnit tests and ant test for executing the test suite.

A more comprehensive setup guide is available in the docs folder and on ReadTheDocs.

Implementation and Deviations from the Specification

Compared to other Newspeaks and Smalltalks, it is completely file-based and does not have support for images. Instead of using customary bytecodes, SOMns is implemented as self-optimizing AST interpreter using the Truffle framework.

The overall goal is to be compliant with the specification, but include only absolutely necessary features. The current list of intended deviations from the specifications are as follows:

  • the mixin support of slots is not yet complete, see deactivate tests in core-lib/TestSuite/MixinTests.ns

  • simultaneous slots clauses are not fully supported (spec. 6.3.2)

  • object literals currently require a keyword prefix objL, to work around parser limitations

License and Author Information

This code is distributed under the MIT License. Please see the LICENSE file for details. All contributions to the project are implicitly assumed to be under the MIT License. If this is not desired, we ask that it is stated explicitly. Information on previous authors are included in the AUTHORS file.

Setup Development Environment with Eclipse and VS Code

SOMns code is best written using our VS Code plugin, which provides support for typical IDE features such as code navigation and compilation, as well as a debugger. The SOMns support can then be installed via the Marketplace.

For the development of SOMns itself, we typically use Eclipse. A complete guide on how to setup a workspace is available in the docs folder and on ReadTheDocs.

Development Status

Active development of SOMns happens on the dev branch Build Status.

The latest release is reflected by the release branch Build Status.

Changes and releases are documented in our CHANGELOG.md.

Academic Work

SOMns is designed as platform for research on concurrent programming models, and their interactions. Here, we collect related papers:

About

SOMns: A Newspeak for Concurrency Research

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 86.6%
  • TypeScript 11.2%
  • Python 1.1%
  • HTML 0.7%
  • Shell 0.4%
  • JavaScript 0.0%