<?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/syntax/</link>
		<description>Recent content in Синтаксис on TrustLang</description>
		<generator>Hugo</generator>
		<language>ru</language>
		
		
		
		
			<atom:link href="https://trust-lang.net/ru/docs/syntax/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Именование объектов</title>
				<link>https://trust-lang.net/ru/docs/syntax/naming/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/naming/</guid>
				<description>&lt;p&gt;В качестве имен объектов и названий типов данных можно использовать буквы, цифры и знаки подчеркивания в любых комбинациях, при условии, что первый символ имени не является цифрой.&lt;/p&gt;&#xA;&lt;p&gt;Имя не может состоять из единственного знака подчеркивания, так как это специальный термин, который используется в служебных целях.&lt;/p&gt;&#xA;&lt;p&gt;Для избежания коллизий имен можно использовать &lt;a href=&#34;https://trust-lang.net/ru/docs/syntax/namespace/&#34;&gt;пространство имен&lt;/a&gt;&#xA;и &lt;a href=&#34;https://trust-lang.net/ru/docs/syntax/modules/&#34;&gt;модульную структуру кода&lt;/a&gt;, которые &lt;em&gt;TrustLang&lt;/em&gt; поддерживает одновременно.&#xA;Допускается &lt;a href=&#34;https://trust-lang.net/ru/docs/types/funcs/#overriding&#34;&gt;переопределение&lt;/a&gt; и &lt;a href=&#34;https://trust-lang.net/ru/docs/types/funcs/#overload&#34;&gt;перегрузка&lt;/a&gt; функций.&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://en.wikipedia.org/wiki/Sigil_%28computer_programming%29&#34;&gt;сигилов&lt;/a&gt;), за которыми закрепелено определенное значение.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Пространства имен</title>
				<link>https://trust-lang.net/ru/docs/syntax/namespace/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/namespace/</guid>
				<description>&lt;p&gt;&lt;em&gt;TrustLang&lt;/em&gt; поддерживает пространства имен, разделителем в которых, как и в С++, выступает двойное двоеточие &amp;ldquo;&lt;strong&gt;::&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Область имен может быть указана как для отдельного индетификатора, так и для целого &lt;a href=&#34;https://trust-lang.net/ru/docs/4_operators/block/&#34;&gt;блока кода&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;В отличии от &lt;em&gt;namespace&lt;/em&gt; в С++, области имен в &lt;em&gt;NewLnag&lt;/em&gt; используются не только для организации кода в виде логических групп&#xA;и с целью избежания конфликтов имен, но и для отнесения идентификатора, в котором явно указана область имен, к статическим объектам&#xA;(память под которые выделяется на этапе комиляции программы).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Модули и пакеты</title>
				<link>https://trust-lang.net/ru/docs/syntax/modules/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/modules/</guid>
				<description>&lt;p&gt;В &lt;em&gt;TrustLang&lt;/em&gt; реализована концепция программных модулей и пакетов - которая повторяет идею иерархического расположения файлов&#xA;в каталогах файловой системы, примерно так же, как это сделано в языке Python, но разделителем имен выступает не точка,&#xA;а символ &amp;ldquo;&lt;strong&gt;\&lt;/strong&gt;&amp;rdquo; (как разделитель каталогов в Windows).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Имя модуля может содержать только строчные английские буквы, цифры или символ подчерка (кроме первой и последеней позиции).&#xA;Данное ограничение связано с прямым отображением имен модулей на объекты в файловой системе,&#xA;так как у разных файловых систем могут быть различные возможности с поддержкой кодировок&#xA;и разные требования к преобразованию регистров символов.&lt;/em&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Управление памятью и совместный доступ</title>
				<link>https://trust-lang.net/ru/docs/syntax/memory/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/memory/</guid>
				<description>&lt;p&gt;В &lt;em&gt;TrustLang&lt;/em&gt; реализовано безопасное автоматическое управление памятью без сборщика мусора.&lt;/p&gt;&#xA;&lt;p&gt;Автоматическое освобждение памяти реализовано за счет принципа &lt;a href=&#34;https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization&#34;&gt;RAII&lt;/a&gt;&#xA;и использования двух типов указателей: сильных и слабых ссылок (&lt;em&gt;shared_ptr&lt;/em&gt; и &lt;em&gt;weak_ptr&lt;/em&gt; в терминологии С++).&lt;/p&gt;&#xA;&lt;p&gt;Чтобы не допускать утечек памяти из-за &lt;a href=&#34;https://doc.rust-lang.org/book/ch15-06-reference-cycles.html&#34;&gt;циклических ссылок&lt;/a&gt;,&#xA;создание &lt;em&gt;&lt;strong&gt;сильных&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;циклических&lt;/em&gt; ссылок запрещено на уровне &lt;em&gt;определений типов данных&lt;/em&gt; (классов любого уровня вложенности)&#xA;и контролируется статическим анализатором на этапе &lt;em&gt;компиляции&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Потенциальные гонки при обращении к памяти из разных потоков решаются за счет &lt;em&gt;автоматической&lt;/em&gt; межпотоковой синхронизации доступа.&#xA;Способ синхронизации доступа указывается при определении переменной,&#xA;а захват и освобождение объекта синхронизации при разименовании ссылки выполняются &lt;em&gt;автоматически&lt;/em&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Обобщенное программирование</title>
				<link>https://trust-lang.net/ru/docs/syntax/generics/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/generics/</guid>
				<description>&lt;p&gt;Обобщённое программирование (generic programming) - это одна из фундаментальных парадигм современного программирования, позволяющая писать алгоритмы и структуры данных независимо от конкретных типов, с которыми они работают. Несмотря на единство цели, каждый язык программирования реализуют эту парадигму по своему. И такие различия не случайны, так как каждый варинат реализации обощеного программирования является следствием философии языка, исторического контекста и компромиссов между производительностью, безопасностью и выразительностью.&lt;/p&gt;&#xA;&lt;p&gt;Для понимания причины выбора концепции обобщенного программирования, которая реализована в языке, имеет смысл предварительно ознакомиться со сравнительным анализом различных подходов в других языках программирования, который опубликован в &lt;a href=&#34;https://trust-lang.net/ru/blog/generics/&#34;&gt;отдельной статье блога&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Макросы</title>
				<link>https://trust-lang.net/ru/docs/syntax/macros/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/macros/</guid>
				<description>&lt;p&gt;Макросы в &lt;strong&gt;TrustLang&lt;/strong&gt; являются элементами метапрограммирования.&lt;/p&gt;&#xA;&lt;p&gt;Макрос - это один или несколько последовательных терминов, которые заменяются на другой термин&#xA;или на целую синтаксическую конструкцию (последовательность лексем) и&#xA;выступают в роли специализированных регулярных выражений для поиска и замены последовательностей терминов.&lt;/p&gt;&#xA;&lt;p&gt;Макросы обработываются &lt;strong&gt;лексером&lt;/strong&gt; перед отправкой токенов в парсер для синтаксического анализа,&#xA;что позволяет изменять даже синтаксис языка, например, превратить синтаксис &lt;em&gt;TrustLang&lt;/em&gt; на основе грамматических правил&#xA;в более привычный синтаксис на основе &lt;a href=&#34;https://trust-lang.net/syntax_dsl.html&#34;&gt;ключевых слов&lt;/a&gt;,&#xA;так как такой текст легче воспринимается при последующем чтении исходного кода программы.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keyword syntax (DSL)</title>
				<link>https://trust-lang.net/ru/docs/syntax/dsl/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/dsl/</guid>
				<description>&lt;h3 id=&#34;особенности-ассоциативной-памяти&#34;&gt;Особенности ассоциативной памяти&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%be%d1%81%d0%be%d0%b1%d0%b5%d0%bd%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d0%b0%d1%81%d1%81%d0%be%d1%86%d0%b8%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d0%be%d0%b9-%d0%bf%d0%b0%d0%bc%d1%8f%d1%82%d0%b8&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Синтаксис языка &lt;em&gt;TrustLang&lt;/em&gt; основан на строгих правилах без использования ключевых слов,&#xA;и как бы он не выглядел логичным, ассоциация по ключевым словам вспоминается гораздо легче, например &lt;strong&gt;if&lt;/strong&gt;,&#xA;чем комбинация &lt;em&gt;минус минус правая угловая скобка&lt;/em&gt; &lt;strong&gt;&amp;ndash;&amp;gt;&lt;/strong&gt;.&#xA;Из-за этого имеет смысл использовать не &amp;ldquo;чистый&amp;rdquo; базовый синтаксис, а более привычный диалект с использованием ключевых слов.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;TrustLang&lt;/em&gt; уже содержит набор макросов, которые расширяют базовый синтаксис &lt;em&gt;TrustLang&lt;/em&gt;, основанный на правилах,&#xA;набором предопределенных ключевых слов как в классических языках программирования,&#xA;которые можно адаптировать или дополнить под собственную предметную область.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Доказательство корректности</title>
				<link>https://trust-lang.net/ru/docs/syntax/proof/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/syntax/proof/</guid>
				<description>&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; формальный анализ AoRTE (проверка доказательства корректности программы) в текущей версии компилятора НЕ реализован: в pipeline отсутствует соответствующий проход, а SMT-решатель — только инфраструктура (solver), по умолчанию подключён заглушка (SolverStub возвращает kUnsupported)&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Реализация статической проверки динамических выражений AoRTE (“Absence of Run-Time Errors”), которая не даёт ложных срабатываний, хотя возможны ложные отрицательные результаты. То есть, если ошибки при компиляции отсутствуют, то можно быть уверенными, что проблем в коде нет, тогда как указание на возможную ошибку не всегда соответствует действительности и инструмент может ошибаться.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
