-
Notifications
You must be signed in to change notification settings - Fork 0
Beginner ru
English | 中文 | Русский | Español | Português | 繁體中文 | Deutsch
На этой странице объясняются базовые понятия и управляющий поток. Вам нужны только собранный бинарник
bioи текстовый редактор.
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). Это сердце 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 (score >= 90) {
CIO::println("A");
} else if (score >= 60) {
CIO::println("B");
} else {
CIO::println("C");
}
int i = 0;
while (i < 5) {
CIO::println("i =", i);
i = i + 1;
}
for (int i = 0; i < 5; i = i + 1;) {
CIO::println("square", i, "=", i * i);
}
Обратите внимание на ; после выражения обновления — три части заголовка
разделяются точками с запятой, и весь заголовок заканчивается ;.
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 запускаемых программ с подробными комментариями.
- Home
- Beginner — first steps
- Intermediate — real usage
- Advanced — masterclass
- Build & Run
- Packaging
- Language-Reference
- BR-Model
- BTM-Model