A Language Design Perspective from Someone Born in 2006
When Rust began its gestation, I was just born; when Rust matured, I was a teenager; and in the next decade, I can create a language that belongs to our generation.
Introduction: The Passing of a Generational Mission
2006 is the year Rust programming language was born, and also the year I came into this world. Nineteen years later, when I began designing and implementing YaoXiang, I realized this is not merely a coincidence of timing, but a transmission of generational mission.
Rust solved the pain points of the 2000s: memory safety, concurrency safety. It was an answer from a generation of engineers who struggled through the quagmire of C/C++. But every generation has its own problems, and every generation needs its own tools.
This article is not a technical specification document, but a generational manifesto. It answers the question: Why does our generation of developers need our own language? How does YaoXiang respond to our needs?
I. Intergenerational Gap — Why Existing Languages Feel "Unfamiliar" to Us
1.1 Those "Counterintuitive" Designs
When I first learned Rust, I was tormented by its borrow checker. I understood the importance of memory safety, but I couldn't understand why a simple string concatenation required such cumbersome lifetime annotations. Later I realized that the designers of Rust lived in a different era.
Their mindset was:
- "Memory safety is a problem that requires deliberate attention"
- "Concurrency is a monster that requires careful handling"
- "The type system is a tool for catching errors"
My mindset is:
- "Isn't memory safety something a language should provide by default?"
- "Isn't concurrency as natural as breathing?"
- "Can't the type system be a scaffold for exploring problems?"
This is not criticism of Rust. Rust was revolutionary in its era. But what one generation considers "default" is another generation's "luxury".
1.2 "Air" vs. "Obstacles"
Our generation of developers grew up in a world of multi-core CPUs, cloud-native computing, and mobile internet. For us:
- Multi-core processors are "air" — we never experienced single-core limitations
- Asynchronous programming is "air" — we never experienced synchronous blocking as the default model
- Distributed systems are "air" — we never experienced local-first design thinking
When we open a programming language tutorial and see the author spending a great deal of time explaining "why you need to learn concurrent programming," our inner voice is: "Isn't this obvious? Why does it need to be learned?"
This is the intergenerational gap. What the previous generation had to "learn," our generation considers "instinct".
1.3 The "Illiteracy" Dilemma in the AI Era
When I began using AI programming assistants, I discovered a deeper problem: existing languages were never designed with AI in mind.
- Syntactic ambiguity causes AI to hallucinate
- Implicit rules prevent AI from inferring behavior
- Unclear type system boundaries cause AI to give incorrect type suggestions
I witnessed AI confuse Python's list comprehensions with C++ lambda expressions, and mix up Rust's impl Trait with TypeScript generics. This is not an AI problem, this is a problem of language design not being prepared for the AI era.
II. Our Programming Instincts — The Technical Environment We Grew Up In
2.1 The Cognitive Patterns of Digital Natives
The programming education trajectory of our generation (born in 2006) is unique:
| Age | Milestone | Technical Environment |
|---|---|---|
| 9 (2015) | Scratch/Visual coding | iPad generation, touch interaction |
| 12 (2018) | Python/JavaScript | Cloud computing rises, Web 2.0 matures |
| 15 (2021) | Encounter Copilot prototypes | AI-assisted coding emerges |
| 18 (2024) | Finish college entrance exams, enter university | GitHub Copilot widespread |
| 19 (2025) | Begin designing YaoXiang | Claude/GPT-4o era |
What does this trajectory mean? We have native intuition for "human-machine collaborative programming."
When we learned programming, AI assistants were already by our side. We never experienced the fear of "facing a blank editor alone." We're accustomed to: letting AI generate code skeletons, then filling in the details; letting AI explain syntax we don't understand; letting AI help us debug.
This is not dependency, this is a symbiotic programming model.
2.2 Concurrency Is Our "Mother Tongue"
I never experienced the era of manual thread pool management. When I wrote my first concurrent code, I used JavaScript's async/await. When I later learned Rust's async/await, I was surprised why a simple "wait" operation required such complex Future trait and Pin, Context.
Concurrency is not a feature for us; it is the default state. Just as multi-tasking operating systems are "air" for this generation.
So when YaoXiang adopts the "concurrency model," this is not innovation; this is encoding our instincts into the language.
# YaoXiang's concurrency syntax: concurrency is default, not explicit
fetch_user(Int) -> User spawn = (id) => { ... }
fetch_posts(User) -> Posts spawn = (user) => { ... }
main() -> Void = () => {
user = fetch_user(1) # automatic parallelism
posts = fetch_posts(user) # automatic wait for user then parallel
print(posts.title) # automatic wait for posts to be ready
}This is not "simplification," this is restoring our cognitive patterns.
2.3 A Generation of Visual Thinkers
Our generation grew up with Figma, Canva, Minecraft. We are accustomed to WYSIWYG design thinking. When we learned programming, we were confused about why "writing an interface" required crossing so many layers of abstraction.
# YaoXiang's visual component syntax
@visual_component
user_profile(User) -> Component = (user) => {
VStack(spacing=16) {
Avatar(src=user.avatar, size=64)
Text(user.name, font="bold 24px")
Badge(user.role, color="blue")
}
}This is not just syntax sugar; this is acknowledging our generation's thinking patterns.
III. YaoXiang's Design Responses — A Language Designed for the New Generation
3.1 Everything Is a Type: A Categorical Worldview
YaoXiang's core design philosophy is "everything is a type". This is not a technical choice, but a choice of worldview.
In YaoXiang's world:
- Values are instances of types
- Types themselves are also instances of types (meta types)
- Functions are mappings from input types to output types
- Modules are named namespace combinations of types
# Types as values
MyList = List(Int) # MyList is now a type value
# Dependent types: types depend on values
type Vector[T, n: Nat] = vector(T, n)
# Pattern matching types
describe_type(type) -> String = (t) => {
match t {
Point(x, y) -> "Point with x=" + x + ", y=" + y
ok(value) -> "Ok value"
_ -> "Other type"
}
}What does this design respond to? It responds to our generation's pursuit of mathematical beauty. When we learned mathematics, set theory and category theory taught us: types are the highest level of abstraction. Why not carry this through to the end?
3.2 Concurrency Model: Making Concurrency into Air
YaoXiang's concurrency model is a paradigm颠覆 of traditional asynchronous programming.
Traditional asynchronous programming looks like this:
// Rust
async fn fetch_data(url: &str) -> Result<Data, Error> {
let response = reqwest::get(url).await?;
response.json().await
}You need to understand:
async/awaitsyntaxFuturetraitPinandUnpin- Runtimes (tokio/async-std)
- Task schedulers
YaoXiang's concurrency model looks like this:
# Concurrency functions: only one spawn marker needed
fetch_data(String) -> JSON spawn = (url) => {
HTTP.get(url).json()
}
# Concurrency blocks: explicit parallelism
compute_all(Int, Int) -> (Int, Int, Int) spawn = (a, b) => {
(x, y, z) = spawn {
heavy_calc(a),
heavy_calc(b),
another_calc(a, b)
}
(x, y, z)
}
# Concurrency loops: data parallelism
parallel_sum(Int) -> Int spawn = (n) => {
total = spawn for i in 0..n {
fibonacci(i)
}
total
}This is not simplification; this is redefining the problem. Traditional asynchronous programming asks "how to make non-blocking code look like synchronous code?" YaoXiang asks "why should there be a difference between asynchronous and synchronous?"
When concurrency becomes air, syntactic differences disappear.
3.3 AI-Friendly Syntax Design
YaoXiang's design considers the needs of AI code generation. This is not as superficial as "AI can understand it," but the deeper consideration of "AI participating in design."
Design Principles:
- Strictly structured, unambiguous syntax - AI won't hallucinate due to syntactic ambiguity
- Clear AST, easy location - AI can precisely locate code positions
- Clear semantics, no hidden behavior - AI can correctly infer code behavior
- Clear code block boundaries - AI won't misunderstand scope
- Complete type information - AI can give correct type suggestions
# Clear code block boundaries
function_name(Params) -> ReturnType = (params) => {
# Function body
}
# No parentheses allowed to be omitted (unambiguous)
foo(T) -> T = (x) => x
# Must use 4-space indentation (clear structure)
if condition {
do_something()
} else {
do_other()
}This is not just a style guide; this is language infrastructure designed for AI collaboration.
IV. Generational Thinking Behind Specific Design Decisions
4.1 Why Choose "Constructors Are Types"?
YaoXiang's type definitions uniformly use constructor syntax. Different variants correspond to different constructor functions:
# Zero-parameter constructors (enum style)
type Color = { red: () -> Color, green: () -> Color, blue: () -> Color }
# Multi-parameter constructors (struct style)
type Point = Point(x: Float, y: Float)
# Generic constructors
type Result[T, E] = { ok: (T) -> Result[T, E], err: (E) -> Result[T, E] }What does this respond to? It responds to the idea that type systems should be unified rather than fragmented.
In Java, you have class, enum, interface. In Rust, you have struct, enum, trait. In TypeScript, you have interface, type, class.
Why should types have so many forms? A type is a type; the distinction should be in the form of values, not in the form of types.
4.2 Why Abandon GC and Adopt the Ownership Model?
YaoXiang adopts a Rust-style ownership model instead of GC.
# Immutable reference by default
process(ref Data) -> Void = (data) => {
# data is read-only
}
# Mutable reference
modify(mut Data) -> Void = (data) => {
# can modify data
}
# Transfer ownership
consume(Data) -> Void = (data) => {
# ownership of data is transferred in
}This is not just a performance choice; this is a philosophical choice.
Our generation cares about the environment and resource efficiency. We don't take "unlimited memory" for granted. We have cloud service bills; we know every byte has a cost.
At the same time, we don't want to be troubled by GC's "Stop the World" pauses. We're accustomed to smooth user experiences and the responsiveness of real-time systems.
The ownership model gives us: zero-cost abstractions + deterministic performance + memory safety.
4.3 Why Is Currying Core Syntax?
YaoXiang achieves method-call-like syntax sugar through currying.
# Core function definition
distance(Point, Point) -> Float = (a, b) => {
dx = a.x - b.x
dy = a.y - b.y
(dx * dx + dy * dy).sqrt()
}
# Method syntax sugar binding
Point.distance(_) = distance(self, _)
# Calling styles
p1 = Point(3.0, 4.0)
p2 = Point(1.0, 2.0)
d1 = distance(p1, p2) # direct call
d2 = p1.distance(p2) # method syntaxWhat does this respond to? It responds to wanting the purity of functional programming while retaining the intuitiveness of object-oriented programming.
When our generation learned programming, we often started with Python, then touched JavaScript. We're accustomed to the obj.method() calling style, but we also appreciate the elegance of functional programming.
Currying makes both two sides of the same coin.
V. Beyond Technology — The Cultural Significance of a Generational Perspective
5.1 We Need Our Own Voice
Programming language design has long been the domain of "elders." Linus Torvalds started Linux at 21; Graydon Hoare was already a senior engineer when designing Rust.
But every generation has its own unique insights. The way young people look at problems is different — this is not a flaw, it is value.
When I designed YaoXiang, I had no historical baggage from C/C++. I didn't need to "adapt" to existing systems; I could "natively" design new systems.
5.2 A New Paradigm for Open Source Collaboration
The open source collaboration that our generation understands is:
- Not mailing lists, but Discord communities
- Not official documentation, but interactive tutorials
- Not conference speeches, but live coding streams
- Not patent protection, but open collaboration
YaoXiang has been open source from day one. This is not idealism, but the way our generation does things.
5.3 Designed for the AI-Native Era
Current languages were designed for the 2000s (single-core, local, human-written). YaoXiang is designed for the 2030s (multi-core, distributed, human-machine co-writing).
This is not an exaggeration; this is an urgent reality.
AI is changing every aspect of programming. Code generation, code review, debugging assistance, documentation writing — AI is becoming the default partner of developers.
A language that doesn't consider AI is like a font design that doesn't consider printers — it will seem outdated and clumsy.
VI. Future Outlook — Inviting You to Join
6.1 This Is Not Just a Project
YaoXiang is not just a programming language project; it is a generational manifesto.
It says: Our generation doesn't just learn predecessors' tools; we have the ability to create our own tools. It says: People born in 2006, we're not just Rust users; we can have our own language.
6.2 Looking for Contributors from the "2006 Generation"
I am looking for developers my age — the first generation of developers who grew up in the AI era, those who feel "unfamiliar" with existing languages, those who have their own design ideas but no platform to implement them.
Your advantages:
- Same lack of historical baggage
- Same technical intuition
- Same long career perspective
6.3 Concrete Next Steps
If you're interested in YaoXiang, you can:
- Try it out - Run your first YaoXiang program
- Read the source code - Understand the implementation of the concurrency model
- Contribute code - Implement new features or fix bugs
- Design discussions - Participate in language design decisions
- Spread the word - Share with more peers
Conclusion: Not Starting Early, But Starting at the Right Time
Rust solved the pain points of the 2000s. YaoXiang can solve the pain points of the 2020s.
This is not a coincidence of history, but an invitation of the era.
Your greatest asset is not code, but time.
When your peers are still learning to use existing tools, you are creating the next generation of tools. Ten years from now, when people ask "why YaoXiang succeeded," the answer might be:
"Because it was born in the AI era, designed by the first generation of developers who grew up in the AI era — they know what the future needs, because they are the future."
Start your era.
