Generics v0

Now argentum classes and interfaces can have parameters: Parameters can be used in place of classes in type declarations: In v0 there are three limitations: Some of these limitations will be reduced in next revisions. Arrays became generics too: These…

String interpolation v1

Multiline raw strings can have placeholders with the common language expressions: It prints: As described here, the format expression of a multiline string defines extra indent, tab handling, line endings and extra linefeeds There is more. It can contain one…

Multiline raw string constants

String literals are bad but necessary In general, the use of literal strings in the program source code is considered a bad practice. There are two reasons for this: Unfortunately, in the modern world, a huge number of programs are…

Foreign Function Interface (FFI)

Argentum can call C/C++ functions and pass parameters of primitive data types and objects. On Argentum side: Create a module io.ag and declare there a number of functions with “;” in place of body: On C/C++ side: Create a library:…

Module file structure

Module source file contains three parts (order matters): Dependencies In this example moduleA is used without name imports, thus all names of that module can be referred using long names: moduleA_functionfromModuleA For example: sys_getParent. While moduleB is used with imports.…

Formal grammar

General program structure Argentum program consists on modules. All module sources are placed in the same directory in text files having “.ag” extension. File name matches module name. One module is passed to the compiler as starting module name. Compiler…

Shared pointers to immutable objects

Personally I find the very conception of immutable variables very oxymoronic and illogical. When “immutable variable” is a field, it doesn’t work as immutable in some cases: at least in constructors and in deserialization logic. It prevents objects from delegating…

General info about types

Type deduction for fields, lambda parameters, results, local variables and constants Every value in Argentum has statically assigned type. For fields, constants, variables and lambda prototypes compiler deduces their types automatically by their initial values: Explicit type declarations: Only function/method…

Pointer types

In contrast with C++ or Rust Argentum pointers always point to class instance or interface instance. They cannot point to local variables or object fields. This is much like references in Java In contrast with Java and other GC-based languages…