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 преуспел?", ответ может быть:

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

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