Latest posts
- TestsArgentum got a special syntax to define tests right in the source files along this with code that needs to be tested, and a…
- Multilevel breaks from lambdasThis post extends the previous post related to break/continue/return operators. In Other languages Let's start with a JavaScript example: Why is it sometimes desirable…
- New Argentum project structureArgentum is a modular language. Modules: Module is always a single text source file. It starts with a series of using declaration that define…
- GUI PlatformIt's time to make Argentum programs work on: To do so it needs a graphical user interface library: But this GUI library itself needs…
- JSON Module OverviewModule Content It's available in playground, so go and try it yourself 🙂 Argentum JSON module provides three separate ways to handle JSONs in…
- Build Argentum from sources on UbuntuArgentum switched to using vcpkg so it automatically installs and builds all dependencies for all platforms in all configurations. Argentum dependencies include LLVM, Skia, SDL,…
- Hello World with HTTPs→JSON→SQLThough fizz-buzz-like exercises are necessary at some early development stages, now it's time to try something more practical. Today we'll make some simple program…
- JSON DOMArgentum JSON module has effective Writer and Parser that reads and writes generic application data structures to and from JSONs. It's a preferred way…
- JSON WriterArgentum got a JSON module. Its Writer class allows to directly encode in JSON arbitrary application data without creating any intermediate DOM structures. Writer…
- JSON ParserThis StAX parser allows to easily read JSONs directly to the application data structures, skipping the building of JSON DOM and skipping all irrelevant…
- 32bit Short and Float TypesArgentum was initially designed as 64bit-only language. Its integer and floating point types were 64bit (int and double types respectively) while support for all…
- RFC: Function and delegate upper boundsArgentum functions and delegates are value types, not references. This makes it impossible to create classes parameterized with function and delegate prototypes and this…
- Proof of Absence of Memory Leaks in Argentum (Multithreaded Case)Each thread has its own mutable object hierarchy that is proven to be leak-free. All threads share the common immutable objects that have no…
- A Formal Proof of Absence of Memory Leaks in Argentum Programming Language for the Single-Threaded CaseDefinitions and Assumptions Statement 1:In absence of cycles by owning pointers all object life times can be controlled with ref-counting. Definitions and Assumptions Proof…
- Argentum Lifetime Management Method is Proven By 20+ Years of Usage20 years ago I created a programming language ZS for the Zodiac Interactive company. This language has three unique features: It's been in use…
- Build Argentum From Sources on WindowsArgentum uses vcpkg that automatically installs and builds all dependencies for all platforms in all configurations. Argentum dependencies include LLVM, Skia, SDL and other…
- Strings and CursorsArgentum strings are mere sequences of Unicode code-points (internally encoded in Utf-8). Argentum string is immutable. They are not indexable.There is only one way…
- How fast is Argentum (part 2)The previous "benchmark" tested integer arithmetic, control structures and function/lambda calls. This benchmark tests data structures, object creation, method calls and pointers. It's based…
Argentum - a safe, scalable, fast and tiny programming language.
- Argentum is memory safe, type-safe, const-safe, null-safe, array-index safe and so on. It is safe.
Unlike other languages that are also pronounced safe, argentum doesn't have and doesn't need unsafe mode at all, also it has nonull
keyword, noconst-casts
and no other ways around its safety measures.
Argentum is rock-solid safe, no-cap. - Argentum automates memory management, and (which is unique) object hierarchy management.
For example, if you declare that an engine belongs to a car, Argentum checks at compile time that no two cars share the same engine instance. - Unlike Rust and Swift Argentum guarantees absence of memory leaks.
- Unlike Java, Go, JS and Python, Argentum doesn't use garbage collector, so no sudden pauses, overheads, and leaks.
- Argentum has precise predictable object disposal moments, so objects can control any resources, not just memory.
- Argentum compiles to machine code producing tiny executables with no extra dependencies.
- Argentum has multithreading without deadlocks and data races.
- Argentum is simple and expressive, crazy fast and memory-effective.
- And its interop with C is mostly a pass-through.
Try Argentum compiler:
- With playground
- on Windows in VSCode: step by step instruction
- on Linux aglan_0.0-1_amd64.deb (todo: write a post)
Hello world in Argentum:
using sys { log } // Import function `log` from module `sys`
log("Hello world") // Call it
More examples are here: SQLite example, Web client example, Tutorials
Publications
All publications and articles related to the Argentum features and ideas that were published to the broader audience:
- Announcement. Argentum programming language
- Publication 1. Managing Object Lifetimes
- Publication 2. How Argentum makes fast dynamic_cast and interface method dispatch with 4 CPU instructions
- Publication 3. How Argentum programming language handles object hierarchies
- Series of publications. Optional-Based Conditionals
- Formal proof of absence of memory leaks in Argentum: single-threaded case, multi-threaded case
Features
- What is Argentum
- Syntax
- Formal grammar
- Module file description
- Expressions
- Modules
- Multiline raw string constants, String interpolation and String cursors
- Multithreading
- Tests
- Break/continue/return/throw operator
- Functions and callables
- Types
- Generics
- Memory management (how it works without GC)
- Object lifetime management in Argentum. First look.
- Understanding Composition in Programming: Importance, Support in Argentum, and Differences from Mainstream Languages
- More on pointers to mutable objects: Composition/Association/TemporaryLocks
- Shared Pointers and Immutable Objects
- Parent pointers and splicing
- Classes and Interfaces
- Control flow using
optionals
JSON
module- A StAX (reverse SAX) parser
- A direct writer (in compact and pretty-print forms)
- JSON DOM for special cases.
Tutorials
- Basic Syntax
- Fizz-Buzz.
- Graphs with Cycles.
- Call C99 functions from Argentum.
- SDL Demo.
- HTTPS->SQL
- Using Debugger
Project status
- Apr9. Windows Demo
- Apr 20. Argentum got immutable objects and shared ownership (aggregation)
- May 17. Argentum got Multiline raw string constants and String interpolation
- May 26. Argentum got generics, and FFI-methods.
- May 30. Debugger v0 Breakpoints, stepping, local vars of primitive types
- Jun 5. Debugger v1 Object inspection, watch expressions, strings and limited arrays.
- Jul 28. Multithreading. Asynchronous message passing.
- Aug 26. Return aka Break aka Continue aka Throw-Catch.
- Sep 14. Built-in comparisons and cached hashes.
- Oct 4. All types of Array of pointers.
- Oct 20. Ported to Linux. Run on Steam deck.
- Nov 2. Unused code elimination.
- Nov 12. Multithreaded FFI.
- Nov 20. Hash Maps.
- Dec 10. Integrated with CURL.
- Dec 16. SQLite bindings.
- Dec 29. SDL2-ttf + redesigned SDL2 bindings
- Jan 7. New syntax of string constants and interpolations.
- Jan 15. New lambda syntax,
pipe
andinit
operators. - Jan 20. ARM64, RaspberryPi, and playground.
- Feb 10. Enumerations v1.
Links
- Argentum Book (outdated doc)
- Slides
- Github sources
- Hackaday project page