<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Safety on TrustLang</title>
		<link>https://trust-lang.net/ru/tags/safety/</link>
		<description>Recent content in Safety on TrustLang</description>
		<generator>Hugo</generator>
		<language>ru</language>
		
		
		
		
			<atom:link href="https://trust-lang.net/ru/tags/safety/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Гарантии и безопасность</title>
				<link>https://trust-lang.net/ru/docs/safety/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/safety/</guid>
				<description>&lt;p&gt;Раздел объединяет возможности &lt;em&gt;TrustLang&lt;/em&gt;, которые отвечают за &lt;strong&gt;безопасность и качество&lt;/strong&gt;&#xA;программ: безопасное управление памятью, защиту от гонок данных, контроль корректности на этапе&#xA;компиляции и формальную верификацию.&lt;/p&gt;&#xA;&lt;p&gt;Каждая возможность описана подробно &lt;strong&gt;ровно в одном месте&lt;/strong&gt; (страница-источник) и лишь&#xA;упоминается здесь с выжимкой и ссылкой. Подробные перечни опций/диагностик не дублируются —&#xA;их источник в справке инструмента (&lt;code&gt;trust --help&lt;/code&gt;, &lt;code&gt;trust -Whelp&lt;/code&gt;, LSP-ховеры).&lt;/p&gt;&#xA;&lt;h2 id=&#34;возможности-раздела&#34;&gt;Возможности раздела&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d1%80%d0%b0%d0%b7%d0%b4%d0%b5%d0%bb%d0%b0&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Возможность&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Кратко&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Подробно (источник)&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Безопасное управление памятью без GC&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;RAII, сильные/слабые ссылки, запрет сильных циклических ссылок, защита стека от переполнения&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://trust-lang.net/ru/docs/safety/memory/&#34;&gt;Память&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Защита от гонок и синхронизация доступа&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Автоматическая межпотоковая синхронизация при обращении к разделяемым данным&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://trust-lang.net/ru/docs/safety/memory/&#34;&gt;Память&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Контрактное программирование&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Пред-/пост-условия и утверждения (&lt;code&gt;trust_pre&lt;/code&gt;/&lt;code&gt;trust_post&lt;/code&gt;/&lt;code&gt;trust_assert&lt;/code&gt;)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;verification/&#34;&gt;Верификация&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Формальная верификация (SMT)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Авто-выполнение Z3 по контрактам, инварианты циклов, кванторы&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;verification/&#34;&gt;Верификация&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Статическая типизация и контроль приведения&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Номинальная проверка типов на этапе компиляции; сужение с контролем диапазона&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;../types/type_system/&#34;&gt;Система типов&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Диапазонные проверки чисел&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Ошибка при выходе за диапазон типа, а не молчаливое переполнение&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://trust-lang.net/ru/docs/types/numbers/&#34;&gt;Числа&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Контроль целочисленного переполнения&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Встроен и &lt;strong&gt;включён по умолчанию&lt;/strong&gt;: переполнение знаковой арифметики (UB в C++) → перехватываемое &lt;code&gt;IntMinus&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://trust-lang.net/ru/docs/types/numbers/#overflow&#34;&gt;Числа&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Защита стека от переполнения (stack check)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Переполнение стека → перехватываемое исключение &lt;code&gt;stack_overflow&lt;/code&gt;, а не segfault&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;https://trust-lang.net/ru/docs/safety/stack_check/&#34;&gt;stack_check&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Контроль инвалидации ссылок (borrowed)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Запрет использования зависимых ссылок после мутации источника (висячие ссылки)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;a href=&#34;invalidation/&#34;&gt;invalidation&lt;/a&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Модель безопасной памяти портирована на C++ в отдельный проект&#xA;&lt;a href=&#34;https://github.com/rsashka/memsafe&#34;&gt;memsafe&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Защита стека от переполнения (stack check)</title>
				<link>https://trust-lang.net/ru/docs/safety/stack_check/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://trust-lang.net/ru/docs/safety/stack_check/</guid>
				<description>&lt;p&gt;В &lt;em&gt;TrustLang&lt;/em&gt; встроена &lt;a href=&#34;https://github.com/afteri-ru/stack-check&#34;&gt;защита стека от переполнения&lt;/a&gt;. Перед вызовом защищаемой функции проверяется свободное место на стеке потока, и если его недостаточно — вместо аварийного завершения всего приложения (&lt;code&gt;segmentation fault&lt;/code&gt;) создаётся &lt;strong&gt;программное исключение &lt;code&gt;stack_overflow&lt;/code&gt;&lt;/strong&gt;, которое можно перехватить и обработать внутри приложения, после чего продолжить выполнение программы.&lt;/p&gt;&#xA;&lt;p&gt;Здесь будет подробное описание реализации и способов использования.&lt;/p&gt;&#xA;&lt;p&gt;А сейчас можно посмотреть примеры использования: &lt;a href=&#34;https://trust-lang.net/ru/playground/?file=fibonacci&#34;&gt;рекурсивное вычисление чисел Фибоначчи&lt;/a&gt; и &lt;a href=&#34;https://trust-lang.net/ru/playground/?file=prime&#34;&gt;рекурсивная проверка чисел на простоту&lt;/a&gt;&lt;/p&gt;&#xA;&lt;!--&#xA;&#xA;## Атрибут `@[stack_check@]`&#xA;&#xA;Защищаемые функции помечаются атрибутом `@[stack_check@]`:&#xA;&#xA;- `@[stack_check@]` — перед каждым вызовом функции проверяется максимальный размер её стека из&#xA;  секции `.stack_sizes` (`check_stack_limit`, требуется сборка с `-fstack-size-section`);&#xA;- `@[stack_check(N)@]` — проверяется, что свободно не меньше `N` байт плюс резерв&#xA;  (`check_overflow(N)`).&#xA;&#xA;Пример рекурсии, защищённой атрибутом (переполнение ловится, а не роняет программу):&#xA;&#xA;```trust&#xA;@[ stack_check @]&#xA;%fib(n:BigInteger):Tuple(sum:BigInteger, fib:BigInteger) := {&#xA;    if (n &lt; 3) {&#xA;        $one:BigInteger := 1;&#xA;        return :Tuple($one, $one);&#xA;    };&#xA;    p := fib(n - 1);&#xA;    return (p.0 + p.1, p.sum,):Tuple;&#xA;};&#xA;&#xA;@main(argv^:Dict, args^:Dict) := {&#xA;    try_error {&#xA;        fib(1000000);&#xA;    } catch(_) {&#xA;        @print(&#39;STACK OVERFLOW caught\\n&#39;);&#xA;    };&#xA;    return 0;&#xA;};&#xA;```&#xA;&#xA;## Режимы контроля (`--stack-check=&lt;mode&gt;`)&#xA;&#xA;Монотонная шкала режимов (`trust --help`):&#xA;&#xA;- `off` — контроль выключен (атрибуты — no-op, рекурсия не анализируется);&#xA;- `explicit` (по умолчанию) — проверки только явно размеченных функций и явных вызовов;&#xA;- `recursion` — как `explicit` плюс диагностика незащищённых рекурсивных функций&#xA;  (`-Wstack-check-infer`);&#xA;- `auto` — как `recursion` плюс авто-маркировка рекурсивных функций.&#xA;&#xA;Защитный резерв задаётся `--stack-check-reserve=&lt;байты&gt;` (по умолчанию — рантайм-дефолт `8192`).&#xA;Работающие примеры — [песочница fibonacci](/ru/playground/?file=fibonacci); готовые тесты контроля&#xA;стека — `test/lit/.../e2e/stack/*`.&#xA;&#xA;## Рантайм-функции контроля&#xA;&#xA;Для явного управления доступны нативные функции `%trust_stack_check(N)`,&#xA;`%trust_stack_check_set_reserve(...)`, `%trust_stack_check_get_reserve()`,&#xA;`%trust_stack_check_get_limit()` и `%trust_stack_check_set_limit(...)`. Полные сигнатуры — в&#xA;справке `trust --help` / `-Whelp`.&#xA;--&gt;</description>
			</item>
	</channel>
</rss>
