Skip to content

Взгляд на дизайн языка от человека, родившегося в 2006 году

Когда Rust начинал своё существование, я только родился; когда Rust созрел, я был в юности; а в ближайшие десять лет я как раз смогу создать язык, принадлежащий нашему поколению.

Введение: передача межпоколенческой миссии

2006 год — год рождения языка программирования Rust, и год моего появления на свет. Девятнадцать лет спустя, когда я начал проектировать и реализовывать YaoXiang (爻象), я осознал, что это не просто совпадение по времени, а передача межпоколенческой миссии.

Rust решил болевые точки 2000-х: безопасность памяти, безопасность параллелизма. Это был ответ поколения инженеров, которые барахтались в трясине C/C++. Но у каждого поколения есть свои проблемы, каждому поколению нужны свои инструменты.

Эта статья — не техническая спецификация, а межпоколенческий манифест. Она отвечает на вопрос: почему нам, разработчикам нового поколения, нужен собственный язык? Как YaoXiang отвечает нашим потребностям?


一、隔代感——为什么现有语言让我们感到"水土不服"

1.1 那些"反直觉"的设计

Когда я впервые учил Rust, я был измучен его проверкой заимствований (borrowing checker). Я понимал важность безопасности памяти, но не понимал, почему простая конкатенация строк требует такой громоздкой аннотации времени жизни (lifetime annotation). Позже я осознал, что разработчики Rust жили в другое время.

Их модель мышления:

  • "Безопасность памяти — это проблема, которую нужно решать намеренно"
  • "Параллелизм — это монстр, с которым нужно обращаться осторожно"
  • "Система типов — это инструмент для обнаружения ошибок"

А моя модель мышления:

  • "Разве безопасность памяти не должна предоставляться языком по умолчанию?"
  • "Разве параллелизм не является чем-то естественным, как дыхание?"
  • "Разве система типов не может стать для меня каркасом для исследования проблем?"

Это не критика Rust. Rust был революционным для своего времени. Но "по умолчанию" каждого поколения — это "роскошь" предыдущего поколения.

1.2 "Воздух" и "барьеры"

Мы, представители нового поколения, выросли в мире многоядерных процессоров, облачных технологий, мобильного интернета. Для нас:

  • Многоядерные процессоры — это "воздух" — мы никогда не сталкивались с ограничениями одноядерных систем
  • Асинхронное программирование — это "воздух" — мы никогда не имели дело с синхронной блокировкой как моделью по умолчанию
  • Распределённые системы — это "воздух" — мы никогда не сталкивались с подходом "сначала локально"

Когда мы открываем учебник по языкам программирования и видим, как автор тратит много времени на объяснение "почему вам нужно изучать параллельное программирование", наша внутренняя реакция: "Разве это не очевидно? Зачем этому учиться?"

Это и есть межпоколенческий разрыв. То, что предыдущему поколению нужно было "изучать", для нас является "инстинктом".

1.3 Дилемма "неграмотности" в эпоху ИИ

Когда я начал использовать ИИ-помощников для программирования, я обнаружил более глубокую проблему: существующие языки никогда не проектировались с учётом ИИ.

  • Синтаксическая неоднозначность заставляет ИИ галлюцинировать
  • Неявные правила не позволяют ИИ выводить поведение
  • Размытые границы системы типов заставляют ИИ давать неверные типографические рекомендации

Я своими глазами видел, как ИИ путал списковые включения Python с лямбда-выражениями C++, смешивал impl Trait из Rust с обобщениями TypeScript. Это не проблема ИИ, это проблема того, что дизайн языка не подготовлен к эпохе ИИ.


二、我们的编程本能——在什么样的技术环境中成长

2.1 数字原住民的认知模式

Траектория нашего обучения программированию (поколение 2006 года рождения) уникальна:

ВозрастВехаТехнологическая среда
9 лет (2015)Scratch/визуальноеПоколение iPad, сенсорное взаимодействие
12 лет (2018)Python/JavaScriptРасцвет облачных вычислений, Web 2.0
15 лет (2021)Первые CopilotЗарождение ИИ-помощи в программировании
18 лет (2024)Окончание школы, универПовсеместное распространение GitHub Copilot
19 лет (2025)Начало дизайна YaoXiangЭпоха Claude/GPT-4o

Что это означает? У нас есть врождённая интуиция "совместного программирования человек-машина".

Когда мы учились программировать, ИИ-помощники уже были рядом. Мы никогда не испытывали страха "один на один с пустым редактором". Мы привыкли: просить ИИ сгенерировать каркас кода, а затем заполнять детали; просить ИИ объяснить непонятный синтаксис; просить ИИ помочь с отладкой.

Это не зависимость, это симбиотическая модель программирования.

2.2 并发是我们的"母语"

Я никогда не сталкивался с необходимостью вручную управлять пулом потоков. Мой первый код с параллелизмом был написан на JavaScript с использованием async/await. Когда позже я изучал async/await в Rust, я был поражён, почему простая операция "ожидания" требует такого сложного Future trait и Pin, Context.

Параллелизм для нас — не особенность, а состояние по умолчанию. Как многозадачная операционная система является "воздухом" для нашего поколения.

Поэтому когда YaoXiang использует "модель spawn", это не инновация, это кодирование нашего инстинкта в язык.

yaoxiang
# Синтаксис spawn в YaoXiang: параллелизм по умолчанию, не явный
fetch_user(Int) -> User spawn = (id) => { ... }
fetch_posts(User) -> Posts spawn = (user) => { ... }

main() -> Void = () => {
    user = fetch_user(1)     # Автоматический параллелизм
    posts = fetch_posts(user) # Автоматическое ожидание user, затем параллелизм

    print(posts.title)       # Автоматическое ожидание готовности posts
}

Это не "упрощение", это восстановление нашей когнитивной модели.

2.3 视觉化思维的一代

Мы, представители нового поколения, выросли на Figma, Canva, Minecraft. Мы привыкли к принципу "что видишь, то и получаешь" в дизайне. Когда мы учились программировать, нас озадачивало, почему "написать интерфейс" требует такого количества уровней абстракции.

yaoxiang
# Визуальный синтаксис компонентов в YaoXiang
@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")
    }
}

Это не просто синтаксический сахар, это признание модели мышления нашего поколения.


三、YaoXiang的设计回应——为新生代设计的语言

3.1 一切皆类型:范畴论的世界观

Основная философия дизайна YaoXiang — "всё является типом". Это не технический выбор, а выбор мировоззрения.

В мире YaoXiang:

  • Значения являются экземплярами типов
  • Типы сами являются экземплярами типов (метатипы)
  • Функции являются отображениями из входного типа в выходной тип
  • Модули являются комбинацией пространств имён типов
yaoxiang
# Тип как значение
MyList = List(Int)    # MyList теперь является значением типа

# Зависимые типы: тип зависит от значения
type Vector[T, n: Nat] = vector(T, n)

# Типы с pattern matching
describe_type(type) -> String = (t) => {
    match t {
        Point(x, y) -> "Point with x=" + x + ", y=" + y
        ok(value) -> "Ok value"
        _ -> "Other type"
    }
}

На что отвечает этот дизайн? Он отвечает на стремление нашего поколения к математической красоте. Когда мы изучали математику, теория множеств и теория категорий говорили нам: тип — это высочайший уровень абстракции. Почему бы не провести это до конца?

3.2 并作模型:让并发成为空气

Модель spawn (параллелизма) в YaoXiang — это парадигмальный срыв традиционного асинхронного программирования.

Традиционное асинхронное программирование выглядит так:

rust
// Rust
async fn fetch_data(url: &str) -> Result<Data, Error> {
    let response = reqwest::get(url).await?;
    response.json().await
}

Вам нужно понимать:

  • Синтаксис async/await
  • trait Future
  • Pin и Unpin
  • Рантайм (tokio/async-std)
  • Планировщик задач

Модель spawn в YaoXiang выглядит так:

yaoxiang
# Spawn-функция: нужен лишь один маркер spawn
fetch_data(String) -> JSON spawn = (url) => {
    HTTP.get(url).json()
}

# Spawn-блок: явный параллелизм
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)
}

# Spawn-цикл: данные параллельно
parallel_sum(Int) -> Int spawn = (n) => {
    total = spawn for i in 0..n {
        fibonacci(i)
    }
    total
}

Это не упрощение, это переопределение проблемы. Традиционное асинхронное программирование спрашивает: "Как заставить неблокирующий код выглядеть как синхронный?" YaoXiang спрашивает: "Зачем вообще нужна разница между асинхронным и синхронным?"

Когда параллелизм становится воздухом, синтаксические различия исчезают.

3.3 AI友好的语法设计

Дизайн YaoXiang учитывает потребности генерации кода ИИ. Это не поверхностное "ИИ может понять", а глубокое "ИИ участвовал в проектировании".

Принципы дизайна:

  1. Строгая структурированность, однозначный синтаксис — ИИ не будет галлюцинировать из-за синтаксической неоднозначности
  2. Чёткий AST, лёгкая навигация — ИИ может точно определять позицию в коде
  3. Явная семантика, отсутствие скрытого поведения — ИИ может правильно выводить поведение кода
  4. Чёткие границы блоков кода — ИИ не будет неправильно понимать область видимости
  5. Полная типовая информация — ИИ может давать правильные типовые рекомендации
yaoxiang
# Чёткие границы блоков кода
function_name(Params) -> ReturnType = (params) => {
    # Тело функции
}

# Запрет на опускание скобок (без неоднозначности)
foo(T) -> T = (x) => x

# Обязательные 4 пробела для отступа (чёткая структура)
if condition {
    do_something()
} else {
    do_other()
}

Это не просто руководство по стилю, это инфраструктура языка, спроектированная для сотрудничества с ИИ.


四、具体设计决策背后的代际思考

4.1 为什么选择"构造器即类型"?

Определения типов в YaoXiang унифицированно используют синтаксис конструктора. Различные варианты соответствуют различным конструкторным функциям:

yaoxiang
# Конструктор без параметров (enum style)
type Color = { red: () -> Color, green: () -> Color, blue: () -> Color }

# Конструктор с несколькими параметрами (struct style)
type Point = Point(x: Float, y: Float)

# Обобщённый конструктор
type Result[T, E] = { ok: (T) -> Result[T, E], err: (E) -> Result[T, E] }

На что это отвечает? Это отвечает на стремление к унифицированной, а не раздробленной системе типов.

В Java у вас есть class, enum, interface. В Rust — struct, enum, trait. В TypeScript — interface, type, class.

Зачем типам столько форм? Тип — это тип, различие должно быть в форме значений, а не в форме типов.

4.2 为什么放弃GC,采用所有权模型?

YaoXiang использует модель ownership (владения) в стиле Rust, а не GC.

yaoxiang
# Ссылка по умолчанию неизменяема
process(ref Data) -> Void = (data) => {
    # data доступен только для чтения
}

# Изменяемая ссылка
modify(mut Data) -> Void = (data) => {
    # можно модифицировать data
}

# Передача владения
consume(Data) -> Void = (data) => {
    # владение data передаётся
}

Это не просто выбор производительности, это философский выбор.

Мы, представители нового поколения, заботимся об окружающей среде, об эффективности ресурсов. Мы не считаем "бесконечную память" само собой разумеющейся. У нас есть счета за облачные сервисы, мы знаем, что каждый байт имеет стоимость.

При этом мы не хотим страдать от пауз "Stop the World" в GC. Мы привыкли к плавному пользовательскому опыту, к отзывчивости систем реального времени.

Модель владения даёт нам: абстракции с нулевой стоимостью + детерминированная производительность + безопасность памяти.

4.3 为什么柯里化是核心语法?

YaoXiang реализует синтаксический сахар, подобный вызову методов объекта, через карринг.

yaoxiang
# Определение основной функции
distance(Point, Point) -> Float = (a, b) => {
    dx = a.x - b.x
    dy = a.y - b.y
    (dx * dx + dy * dy).sqrt()
}

# Привязка синтаксического сахара методов
Point.distance(_) = distance(self, _)

# Способы вызова
p1 = Point(3.0, 4.0)
p2 = Point(1.0, 2.0)
d1 = distance(p1, p2)     # Прямой вызов
d2 = p1.distance(p2)      # Синтаксис метода

На что это отвечает? Это отвечает на наше желание к чистоте функционального программирования при сохранении интуитивности объектно-ориентированного подхода.

Мы, представители нового поколения, обычно начинали учиться программированию с Python, затем переходили к JavaScript. Мы привыкли к вызовам вида obj.method(), но также ценим элегантность функционального программирования.

Карринг делает их двумя сторонами одной медали.


五、超越技术——代际视角的文化意义

5.1 我们需要自己的声音

Дизайн языков программирования долгое время был областью "старшего поколения". Linus Torvalds начал Linux в 21 год, Graydon Hoare при проектировании Rust уже был опытным инженером.

Но у каждого поколения есть свои уникальные инсайты. Молодые люди смотрят на вещи под другим углом — это не недостаток, а ценность.

Когда я проектировал YaoXiang, у меня не было исторического багажа C/C++. Мне не нужно было "адаптироваться" к существующим системам, я мог "изначально" проектировать новые системы.

5.2 开源协作的新范式

Открытое сотрудничество, каким мы его понимаем:

  • Не списки рассылки, а сообщество Discord
  • Не официальная документация, а интерактивные туториалы
  • Не конференционные доклады, а live-кодинг
  • Не патентная защита, а открытое сотрудничество

YaoXiang с первого дня является открытым. Это не из-за идеализма, а так мы, представители нового поколения, делаем дела.

5.3 为AI原生时代设计

Текущие языки проектировались для 2000-х (одноядерность, локальность, человек пишет). YaoXiang проектируется для 2030-х (многоядерность, распределённость, человек и машина пишут вместе).

Это не преувеличение, это неотложная реальность.

ИИ меняет каждый аспект программирования. Генерация кода, ревью кода, помощь в отладке, написание документации — ИИ становится партнёром разработчика по умолчанию.

Язык, не учитывающий ИИ, подобен дизайну шрифта, не учитывающему принтер — он будет выглядеть устаревшим и неуклюжим.


六、未来展望——邀请你加入

6.1 这不只是一个项目

YaoXiang — это не просто проект языка программирования, это межпоколенческий манифест.

Он говорит: мы, представители нового поколения, не просто учимся пользоваться инструментами предшественников, мы способны создавать свои инструменты. Он говорит: люди, родившиеся в 2006 году, — не просто пользователи Rust, у нас может быть свой язык.

6.2 寻找"2006一代"的贡献者

Я ищу разработчиков моего возраста — тех, кто вырос в эпоху ИИ, первых разработчиков поколения ИИ, тех, кто чувствует "несовместимость" с существующими языками, тех, у кого есть собственные идеи дизайна, но нет платформы для их реализации.

Ваши преимущества:

  • Такой же отсутствие исторического багажа
  • Такая же техническая интуиция
  • Такой же долгосрочный карьерный горизонт

6.3 具体的下一步

Если вам интересен YaoXiang, вы можете:

  1. Попробовать — запустить первую программу на YaoXiang
  2. Изучить исходный код — понять реализацию модели spawn
  3. Внести вклад — реализовать новые функции или исправить баги
  4. Обсудить дизайн — участвовать в решениях по дизайну языка
  5. Распространить идею — поделиться с большим количеством сверстников

结语:不是开始得早,而是开始得恰逢其时

Rust решил болевые точки 2000-х. YaoXiang может решить болевые точки 2020-х.

Это не историческое совпадение, а приглашение эпохи.

Ваш самый большой актив — не код, а время.

Когда ваши сверстники ещё учатся пользоваться существующими инструментами, вы создаёте инструменты следующего поколения. Через десять лет, когда люди спросят: "Почему YaoXiang преуспел?", ответ может быть:

"Потому что он был создан в эпоху ИИ, первыми разработчиками поколения ИИ — они знали, что нужно будущему, потому что они и есть будущее."

Начни свою эпоху.