Сибиряк — это полноценный компилируемый язык программирования, являющийся русскоязычным аналогом Go (Golang). Абсолютно всё в языке написано по-русски: ключевые слова, встроенные функции, типы данных, операторы управления потоком.
- 🇷🇺 Полностью русский — все ключевые слова на русском языке
- ⚡ Компилируемый — транспилируется в C, затем компилируется GCC/Clang
- 🔁 Аналог Go — синтаксис и концепции максимально близки к Golang
- 📦 Пакетная система — как в Go:
пакет главный - 🔧 Структуры и методы — объектно-ориентированный стиль
- 🚀 Горутины и каналы — декларации поддержаны в синтаксисе
# Требования: Python 3.12+, GCC или Clang
git clone ...
cd сибиряк
chmod +x сибиряк
# Опционально: добавить в PATH
sudo ln -s $(pwd)/сибиряк /usr/local/bin/сибирякСоздайте файл привет.сбк:
пакет главный
импорт "фмт"
функ Главная() {
фмт.Печать("Привет, мир!")
}
Скомпилируйте и запустите:
./сибиряк привет.сбк # компиляция
./привет # запуск
# или за один шаг:
./сибиряк запустить привет.сбк| Go | Сибиряк | Описание |
|---|---|---|
package |
пакет |
Объявление пакета |
import |
импорт |
Импорт пакетов |
func |
функ |
Объявление функции |
return |
возврат |
Возврат из функции |
if |
если |
Условный оператор |
else |
иначе |
Ветка иначе |
for |
для |
Цикл |
range |
диапазон |
Перебор коллекции |
switch |
перекл |
Переключатель |
case |
случай |
Ветка переключателя |
default |
умолч |
Ветка по умолчанию |
var |
пер |
Объявление переменной |
const |
конст |
Константа |
struct |
структ |
Структура |
interface |
интерф |
Интерфейс |
map |
карта |
Словарь |
chan |
канал |
Канал |
go |
горутина |
Горутина |
defer |
отложить |
Отложенный вызов |
select |
выбор |
Выбор канала |
break |
прервать |
Прерывание цикла |
continue |
продолжить |
Продолжение цикла |
goto |
перейти |
Переход по метке |
panic |
паника |
Паника |
recover |
восстан |
Восстановление |
true |
истина |
Булево истина |
false |
ложь |
Булево ложь |
nil |
ноль |
Нулевой указатель |
make |
создать |
Создать срез/карту/канал |
new |
новый |
Выделить память |
append |
добавить |
Добавить в срез |
len |
длина |
Длина |
cap |
ёмкость |
Ёмкость |
delete |
удалить |
Удалить из карты |
copy |
копировать |
Копировать срез |
close |
закрыть |
Закрыть канал |
fmt.Println |
фмт.Печать |
Вывод с новой строкой |
fmt.Printf |
фмт.ПечатьФ |
Форматированный вывод |
| Go | Сибиряк | Описание |
|---|---|---|
int |
цел |
Целое число |
int8 |
цел8 |
8-бит целое |
int16 |
цел16 |
16-бит целое |
int32 |
цел32 |
32-бит целое |
int64 |
цел64 |
64-бит целое |
byte |
байт |
Байт (uint8) |
rune |
руна |
Символ Unicode |
float32 |
вещ32 |
Вещественное 32-бит |
float64 |
вещ64 |
Вещественное 64-бит |
string |
строка |
Строка |
bool |
булево |
Булево |
any |
любой |
Любой тип |
error |
ошибка |
Ошибка |
пер х цел = 42 // с типом и значением
пер у цел // только тип (= 0)
з := "строка" // короткое объявление
конст ПИ вещ64 = 3.14 // константа
функ сложить(а цел, б цел) цел {
возврат а + б
}
// Несколько возвращаемых значений
функ делить(а цел, б цел) (цел, ошибка) {
если б == 0 {
возврат 0, "деление на ноль"
}
возврат а / б, ноль
}
структ Человек {
Имя строка
Возраст цел
}
функ (ч *Человек) Поздороваться() {
фмт.ПечатьФ("Привет, меня зовут %s!\n", ч.Имя)
}
// Использование:
чел := Человек{Имя: "Иван", Возраст: 30}
чел.Поздороваться()
// Обычный for
для i := 0; i < 10; i++ {
фмт.ПечатьФ("%ld\n", i)
}
// Бесконечный цикл
для {
// ...
прервать
}
// По диапазону
для i, в := диапазон список {
фмт.ПечатьФ("%ld: %ld\n", i, в)
}
// С выражением
перекл день {
случай 1:
фмт.Печать("Понедельник")
случай 6, 7:
фмт.Печать("Выходной")
умолч:
фмт.Печать("Будень")
}
// Без выражения (как цепочка if-else)
перекл {
случай оценка >= 90:
фмт.Печать("Отлично!")
случай оценка >= 75:
фмт.Печать("Хорошо!")
умолч:
фмт.Печать("Удовлетворительно")
}
сибиряк <файл.сбк> — скомпилировать
сибиряк <файл.сбк> -о <имя> — с именем выходного файла
сибиряк <файл.сбк> -с — только C-код (без компиляции)
сибиряк <файл.сбк> --токены — показать токены лексера
сибиряк <файл.сбк> --аст — показать АСД (синтаксическое дерево)
сибиряк запустить <файл.сбк> — скомпилировать и сразу запустить
сибиряк --версия — версия компилятора
сибиряк --помощь — справка
Исходный код (.сбк)
│
▼
┌─────────┐
│ Лексер │ лексер.py — разбивает код на токены
└─────────┘
│ токены
▼
┌─────────┐
│ Парсер │ парсер.py — строит АСД (абстрактное синтаксическое дерево)
└─────────┘
│ АСД
▼
┌──────────────┐
│ Генератор C │ генератор_c.py — транспилирует АСД в C-код
└──────────────┘
│ .c файл
▼
┌─────┐
│ GCC │ — компилирует C в исполняемый файл
└─────┘
│
▼
Исполняемый файл
python3 тесты/тесты.pyсибиряк/
├── сибиряк # Исполняемый скрипт (точка входа)
├── README.md
├── компилятор/
│ ├── сибиряк.py # Главный модуль компилятора
│ ├── лексер.py # Лексический анализатор
│ ├── парсер.py # Синтаксический анализатор
│ ├── аст.py # Узлы абстрактного синтаксического дерева
│ └── генератор_c.py # Генератор C-кода
├── примеры/
│ ├── привет.сбк # Привет, мир!
│ ├── фибоначчи.сбк # Числа Фибоначчи
│ ├── структуры.сбк # Структуры и методы
│ └── витрина.сбк # Витрина возможностей
└── тесты/
└── тесты.py # Тестовый набор (22 теста)
- Лексер (полная поддержка кириллицы)
- Парсер (все основные конструкции Go)
- Генератор C-кода
- Компиляция через GCC
- Тестовый набор (22 теста)
- Система типов и проверка типов
- Сборщик мусора
- Настоящие горутины (через pthreads)
- Стандартная библиотека Сибиряка
- Самокомпиляция (компилятор на самом Сибиряке)
- Пакетный менеджер
Сибиряк — крепкий, надёжный, как сибирский мороз 🌨️