Нативные типы
Нативные типы данных
Нативными (машинные) данными могут быть как переменные, так и функции, а имя нативных объектов начинается на символ процента “%”.
В случае переменных, это двоичные данные, которые располагаются в одной неразрывной области машинной памяти по определенному адресу и имеют строго определенный формат.
Чтобы использовать уже существующие библиотеки, нужно импортировать нативный объект, тем самым создав объкт NewLang, но с реализацией на другом языке, например на С/С++.
Синтаксис импорта нативных объектов такой же, как и для создания обычных объектов языка, только в качестве правого операнда в операторе создания требуется указать имя нативнного объекта.
При импорте нативного объекта необходимо всегда указывать типы переменных, а также типы аргументов и возвращаемых значений для функций.
Если типы данных у создаваемого и нативного объекта совпадают (т.е. не требуется преобразование типов), то нативное имя объекта можно указать с многоточием, которое означает, что типы данных будут повторять заданные у левого операнда.
:FILE ::= :Plain;
fopen(filename:StrChar, modes:StrChar):FILE ::= %fopen...;
fclose(f:FILE):Int32 ::= %fclose...;
fflush(f:FILE):Int32 ::= %fflush...;
fprintf(f:FILE, format:FmtChar, ...):Int32 ::= %fprintf...;
fremove(filename:String):Int32 ::= %remove...;
frename(old:String, new:String):Int32 ::= %rename...;
Последующее описание находится в процессе разработки.
:Pointer — указатель на системную область памяти или нативную функцию
Так как любой программе приходится взаимодействовать с внешним миром, то по неволе приходится закладывать возможность использования других библиотек и системы типов данных, и для этих целей служит тип :Pointer. Он создается при импорте функций из внешних библиотек и вручную его создать нельзя. Но можно вывести его значение, например для отладки.
:Plain — указатель на представление данных в бинарном виде
Для взаимодействия с внешними библиотеками требуется еще и обмен данными. И для этих целей служит тип данных :Plain — который также является указателем, но на двоичное представление данных в области памяти. Конечно, если их можно представить в виде одного фрагмента.
Перечисление, структура и объединение
:Enum, :Struct и :Union — это такие же словари, только на их элементы накладываются определённые ограничения. Каждый элемент должен иметь уникальное имя, а его тип данных должен быть простым, т.е. числом или строкой фиксированного размера. Эти типы данных так же относятся к группе :Plain и могут быть представлены в двоичном виде в одной области машинной памяти.