Типы данных
Этот документ описывает различные типы данных, предоставляемые языком программирования Wave. В Wave можно сохранять и обрабатывать значения различных типов данных, причем каждый тип данных четко определяет способ представления данных и порядок обработки памяти.
Четкое определение типа данных является одной из ключевых философий дизайна Wave.
Wave — это система с полностью строгой типизацией. Все объявления var/fun и инициализации переменных требуют явного указания типа, типизация на основе контекста не поддерживается. Следовательно, такие выражения как var x = 1;, где не указан тип, приведут к ошибке компиляции.
Это позволяет чётко выразить намерения кода, заранее обнаруживать ошибки во время компиляции и гарантировать эффективное использование памяти и стабильное выполнение.
Целочисленный тип
Целочисленный тип используется для хранения целочисленных значений.
В Wave обычно используются i32 (32-битное целое со знаком) и u32 (32-битное беззнаковое целое), но при необходимости можно очень точно указать размерность целых чисел.
Целочисленные типы со знаком варьируются от i8 до i1024, тогда как беззнаковые целые числа доступны от u8 до u1024.
Это позволяет удовлетворять широкий спектр потребностей — от простых расчетов до операций с большими числами, криптографической обработки и низкоуровневого системного программирования.
Ниже приведен простой пример использования целочисленных типов.
var a: i32 = 100;
var b: u32 = 200;
Тип с плавающей запятой
Тип с плавающей запятой используется для хранения действительных численных значений.
В Wave основным типом с плавающей точкой является f32; при необходимости более высокой точности можно выбирать типы большего размера.
Wave предоставляет типы с плавающей точкой от f32 до f128, позволяя пользователю непосредственно выбирать между точностью вычислений и производительностью.
Это позволяет обрабатывать числовые вычисления для самых разных целей — от общих числовых расчетов до точных научных вычислений.
Ниже приведен пример использования типов с плавающей точкой.
var pi: f32 = 3.14;
var e: f64 = 2.71828;
Строковый тип
Строковый тип используется для работы с текстовыми данными.
В Wave строки объявляются с помощью ключевого слова str, а строковые литералы заключаются в двойные кавычки (").
Строки широко используются в программах для вывода сообщений, обработки пользовательского ввода и обработки текстовых данных.
Ниже приведен основной пример использования строкового типа.
var text: str = "Hello Wave";
Булевый тип
Булевый тип данных представляет значения истина (True) или ложь (False).
В Wave используется тип bool, а значения задаются как true или false.
Булевый тип играет ключевую роль в условных и циклических операторах, управляя потоком выполнения программы.
var isActive: bool = true;
var isAvailable: bool = true;
Символьный тип
Символьный тип используется для хранения одного символа.
Объявляется с использованием ключевого слова char и может содержать только один символ.
Символьные литералы заключаются в одинарные кавычки (').
var letter: char = 'A';
Байтовый тип
Байтовый тип используется для хранения данных размером 1 байт. Этот тип особенно полезен для обработки двоичных данных, ввода-вывода файлов и сетевого программирования, где требуется низкоуровневая обработка данных.
В Wave байтовый тип объявляется с помощью ключевого слова byte.
var byteData: byte = 0xFF;
Указательный тип
Указательный тип используется для прямой ссылки на адрес памяти.
В Wave указательные типы объявляются в формате ptr<T>.
Указатели используются там, где требуется низкоуровневый доступ к памяти, и часто применяются в системном программировании или кодах, где важна производительность.
var ptr: ptr<T> = &someVariable;
Литерал null
В Wave null является официальным литералом.
nullне является идентификатором. (формаvar null = ...невозможна)nullможно присваивать только типуptr<T>.
var p: ptr<i32> = null; // OK
// var n: i32 = null; // ERROR
// var b: bool = null; // ERROR
Массивный тип
Тип массива используется для последовательного хранения нескольких значений одного и того же типа данных.
В Wave массивы объявляются в формате array<тип, размер>, где размер массива четко указывается во время компиляции.
Это обеспечивает четкость структуры памяти и стабильный доступ.
var numbers: array<i32, 5> = [1, 2, 3, 4, 5];
Каждый тип данных спроектирован таким образом, чтобы можно было выбрать подходящий диапазон и размер в зависимости от назначения и характеристик. Выбор подходящего типа данных позволяет эффективно управлять памятью, значительно улучшая стабильность и читаемость кода.
