First Beta Version

The first beta version of SAMLANG is released. The expression level language features are mostly fixed. Future versions will try to maintain backward-compatibility with best effort.

Features considered for future versions include:

  • More visibility modifiers: package-private, internal, etc.
  • Nullable types
  • Interfaces (potentially with functors)
  • Better optimizations with interprocedural analysis

If you have any ideas on what should be included in future releases, feel free to create GitHub issues as feature requests. Please note that not all requests will be granted. For example, all requests to make samlang dynamic will be rejected, since samlang is a statically-typed language, and will remain statically-typed in the future.

class Main {
  function main(): unit = println("What features do you want?")
}

Alpha Version 0.0.11

This update drops the support for unit literal, TS/JS/Java compilation targets, and added support for x86 assembly target support. The compiler now includes a set of optimizers that are enabled by default.

Alpha Version 0.0.9

This update changes the method/function access syntax from a::b() to a.b() to be consistent with most programming language.

Now samlang will no longer error on insufficient context for type inference when a generic type cannot be inferred from context. Instead, it will treat them as int.

Finally, type query and autocompletion are implemented with the newly introduced language server. The VSCode extension will run samlang lsp to take advantage of that.

Alpha Version 0.0.8

This update introduces the support for multi-module programs and a syntax change. You can read the docs to see how to use imports.

After this change, modules are now renamed as classes, and utility module syntax support has been removed. You can simply change util to class.

Alpha Version 0.0.2

This update changes the design of the language.

Now the syntax of the method access changes from expr.methodName to expr::methodName, and the dot syntax now means field access. Therefore, you now have two ways to access a field:

function oldWay(): int =
    val { age } = this;
    age

// shorter and cleaner in this case
function newWay(): int = this.age

Docs on the website and the test cases have been updated.

Alpha Version 0.0.1

This is the first alpha release.

The language syntax and semantics are far from stable.

The live interpreter will be hosted soon.

Stay tuned for more info.