History of Tolk
Once new versions are released, they will be announced on this page.
v1.0
- The magic
lazy
keyword — lazy loading, partial loading, partial updating - Auto-detect and inline functions at the compiler level
- Various peephole optimizations for gas efficiency
onInternalMessage
andonBouncedMessage
, TVM 11 support- Custom pack/unpack serializers for custom types
v0.99
- Universal
createMessage
- Universal
createExternalLogMessage
- Sharding — calculate addresses "close to another contract"
v0.13
- Auto-packing to/from cells/builders/slices
- Type
address
- Lateinit variables
- Defaults for parameters
v0.12
- Structures
struct A { ... }
- Generics
struct<T>
andtype<T>
- Methods
fun Point.getX(self)
- Rename stdlib functions to short methods
v0.11
- Type aliases
type NewName = <existing type>
- Union types
T1 | T2 | ...
- Pattern matching for types
- Operators
is
and!is
- Pattern matching for expressions
- Semicolon for the last statement in a block can be omitted
v0.10
- Fixed-width integers:
int32
,uint64
, etc. Details - Type
coins
and functionton("0.05")
bytesN
andbitsN
types (backed by slices at TVM level)- Replace
"..."c
postfixes withstringCrc32("...")
functions - Support
0b...
number literals along with0x...
- Trailing comma support
v0.9
- Nullable types
int?
,cell?
, etc.; null safety - Standard library (asm definitions) updated to reflect nullability
- Smart casts, like in TypeScript in Kotlin
- Operator
!
(non-null assertion) - Code after
throw
is treated as unreachable - The
never
type
v0.8
- Syntax
tensorVar.0
andtupleVar.0
(both for reading and writing) - Allow
cell
,slice
, etc. to be valid identifiers (not keywords)
v0.7
- Under the hood: refactor compiler internals; AST-level semantic analysis kernel
- Under the hood: rewrite the type system from Hindley-Milner to static typing
- Clear and readable error messages on type mismatch
- Generic functions
fun f<T>(...)
and instantiations likef<int>(...)
- The
bool
type; type casting viavalue as T
v0.6
The first public release. Here are some notes about its origin:
A brief history of Tolk
When Tolk was first conceived, the idea was simple: What if we had a language for TON that was low-level and efficient but felt more familiar to developers coming from TypeScript, Rust, or Go?
FunC gave complete control over the TVM — and if you mastered it, it gave you power. But its Lisp-like syntax and functional style made onboarding difficult for many.
Tolk began as an experiment: to maintain efficiency while changing the interface. There are no parentheses and no prefix notation, just clean types, structs, pattern matching, and a modern toolchain.
Since then, Tolk has grown far beyond just being easier FunC. It now offers:
- a powerful type system,
- automatic serialization,
- idiomatic message composition,
- and better performance — not despite abstraction, but thanks to it.
Today, Tolk is not an experiment — it's a production-ready replacement for FunC.
How Tolk was born
In June 2024, I submitted a pull request: FunC v0.5.0 — along with a roadmap for how FunC could be improved, syntactically and semantically.
But instead of merging it, we made a decision: To fork. To leave FunC untouched. As it is. As it always was. And to create a new language driven by a fresh and new name.
Over the next several months, I worked on Tolk privately, implementing not just syntax changes, but a fully redesigned architecture — including an internal AST representation that FunC never had.
On the TON Gateway in Dubai in November 2024, I gave a speech presenting Tolk to the public. The video is available on YouTube.
The very first pull request: Tolk Language: next-generation FunC.
The first released version of Tolk was v0.6 — a metaphor for the FunC v0.5 that could have been but never was.
Meaning of the name "Tolk"
Tolk is a wonderful word.
In English, it sounds like talk. And after all, what do we use a language for? To talk. To talk to computers.
In all Slavic languages, the root tolk and the phrase "to have tolk" means "to make sense"; "to have deep internals".
But actually, TOLK is an abbreviation.
You know, that TON is The Open Network.
By analogy, TOLK is The Open Language K.
What is K, you might ask? Maybe, it's kot — the nickname of Nikolay Durov? Or Kolya? Kitten? Kernel? Kit? Knowledge?
The correct answer is none of these. The K stands for nothing. It's open.
The Open Letter K