Language Features
In this section, you will be guided through the features of Adaptive Script and how they compare and contrast to other languages, such as ECMAScript.
Variables
    
        Variables in Adaptive Script are used to indentify a memory location,
        and are declared using the let or
        const
        keywords. Unlike ECMAScript, Adaptive Script does not support the
        var
        keyword, which has semantics surrounding its scope that are not
        compatible with how Adaptive Script processes variables.
    
Classes
Adaptive Script does not have support for classes. This means that the ECMAScript classes such as Array, Object, Integer, String, Boolean, Symbol, Map, Error, Exception, etc. cannot be used in Adaptive Script.
Importing modules
At this time, Adaptive Script does not support importing code from other locations. The only way to share code between scripts is to store them in qualified variables that would be accessible to scripts.
Types and Type Casting
Adaptive Script has a type system that has more in common with Typescript. For instance, in ECMAScript, you can add values of different types together without runtime errors, often resulting in some unexpected results. In Adaptive Script, these will be caught at compile-time, preventing the script from being loaded.
Prototypal Inheritance
Adaptive Script does not have support for prototypal inheritance.
Closure
ECMAScript has a feature called closure, which allows a function to access variables that are defined outside of its scope, and retain the values that were bound to those variables at the time of its scope creation.
At this time, Adaptive Script does not provide closure features.
let x = 1;
let foo;
{
    let x = 2;
    foo = function() {
        return x;
    }
}
// in ECMAScript, foo() will return 2, but in Adaptive Script, it will return 1
foo();Statements
There are two import differences between Adaptive Script and ECMAScript as it relates to statements. In ECMAScript, semicolons are optionally used to separate statements. In Adaptive Script, they are required.
Furthermore, in ECMAScript, any expression can be used as statements and in Adaptive Script, this is not allowed.
// ECMAScript
let x = 1 // invalid in Adaptive Script (missing ;)
let y = 2;
'abc' // invalid in Adaptive Script (expression as statement)Exception Handling
    
        Adaptive Script provides try/throw/catch/finally 
        exception handling, but the syntax and the objects are different than 
        those in ECMAScript.
    
    
        In Adaptive Script, throw is a statement that 
        requires a string (the error message) and an optional data to allow 
        users to pass along contextual data to the exception handler.
    
    
        In ECMAScript, the catch statement accepts any value
        that was thrown, including an Error object, but in Adaptive Script, a 
        single object is always caught, which contains the message and data 
        that was thrown.
    
try {
    throw "Something bad happened" { "code": 123 };
} catch (e) {
    print(e.message);
    print(e.data.code);
}Working with objects and lists
Because Adaptive Script does not have classes, it does not have all of the Object and Array methods, that are included in ECMAScript, accessible as object properties.
Object properties in Adaptive Script do not currently support computed names.
let x = { 
    a:   1, // valid in Adaptive Script 
    "b": 2, // valid in Adaptive Script
    [y]: 3, // invalid in Adaptive Script
};Keywords new and delete
    
        Adaptive Script does not support the new and 
        delete keywords.
    
Iterators and Generators
    
        At this time, Adaptive Script does not support generators. Although 
        objects and lists can be iterated over using the 
        for-of statement, creating iterators as you can in 
        ECMAScript is not supported.
    
Asynchronous Operations
At this time, Adaptive Script does not support asynchronous operations.
The this keyword
    
        The this keyword in ECMAScript has no meaning in
        Adaptive Script.
    
The eval function
    
        The eval function in ECMAScript allows a programmer 
        to execute a string as if it were code. In Adaptive Script, this is 
        accomplished using the evaluate function, which has 
        some differences.
    
    
        In Adaptive Script, any code inside an evaluate 
        call may not access or change any variables outside of its scope.
    
The for .. in statement
    
        Adaptive Script does not support the for .. in and 
        all of its semantics.
    
The switch statement
Adaptive Script supports the ECMAScript switch statement and even has some additional features, such as the ability to use functions to compare values matching a case.