Рун code

Откройте тайну! Рун код поможет вам расшифровать послания предков и применить их силу в современной жизни. Начните прямо сейчас!

Если вы столкнулись с термином «рун код»‚ важно сразу понять: в индустрии существуют три разных языка/концепта‚ которые так или иначе называются «rune». Ниже — подробное руководство по каждому из них‚ чтобы вы точно знали‚ о чём идет речь.


Проект Google — google/rune: язык для максимальной производительности

Что это такое

Rune от Google — экспериментальный язык‚ который команда разрабатывает для того‚ чтобы превзойти C в скорости работы с памятью. Основная идея: «Structure-of-Arrays» (SoA) вместо классического «Array-of-Structures» (AoS).

Ключевые фишки

  • SoA-память — данные хранятся «полями» в отдельных массивах‚ что резко уменьшает cache-misses.
  • Встроенный DataDraw-подход — генератор кода создаёт высокооптимизированный C-код прямо из декларативного описания структур и связей между ними.
  • Безопасность — язык изначально задумывался как экспериментальная площадка для проверки новых моделей безопасной работы с памятью.

Как это выглядит (псевдопример)


// rune-псевдокод
struct Particle {
 x: f32‚
 y: f32‚
 vx: f32‚
 vy: f32‚
}

// Компилятор превратит в SoA-структуру:
// float* particles_x;
// float* particles_y;
// float* particles_vx;
// float* particles_vy;

Когда использовать

Если вы пишете вычислительные ядра (например‚ физические симуляции)‚ где каждая инструкция и кэш-промах на счету‚ Rune от Google может дать ощутимый выигрыш.


rune-rs/rune: встраиваемый скриптовый язык для Rust

Rune (runе-rs) — динамический‚ embeddable язык программирования‚ специально заточенный под то‚ чтобы встраиваться в приложения на Rust. Он позволяет «живые» скрипты менять логику сервиса без перекомпиляции основного кода.

  • Zero-cost FFI — вызывать Rust-функции из скриптов и наоборот можно почти без оверхеда.
  • Статическая типизация по желанию — можно писать как на динамическом‚ так и на строго типизированном подмножестве.
  • Hot-reload, обновление скриптов «на лету» без перезапуска процесса.

Мини-пример встраивания


// Rust
let mut vm = rune::Vm::new;
vm.call(["calculate"]‚ (a‚ b))?;

-- rune-script.rn
pub fn calculate(a‚ b) {
 a * b + 42
}

Для игр (скрипты NPC)‚ серверов (конфиг-файлы становятся полноценным кодом)‚ low-code платформ.


«Руны» в Go: Unicode-коды и работа с текстом

В Go термин rune, это просто alias для int32‚ который хранит Unicode code point. Это не отдельный язык‚ а базовая концепция для безопасной работы с текстом.

  • Каждый rune = один символ Unicode (не байт!)
  • Слайсы рун ([]rune) позволяют резать строки без «поломки» многобайтовых символов.
  • Grapheme cluster — важно помнить‚ что «видимый символ» может состоять из нескольких рун (emoji‚ модификаторы).

Кодовый пример


package main
import "fmt"

func main {
 s := "Здравствуйте‚ 🌍!"
 runes := []rune(s)
 fmt.Printf("Длина в байтах: %d
"‚ len(s))
 fmt.Printf("Длина в рунах : %d
"‚ len(runes))
 // Безопасное слайсирование
 fmt.Println(string(runes[13:16])) // '🌍'
}

Всегда‚ когда речь заходит о пользовательском вводе‚ internationalization‚ emoji‚ парсинге текста на разных языках.


Название Репозиторий Язык/Платформа Фокус
Rune (Google) google/rune Standalone Скорость + безопасность (SoA‚ DataDraw)
Rune (Rust) rune-rs/rune Embed в Rust Гибкие скрипты с hot-reload
Rune (Go) — Go stdlib Unicode‚ безопасная работа со строками

Как не перепутать

Если в вашем чате или документации встречается «rune»:

  1. Спросите себя: речь о Google‚ Rust или Go?
  2. Посмотрите на контекст: нужна ли встроенная поддержка Unicode (Go)‚ встраиваемый скриптовый движок (Rust) или С-совместимая производительность (Google)?

Главное правило: в русскоязычном сообществе «рун код» чаще всего ассоциируют либо с Go-рунами‚ либо со скриптовым движком для Rust. Однако при работе с низкоуровневыми задачами стоит помнить и о экспериментальном проекте Google.