<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Типы данных on TrustLang</title>
		<link>https://trust-lang.net/ru/docs/types/</link>
		<description>Recent content in Типы данных on TrustLang</description>
		<generator>Hugo</generator>
		<language>ru</language>
		
		
		
		
			<atom:link href="https://trust-lang.net/ru/docs/types/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Система типов</title>
				<link>https://trust-lang.net/ru/docs/types/type-system/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/type-system/</guid>
				<description>&lt;p&gt;&lt;em&gt;TrustLang&lt;/em&gt; имеет закрытую систему типов. т.е. любой новый тип данных, который создается пользователем,&#xA;обязательно должен быть наследником одного из уже существующих, т.е. расширять один из них.&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; данный документ содержит концептуальные заметки и черновиковые пометки автора (в т.ч. со знаками &amp;#39;???&amp;#39;), а не описание реализованного синтаксиса. Приведённая иерархия типов, описание чистых функций, корутин и Thread/Async/ThreadPool не соответствуют текущей реализации (корутины, потоки, чистые функции `:-`/`::-` не реализованы; см. docs/types/funcs)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Числа и тензоры</title>
				<link>https://trust-lang.net/ru/docs/types/numbers/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/numbers/</guid>
				<description>&lt;p&gt;&lt;em&gt;TrustLang&lt;/em&gt; является языком с динамической типизацией и явное указание типа не влияет на размер памяти, занимаемой переменной.&#xA;Информация о типах используется при преобразовании значаений, когда существующему объекту присваивается значение другого типа.&#xA;Такая операция возможна только тогда, когда типы совместимы между собой и допускают автоматическое приведение.&#xA;Это справедливо как во время парсинга/компиляции исходного теста, так и во время выполнения в режимах интерпретатора и/или скомпилированного файла.&lt;/p&gt;&#xA;&lt;h2 id=&#34;арифметические-типы-данных&#34;&gt;Арифметические типы данных&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%b0%d1%80%d0%b8%d1%84%d0%bc%d0%b5%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d0%b5-%d1%82%d0%b8%d0%bf%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;TrustLang&lt;/em&gt; поддерживает использование несколько типов чисел, которые могут использоваться для различных целей:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Символьные строки</title>
				<link>https://trust-lang.net/ru/docs/types/strings/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/strings/</guid>
				<description>&lt;h2 id=&#34;символьные-строки&#34;&gt;Символьные строки&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;TrustLang&lt;/strong&gt; поддерживает два типа строк:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;:StrChar&lt;/em&gt; - универсальные байтовые UTF-8 строки&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;:StrWide&lt;/em&gt; - системные символьные (широкие символы)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Единичным элементом универсальной UTF-8 строки является один байт,&#xA;тогда как у системных символьных строк единичным элементом строки является широкий символ &lt;em&gt;wchar_t&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;И хотя строки различаются типами единичного элемента строки, но внутреннее представление у обоих типов строк одинаковое.&#xA;Все данные символьных строки хранятся в виде универсальной байтовой UTF-8 последовательности.&lt;/p&gt;&#xA;&lt;h3 id=&#34;StrChar&#34;&gt;Байтовые строки &lt;em&gt;:StrChar&lt;/em&gt;&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#StrChar&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Единичным элементом универсальной байтовой строки является один байт (точнее &lt;em&gt;:Int8&lt;/em&gt;, т.е. 8-ми битное целое число со знаком).&#xA;Количество символов байтовой строки возвращается в байтах и обращение к элементу строки по индексу происходит к байту символьной последовательности.&#xA;&lt;em&gt;Так как данные строки интерпретируется как последовательность UTF-8 символов, нужно соблюдать осторожность при изменении отдельных байт!&lt;/em&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Словари и наборы (перечисления)</title>
				<link>https://trust-lang.net/ru/docs/types/dicts/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/dicts/</guid>
				<description>&lt;h3 id=&#34;словарь&#34;&gt;Словарь&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d1%81%d0%bb%d0%be%d0%b2%d0%b0%d1%80%d1%8c&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Словарь (&lt;em&gt;:Dictionary&lt;/em&gt;) — набор данных произвольного типа с доступом к отдельным элементам по целочисленному индексу&#xA;или по имени элемента при его наличии (это похоже и на tuple и на структуру одновременно).&lt;/p&gt;&#xA;&lt;p&gt;Словари отличаются от &lt;a href=&#34;https://trust-lang.net/type_nor.html&#34;&gt;тензоров&lt;/a&gt; тем, что всегда имеют только одно измерение,&#xA;но каждый элемент может содержать произвольное количество элементов любого типа, в том числе и другие словари.&lt;/p&gt;&#xA;&lt;p&gt;Доступ к элементам словаря происходит по имени элемента, которое записывается через точку от имени переменной, либо по целочисленному индексу.&#xA;Индекс начинается с 0 и как у тензоров, тоже может быть отрицательным (индекс элемента от &amp;ldquo;конца&amp;rdquo;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Классы</title>
				<link>https://trust-lang.net/ru/docs/types/class/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/class/</guid>
				<description>&lt;p&gt;Тип данных &lt;em&gt;:Class&lt;/em&gt; аналогичен словарю, но все его поля обязаны иметь имена (хотя доступ к свойствам класса по индексу так же возможен).&#xA;При создании экземпляра класса, создается новый тип, для которого копируются свойства и методы всех родителей.&lt;/p&gt;&#xA;&lt;p&gt;Различия между классом и словарем заключается в том, что поля словаря могу изменять динамически,&#xA;тогда как состав полей класса определется во время компиляции и могут только расширяться по сравнению родительскими типами??????&lt;/p&gt;&#xA;&lt;p&gt;Создание нового сложного типа (класса), происходит согласно &lt;a href=&#34;https://trust-lang.net/ru/docs/4_operators/create/&#34;&gt;правилам синтаксиса&lt;/a&gt; как создание нового типа&#xA;как функции в пользовательском &lt;a href=&#34;https://trust-lang.net/ru/docs/syntax/namespace/&#34;&gt;пространстве имен&lt;/a&gt;.&#xA;Имя типа является именем нового класса, а его вызов как функции будет вызовом конструктора.&#xA;Области видимости &lt;a href=&#34;https://trust-lang.net/ru/docs/5_arch/visibility/&#34;&gt;тут&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Функции</title>
				<link>https://trust-lang.net/ru/docs/types/funcs/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/funcs/</guid>
				<description>&lt;p&gt;Определение функции происходит с помощью операторов &lt;a href=&#34;https://trust-lang.net/ru/docs/4_operators/create/&#34;&gt;создания объектов&lt;/a&gt;,&#xA;а имя функции должно соответствовать &lt;a href=&#34;https://trust-lang.net/ru/docs/syntax/naming/&#34;&gt;правилам именования&lt;/a&gt;,&#xA;после которого указываются круглые скобки.&#xA;Телом обычной функции должен быть &lt;a href=&#34;https://trust-lang.net/ru/docs/4_operators/block/&#34;&gt;блок кода&lt;/a&gt;,&#xA;который всегда находится в пространстве имен определения функции.&lt;/p&gt;&#xA;&lt;p&gt;Все функции поддерживают аргументы по умолчанию.&#xA;При определении функции вначале перечисляются обязательные аргументы,&#xA;далее идут аргументы со значениями по умолчанию,&#xA;где имя аргумента отделяется от значения по умолчанию знаком равно &amp;ldquo;&lt;strong&gt;=&lt;/strong&gt;&amp;rdquo;.&#xA;Если функция допускает обработку произвольного количества аргументов,&#xA;то последним в списке параметров должно быть указано многоточие &amp;ldquo;&lt;strong&gt;&amp;hellip;&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Итераторы</title>
				<link>https://trust-lang.net/ru/docs/types/iters/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/iters/</guid>
				<description>&lt;p&gt;Итераторы в &lt;em&gt;TrustLang&lt;/em&gt;, как и в остальных языках программирования, предназначены для перебора элементов. Но, в отличии от итераторов в С++, итераторы &lt;em&gt;TrustLang&lt;/em&gt; являются самостоятельными объектами, а не указателями на отдельные элементы объекта-контейнера. Итераторы &lt;em&gt;TrustLang&lt;/em&gt; поддерживают фильтрацию элементов по имени за счет использования функций обратного вызова.&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; описанный здесь протокол итераторов (`?`, `!`, `?!`, `!!`, `??` и макросы @iter/@next/@curr/@first/@all) в текущей версии НЕ реализован: `dict ?`, `dict!` и т.п. не работают, `@iter`/`@next`/`@curr` дают &amp;#39;undefined name&amp;#39;. Обходной путь: цикл `@while(коллекция)` с деструктуризацией (см. playground/foreach.src)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Другие типы данных</title>
				<link>https://trust-lang.net/ru/docs/types/other/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/other/</guid>
				<description>&lt;h3 id=&#34;пусто-none&#34;&gt;Пусто (:None)&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%bf%d1%83%d1%81%d1%82%d0%be-none&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;:None&lt;/em&gt; (пусто) — не содержит значения (точнее имеет одно значение &lt;em&gt;:None&lt;/em&gt;). Указывается в тексте программы как один подчерк «_». Значение &lt;em&gt;None&lt;/em&gt; имеют не инициализированные переменные и при попытке чтения из такой переменной возникает ошибка.&lt;/p&gt;&#xA;&lt;p&gt;Тип переменной может быть явно указан или выведен автоматически из присваиваемого значения. Присвоить новое значение уже инициализированной переменной можно только для совместимого типа, так как неявное преобразование типов не допускаются.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$var&lt;/span&gt; :&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; _&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Создать не инициализированную переменную&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$var2&lt;/span&gt; :&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; var&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Ошибка!!! Нельзя прочитать не инициализированную переменную var&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$var&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; 1000&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# У переменной будет тип Short (минимальный размер для хранения значения)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$var&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; 0,5&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Ошибка!!! Short ← Float не совместимы&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$var&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; _&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Очистить значение переменной&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;$var&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; 0,5&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Теперь можно, т. к. None совместим с любым типом&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;диапазон-range&#34;&gt;Диапазон (:Range)&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%b4%d0%b8%d0%b0%d0%bf%d0%b0%d0%b7%d0%be%d0%bd-range&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Диапазон — специальный тип данных, являющейся приблизительным аналогом типа «генератор» в Python. К диапазону можно обращаться как к итератору и он будет поочередно выдавать элементы в указанном интервале с заданным шагом. Диапазон в тексте программы указывается как два или три элемента через две точки, например 1..5 — диапазон от единицы до пяти с шагом по умолчанию 1. В качестве параметров диапазона можно указывать не только литералы, но и имена переменных и даже рациональные числа. Например, 0,1..$stop..0,1 — диапазон от 0,1 до значения, указанного в переменной $stop с шагом 0,1 или 0..1\10 - диапазон рациональных числе от 0 до 10.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Нативные типы</title>
				<link>https://trust-lang.net/ru/docs/types/native/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/native/</guid>
				<description>&lt;h2 id=&#34;нативные-типы-данных&#34;&gt;Нативные типы данных&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%b5-%d1%82%d0%b8%d0%bf%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Нативными (машинными) данными могут быть как переменные, так и функции, а имя нативных объектов начинается на символ процента &amp;ldquo;&lt;strong&gt;%&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;В случае переменных, это двоичные данные, которые располагаются в одной неразрывной области машинной памяти&#xA;по определенному адресу и имеют строго определенный формат.&lt;/p&gt;&#xA;&lt;p&gt;Чтобы использовать уже существующие библиотеки, нужно либо импортировать нативный объект,&#xA;тем самым создав объкт TrustLang, но с реализацией на другом языке, например на С/С++,&#xA;либо сделать предварительное определение (декларацию) нативного объекта.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Преобразование типов</title>
				<link>https://trust-lang.net/ru/docs/types/convert/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/types/convert/</guid>
				<description>&lt;p&gt;Несмотря на динамическую типизацию языка, если тип переменной указан явно, то автоматическое приведение типов не выполняется,&#xA;и чтобы присвоить переменой значение не совместимого типа, требуется его явное преобразование.&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; описанные здесь преобразования через :Tensor[...](...), :Tensor[2,2](...), :Bool[0], :Bool[...], :StrWide(тензор) не реализованы: многомерные тензоры и их конструкторы/преобразования не реализованы в текущей версии (см. docs/types/numbers). Доступно приведение скаляров через :Int32(...)/:Bool(...) и аналоги (языковой каст с контролем диапазона)&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Так как символьные названия типов относятся к деталям реализации, то явное преобразование в конкретный тип данных производится&#xA;с помощью вызова функции с именем типа, т.е. :Bool(), :StrWide(), :Int64() и т.д.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
