Lang is dynamically typed interpreted programming language. The lang project is written just for fun, author is not going to take over the world.
- Hash table;
- 99 bottles of beer;
- Fibonacci numbers computation;
- ...and some more tests.
Just boolean with only two instances: true &false.
Operators: &&, ||, !.
Can be obtained from any value by using toBoolean method.
Conversion contracts:
toBooleansame instance;toInteger1 if true, 0 otherwise;toString"true" or "false".
32-bit integer. NaN supported. Decimal constants.
Can be obtained from any value by using toInteger method. If conversion not supported, NaN will be returned.
Operators: +, -, *, /, %, >>, <<, |, &, ^, ~.
Conversion contract:
toBooleanfalse when0orNaN, true otherwise;toIntegersame instance;toStringString representing this integer in decimal system.
Literals (may be multiline) in double (") or single (') quotes.
Can be obtained from any value by using toString method.
Operators: +.
Methods:
subString(fromInclusive, toExclusive)
Type with only one instance, named undefined. Conversion contract:
toBoolean== false;toInteger== NaN;toString== "undefined".
Container stored contiguously in memory. Can store elements of any other type at the same time.
New instance creation:
[] // empty array
[1, 2, 3] //array which contains 1, 2 and 3
[1, [2, true, ["s"]]] //array which contains 1 and array of 2, true and array of "s" Element access:
var array = [1, 2, 3];
array[1]; //2
array[1] = 0; //[1, 0, 3];
array[4[ = true; //[1, 0, 3, undefined, true] - autoexpansionMethods:
size()returns size of given array
array->size(); //5Auto expansion:
Container with named-fields. Like C-struct or POJO.
Definition:
struct Point { //name
x, y //fields
}Instance creation:
var point = new Point(10, 20);Fields access:
point->x + point->y; //30
Function is first-class object.
Definition(named):
function compute(x, y, z) { //name and arguments
x + y + z; //return can be ommitted at the end of function
}Definition(anonymous):
var lambda = \(x, y) x + y; // \(arguments) expressionPartial applying (arguments binding):
var computeX5 = compute(5);Bound method:
var x = 123;
var toStrX = x->toString; // Important! No "()"!
Call:
compute(1, 2, 3); //6
computeX5(true, 'qwerty'); //compute(5, true, "qwerty") => (5 + 1) + "qwerty" => "6qwerty";
lambda(10, 20); // 30
x = 456;
toStrX() //"123" Important! Bound to object, contained in variable x, not to x!
x->toString() //"456"