<?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/5_arch/</link>
		<description>Recent content in Архитектура on TrustLang</description>
		<generator>Hugo</generator>
		<language>ru</language>
		
		
		
		
			<atom:link href="https://trust-lang.net/ru/docs/5_arch/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Внутреннее имя и манглинг имен</title>
				<link>https://trust-lang.net/ru/docs/5_arch/mangling/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/mangling/</guid>
				<description>&lt;p&gt;Именование объектов основано на &lt;a href=&#34;https://trust-lang.net/ru/docs/syntax/naming/&#34;&gt;правилах&lt;/a&gt; и выбирается из расчёта удобства для программиста.&#xA;Название переменной или функции должно нести смысл, понятные параметры и тип возвращаемого значения,&#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/types/native/&#34;&gt;&lt;em&gt;нативных&lt;/em&gt;&lt;/a&gt; имен переменных и функций происходит в соотвествии с правилами компилятора языка реалиазции,&#xA;а все остальные объекты именются следующим образом:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Реализация прерываний и обработки ошибок</title>
				<link>https://trust-lang.net/ru/docs/5_arch/errors/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/errors/</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; описанная здесь схема обработки ошибок (макросы LOG_ERROR, опция --nlc-error-limit, классы :IntAny/:IntPlus/:IntMinus) относится к устаревшей архитектуре `nlc`. Текущая реализация использует компонент diag (Severity::Error/Warning/... и накопительные отчёты в pipeline), а опции задаются через -W&amp;lt;name&amp;gt; (см. README.md)&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;накопительные-ошибки-и-их-реализация&#34;&gt;Накопительные ошибки и их реализация&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%bd%d0%b0%d0%ba%d0%be%d0%bf%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b8-%d0%b8-%d0%b8%d1%85-%d1%80%d0%b5%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Накопительные ошибки используются при обработке исходного текста программы при его парсинге, анализа или компиляции.&#xA;&lt;em&gt;Накопительнность&lt;/em&gt; данных ошибок заключается в том, что процесс обработки исходного текста прерывается не сразу после возникновения первой ошибки,&#xA;а только после превышения определнного лимита (по умолчанию &amp;ndash;nlc-error-limit=10).&lt;/p&gt;</description>
			</item>
			<item>
				<title>LLVM</title>
				<link>https://trust-lang.net/ru/docs/5_arch/llvm/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/llvm/</guid>
				<description>&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; LLVM-бэкенд не используется: текущая реализация — транспилятор в код C&amp;#43;&amp;#43; с последующей сборкой через clang&amp;#43;&amp;#43; (LLVM IR не генерируется). Документ является справочником по инструкциям LLVM IR и не отражает фактический вывод компилятора&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Инструкция возврата:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;‘ret’ - инструкция возврата&#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-llvm&#34; data-lang=&#34;llvm&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ret&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a40000&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;       &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;; Return a value from a non-void function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ret&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;void&lt;/span&gt;                 &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;; Return from void function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Инструкция передачи потока выполнения:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;‘br’ - инструкция перехода (условного или безусловного)&lt;/li&gt;&#xA;&lt;li&gt;‘switch’ - Инструкция передачи управления в одно из нескольких различных мест (обобщение инструкции «br»)&lt;/li&gt;&#xA;&lt;li&gt;‘indirectbr’ - инструкция косвенного безусловного перехода&lt;/li&gt;&#xA;&lt;li&gt;‘callbr’ - аналог безусловного перехода&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Инструкции для обработки исключений:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Реализация JIT</title>
				<link>https://trust-lang.net/ru/docs/5_arch/jit/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/jit/</guid>
				<description>&lt;p&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; JIT-компиляция, интерпретатор и REPL (компоненты nlc-jit, nlc-rt, LLVM) в текущей версии НЕ реализованы. Реализация `trust` транспилирует исходный текст в C&amp;#43;&amp;#43; и собирает исполняемый файл через clang&amp;#43;&amp;#43; (см. README.md и _build/trust --help); режима JIT/REPL нет&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Приложение компилятор и REPL одновременнно &lt;strong&gt;nlc&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Библиотека nlc-rt - минимально необходимые компоненты для работы с обощенными типами данных.&lt;/li&gt;&#xA;&lt;li&gt;Рантайм компоненты проекта libtorch - для тензорных вычислений.&lt;/li&gt;&#xA;&lt;li&gt;Библиотека nlc-jit - реализация REPL и JIT и нативного компилятора&lt;/li&gt;&#xA;&lt;li&gt;Рантайм библиотека LLVM как зависимость для nlc-jit.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Варианты сборки приложения и необходимые для его работы библиотеки зависят от следующих факторов:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Реализация областей видимости</title>
				<link>https://trust-lang.net/ru/docs/5_arch/visibility/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/visibility/</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; описанная здесь модель времени выполнения (классы Runtime/Module/Context, Obj, Variable, VariablePair, LatterType, именованные прерывания как исключения) относится к устаревшей интерпретируемой архитектуре и не соответствует текущей реализации-транспилятору в C&amp;#43;&amp;#43;&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Каждый объект имеет владельца.&lt;/p&gt;&#xA;&lt;p&gt;Встроенными и глобальными объектами владеет среда выполнения (Runtime),&#xA;статическиме объекты принадлежат модулю (Module),&#xA;а локальные (автоматические) находятся на стеке выполненения (Context).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Системные свойства</title>
				<link>https://trust-lang.net/ru/docs/5_arch/sysprop/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/sysprop/</guid>
				<description>&lt;h3 id=&#34;системные-свойства&#34;&gt;Системные свойства&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%bd%d1%8b%d0%b5-%d1%81%d0%b2%d0%be%d0%b9%d1%81%d1%82%d0%b2%d0%b0&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; системные свойства объектов `__name__`, `__type__`, `__module__`, `__str__` и т.п. в текущей реализации-транспиляторе не реализованы (нет интерпретируемой объектной модели; данные компилируются в C&amp;#43;&amp;#43;). Нижеследующее описание относится к устаревшей архитектуре&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Несмотря на то, что не все объекты &lt;em&gt;TrustLang&lt;/em&gt; являются классами с точки зрения &lt;a href=&#34;https://trust-lang.net/ru/docs/types/class/&#34;&gt;реализованной концепции ООП&lt;/a&gt;,&#xA;тем не менее, каждый объект имеет системные свойства, которые можно считать во время выполнения как обычные свойства объекта:&lt;/p&gt;&#xA;&lt;h4 id=&#34;у-всех-переменных-объектов-есть-системные-свойства&#34;&gt;У всех переменных (объектов) есть системные свойства&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d1%83-%d0%b2%d1%81%d0%b5%d1%85-%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%bd%d1%8b%d1%85-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d0%b5%d1%81%d1%82%d1%8c-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%bd%d1%8b%d0%b5-%d1%81%d0%b2%d0%be%d0%b9%d1%81%d1%82%d0%b2%d0%b0&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;__name__ - краткое имя переменной (объекта)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Опции и настройки компилятора</title>
				<link>https://trust-lang.net/ru/docs/5_arch/pragmas/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/5_arch/pragmas/</guid>
				<description>&lt;h2 id=&#34;прагмы&#34;&gt;Прагмы&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%bf%d1%80%d0%b0%d0%b3%d0%bc%d1%8b&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;предварительное-объевления-объектов&#34;&gt;Предварительное объевления объектов&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%bf%d1%80%d0%b5%d0%b4%d0%b2%d0%b0%d1%80%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;@__PRAGMA_DECLARE__&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; прагма @__PRAGMA_DECLARE__ в текущей версии не существует (см. список поддерживаемых @__PRAGMA_* в src/syntax/parser.cpp)&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    @__PRAGMA_DECLARE__( func(arg) );&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;импорт-нативной-функции--переменной&#34;&gt;Импорт нативной функции / переменной&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%b8%d0%bc%d0%bf%d0%be%d1%80%d1%82-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d0%be%d0%b9-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8--%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%bd%d0%be%d0%b9&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;@__PRAGMA_NATIVE__&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;pageinfo pageinfo-warning&#34;&gt;&#xA;  &lt;p&gt;&lt;strong&gt;⚠️ НЕ РЕАЛИЗОВАНО:&lt;/strong&gt; прагма @__PRAGMA_NATIVE__ в текущей версии не существует; импорт нативных объектов выполняется через @extern/@forward или `name(...):T := %native...` (см. docs/types/native)&lt;/p&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    // import native int printf(char *format, ...)&#xA;    @__PRAGMA_NATIVE__( printf(format:FmtChar, ...):Int32 );&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;diag&#34;&gt;Управление диагностикой компилятора&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#diag&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;@__PRAGMA_DIAG__ -&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
