Skip to content

Beginner ru

Enoch-199811 edited this page Aug 9, 2026 · 2 revisions

Введение — первые шаги с BioLang

English | 中文 | Русский | Español | Português | 繁體中文 | Deutsch

На этой странице объясняются базовые понятия и управляющий поток. Вам нужны только собранный бинарник bio и текстовый редактор.

Что такое BioLang?

BioLang — это поток-ориентированный язык. Вместо «всё является объектом» здесь всё является потоком — потоком запросов и ответов. Каждая выполняемая вами операция — это запрос, который может быть отклонён. Это делает обработку ошибок первоклассной частью языка, а не запоздалой мыслью.

Запуск первой программы

Соберите интерпретатор:

make
# → bin/bio

Создайте hello.bio:

program main;

Main {
    void exec() {
        CIO::println("Hello, BioLang!");
    }
}

Запустите:

bin/bio hello.bio
# Hello, BioLang!

У каждой программы один и тот же каркас:

  • program main; — объявляет, что этот файл — главная программа (у неё есть точка входа).
  • Main { ... } — поток главной программы.
  • void exec() { ... } — метод, который выполняется при запуске программы.

Базовые типы и переменные

Пять базовых типов:

Тип Значение Пример
int целое число 42, -7
float число одинарной точности 3.14
double число двойной точности 3.14159265358979
string текст "hello"
char один символ 'x'

Объявление переменных:

int age = 30;
string name = "BioLang";
double pi = 3.14159;
char grade = 'A';

const — доступная только для чтения константа уровня программы:

const int SPEED = 9;

Модель запросов: res, ref, get, cause

Каждый вызов возвращает результат запроса — либо успех (res), либо отказ (ref). Это сердце BioLang.

ALL result = add(3, 4);     // a request result

Используйте get, чтобы развернуть успех, и cause, чтобы получить причину отказа:

CIO::println(get add(3, 4));        // 7
CIO::println(cause div(1, 0));      // refused: division by zero
  • get x — значение успешного запроса.
  • cause x — причина, по которой запрос был отклонён.
  • ALL x = ... — захватывает оба варианта; .res и .cause тоже работают.

Операторы

Арифметика: + - * / %

int a = 7 + 3;      // 10
int b = a * 2;      // 20
int c = b / 7;      // 2  (integer division)
int d = b % 7;      // 6  (remainder)

Инкремент и декремент: i++, i--, а также составные формы.

Управляющий поток

if / else if / else

if (score >= 90) {
    CIO::println("A");
} else if (score >= 60) {
    CIO::println("B");
} else {
    CIO::println("C");
}

while

int i = 0;
while (i < 5) {
    CIO::println("i =", i);
    i = i + 1;
}

for

for (int i = 0; i < 5; i = i + 1;) {
    CIO::println("square", i, "=", i * i);
}

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

break и continue

for (int i = 0; i < 10; i = i + 1;) {
    if (i == 3) continue;    // skip 3
    if (i == 7) break;       // stop at 7
    CIO::println(i);
}

Ввод и вывод в консоль

CIO::print("Enter your name: ");     // no newline
string name = CIO::getln();          // read a line of text
CIO::println("Hello,", name);        // prints: Hello, <name>

CIO — поток консоли: print, println, get, getln, readInt, readNumber.

Собираем всё вместе

Небольшая игра в угадывание чисел (использует всё изложенное выше):

program main;

Main {
    void exec() {
        const int SECRET = 7;
        CIO::println("Guess the number (1-10)!");

        for (int tries = 0; tries < 3; tries = tries + 1;) {
            int guess = CIO::readInt();
            if (guess == SECRET) {
                CIO::println("Correct! You win.");
                res;                  // success, end the program
            } else if (guess < SECRET) {
                CIO::println("Too low.");
            } else {
                CIO::println("Too high.");
            }
        }
        CIO::println("Out of tries. The answer was", SECRET);
    }
}

Что дальше

  • Продвинутый — потоки, классы, файлы, проекты, нити.
  • Эксперт — умные ссылки, бинарные библиотеки, упаковка, кроссплатформенные сборки.
  • Примеры в репозитории — 15 запускаемых программ с подробными комментариями.

Clone this wiki locally