Если вы столкнулись с термином «рун код»‚ важно сразу понять: в индустрии существуют три разных языка/концепта‚ которые так или иначе называются «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»:
- Спросите себя: речь о Google‚ Rust или Go?
- Посмотрите на контекст: нужна ли встроенная поддержка Unicode (Go)‚ встраиваемый скриптовый движок (Rust) или С-совместимая производительность (Google)?
Главное правило: в русскоязычном сообществе «рун код» чаще всего ассоциируют либо с Go-рунами‚ либо со скриптовым движком для Rust. Однако при работе с низкоуровневыми задачами стоит помнить и о экспериментальном проекте Google.