<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko-KR" xml:base="https://safec-org.github.io/">
<title>SafeC 블로그</title>
<subtitle>SafeC 프로젝트 소식 — 공지, 릴리스 노트, 그리고 언어와 표준 라이브러리가 나아가는 방향.</subtitle>
<link rel="self" href="https://safec-org.github.io/safec-docs/ko/blog/feed.xml"/>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/</id>
<updated>2026-10-27T00:00:00Z</updated>
<entry>
<title>SafeC 1.0.0-beta-7 릴리스</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-7.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-7.html</id>
<published>2026-10-27T00:00:00Z</published>
<updated>2026-10-27T00:00:00Z</updated>
<author><name>SafeC 릴리스 노트</name></author>
<category term="release"/>
<summary>SafeC 1.0.0-beta-7은 HTTPS를 포함한 웹 스택, Rust 스타일 비동기, GUI 툴킷, 실시간 오디오와 MIDI, safeguard doc과 publish, 온라인 플레이그라운드를 움직이는 셀프 호스팅 컴파일러를 담았습니다. 호환성을 깨는 변경은 두 가지입니다: void*와 포인터 + 길이 쌍 대신 슬라이스를 쓰는 std API, 그리고 컴파일러가 강제하는 Drop과 Send/Sync.</summary>
<content type="html">&lt;p&gt;SafeC &lt;strong&gt;1.0.0-beta-7&lt;/strong&gt;이 2026-10-27에 릴리스되었습니다. 프리릴리스이며, 언어와 표준 라이브러리는 아직 빠르게 바뀌고 있습니다.&lt;/p&gt;
&lt;p&gt;지금까지 가장 큰 릴리스입니다. &lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-6.html&quot;&gt;1.0.0-beta-6&lt;/a&gt; 이후 병합된 풀 리퀘스트 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/51&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#51&lt;/a&gt;부터 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/88&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#88&lt;/a&gt;까지가 모두 들어 있습니다. 변경이 병합되는 동안 기록해 온 &lt;a href=&quot;/safec-docs/ko/blog/whats-coming-next.html&quot;&gt;다음 릴리스 미리 보기&lt;/a&gt;에 영역별 설명이 더 자세히 있고, &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;은 개별 시그니처 수준까지 모든 변경을 나열합니다.&lt;/p&gt;
&lt;p&gt;이 릴리스를 그대로 설치하려면:&lt;/p&gt;
&lt;div class=&quot;language-bash code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;bash&lt;/span&gt;&lt;pre&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/safec-org/SafeC/main/install.sh | bash -s -- --version=v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;language-powershell code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;powershell&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&amp;amp; ([scriptblock]::&lt;span class=&quot;tok-fn&quot;&gt;Create&lt;/span&gt;((irm https://raw.githubusercontent.com/safec-org/SafeC/main/install.ps1))) -Version v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;주요 변경 사항 &lt;a class=&quot;header-anchor&quot; href=&quot;#highlights&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;웹 스택&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/57&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#57&lt;/a&gt;): &lt;a href=&quot;/safec-docs/ko/stdlib/http.html&quot;&gt;&lt;code&gt;std/http&lt;/code&gt;&lt;/a&gt;는 라우터와 미들웨어, 정적 파일, 쿠키, multipart 폼, server-sent events, WebSocket을 갖춘 keep-alive 서버이며, 리디렉션을 따라가고 gzip을 푸는 URL 클라이언트도 있습니다. &lt;code&gt;std/encoding/url&lt;/code&gt;과 &lt;code&gt;std/encoding/deflate&lt;/code&gt;가 함께 추가되었고, &lt;a href=&quot;/safec-docs/ko/stdlib/wasm.html&quot;&gt;&lt;code&gt;std/wasm&lt;/code&gt;&lt;/a&gt;은 DOM과 브라우저 API를 모두 다룹니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPS&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/66&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#66&lt;/a&gt;): &lt;a href=&quot;/safec-docs/ko/stdlib/tls.html&quot;&gt;&lt;code&gt;std/tls&lt;/code&gt;&lt;/a&gt;는 운영체제의 TLS(OpenSSL, SChannel, Secure Transport)를 쓰고, 없으면 SafeC로 작성한 TLS 1.3으로 대체합니다. &lt;code&gt;std/http&lt;/code&gt;는 &lt;code&gt;https://&lt;/code&gt;와 &lt;code&gt;wss://&lt;/code&gt;를 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비동기&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/61&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#61&lt;/a&gt;): &lt;a href=&quot;/safec-docs/ko/stdlib/async.html&quot;&gt;&lt;code&gt;std/async&lt;/code&gt;&lt;/a&gt;는 Rust의 &lt;code&gt;Future&lt;/code&gt; / &lt;code&gt;Poll&lt;/code&gt; / &lt;code&gt;Waker&lt;/code&gt; 모델을 &lt;code&gt;goto&lt;/code&gt; 상태 머신으로 옮겼습니다. 타이머, 조합기, 채널, 힙을 쓰지 않는 &lt;code&gt;LocalExecutor&lt;/code&gt;, 멀티스레드 &lt;code&gt;ThreadPool&lt;/code&gt;, 비동기 TCP를 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GUI 툴킷&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#65&lt;/a&gt;): &lt;a href=&quot;/safec-docs/ko/stdlib/gui.html&quot;&gt;&lt;code&gt;std/gui&lt;/code&gt;&lt;/a&gt;는 TrueType 텍스트를 그리는 안티에일리어싱 벡터 캔버스, 위젯 툴킷, 여러 창을 다루는 &lt;code&gt;GuiApp&lt;/code&gt;을 X11, Wayland, Win32, Cocoa, 웹에서 제공하며, GL ES, Metal, D3D11 프레젠터가 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;오디오와 MIDI&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/59&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#59&lt;/a&gt;): &lt;a href=&quot;/safec-docs/ko/stdlib/audio.html&quot;&gt;&lt;code&gt;std/audio&lt;/code&gt;&lt;/a&gt;는 ALSA, JACK, Core Audio, WASAPI, Web Audio 위의 하나의 콜백 API이며, 모든 플랫폼에서 MIDI를 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;safeguard doc&lt;/code&gt;과 &lt;code&gt;safeguard publish&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/69&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#69&lt;/a&gt;): 어떤 패키지든 rustdoc 스타일의 &lt;a href=&quot;/safec-docs/ko/advanced/safeguard.html#safeguard-doc&quot;&gt;API 레퍼런스&lt;/a&gt;를 만들고(std의 레퍼런스는 &lt;a href=&quot;/safec-docs/api/&quot;&gt;/api/&lt;/a&gt;), CI, 릴리스 아카이브, Pages 문서와 함께 &lt;a href=&quot;/safec-docs/ko/advanced/safeguard.html#safeguard-publish&quot;&gt;라이브러리를 배포&lt;/a&gt;할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;scc&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/70&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#70&lt;/a&gt;): SafeC로 작성한 SafeC 컴파일러로, WebAssembly를 출력하고 자기 자신을 바이트 단위로 똑같이 재현합니다. 브라우저에서 &lt;a href=&quot;/safec-docs/ko/playground.html&quot;&gt;플레이그라운드&lt;/a&gt;를 실행하는 것이 scc입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;safeguard 패키지&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/51&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#51&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/55&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#55&lt;/a&gt;): C, C++, Objective-C 패키지와 의존성, 라이브러리 헤더, Windows DLL, 앱 번들을 지원합니다. 빌드는 프로젝트가 쓰는 std 모듈만 해당 시스템 라이브러리와 함께 링크합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulkan과 WebGPU에서의 ML&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/54&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#54&lt;/a&gt;): CUDA, ROCm, Metal에 더해 SPIR-V(Vulkan)와 WebGPU용 &lt;code&gt;std/ml&lt;/code&gt; 텐서 디바이스가 추가되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;섹션 단위로 미리 빌드된 std&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;): 릴리스에 플랫폼별로 컴파일된 std가 섹션마다 하나의 아카이브로 들어 있고, &lt;code&gt;install.sh --std=...&lt;/code&gt; / &lt;code&gt;install.ps1 -Std ...&lt;/code&gt;로 고릅니다. 릴리스 바이너리는 macOS 11, glibc 2.25 이상에서 실행됩니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;버전 확인&lt;/strong&gt;: &lt;code&gt;safec --version&lt;/code&gt;과 새로 추가된 &lt;code&gt;safeguard --version&lt;/code&gt;이 모두 &lt;code&gt;1.0.0-beta-7&lt;/code&gt;을 출력합니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/85&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#85&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;수정 사항&lt;/strong&gt;: 가변 인자 호출에서 &lt;code&gt;bool&lt;/code&gt; / &lt;code&gt;char&lt;/code&gt; / &lt;code&gt;short&lt;/code&gt;를 &lt;code&gt;int&lt;/code&gt;로 승격하고, &lt;code&gt;const &amp;amp;T&lt;/code&gt; 필드 쓰기, &lt;code&gt;-&amp;gt;&lt;/code&gt; 탈출, 컨테이너 원소 참조에 관한 안전성 검사의 빈틈을 막았습니다. 모든 컨테이너가 원소를 drop하고, &lt;code&gt;Typedef** x&lt;/code&gt; 지역 변수 선언을 파싱하며, 수명 분석이 &lt;code&gt;const &amp;amp;R T&lt;/code&gt;를 const 참조로 다루고 식의 임시 값을 전체 식 끝에서 끝냅니다. Windows와 macOS CI가 통과합니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/52&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#52&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/53&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#53&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#64&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/68&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#68&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/71&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#71&lt;/a&gt;–&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/75&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#75&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/78&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#78&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/79&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#79&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/82&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#82&lt;/a&gt;–&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/84&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#84&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컴파일러와 safeguard 수정&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/86&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#86&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/87&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#87&lt;/a&gt;): &lt;code&gt;__VA_ARGS__&lt;/code&gt;가 모든 인자로 펼쳐지고, &lt;code&gt;#line&lt;/code&gt;이 동작하며, &lt;code&gt;&amp;quot;release&amp;quot;&lt;/code&gt; / &lt;code&gt;&amp;quot;acq_rel&amp;quot;&lt;/code&gt;을 준 &lt;code&gt;atomic_cas&lt;/code&gt;가 유효합니다. libc 헤더를 두 번 인클루드해도 문제가 없고, safeguard가 Linux에서 libm을 링크하며, &lt;code&gt;BST&amp;lt;..., struct&amp;gt;&lt;/code&gt;에 많이 삽입하는 파일이 수십 초가 아니라 1초 안에 컴파일됩니다. 증분 캐시에서 가져온 파일도 경고를 다시 출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;breaking&quot; tabindex=&quot;-1&quot;&gt;호환성을 깨는 변경 &lt;a class=&quot;header-anchor&quot; href=&quot;#breaking&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;아래의 모든 변경은 컴파일러가 영향을 받는 줄마다 보고합니다 — 잘못된 인자 개수나 타입, 선언 위치를 가리키는 소유권 오류, 또는 찾을 수 없는 헤더. &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;에 적힌 경우를 빼면 동작이 조용히 바뀌는 일은 없습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;std API는 &lt;code&gt;void*&lt;/code&gt;나 포인터 + 길이 쌍 대신 슬라이스를 받습니다&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/76&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#76&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/80&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#80&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/81&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#81&lt;/a&gt;). 버퍼는 &lt;code&gt;[]T&lt;/code&gt; / &lt;code&gt;[]const T&lt;/code&gt;이고, 콜백 컨텍스트는 &lt;code&gt;?&amp;amp;Erased&lt;/code&gt;에 저장되는 타입 있는 &lt;code&gt;?&amp;amp;T&lt;/code&gt;이며, std 어디에도 &lt;code&gt;void*&lt;/code&gt;가 남아 있지 않습니다. 할당자는 &lt;code&gt;?&amp;amp;heap unsigned char&lt;/code&gt;를 돌려주고, 오디오와 MIDI 콜백 컨텍스트는 &lt;code&gt;Send + Sync&lt;/code&gt;여야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컴파일러가 강제하는 &lt;code&gt;Drop&lt;/code&gt;, &lt;code&gt;Send&lt;/code&gt;, &lt;code&gt;Sync&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/77&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#77&lt;/a&gt;). &lt;code&gt;Drop&lt;/code&gt; 타입의 값은 모든 경로에서 정확히 한 번 drop되거나 이동되어야 합니다. &lt;code&gt;spawn&lt;/code&gt;, 채널, 스레드 풀은 공유하거나 이동해도 안전한 데이터만 받습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컨테이너가 원소를 소유합니다&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/83&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#83&lt;/a&gt;). &lt;code&gt;clear()&lt;/code&gt;, &lt;code&gt;drop()&lt;/code&gt;, 키 덮어쓰기가 값을 drop하므로, 그 전에 값을 직접 해제하지 마세요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;std 헤더는 &lt;code&gt;&amp;lt;std/...&amp;gt;&lt;/code&gt;로만 인클루드합니다&lt;/strong&gt; (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/83&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#83&lt;/a&gt;). safeguard가 더 이상 &lt;code&gt;std/&lt;/code&gt; 자체를 인클루드 경로에 넣지 않으므로, 맨 이름의 &lt;code&gt;&amp;lt;math.h&amp;gt;&lt;/code&gt;는 C 라이브러리의 헤더이고 &lt;code&gt;#include &amp;lt;io.h&amp;gt;&lt;/code&gt;는 &lt;code&gt;#include &amp;lt;std/io.h&amp;gt;&lt;/code&gt;로 바꿔야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;migrating&quot; tabindex=&quot;-1&quot;&gt;마이그레이션 &lt;a class=&quot;header-anchor&quot; href=&quot;#migrating&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;버퍼:&lt;/strong&gt; 슬라이스를 넘깁니다 — &lt;code&gt;f.read(buf[..])&lt;/code&gt;, &lt;code&gt;w.write(buf[0..n])&lt;/code&gt;, &lt;code&gt;sha256(bytes, digest[..])&lt;/code&gt;, &lt;code&gt;str_copy(dst[..], src)&lt;/code&gt;. &lt;code&gt;safe_memcpy&lt;/code&gt;는 이제 원소 개수를 셉니다. &lt;a href=&quot;/safec-docs/ko/reference/types.html#slice-types&quot;&gt;타입: 슬라이스&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/types.html#read-only-slices&quot;&gt;읽기 전용 슬라이스&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/types.html#optional-slices&quot;&gt;옵셔널 슬라이스&lt;/a&gt;를 참고하세요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;소유권:&lt;/strong&gt; &lt;code&gt;Drop&lt;/code&gt; 타입의 값을 만든 직후 &lt;code&gt;defer v.drop();&lt;/code&gt;을 추가하거나(또는 모든 경로에서 해제하고), 데이터는 &lt;code&gt;thread_spawn&lt;/code&gt;으로 스레드에 이동하거나 &lt;code&gt;Mutex&amp;lt;T&amp;gt;&lt;/code&gt;로 공유합니다. &lt;a href=&quot;/safec-docs/ko/reference/ownership.html&quot;&gt;소유권과 Drop&lt;/a&gt;과 &lt;a href=&quot;/safec-docs/ko/reference/threads.html&quot;&gt;스레드 안전성&lt;/a&gt;을 참고하세요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컨테이너:&lt;/strong&gt; 컨테이너만 drop합니다 — &lt;code&gt;m.drop()&lt;/code&gt; 앞의 &lt;code&gt;m.foreach(free_value)&lt;/code&gt; 같은 코드를 지웁니다. &lt;a href=&quot;/safec-docs/ko/stdlib/collections.html#ownership&quot;&gt;컬렉션: 컨테이너가 원소를 소유합니다&lt;/a&gt;를 참고하세요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인클루드:&lt;/strong&gt; &lt;code&gt;#include &amp;lt;io.h&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;quot;prelude.h&amp;quot;&lt;/code&gt;를 &lt;code&gt;#include &amp;lt;std/io.h&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;std/prelude.h&amp;gt;&lt;/code&gt;로 바꿉니다. &lt;a href=&quot;/safec-docs/ko/advanced/safeguard.html#standard-library-linking&quot;&gt;표준 라이브러리 모듈&lt;/a&gt;의 &lt;em&gt;std 인클루드&lt;/em&gt;를 참고하세요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사용자 정의 할당자와 해셔:&lt;/strong&gt; &lt;code&gt;alloc&lt;/code&gt; / &lt;code&gt;dealloc&lt;/code&gt;을 &lt;code&gt;?&amp;amp;heap unsigned char&lt;/code&gt;로, 사용자 &lt;code&gt;Hasher&lt;/code&gt;를 슬라이스 시그니처로 바꿉니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;전후 비교 표 전체와 실행할 수 있는 예제 두 개는 &lt;a href=&quot;/safec-docs/ko/blog/whats-coming-next.html#migration&quot;&gt;다음 릴리스 미리 보기: 마이그레이션&lt;/a&gt;에 있고, 변경 내역의 &lt;em&gt;Breaking changes&lt;/em&gt; 절은 바뀐 시그니처를 모듈별로 모두 나열합니다.&lt;/p&gt;
&lt;h2 id=&quot;upgrading&quot; tabindex=&quot;-1&quot;&gt;업그레이드 &lt;a class=&quot;header-anchor&quot; href=&quot;#upgrading&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;설치 스크립트를 다시 실행하면 기존 설치를 그 자리에서 업그레이드합니다(프리릴리스를 포함한 최신 릴리스를 설치하며, 이 릴리스로 고정하려면 버전을 넘깁니다):&lt;/p&gt;
&lt;div class=&quot;language-bash code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;bash&lt;/span&gt;&lt;pre&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/safec-org/SafeC/main/install.sh | bash -s -- --version=v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;language-powershell code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;powershell&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&amp;amp; ([scriptblock]::&lt;span class=&quot;tok-fn&quot;&gt;Create&lt;/span&gt;((irm https://raw.githubusercontent.com/safec-org/SafeC/main/install.ps1))) -Version v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;쓰던 std 섹션은 &lt;code&gt;--std=...&lt;/code&gt; / &lt;code&gt;-Std ...&lt;/code&gt;로 유지하고, 나중에 &lt;code&gt;--std=+&amp;lt;섹션&amp;gt;&lt;/code&gt;으로 추가할 수 있습니다. 모든 옵션은 &lt;a href=&quot;/safec-docs/ko/install.html#options&quot;&gt;설치&lt;/a&gt;에 있습니다. 그다음 설치된 버전을 확인합니다:&lt;/p&gt;
&lt;div class=&quot;language-bash code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;bash&lt;/span&gt;&lt;pre&gt;&lt;code&gt;safec --version       &lt;span class=&quot;tok-com&quot;&gt;# safec 1.0.0-beta-7&lt;/span&gt;
safeguard --version   &lt;span class=&quot;tok-com&quot;&gt;# safeguard 1.0.0-beta-7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;예전 std로 컴파일된 것이 링크되지 않도록 프로젝트를 처음부터 다시 빌드하세요(&lt;code&gt;safeguard clean &amp;amp;&amp;amp; safeguard build&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;알려진 문제 &lt;a class=&quot;header-anchor&quot; href=&quot;#known-issues&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;1.0.0-beta-7에 알려진 문제입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPU 백엔드는 컴파일만 검증되었습니다.&lt;/strong&gt; &lt;code&gt;std/ml&lt;/code&gt;의 CUDA, ROCm, Metal, Vulkan, WebGPU 경로와 &lt;code&gt;std/gui&lt;/code&gt;의 GPU 프레젠터는 모든 플랫폼의 CI에서 컴파일되지만, 이번 릴리스는 GPU 하드웨어에서 실행해 보지 않았습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;다른 문제를 만나면 &lt;a href=&quot;https://github.com/safec-org/SafeC/issues&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;이슈를 열어&lt;/a&gt; 주세요.&lt;/p&gt;
&lt;h2 id=&quot;pull-requests&quot; tabindex=&quot;-1&quot;&gt;풀 리퀘스트 &lt;a class=&quot;header-anchor&quot; href=&quot;#pull-requests&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;풀 리퀘스트 제목은 영어 원문입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;safeguard: library headers, Windows DLLs, C/C++/Objective-C packages and dependencies, app bundles (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/51&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#51&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compiler: &lt;code&gt;const &amp;amp;R T&lt;/code&gt; is a reference to const; dataflow analysis for heap/arena lifetimes (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/52&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#52&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compiler: expression temporaries die at the end of their full expression (lifetime analysis false positive) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/53&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#53&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ml: Vulkan (SPIR-V) and WebGPU tensor devices (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/54&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#54&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;safeguard: link only the std modules a project uses, with their system libraries; OS-seeded rng; prebuilt std in releases; README (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/55&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#55&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std prebuilt in sections; std always optimized; releases for macOS 11 and glibc 2.25; llvm-nm on Linux CI (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std web: URL/query/forms, deflate+gzip, keep-alive server, router, static files, cookies, multipart, SSE, WS client, browser DOM APIs (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/57&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#57&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: dir/path, CommonMark+GFM markdown, YAML flow, wasm runtime allocator; scx fixes; lexer escape fix (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/58&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#58&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/audio: real-time audio + MIDI I/O (ALSA, JACK, Core Audio/MIDI, WASAPI/WinMM, WebAudio/Web MIDI, dummy) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/59&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#59&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/async: Rust-style futures/executors over goto state machines; goto scope checks in the compiler (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/61&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#61&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;README: restore the Async/Await row lost in #57&#39;s merge (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/62&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#62&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/gui: AA vector canvas + TrueType text, multi-window GuiApp, full widget toolkit (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix main&#39;s Windows CI: generic COMDATs after ABI lowering; full-size WSADATA (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#64&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/gui: Wayland, web (&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;/WebGL/DOM) backends and GPU presenters (GL ES, Metal, D3D11) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#65&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTTPS/TLS: std/tls with OS backends (OpenSSL, SChannel, SecureTransport) and a SafeC TLS 1.3 fallback; https/wss in std/http (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/66&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#66&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;README: restore the GUI platforms sentence lost in #66&#39;s merge (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/67&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#67&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix main&#39;s macOS/Windows CI: std_modules check counts linkonce generic instances as linker-merged (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/68&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#68&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;safeguard doc (rustdoc-like, built with SafeC&#39;s web std) and safeguard publish (git + CI for GitHub/GitLab/Gitea/Forgejo) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/69&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#69&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;selfhost: scc, a SafeC compiler in SafeC emitting WebAssembly — bootstraps, powers the web playground (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/70&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#70&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compiler: promote bool/char/short to int in variadic calls (&lt;code&gt;printf(&amp;quot;%d&amp;quot;, !x)&lt;/code&gt; printed 254) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/71&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#71&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Close safety gaps: const-ref field writes, &lt;code&gt;-&amp;gt;&lt;/code&gt;/call-root escapes, container element references (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/72&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#72&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix method calls through by-reference call results; MemoryFlow false positive with StrMap in recursion (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/73&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#73&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compiler: check atomic_cas arguments against the pointee type (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/74&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#74&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix main CI on every platform (package.sh, glibc 2.43 headers, macOS/Windows doc and test fixes) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/75&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#75&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: no void* and no pointer + length pairs in the public API (slices and typed erasure) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/76&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#76&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Compiler-enforced Drop and thread safety (Send/Sync, spawn rules, Mutex guards) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/77&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#77&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compiler/examples/stdlib_complete.sc: port to the slice API (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/78&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#78&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix main&#39;s macOS/Windows CI: ABI-lowered functions keep their place; mutex test pinned to Linux (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/79&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#79&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/audio without void*: typed backends, slices, typed FFI; Send+Sync audio/MIDI callback contexts (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/80&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#80&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: no void* anywhere — typed memory layer, ML autograd/GPU, GUI, TLS, OS bindings; api_lint enforces it (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/81&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#81&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Parser: &lt;code&gt;Typedef** x&lt;/code&gt; local declarations; nested prefix operators (&lt;code&gt;**pp&lt;/code&gt;, &lt;code&gt;- -x&lt;/code&gt;) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/82&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#82&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix bugs found by the docs audit: containers drop their elements, Reactor::drop, WsConn::closed, &lt;code&gt;&amp;lt;math.h&amp;gt;&lt;/code&gt; in safeguard, playground time functions (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/83&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#83&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;selfhost: fail loudly when a string literal overflows g_tmp (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/84&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#84&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Release 1.0.0-beta-7 (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/85&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#85&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix 13 compiler and safeguard bugs: BST compile time, libc headers included twice, libm, &lt;code&gt;__VA_ARGS__&lt;/code&gt;, &lt;code&gt;#line&lt;/code&gt;, atomic_cas orderings, must_use on prototypes (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/86&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#86&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;safec: keep warnings on incremental-cache hits (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/87&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#87&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Release: smoke test accepts a versioned clang; #86 and #87 in the beta-7 changelog (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/88&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#88&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/releases/tag/v1.0.0-beta-7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;GitHub 릴리스 페이지&lt;/a&gt; · &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;&lt;/p&gt;
</content>
</entry>
<entry>
<title>SafeC의 새 보금자리</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/new-website.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/new-website.html</id>
<published>2026-10-26T00:00:00Z</published>
<updated>2026-10-26T00:00:00Z</updated>
<author><name>SafeC 팀</name></author>
<category term="announcement"/>
<category term="website"/>
<summary>safec-org.github.io/safec-docs가 제대로 된 언어 웹사이트가 되었습니다 — 랜딩 페이지, 배우기 허브, 설치 안내, 플레이그라운드, 이 블로그 — 그리고 전부 SafeC 프로그램으로 빌드됩니다.</summary>
<content type="html">&lt;p&gt;SafeC 문서는 VitePress 사이트로 시작했습니다: 레퍼런스 페이지가 늘어선 사이드바, 그게 거의 전부였습니다. 이제 언어에 필요한 웹사이트로 자랐습니다. 새로 생긴 것과, 그대로 남은 것을 소개합니다.&lt;/p&gt;
&lt;h2 id=&quot;whats-new&quot; tabindex=&quot;-1&quot;&gt;새로운 것 &lt;a class=&quot;header-anchor&quot; href=&quot;#whats-new&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;랜딩 페이지&lt;/strong&gt;: SafeC가 무엇인지 한 화면에 보여 줍니다. 실행 가능한 예제, SafeC가 컴파일 타임에 거부하는 버그와 그것을 그냥 컴파일하는 C 코드의 나란한 비교, 표준 라이브러리 둘러보기.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/safec-docs/ko/learn/&quot;&gt;배우기&lt;/a&gt;&lt;/strong&gt;: SafeC 북, 가이드, 언어 레퍼런스, 표준 라이브러리, 예제, 벤치마크를 한 허브에.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/safec-docs/ko/install.html&quot;&gt;설치&lt;/a&gt;&lt;/strong&gt;: 복사 버튼이 달린 플랫폼별 안내, 요구 사항(clang 21 이상), 모든 설치 옵션.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/safec-docs/ko/tools.html&quot;&gt;도구&lt;/a&gt;&lt;/strong&gt;: &lt;code&gt;safeguard&lt;/code&gt;, VS Code·Neovim·Emacs 설정을 포함한 &lt;code&gt;sc-lsp&lt;/code&gt;, 그리고 &lt;code&gt;safec&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/safec-docs/ko/community.html&quot;&gt;커뮤니티&lt;/a&gt;&lt;/strong&gt;: 개발이 이뤄지는 곳, 버그 보고와 기여 방법.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/safec-docs/ko/playground.html&quot;&gt;플레이그라운드&lt;/a&gt;&lt;/strong&gt;: 하이라이팅과 줄 번호가 있는 브라우저 편집기, 북의 실행 가능한 예제 불러오기, 링크로 프로그램 공유. 이제 사이트의 SafeC 프로그램 중 플레이그라운드가 빌드할 수 있는 모든 프로그램에 &lt;em&gt;플레이그라운드에서 실행&lt;/em&gt; 링크가 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이 블로그&lt;/strong&gt;: 태그, &lt;a href=&quot;/safec-docs/ko/blog/feed.xml&quot;&gt;Atom 피드&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/blog/rss.xml&quot;&gt;RSS 피드&lt;/a&gt;. 릴리스 노트는 빌드할 때 SafeC의 릴리스 기록과 &lt;code&gt;CHANGELOG.md&lt;/code&gt;에서 생성되고, &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;은 병합되었지만 아직 릴리스되지 않은 것까지 보여 줍니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;새 디자인&lt;/strong&gt;: 라이트·다크 테마, 휴대폰에서도 동작하는 레이아웃, 키보드 탐색, 문서와 블로그를 함께 찾는 검색.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;unchanged&quot; tabindex=&quot;-1&quot;&gt;바뀌지 않은 것 &lt;a class=&quot;header-anchor&quot; href=&quot;#unchanged&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;기존 URL은 모두 그대로 동작합니다 — &lt;code&gt;/guide/introduction&lt;/code&gt;, &lt;code&gt;/reference/types&lt;/code&gt;, &lt;code&gt;/stdlib/http&lt;/code&gt;를 비롯한 모든 페이지가 영어와 한국어 모두 원래 자리에 있습니다. &lt;code&gt;/docs/&lt;/code&gt;, &lt;code&gt;/download&lt;/code&gt; 같은 새 짧은 URL은 정적 리다이렉트 페이지입니다. GitHub Pages에는 서버 리다이렉트가 없기 때문입니다.&lt;/p&gt;
&lt;h2 id=&quot;built-with-safec&quot; tabindex=&quot;-1&quot;&gt;SafeC로 빌드 &lt;a class=&quot;header-anchor&quot; href=&quot;#built-with-safec&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;사이트는 문서 저장소의 &lt;a href=&quot;https://github.com/safec-org/safec-docs/tree/main/site&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;site/&lt;/code&gt;&lt;/a&gt;에 있는 SafeC 프로그램이 표준 라이브러리만으로 생성합니다: &lt;code&gt;std/serial/markdown&lt;/code&gt;이 GitHub 확장을 포함한 CommonMark를 파싱하고, &lt;code&gt;std/serial/yaml&lt;/code&gt;이 설정과 프런트매터를 읽고, scx 템플릿(SafeC의 JSX 스타일 마크업)이 페이지를 배치하며, 개발 서버는 &lt;code&gt;std/http&lt;/code&gt;입니다. 테마 전환, 검색, 탭, 복사 버튼, 플레이그라운드 편집기 같은 동적인 부분은 &lt;code&gt;std/wasm&lt;/code&gt;의 DOM 바인딩 위에서 WebAssembly로 컴파일한 SafeC 모듈이고, 이를 불러오는 데 JavaScript 몇 줄이 쓰입니다. JavaScript 프레임워크는 없고, 모든 페이지는 스크립트 없이도 동작합니다.&lt;/p&gt;
&lt;h2 id=&quot;next&quot; tabindex=&quot;-1&quot;&gt;다음 계획 &lt;a class=&quot;header-anchor&quot; href=&quot;#next&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;플레이그라운드의 &lt;em&gt;실행&lt;/em&gt; 버튼은 WebAssembly로 빌드한 셀프 호스팅 SafeC 컴파일러를 기다리고 있었습니다. &lt;em&gt;업데이트:&lt;/em&gt; 이제 들어왔습니다 — &lt;em&gt;실행&lt;/em&gt;이 scc로 브라우저 안에서 프로그램을 컴파일하고 실행합니다(&lt;a href=&quot;/safec-docs/ko/blog/whats-coming-next.html#scc&quot;&gt;다음에 나올 것&lt;/a&gt;). 버전별 문서도 계획 중입니다: 문서 사이드바의 버전 선택기에는 이미 릴리스 목록이 있습니다.&lt;/p&gt;
&lt;p&gt;끊어진 링크나 더 명확해질 수 있는 페이지를 찾았다면 &lt;a href=&quot;https://github.com/safec-org/safec-docs/issues&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;이슈를 열거나&lt;/a&gt; 풀 리퀘스트를 보내 주세요 — 방법은 &lt;a href=&quot;/safec-docs/ko/community.html#docs&quot;&gt;커뮤니티&lt;/a&gt; 페이지에 있습니다.&lt;/p&gt;
</content>
</entry>
<entry>
<title>다음 릴리스 미리 보기: 1.0.0-beta-6 이후 병합된 모든 것</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/whats-coming-next.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/whats-coming-next.html</id>
<published>2026-10-26T00:00:00Z</published>
<updated>2026-10-26T00:00:00Z</updated>
<author><name>SafeC 팀</name></author>
<category term="release"/>
<category term="std"/>
<category term="compiler"/>
<category term="safety"/>
<category term="breaking"/>
<category term="tools"/>
<summary>1.0.0-beta-7로 릴리스되었습니다. 1.0.0-beta-6 이후 SafeC main 브랜치에 병합된 모든 변경의 기록입니다. 웹 스택, 비동기, GUI 툴킷, 오디오와 MIDI, HTTPS, safeguard doc과 publish, 온라인 플레이그라운드를 움직이는 셀프 호스팅 컴파일러, 그리고 두 가지 호환성을 깨는 변경 — void*와 포인터 + 길이 쌍이 없는 std API, 컴파일러가 강제하는 Drop과 Send/Sync — 을 다루며, 마이그레이션 가이드를 포함합니다.</summary>
<content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1.0.0-beta-7로 릴리스되었습니다.&lt;/strong&gt; 아래 내용은 모두 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/82&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#82&lt;/a&gt;–&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/88&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#88&lt;/a&gt;와 함께 2026-10-27에 &lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-7.html&quot;&gt;SafeC 1.0.0-beta-7&lt;/a&gt;로 릴리스되었습니다. 설치와 업그레이드 방법, 짧은 마이그레이션 목록, 알려진 문제는 릴리스 노트에 있으며, 이 글은 이번 주기의 기록으로 남겨 둡니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;SafeC의 &lt;code&gt;main&lt;/code&gt; 브랜치는 &lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-6.html&quot;&gt;1.0.0-beta-6&lt;/a&gt; 이후 많이 나아갔습니다. 이 글은 다음 릴리스에 들어갈 내용을 기록해 온 글입니다. 그 뒤로 병합된 풀 리퀘스트 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;부터 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/81&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#81&lt;/a&gt;까지를 영역별로 묶었습니다. 그중 두 가지는 &lt;strong&gt;호환성을 깨는 변경&lt;/strong&gt;이며, 컴파일러가 영향을 받는 호출 지점마다 오류를 보고합니다. 코드를 고치는 방법은 끝의 &lt;a href=&quot;#migration&quot;&gt;마이그레이션 가이드&lt;/a&gt;에 있습니다.&lt;/p&gt;
&lt;p&gt;이 사이트가 &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;으로 보여 주는 SafeC의 &lt;a href=&quot;https://github.com/safec-org/SafeC/blob/main/CHANGELOG.md&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;는 후반부의 변경 — &lt;code&gt;safeguard doc&lt;/code&gt;과 &lt;code&gt;publish&lt;/code&gt;, scc, 슬라이스 API, 소유권 검사 — 을 &lt;em&gt;1.0.0-beta-7&lt;/em&gt; 아래에(이 글을 쓰는 동안에는 &lt;em&gt;Unreleased&lt;/em&gt; 아래에) 개별 시그니처 수준까지 기록합니다. 이번 주기의 앞부분 — 웹 스택, 비동기, GUI 툴킷, 오디오, HTTPS — 은 &lt;a href=&quot;/safec-docs/ko/blog/this-release-cycle.html&quot;&gt;이번 주기의 SafeC&lt;/a&gt;에 더 자세히 정리되어 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;at-a-glance&quot; tabindex=&quot;-1&quot;&gt;한눈에 보기 &lt;a class=&quot;header-anchor&quot; href=&quot;#at-a-glance&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;영역&lt;/th&gt;
&lt;th&gt;변경 내용&lt;/th&gt;
&lt;th&gt;풀 리퀘스트&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#web&quot;&gt;웹 스택&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;std/http&lt;/code&gt; 서버, 라우터, WebSocket, SSE; URL·DEFLATE 코덱; wasm용 DOM 상호 운용&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/57&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#57&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#async&quot;&gt;비동기&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;goto&lt;/code&gt; 상태 머신으로 구현한 Rust 스타일 future, 실행기, 비동기 TCP&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/61&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#61&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#gui&quot;&gt;GUI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;벡터 캔버스, 위젯, 여러 창; X11, Wayland, Win32, Cocoa, 웹; GPU 프레젠터&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#65&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#audio&quot;&gt;오디오와 MIDI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ALSA, JACK, Core Audio, WASAPI, Web Audio 위의 단일 콜백 API&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/59&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#59&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#https&quot;&gt;HTTPS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;std/tls&lt;/code&gt;: OS의 TLS, 대체 경로로 SafeC TLS 1.3&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/66&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#66&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#safeguard-doc&quot;&gt;safeguard doc과 publish&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;rustdoc 스타일 API 레퍼런스; CI를 포함한 라이브러리 배포&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/69&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#69&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#scc&quot;&gt;scc와 플레이그라운드&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;SafeC로 작성되어 WebAssembly로 컴파일하는 SafeC 컴파일러&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/70&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#70&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#slices&quot;&gt;&lt;code&gt;void*&lt;/code&gt; 대신 슬라이스&lt;/a&gt; — &lt;strong&gt;호환성 깨짐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;std 공개 API가 슬라이스와 타입 있는 소거를 사용; std 어디에도 &lt;code&gt;void*&lt;/code&gt;가 남지 않음&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/76&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#76&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/80&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#80&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/81&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#81&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#ownership&quot;&gt;Drop, Send, Sync&lt;/a&gt; — &lt;strong&gt;호환성 깨짐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;컴파일러가 검사하는 소유권과 스레드 안전성&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/77&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#77&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;#fixes&quot;&gt;수정 사항&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;코드 생성, 안전성 검사의 빈틈, Windows·macOS CI&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#64&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/68&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#68&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/71&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#71&lt;/a&gt;–&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/75&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#75&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/78&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#78&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/79&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#79&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/82&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#82&lt;/a&gt;, &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/83&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#83&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;또한 릴리스는 이제 std를 플랫폼마다 섹션(&lt;code&gt;core&lt;/code&gt;, &lt;code&gt;collections&lt;/code&gt;, &lt;code&gt;gui&lt;/code&gt; 등)당 아카이브 하나로 미리 빌드해 제공하며, &lt;code&gt;install.sh --std=...&lt;/code&gt; / &lt;code&gt;install.ps1 -Std ...&lt;/code&gt;로 고릅니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;). 이 웹사이트도 이제 &lt;a href=&quot;/safec-docs/ko/blog/new-website.html&quot;&gt;SafeC 프로그램으로 빌드&lt;/a&gt;됩니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/58&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#58&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;web&quot; tabindex=&quot;-1&quot;&gt;웹 스택 &lt;a class=&quot;header-anchor&quot; href=&quot;#web&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/stdlib/http.html&quot;&gt;&lt;code&gt;std/http&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/57&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#57&lt;/a&gt;)는 실제 서비스를 위한 스택이 되었습니다: 구조화된 헤더, chunked 전송을 지원하는 keep-alive &lt;code&gt;HttpServer&lt;/code&gt;, 미들웨어와 경로 패턴을 갖춘 &lt;code&gt;Router&lt;/code&gt;, 정적 파일, 쿠키, multipart 폼, server-sent events, WebSocket 업그레이드, 리다이렉트를 따라가고 gzip을 푸는 URL 클라이언트. 함께 &lt;a href=&quot;/safec-docs/ko/stdlib/encoding.html&quot;&gt;&lt;code&gt;std/encoding&lt;/code&gt;&lt;/a&gt;의 URL(RFC 3986)과 DEFLATE / zlib / gzip 코덱이 들어왔습니다. 브라우저 쪽에서는 &lt;a href=&quot;/safec-docs/ko/stdlib/wasm.html&quot;&gt;&lt;code&gt;std/wasm&lt;/code&gt;&lt;/a&gt;이 이벤트, 타이머, fetch, 스토리지, 히스토리 등 DOM·브라우저 API와 상호 운용하게 되었고, JavaScript 글루는 std에 포함됩니다. &lt;code&gt;examples/fullstack_demo&lt;/code&gt;는 Router 서버와 SafeC→wasm 클라이언트를 합칩니다.&lt;/p&gt;
&lt;h2 id=&quot;async&quot; tabindex=&quot;-1&quot;&gt;비동기: &lt;code&gt;goto&lt;/code&gt; 상태 머신으로 된 future &lt;a class=&quot;header-anchor&quot; href=&quot;#async&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/stdlib/async.html&quot;&gt;&lt;code&gt;std/async&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/61&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#61&lt;/a&gt;)는 Rust의 &lt;code&gt;Future&lt;/code&gt; / &lt;code&gt;Poll&lt;/code&gt; / &lt;code&gt;Waker&lt;/code&gt; / &lt;code&gt;Context&lt;/code&gt; 모델을 언어 코루틴 없이 라이브러리로 가져옵니다. &lt;code&gt;ASYNC_BEGIN&lt;/code&gt; / &lt;code&gt;AWAIT&lt;/code&gt; / &lt;code&gt;ASYNC_RETURN&lt;/code&gt; 매크로가 &lt;code&gt;poll&lt;/code&gt; 메서드를 가진 구조체를 &lt;code&gt;goto&lt;/code&gt; 기반의 재개 가능한 상태 머신으로 바꾸고, await를 넘어 살아 있는 지역 변수는 모두 구조체에 저장됩니다. 그 위에 타이머, &lt;code&gt;join&lt;/code&gt; / &lt;code&gt;select&lt;/code&gt; / timeout 조합기, 채널, &lt;code&gt;Mutex&lt;/code&gt;, &lt;code&gt;Semaphore&lt;/code&gt;, &lt;code&gt;Notify&lt;/code&gt;, 취소, 베어메탈과 wasm32에서도 도는 힙 없는 &lt;code&gt;LocalExecutor&lt;/code&gt;, 멀티스레드 &lt;code&gt;ThreadPool&lt;/code&gt;, epoll·kqueue·WSAPoll 리액터 위의 비동기 TCP를 제공하는 &lt;code&gt;IoDriver&lt;/code&gt; + &lt;code&gt;Runtime&lt;/code&gt;이 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;gui&quot; tabindex=&quot;-1&quot;&gt;GUI 툴킷 &lt;a class=&quot;header-anchor&quot; href=&quot;#gui&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;에서 &lt;a href=&quot;/safec-docs/ko/stdlib/gui.html&quot;&gt;&lt;code&gt;std/gui&lt;/code&gt;&lt;/a&gt;가 툴킷이 되었습니다: TrueType 텍스트를 갖춘 안티에일리어싱 &lt;a href=&quot;/safec-docs/ko/stdlib/gui-graphics.html&quot;&gt;벡터 캔버스&lt;/a&gt;, 레이아웃과 테마를 지원하는 리테인드 &lt;a href=&quot;/safec-docs/ko/stdlib/gui-widgets.html&quot;&gt;위젯 툴킷&lt;/a&gt;, 여러 창 애플리케이션을 위한 &lt;code&gt;GuiApp&lt;/code&gt; — 모두 X11, Win32, Cocoa 창 계층 위의 &lt;code&gt;GuiBackend&lt;/code&gt; 인터페이스에 있습니다. &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#65&lt;/a&gt;는 &lt;a href=&quot;/safec-docs/ko/stdlib/gui-platforms.html&quot;&gt;더 많은 플랫폼&lt;/a&gt;을 더했습니다: Linux에서 실행 시점에 선택되는 Wayland, DOM 상호 운용과 IME 텍스트 입력을 갖추고 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;나 WebGL로 그리는 WebAssembly 백엔드, OpenGL ES(EGL)·Metal·Direct3D 11 GPU 프레젠터. &lt;code&gt;safeguard bundle --target wasm32&lt;/code&gt;는 GUI 앱을 웹 페이지로 패키징합니다.&lt;/p&gt;
&lt;h2 id=&quot;audio&quot; tabindex=&quot;-1&quot;&gt;오디오와 MIDI &lt;a class=&quot;header-anchor&quot; href=&quot;#audio&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/stdlib/audio.html&quot;&gt;&lt;code&gt;std/audio&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/59&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#59&lt;/a&gt;)는 오디오 스트림과 MIDI 포트를 위한 콜백 기반 API 하나로, 포맷 변환을 포함합니다. 오디오는 ALSA, JACK, Core Audio, WASAPI, Web Audio, 테스트용 더미 장치에서, MIDI는 ALSA 시퀀서, JACK, Core MIDI, WinMM, Web MIDI에서 동작합니다.&lt;/p&gt;
&lt;h2 id=&quot;https&quot; tabindex=&quot;-1&quot;&gt;HTTPS &lt;a class=&quot;header-anchor&quot; href=&quot;#https&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/stdlib/tls.html&quot;&gt;&lt;code&gt;std/tls&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/66&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#66&lt;/a&gt;)는 운영체제의 TLS — OpenSSL(실행 시점에 로드), SChannel, SecureTransport — 가 있으면 그것을 쓰고, 없으면 SafeC로 작성한 TLS 1.3 클라이언트·서버로 대체하며, 시스템 신뢰 루트에 대한 X.509 경로 검증을 수행합니다. 이를 위해 &lt;a href=&quot;/safec-docs/ko/stdlib/crypto.html&quot;&gt;&lt;code&gt;std/crypto&lt;/code&gt;&lt;/a&gt;에 X25519, P-256 / P-384 ECDH와 ECDSA, RSA(PKCS#1 v1.5와 PSS), HKDF, ChaCha20이 추가되었습니다. &lt;code&gt;http_fetch&lt;/code&gt; 등은 &lt;code&gt;https://&lt;/code&gt;를, &lt;code&gt;WsConn&lt;/code&gt;은 &lt;code&gt;wss://&lt;/code&gt;를 지원하고, &lt;code&gt;HttpServer&lt;/code&gt;는 &lt;code&gt;TlsServerConfig&lt;/code&gt;로 HTTPS를 서비스합니다.&lt;/p&gt;
&lt;h2 id=&quot;safeguard-doc&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;safeguard doc&lt;/code&gt;과 &lt;code&gt;safeguard publish&lt;/code&gt; &lt;a class=&quot;header-anchor&quot; href=&quot;#safeguard-doc&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/advanced/safeguard.html#safeguard-doc&quot;&gt;&lt;code&gt;safeguard doc&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/69&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#69&lt;/a&gt;)은 rustdoc처럼 패키지의 API 레퍼런스를 만듭니다: 강조 표시된 선언이 있는 항목별 페이지, 문서 내 링크(&lt;code&gt;[Vec::push]&lt;/code&gt;)와 예제를 담은 마크다운 &lt;a href=&quot;/safec-docs/ko/advanced/doc-comments.html&quot;&gt;문서 주석&lt;/a&gt;, 헤더당 모듈 하나, 소스 페이지, 클라이언트 측 검색(wasm32로 컴파일한 SafeC), 라이트·다크 테마, 결과물의 링크 검사. &lt;code&gt;--serve&lt;/code&gt;는 이를 서비스하고 &lt;code&gt;--std&lt;/code&gt;는 std 자체를 문서화합니다 — 이 사이트의 &lt;a href=&quot;/safec-docs/api/&quot;&gt;std API 레퍼런스&lt;/a&gt;가 그렇게 만들어집니다. 그 밑에는 실제 프런트엔드에서 선언과 문서 주석을 JSON으로 내보내는 새 &lt;code&gt;safec --emit-doc-json&lt;/code&gt;이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/advanced/safeguard.html#safeguard-publish&quot;&gt;&lt;code&gt;safeguard publish&lt;/code&gt;&lt;/a&gt;는 라이브러리의 git 저장소를 배포할 수 있게 준비합니다: README / LICENSE / 메타데이터 검사, semver를 위한 &lt;code&gt;--bump&lt;/code&gt;, 그리고 Linux·macOS·Windows에서 테스트하고 태그가 붙으면 미리 빌드한 정적·공유 라이브러리를 릴리스에 첨부하고 문서를 Pages에 배포하는 CI 생성(기본은 GitHub Actions, &lt;code&gt;--ci=&lt;/code&gt;로 GitLab CI, Gitea, Forgejo). &lt;code&gt;--write&lt;/code&gt;를 주지 않으면 드라이 런입니다. &lt;code&gt;Package.toml&lt;/code&gt;에는 &lt;code&gt;repository&lt;/code&gt;, &lt;code&gt;homepage&lt;/code&gt;, &lt;code&gt;documentation&lt;/code&gt;, &lt;code&gt;readme&lt;/code&gt;, &lt;code&gt;keywords&lt;/code&gt;와 &lt;code&gt;[publish]&lt;/code&gt; 테이블이 생겼고, &lt;code&gt;safeguard build --crate-type staticlib|cdylib|bin&lt;/code&gt;은 &lt;code&gt;[build] crate_type&lt;/code&gt;을 덮어씁니다.&lt;/p&gt;
&lt;h2 id=&quot;scc&quot; tabindex=&quot;-1&quot;&gt;scc와 온라인 플레이그라운드 &lt;a class=&quot;header-anchor&quot; href=&quot;#scc&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;scc&lt;/strong&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/70&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#70&lt;/a&gt;)는 SafeC로 작성한 SafeC 컴파일러로, SafeC의 새 &lt;a href=&quot;https://github.com/safec-org/SafeC/tree/main/selfhost&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;selfhost/&lt;/code&gt;&lt;/a&gt; 디렉터리에 있습니다. 자체 렉서, 전처리기, 파서, 의미 분석(safec의 안전성 검사와 진단 포함), wasm 백엔드를 거쳐 LLVM과 링커 없이 SafeC를 곧바로 WebAssembly 바이너리로 컴파일합니다. C++ &lt;code&gt;safec&lt;/code&gt;로 네이티브와 WebAssembly 양쪽으로 빌드되며, 자기 자신도 컴파일합니다: &lt;code&gt;selfhost/bootstrap.sh&lt;/code&gt;는 스스로 컴파일한 컴파일러가 자신을 바이트 단위로 똑같이 재현하는지 확인합니다. 차등 테스트 하네스가 Book, 레퍼런스 프로그램, 코퍼스를 두 컴파일러로 컴파일해 결과를 비교하며, 새 &lt;code&gt;selfhost&lt;/code&gt; CI 작업에서 돌아갑니다 — &lt;a href=&quot;#fixes&quot;&gt;아래&lt;/a&gt;의 가변 인자 승격 버그도 여기서 발견되었습니다.&lt;/p&gt;
&lt;p&gt;scc는 이 사이트의 &lt;a href=&quot;/safec-docs/ko/playground.html&quot;&gt;플레이그라운드&lt;/a&gt;를 움직입니다. 이제 &lt;em&gt;Run&lt;/em&gt; 버튼이 시간·메모리 제한이 있는 Web Worker 안에서, 프로그램을 전부 브라우저에서 컴파일하고 실행합니다. scc는 &lt;code&gt;selfhost/SUBSET.md&lt;/code&gt;에 나열된 언어 부분 집합을 받아들이며 소유권·스레드 안전성 검사는 하지 않습니다. 그 검사와 전체 std가 필요하면 로컬에서 빌드하세요.&lt;/p&gt;
&lt;h2 id=&quot;slices&quot; tabindex=&quot;-1&quot;&gt;호환성 깨짐: &lt;code&gt;void*&lt;/code&gt;와 포인터 + 길이 쌍이 없는 std API &lt;a class=&quot;header-anchor&quot; href=&quot;#slices&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/76&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#76&lt;/a&gt;은 std의 공개 선언에서 &lt;code&gt;void*&lt;/code&gt;, 원시 &lt;code&gt;T*&lt;/code&gt; 버퍼, &lt;code&gt;(포인터, 길이)&lt;/code&gt; 쌍을 모두 없앴습니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;버퍼는 &lt;a href=&quot;/safec-docs/ko/reference/types.html#slice-types&quot;&gt;슬라이스&lt;/a&gt;입니다.&lt;/strong&gt; &lt;code&gt;[]T&lt;/code&gt;는 함수가 쓰는 버퍼, &lt;code&gt;[]const T&lt;/code&gt;는 읽기만 하는 버퍼입니다. 슬라이스는 길이를 갖고 있고 인덱싱은 경계 검사됩니다. 고정 크기 인자(키, 논스, 다이제스트)는 진입 시 검사되어, 너무 짧으면 그 너머를 읽거나 쓰는 대신 패닉합니다. &lt;code&gt;std::str_bytes(&amp;quot;text&amp;quot;)&lt;/code&gt;는 문자열의 바이트를 &lt;code&gt;[]const char&lt;/code&gt;로 주며, &lt;code&gt;[]const unsigned char&lt;/code&gt;를 기대하는 곳 어디서나 받아들여집니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;타입 소거에 타입이 있습니다.&lt;/strong&gt; 실행기, waker, 타이머, 위젯, VFS, 오디오·MIDI 콜백, HTTP 핸들러, DOM 리스너, 스레드 진입점처럼 std가 서로 다른 컨텍스트 타입의 콜백을 나란히 저장해야 하는 곳의 슬롯은 &lt;code&gt;?&amp;amp;Erased&lt;/code&gt;(&lt;code&gt;std/erased.h&lt;/code&gt;)이며, 일치하는 &lt;code&gt;fn(?&amp;amp;T)&lt;/code&gt; / &lt;code&gt;?&amp;amp;T&lt;/code&gt;를 받는 제네릭 메서드로만 채워집니다. 불투명 핸들도 타입이 있는 구조체입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;언어도 그에 맞게 자랐습니다:&lt;/strong&gt; &lt;a href=&quot;/safec-docs/ko/reference/types.html#read-only-slices&quot;&gt;읽기 전용 슬라이스&lt;/a&gt; &lt;code&gt;[]const T&lt;/code&gt;, &lt;a href=&quot;/safec-docs/ko/reference/types.html#optional-slices&quot;&gt;옵셔널 슬라이스&lt;/a&gt; &lt;code&gt;?[]T&lt;/code&gt;와 널 가능 함수 참조 &lt;code&gt;?fn R(Args)&lt;/code&gt;, 슬라이스를 반환하는 함수와 슬라이스 필드, 범위 검사되는 재슬라이싱(&lt;code&gt;unsafe&lt;/code&gt; 밖에서 &lt;code&gt;i &amp;gt; j&lt;/code&gt;나 &lt;code&gt;j &amp;gt; len&lt;/code&gt;이면 &lt;code&gt;a[i..j]&lt;/code&gt;가 트랩), &lt;code&gt;char&lt;/code&gt;·&lt;code&gt;signed char&lt;/code&gt;·&lt;code&gt;unsigned char&lt;/code&gt; 사이에서 상호 변환되는 바이트 슬라이스. 슬라이스를 포인터로 캐스트하는 것은 이제 오류이며, &lt;code&gt;s.ptr&lt;/code&gt;을 쓰세요.&lt;/li&gt;
&lt;li&gt;std에 새로 추가: &lt;code&gt;Erased&lt;/code&gt;, &lt;code&gt;S24&lt;/code&gt;(패킹된 24비트 오디오 샘플로, 24비트 버퍼는 &lt;code&gt;[]S24&lt;/code&gt;), &lt;code&gt;struct TimeFields&lt;/code&gt;, &lt;code&gt;Vec::from_slice&lt;/code&gt; / &lt;code&gt;as_slice&lt;/code&gt;, &lt;code&gt;String::from_bytes&lt;/code&gt; / &lt;code&gt;push_bytes&lt;/code&gt; / &lt;code&gt;as_bytes&lt;/code&gt;, 그리고 &lt;code&gt;StaticVec&lt;/code&gt;, &lt;code&gt;StaticMap&lt;/code&gt;, &lt;code&gt;RingBuffer&lt;/code&gt;, &lt;code&gt;LFQueue&lt;/code&gt;와 할당기의 &lt;code&gt;over([]T)&lt;/code&gt; 생성자.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/80&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#80&lt;/a&gt;과 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/81&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#81&lt;/a&gt;이 std 내부까지 마무리했습니다: 오디오, GUI, ML, TLS, OS 백엔드가 C, Objective-C, CUDA, HIP, Metal, Vulkan, WebGPU API를 타입 있는 핸들과 바이트 포인터로 바인딩하고, 오디오·MIDI 콜백 컨텍스트는 &lt;code&gt;Send + Sync&lt;/code&gt;여야 하며, 할당자는 &lt;code&gt;?&amp;amp;heap unsigned char&lt;/code&gt;를 내주고, &lt;code&gt;malloc_defer&lt;/code&gt;는 선언에서 타입을 가져옵니다. 이제 std 어디에도 &lt;code&gt;void*&lt;/code&gt;가 없으며, SafeC 테스트 스위트의 린트는 &lt;code&gt;void*&lt;/code&gt;가 다시 나타나거나 std 공개 선언에 원시 포인터가 다시 나타나면 빌드를 실패시킵니다.&lt;/p&gt;
&lt;h2 id=&quot;ownership&quot; tabindex=&quot;-1&quot;&gt;호환성 깨짐: 컴파일러가 강제하는 Drop, Send, Sync &lt;a class=&quot;header-anchor&quot; href=&quot;#ownership&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/77&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#77&lt;/a&gt;은 자원 소유권과 스레드 안전성을 컴파일 타임 검사로 만듭니다. 전체 규칙은 &lt;a href=&quot;/safec-docs/ko/reference/ownership.html&quot;&gt;소유권과 Drop&lt;/a&gt;과 &lt;a href=&quot;/safec-docs/ko/reference/threads.html&quot;&gt;스레드 안전성&lt;/a&gt;을 보세요.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Drop&lt;/code&gt;.&lt;/strong&gt; &lt;code&gt;void drop()&lt;/code&gt; 메서드를 가진 타입, 또는 그런 값을 담은 타입은 모든 경로 — &lt;code&gt;return&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;, &lt;code&gt;continue&lt;/code&gt;, &lt;code&gt;goto&lt;/code&gt;, &lt;code&gt;match&lt;/code&gt;, &lt;code&gt;defer&lt;/code&gt;, 루프 — 에서 정확히 한 번 drop되거나 move되어야 합니다. 누수, drop·move 후 사용, 이중 drop, 살아 있는 값 덮어쓰기, 빌린 메모리에서 move해 나오기는 컴파일 오류입니다. 검사는 제네릭 인스턴스마다 이루어지고, 생성 코드에는 아무것도 삽입하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;consume&lt;/code&gt; 메서드(&lt;code&gt;int close() consume;&lt;/code&gt;)는 &lt;code&gt;drop()&lt;/code&gt;처럼 수신자를 소멸시킵니다. &lt;code&gt;drop(x)&lt;/code&gt;는 모든 타입에 대한 drop 글루이고, &lt;code&gt;std::replace&lt;/code&gt;와 &lt;code&gt;std::swap&lt;/code&gt;은 &lt;code&gt;std/ownership.h&lt;/code&gt;에 있으며, &lt;code&gt;forget(x)&lt;/code&gt;는 &lt;code&gt;unsafe&lt;/code&gt; 안에서만 허용됩니다. 메서드가 수신자 안을 가리키도록 반환한 참조(&lt;code&gt;Vec::at()&lt;/code&gt;, &lt;code&gt;MutexGuard::get()&lt;/code&gt;)는 수신자로부터 빌린 것입니다.&lt;/li&gt;
&lt;li&gt;**&lt;code&gt;Send&lt;/code&gt; / &lt;code&gt;Sync&lt;/code&gt;**는 각 타입의 구조로부터 유도되고, &lt;code&gt;unsafe impl Send;&lt;/code&gt; / &lt;code&gt;impl !Send;&lt;/code&gt;로 재정의할 수 있으며, 제네릭 바운드로 쓸 수 있습니다. &lt;code&gt;spawn&lt;/code&gt;은 Sync인 정적 데이터만 받고, &lt;code&gt;spawn_scoped&lt;/code&gt;는 join될 때까지 지역 변수를 빌려주며, &lt;code&gt;chan_send&lt;/code&gt;는 Send 값을 move합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std/thread.h&lt;/code&gt;에 새로 추가: &lt;code&gt;thread_spawn&lt;/code&gt; / &lt;code&gt;SpawnedThread&amp;lt;T, R&amp;gt;&lt;/code&gt;(인자를 스레드로 move하고 &lt;code&gt;join()&lt;/code&gt;이 결과를 반환), &lt;code&gt;Mutex&amp;lt;T&amp;gt;&lt;/code&gt; / &lt;code&gt;MutexGuard&amp;lt;T&amp;gt;&lt;/code&gt;(값은 가드를 통해서만 접근하며 가드는 &lt;code&gt;drop()&lt;/code&gt;에서 잠금 해제), &lt;code&gt;RwLock&amp;lt;T&amp;gt;&lt;/code&gt;. &lt;code&gt;std/atomic.h&lt;/code&gt;에는 &lt;code&gt;AtomicInt&lt;/code&gt;와 &lt;code&gt;AtomicLong&lt;/code&gt;이 있습니다.&lt;/li&gt;
&lt;li&gt;컬렉션, &lt;code&gt;File&lt;/code&gt;, 소켓, TLS, HTTP, 스레드, 동기화 프리미티브, GUI, 오디오, 비동기, ML 컨테이너 등 std의 소유 타입은 &lt;code&gt;Drop&lt;/code&gt;을 구현합니다. &lt;code&gt;free()&lt;/code&gt; / &lt;code&gt;close()&lt;/code&gt; / &lt;code&gt;destroy()&lt;/code&gt;는 &lt;code&gt;consume&lt;/code&gt; 별칭으로 남습니다. &lt;code&gt;ThreadPool::spawn&lt;/code&gt;, &lt;code&gt;Chan&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;AsyncChannel&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;Oneshot&amp;lt;T&amp;gt;&lt;/code&gt;는 Send 값을 요구하고, GUI 창은 &lt;code&gt;!Send&lt;/code&gt;이며, 끝나지 않은 &lt;code&gt;AsyncTask&lt;/code&gt;를 drop하면 실행기가 해제된 메모리를 poll하게 두는 대신 패닉합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;std 전체에 검사를 켜자 실제 버그가 발견되어 고쳐졌습니다: TLS 오류 경로, GUI SVG 렌더러, 위젯·PNG 로더, 정적 파일·라우터 헬퍼, &lt;code&gt;Audio::open&lt;/code&gt;, &lt;code&gt;std/ml&lt;/code&gt;의 LLM·LoRA 경로, safec-doc의 링크 검사기에 있던 누수, 이중 해제, 해제 후 사용.&lt;/p&gt;
&lt;h2 id=&quot;fixes&quot; tabindex=&quot;-1&quot;&gt;주요 수정 사항 &lt;a class=&quot;header-anchor&quot; href=&quot;#fixes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;가변 인자 호출&lt;/strong&gt;은 C가 요구하는 대로 &lt;code&gt;bool&lt;/code&gt;, &lt;code&gt;char&lt;/code&gt;, &lt;code&gt;short&lt;/code&gt;를 &lt;code&gt;int&lt;/code&gt;로 승격합니다. 전에는 &lt;code&gt;printf(&amp;quot;%d&amp;quot;, !x)&lt;/code&gt;가 254를 출력했습니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/71&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#71&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;안전성 검사의 빈틈을 막았습니다&lt;/strong&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/72&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#72&lt;/a&gt;): &lt;code&gt;const &amp;amp;T&lt;/code&gt;를 통한 필드 쓰기를 거부하고, &lt;code&gt;&amp;amp;stack&lt;/code&gt; / &lt;code&gt;&amp;amp;arena&lt;/code&gt; 탈출 검사가 &lt;code&gt;-&amp;gt;&lt;/code&gt;를 따라가며, &lt;code&gt;Vec::at&lt;/code&gt;, &lt;code&gt;HashMap&lt;/code&gt;, &lt;code&gt;StrMap&lt;/code&gt;이 준 원소 참조를 &lt;code&gt;push&lt;/code&gt;나 재해싱하는 삽입 너머까지 들고 있으면 보고합니다. 참조를 반환하는 호출 체인을 통한 변경(&lt;code&gt;v.at(i).field.push(x)&lt;/code&gt;)은 이제 임시 복사본이 아니라 실제 필드에 닿습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;메서드 호출&lt;/strong&gt;: 참조로 반환된 호출 결과의 필드에 대한 메서드 호출은 참조 대상에 작용하고, 재귀 함수에서 &lt;code&gt;StrMap&lt;/code&gt;을 쓸 때의 오탐이 사라졌습니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/73&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#73&lt;/a&gt;). &lt;code&gt;atomic_cas&lt;/code&gt; 인자는 가리키는 타입에 대해 검사됩니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/74&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#74&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C 헤더 가져오기&lt;/strong&gt;는 128비트 float와 &lt;code&gt;_Complex&lt;/code&gt; 선언을 건너뛰어 최신 glibc 헤더도 가져올 수 있고, &lt;code&gt;safeguard test&lt;/code&gt;는 Windows에서 테스트의 &lt;code&gt;.exe&lt;/code&gt;를 실행합니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/75&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#75&lt;/a&gt;). 라이브러리 패키지에서 &lt;code&gt;safeguard test&lt;/code&gt;는 라이브러리를 각 테스트에 링크합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows와 macOS:&lt;/strong&gt; 제네릭 함수는 ABI 낮추기를 거쳐도 COMDAT을 유지하고, &lt;code&gt;std/sched&lt;/code&gt;는 &lt;code&gt;WSAStartup&lt;/code&gt;에 올바른 크기의 &lt;code&gt;WSADATA&lt;/code&gt;를 넘기며, WSAPoll 리액터는 디스패치 후 감시 목록을 읽지 않습니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#64&lt;/a&gt;). ABI 낮추기된 함수는 모듈 안의 제자리를 지키고(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/79&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#79&lt;/a&gt;), std 모듈 검사는 Mach-O와 COFF에서 섹션 간에 반복되는 제네릭 인스턴스를 허용합니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/68&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#68&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;파서:&lt;/strong&gt; typedef 이름과 두 개 이상의 &lt;code&gt;*&lt;/code&gt;로 선언한 지역 변수(&lt;code&gt;Foo_t** x = pp;&lt;/code&gt;)는 선언으로 읽히고, 전위 연산자가 중첩됩니다(&lt;code&gt;**pp&lt;/code&gt;, &lt;code&gt;-*p&lt;/code&gt;, &lt;code&gt;- -x&lt;/code&gt;). safec와 scc 모두 해당합니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/82&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#82&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;웹사이트 점검에서 발견한 버그&lt;/strong&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/83&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#83&lt;/a&gt;): 모든 컨테이너는 이제 &lt;code&gt;Vec&lt;/code&gt;처럼 &lt;code&gt;clear()&lt;/code&gt; / &lt;code&gt;drop()&lt;/code&gt; 때와 키를 덮어쓸 때 원소를 drop합니다(&lt;code&gt;drop()&lt;/code&gt;이 없는 &lt;code&gt;BTree&lt;/code&gt;, &lt;code&gt;StaticVec&lt;/code&gt;, &lt;code&gt;StaticMap&lt;/code&gt;은 &lt;code&gt;clear()&lt;/code&gt;합니다) — &lt;a href=&quot;/safec-docs/ko/stdlib/collections.html#ownership&quot;&gt;컬렉션&lt;/a&gt; 참고. &lt;code&gt;Reactor&lt;/code&gt;에 &lt;code&gt;drop()&lt;/code&gt;이 생겼고 &lt;code&gt;close_()&lt;/code&gt;는 테이블을 해제하며 멱등입니다. &lt;code&gt;WsConn::closed()&lt;/code&gt;는 &lt;code&gt;accept()&lt;/code&gt;로 채울 시작 값이며, 닫힌 연결은 fd 0을 건드리지 않습니다. safeguard는 std를 &lt;code&gt;&amp;lt;std/...&amp;gt;&lt;/code&gt;로만 찾으므로 맨 이름의 &lt;code&gt;#include &amp;lt;math.h&amp;gt;&lt;/code&gt;는 C 라이브러리의 헤더입니다(&lt;code&gt;#include &amp;lt;io.h&amp;gt;&lt;/code&gt;에는 &lt;strong&gt;호환성을 깨는 변경&lt;/strong&gt;: &lt;code&gt;&amp;lt;std/io.h&amp;gt;&lt;/code&gt;로 씁니다). 그리고 &lt;code&gt;std/time&lt;/code&gt;이 &lt;a href=&quot;/safec-docs/ko/playground.html&quot;&gt;플레이그라운드&lt;/a&gt;에서 동작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;migration&quot; tabindex=&quot;-1&quot;&gt;마이그레이션 &lt;a class=&quot;header-anchor&quot; href=&quot;#migration&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;두 호환성 깨짐 모두 분명하게 실패합니다: 영향을 받는 모든 호출은 컴파일 오류(인자 개수나 타입 불일치, 또는 선언 위치를 가리키는 노트가 붙은 소유권 오류)이고, &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;에 적힌 곳 말고는 조용히 동작이 바뀌는 것은 없습니다. 흔한 수정은 다음과 같습니다:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;이전&lt;/th&gt;
&lt;th&gt;이후&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;f.read(buf, n)&lt;/code&gt;, &lt;code&gt;w.write(buf, n)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;f.read(buf[..])&lt;/code&gt;, &lt;code&gt;w.write(buf[0..n])&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sha256(data, len, digest)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256(bytes, digest[..])&lt;/code&gt; — &lt;code&gt;bytes&lt;/code&gt;는 &lt;code&gt;buf[0..len]&lt;/code&gt;이나 &lt;code&gt;std::str_bytes(s)&lt;/code&gt; 같은 슬라이스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;str_copy(dst, src, size)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;str_copy(dst[..], src)&lt;/code&gt; — 다 들어가면 1, 잘리면 0을 반환하고 항상 NUL로 끝냄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;safe_memcpy(dst, src, bytes)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;safe_memcpy(dst[..], src[..])&lt;/code&gt; — 바이트가 아니라 &lt;strong&gt;원소&lt;/strong&gt;를 세고, 두 길이 중 작은 만큼 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;time_gmtime(t, fields)&lt;/code&gt;(int 9개 배열)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;struct TimeFields tm = time_gmtime(t);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vec::from_arr(p, n)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Vec::from_slice(a[..])&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;String::from_n(p, n)&lt;/code&gt; / &lt;code&gt;push_n&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;String::from_bytes(s)&lt;/code&gt; / &lt;code&gt;push_bytes(s)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;?&amp;amp;T&lt;/code&gt;를 반환하던 &lt;code&gt;sys_bsearch(...)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;인덱스를 &lt;code&gt;?unsigned long&lt;/code&gt;으로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;void*&lt;/code&gt; 콜백 컨텍스트&lt;/td&gt;
&lt;td&gt;타입 있는 &lt;code&gt;?&amp;amp;T&lt;/code&gt; — std의 제네릭 메서드가 &lt;code&gt;?&amp;amp;Erased&lt;/code&gt;로 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용자 할당자의 &lt;code&gt;?&amp;amp;heap void alloc(size, align)&lt;/code&gt; / &lt;code&gt;dealloc(?&amp;amp;heap void)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;둘 다 &lt;code&gt;?&amp;amp;heap unsigned char&lt;/code&gt; (std의 할당자와 &lt;code&gt;heap_alloc&lt;/code&gt;은 바이트를 내줍니다. &lt;code&gt;alloc_t&lt;/code&gt; / &lt;code&gt;dealloc_t&lt;/code&gt;는 그대로)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;(T*)slice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;slice.ptr&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;어떤 경로에서 해제되지 않는, &lt;code&gt;free()&lt;/code&gt; / &lt;code&gt;close()&lt;/code&gt;가 있는 값&lt;/td&gt;
&lt;td&gt;만든 직후 &lt;code&gt;defer v.drop();&lt;/code&gt;, 또는 모든 경로에서 해제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;포인터를 공유하는 &lt;code&gt;thread_create(&amp;amp;tid, work, ctx)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;데이터를 move해 넣는 &lt;code&gt;thread_spawn(fn, value)&lt;/code&gt;, 공유 데이터에는 &lt;code&gt;Mutex&amp;lt;T&amp;gt;&lt;/code&gt; / &lt;code&gt;spawn_scoped&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;흔한 소유권 오류와 그 해결:&lt;/p&gt;
&lt;div class=&quot;language-c code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;sum_positive&lt;/span&gt;([]&lt;span class=&quot;tok-kw&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; xs) {
    &lt;span class=&quot;tok-kw&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;Vec&lt;/span&gt;&amp;lt;&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt;&amp;gt; v = std::&lt;span class=&quot;tok-ty&quot;&gt;Vec&lt;/span&gt;::&lt;span class=&quot;tok-kw&quot;&gt;new&lt;/span&gt;();
    &lt;span class=&quot;tok-kw&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;tok-ty&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;long&lt;/span&gt; i = &lt;span class=&quot;tok-num&quot;&gt;0UL&lt;/span&gt;; i &amp;lt; xs.len; i = i + &lt;span class=&quot;tok-num&quot;&gt;1UL&lt;/span&gt;) {
        &lt;span class=&quot;tok-kw&quot;&gt;if&lt;/span&gt; (xs[i] &amp;lt; &lt;span class=&quot;tok-num&quot;&gt;0&lt;/span&gt;) { &lt;span class=&quot;tok-kw&quot;&gt;return&lt;/span&gt; -&lt;span class=&quot;tok-num&quot;&gt;1&lt;/span&gt;; }   &lt;span class=&quot;tok-com&quot;&gt;// error: value of Drop type &#39;Vec&amp;lt;int&amp;gt;&#39; leaks when the&lt;/span&gt;
        v.&lt;span class=&quot;tok-fn&quot;&gt;push&lt;/span&gt;(xs[i]);                  &lt;span class=&quot;tok-com&quot;&gt;//   function returns: &#39;v&#39; is never dropped;&lt;/span&gt;
    }                                   &lt;span class=&quot;tok-com&quot;&gt;//   call v.drop() or add &#39;defer v.drop()&#39;&lt;/span&gt;
    &lt;span class=&quot;tok-com&quot;&gt;// ...&lt;/span&gt;
    v.&lt;span class=&quot;tok-fn&quot;&gt;drop&lt;/span&gt;();
    &lt;span class=&quot;tok-kw&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;tok-num&quot;&gt;0&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;선언 바로 뒤에 &lt;code&gt;defer v.drop();&lt;/code&gt;을 추가하고 마지막 &lt;code&gt;v.drop()&lt;/code&gt;을 지우면 모든 경로에서 &lt;code&gt;v&lt;/code&gt;가 해제됩니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/playground.html&quot;&gt;플레이그라운드&lt;/a&gt;에서 실행할 수 있는 슬라이스 예제 — 읽기 전용 슬라이스 매개변수, 경계가 있는 &lt;code&gt;str_copy&lt;/code&gt;, 원소 단위 &lt;code&gt;safe_memcpy&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-c code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;tok-pp&quot;&gt;#include&lt;/span&gt; &amp;lt;std/str.h&amp;gt;
&lt;span class=&quot;tok-pp&quot;&gt;#include&lt;/span&gt; &amp;lt;std/mem.h&amp;gt;
&lt;span class=&quot;tok-kw&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;tok-kw&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;char&lt;/span&gt;* fmt, ...);

&lt;span class=&quot;tok-ty&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;sum&lt;/span&gt;([]&lt;span class=&quot;tok-kw&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; xs) {           &lt;span class=&quot;tok-com&quot;&gt;// a read-only slice: the length comes with it&lt;/span&gt;
    &lt;span class=&quot;tok-ty&quot;&gt;long&lt;/span&gt; s = &lt;span class=&quot;tok-num&quot;&gt;0L&lt;/span&gt;;
    &lt;span class=&quot;tok-kw&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;tok-ty&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;long&lt;/span&gt; i = &lt;span class=&quot;tok-num&quot;&gt;0UL&lt;/span&gt;; i &amp;lt; xs.len; i = i + &lt;span class=&quot;tok-num&quot;&gt;1UL&lt;/span&gt;) { s = s + (&lt;span class=&quot;tok-ty&quot;&gt;long&lt;/span&gt;)xs[i]; }
    &lt;span class=&quot;tok-kw&quot;&gt;return&lt;/span&gt; s;
}

&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;main&lt;/span&gt;() {
    &lt;span class=&quot;tok-ty&quot;&gt;char&lt;/span&gt; name[&lt;span class=&quot;tok-num&quot;&gt;8&lt;/span&gt;];
    &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; fit = std::&lt;span class=&quot;tok-fn&quot;&gt;str_copy&lt;/span&gt;(name[..], &lt;span class=&quot;tok-str&quot;&gt;&quot;truncated!&quot;&lt;/span&gt;);   &lt;span class=&quot;tok-com&quot;&gt;// bounded by the slice&lt;/span&gt;
    &lt;span class=&quot;tok-fn&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;tok-str&quot;&gt;&quot;fit=%d name=%s\n&quot;&lt;/span&gt;, fit, name);

    &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; src[&lt;span class=&quot;tok-num&quot;&gt;4&lt;/span&gt;] = {&lt;span class=&quot;tok-num&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;tok-num&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;tok-num&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;tok-num&quot;&gt;4&lt;/span&gt;};
    &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; dst[&lt;span class=&quot;tok-num&quot;&gt;3&lt;/span&gt;];
    &lt;span class=&quot;tok-ty&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;long&lt;/span&gt; n = std::&lt;span class=&quot;tok-fn&quot;&gt;safe_memcpy&lt;/span&gt;(dst[..], src[..]);   &lt;span class=&quot;tok-com&quot;&gt;// elements, not bytes&lt;/span&gt;
    &lt;span class=&quot;tok-fn&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;tok-str&quot;&gt;&quot;copied=%lu sum=%ld\n&quot;&lt;/span&gt;, n, &lt;span class=&quot;tok-fn&quot;&gt;sum&lt;/span&gt;(dst[..]));
    &lt;span class=&quot;tok-kw&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;tok-num&quot;&gt;0&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;a class=&quot;run-link&quot; href=&quot;/safec-docs/ko/playground.html#code=I2luY2x1ZGUgPHN0ZC9zdHIuaD4KI2luY2x1ZGUgPHN0ZC9tZW0uaD4KZXh0ZXJuIGludCBwcmludGYoY29uc3QgY2hhciogZm10LCAuLi4pOwoKbG9uZyBzdW0oW11jb25zdCBpbnQgeHMpIHsgICAgICAgICAgIC8vIGEgcmVhZC1vbmx5IHNsaWNlOiB0aGUgbGVuZ3RoIGNvbWVzIHdpdGggaXQKICAgIGxvbmcgcyA9IDBMOwogICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwVUw7IGkgPCB4cy5sZW47IGkgPSBpICsgMVVMKSB7IHMgPSBzICsgKGxvbmcpeHNbaV07IH0KICAgIHJldHVybiBzOwp9CgppbnQgbWFpbigpIHsKICAgIGNoYXIgbmFtZVs4XTsKICAgIGludCBmaXQgPSBzdGQ6OnN0cl9jb3B5KG5hbWVbLi5dLCAidHJ1bmNhdGVkISIpOyAgIC8vIGJvdW5kZWQgYnkgdGhlIHNsaWNlCiAgICBwcmludGYoImZpdD0lZCBuYW1lPSVzXG4iLCBmaXQsIG5hbWUpOwoKICAgIGludCBzcmNbNF0gPSB7MSwgMiwgMywgNH07CiAgICBpbnQgZHN0WzNdOwogICAgdW5zaWduZWQgbG9uZyBuID0gc3RkOjpzYWZlX21lbWNweShkc3RbLi5dLCBzcmNbLi5dKTsgICAvLyBlbGVtZW50cywgbm90IGJ5dGVzCiAgICBwcmludGYoImNvcGllZD0lbHUgc3VtPSVsZFxuIiwgbiwgc3VtKGRzdFsuLl0pKTsKICAgIHJldHVybiAwOwp9Cg&quot;&gt;&lt;svg viewBox=&quot;0 0 24 24&quot; aria-hidden=&quot;true&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 5v14l11-7L8 5Z&quot;/&gt;&lt;/svg&gt;플레이그라운드에서 실행&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;출력은 &lt;code&gt;fit=0 name=truncat&lt;/code&gt;(NUL을 포함해 8바이트 버퍼에 맞게 잘림)과 &lt;code&gt;copied=3 sum=6&lt;/code&gt;입니다. 암호화와 데이터를 소유하는 스레드를 쓰는 다음 예제는 전체 std가 필요하므로 로컬에서 &lt;code&gt;safeguard run&lt;/code&gt;으로 빌드하세요:&lt;/p&gt;
&lt;div class=&quot;language-c code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;c&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;tok-pp&quot;&gt;#include&lt;/span&gt; &amp;lt;std/crypto/sha256.h&amp;gt;
&lt;span class=&quot;tok-pp&quot;&gt;#include&lt;/span&gt; &amp;lt;std/str.h&amp;gt;
&lt;span class=&quot;tok-pp&quot;&gt;#include&lt;/span&gt; &amp;lt;std/thread.h&amp;gt;
&lt;span class=&quot;tok-pp&quot;&gt;#include&lt;/span&gt; &amp;lt;std/collections/vec.h&amp;gt;
&lt;span class=&quot;tok-kw&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;tok-kw&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;char&lt;/span&gt;* fmt, ...);

&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;count&lt;/span&gt;(&lt;span class=&quot;tok-kw&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;Vec&lt;/span&gt;&amp;lt;&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt;&amp;gt; v) {
    &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; n = (&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt;)v.len;
    v.&lt;span class=&quot;tok-fn&quot;&gt;drop&lt;/span&gt;();                       &lt;span class=&quot;tok-com&quot;&gt;// the thread owns v and must drop it&lt;/span&gt;
    &lt;span class=&quot;tok-kw&quot;&gt;return&lt;/span&gt; n;
}

&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;tok-fn&quot;&gt;main&lt;/span&gt;() {
    &lt;span class=&quot;tok-ty&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;char&lt;/span&gt; digest[&lt;span class=&quot;tok-num&quot;&gt;32&lt;/span&gt;];
    std::&lt;span class=&quot;tok-fn&quot;&gt;sha256&lt;/span&gt;(std::&lt;span class=&quot;tok-fn&quot;&gt;str_bytes&lt;/span&gt;(&lt;span class=&quot;tok-str&quot;&gt;&quot;abc&quot;&lt;/span&gt;), digest[..]);   &lt;span class=&quot;tok-com&quot;&gt;// was sha256(data, len, digest)&lt;/span&gt;

    &lt;span class=&quot;tok-kw&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;Vec&lt;/span&gt;&amp;lt;&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt;&amp;gt; v = std::&lt;span class=&quot;tok-ty&quot;&gt;Vec&lt;/span&gt;::&lt;span class=&quot;tok-kw&quot;&gt;new&lt;/span&gt;();
    v.&lt;span class=&quot;tok-fn&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;tok-num&quot;&gt;1&lt;/span&gt;); v.&lt;span class=&quot;tok-fn&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;tok-num&quot;&gt;2&lt;/span&gt;);
    &lt;span class=&quot;tok-kw&quot;&gt;struct&lt;/span&gt; SpawnedThread&amp;lt;&lt;span class=&quot;tok-kw&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;tok-ty&quot;&gt;Vec&lt;/span&gt;&amp;lt;&lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt;&amp;gt;, &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt;&amp;gt; t = std::&lt;span class=&quot;tok-fn&quot;&gt;thread_spawn&lt;/span&gt;(count, v);
    &lt;span class=&quot;tok-com&quot;&gt;// v.push(3);                   // error: use of &#39;v&#39; after it was moved&lt;/span&gt;
    &lt;span class=&quot;tok-ty&quot;&gt;int&lt;/span&gt; len = t.&lt;span class=&quot;tok-fn&quot;&gt;join&lt;/span&gt;();             &lt;span class=&quot;tok-com&quot;&gt;// join() consumes t and returns count&#39;s result&lt;/span&gt;

    &lt;span class=&quot;tok-fn&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;tok-str&quot;&gt;&quot;digest[0]=0x%02x len=%d\n&quot;&lt;/span&gt;, (&lt;span class=&quot;tok-ty&quot;&gt;unsigned&lt;/span&gt;)digest[&lt;span class=&quot;tok-num&quot;&gt;0&lt;/span&gt;], len);
    &lt;span class=&quot;tok-kw&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;tok-num&quot;&gt;0&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;출력은 &lt;code&gt;digest[0]=0xba len=2&lt;/code&gt;이고, &lt;code&gt;v.push(3)&lt;/code&gt;의 주석을 풀면 &lt;code&gt;thread_spawn&lt;/code&gt; 호출을 가리키는 노트와 함께 &lt;code&gt;use of &#39;v&#39; after it was moved&lt;/code&gt; 컴파일 오류가 납니다.&lt;/p&gt;
&lt;p&gt;마이그레이션할 때 볼 곳:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/safec-docs/ko/reference/types.html#slice-types&quot;&gt;타입: 슬라이스&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/types.html#read-only-slices&quot;&gt;읽기 전용 슬라이스&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/types.html#optional-slices&quot;&gt;옵셔널 슬라이스&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/safec-docs/ko/reference/ownership.html&quot;&gt;소유권과 Drop&lt;/a&gt; — 규칙, 모든 오류, &lt;a href=&quot;/safec-docs/ko/reference/ownership.html#consume-methods&quot;&gt;consume 메서드&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/ownership.html#forget&quot;&gt;&lt;code&gt;forget&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/safec-docs/ko/reference/threads.html&quot;&gt;스레드 안전성&lt;/a&gt; — &lt;a href=&quot;/safec-docs/ko/reference/threads.html#send-and-sync&quot;&gt;Send와 Sync&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/threads.html#thread-spawn&quot;&gt;&lt;code&gt;thread_spawn&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/reference/threads.html#mutex&quot;&gt;&lt;code&gt;Mutex&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;사용하는 모듈의 std 페이지: &lt;a href=&quot;/safec-docs/ko/stdlib/mem.html&quot;&gt;mem&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/str.html&quot;&gt;str&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/io.html&quot;&gt;io&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/collections.html&quot;&gt;collections&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/crypto.html&quot;&gt;crypto&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/thread.html&quot;&gt;thread&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/async.html&quot;&gt;async&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/audio.html&quot;&gt;audio&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/dsp.html&quot;&gt;dsp&lt;/a&gt;, &lt;a href=&quot;/safec-docs/ko/stdlib/http.html&quot;&gt;http&lt;/a&gt;, 그리고 &lt;a href=&quot;/safec-docs/api/&quot;&gt;std API 레퍼런스&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;의 모듈별 &lt;em&gt;Breaking changes&lt;/em&gt; 목록&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;try&quot; tabindex=&quot;-1&quot;&gt;사용해 보기 &lt;a class=&quot;header-anchor&quot; href=&quot;#try&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;이 모든 것이 &lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-7.html&quot;&gt;1.0.0-beta-7&lt;/a&gt;로 릴리스되었습니다. &lt;a href=&quot;/safec-docs/ko/install.html&quot;&gt;설치&lt;/a&gt;하거나 &lt;a href=&quot;/safec-docs/ko/playground.html&quot;&gt;플레이그라운드&lt;/a&gt;에서 언어를 써 보세요. 의존하던 무언가가 컴파일러의 설명 없이 깨졌다면 &lt;a href=&quot;https://github.com/safec-org/SafeC/issues&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;이슈를 열어&lt;/a&gt; 주세요.&lt;/p&gt;
</content>
</entry>
<entry>
<title>이번 주기의 SafeC: 비동기, 오디오, 웹 스택, GUI 툴킷, HTTPS</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/this-release-cycle.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/this-release-cycle.html</id>
<published>2026-10-25T00:00:00Z</published>
<updated>2026-10-25T00:00:00Z</updated>
<author><name>SafeC 팀</name></author>
<category term="release"/>
<category term="std"/>
<category term="async"/>
<category term="audio"/>
<category term="web"/>
<category term="gui"/>
<summary>1.0.0-beta-6 이후 SafeC 표준 라이브러리에 Rust 스타일 비동기, 실시간 오디오와 MIDI, HTTPS를 포함한 완전한 웹 스택, Wayland와 브라우저에서도 도는 안티에일리어싱 GUI 툴킷, 섹션 단위로 미리 빌드된 std가 추가되었습니다. 문서는 이제 SafeC로 빌드되고, Windows CI가 다시 통과합니다.</summary>
<content type="html">&lt;blockquote&gt;
&lt;p&gt;2026-10-27에 &lt;strong&gt;&lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-7.html&quot;&gt;1.0.0-beta-7&lt;/a&gt;로 릴리스되었습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-6.html&quot;&gt;1.0.0-beta-6&lt;/a&gt; 이후 몇 주는 표준 라이브러리에 쓰였습니다. 이제 HTTP를 서비스하고, 창을 열고, 오디오를 재생하고, future를 await하는 프로그램을 &lt;code&gt;std&lt;/code&gt;만으로 작성할 수 있습니다. 아래 내용은 모두 &lt;code&gt;main&lt;/code&gt;에 병합되었고(풀 리퀘스트 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;–&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/67&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#67&lt;/a&gt;) 다음 릴리스에 포함됩니다(&lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;은 #69부터 기록하며, beta-6 이후 전체 내용은 &lt;a href=&quot;/safec-docs/ko/blog/whats-coming-next.html&quot;&gt;다음 릴리스 미리 보기&lt;/a&gt;에 정리했습니다).&lt;/p&gt;
&lt;h2 id=&quot;async&quot; tabindex=&quot;-1&quot;&gt;std/async: 언어 코루틴 없는 future &lt;a class=&quot;header-anchor&quot; href=&quot;#async&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/stdlib/async.html&quot;&gt;&lt;code&gt;std/async&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/61&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#61&lt;/a&gt;)는 Rust의 &lt;code&gt;Future&lt;/code&gt; / &lt;code&gt;Poll&lt;/code&gt; / &lt;code&gt;Waker&lt;/code&gt; / &lt;code&gt;Context&lt;/code&gt; 모델을 라이브러리로 SafeC에 가져옵니다. future는 &lt;code&gt;poll&lt;/code&gt; 메서드를 가진 구조체이고, &lt;code&gt;ASYNC_BEGIN&lt;/code&gt; / &lt;code&gt;AWAIT&lt;/code&gt; / &lt;code&gt;ASYNC_RETURN&lt;/code&gt; 매크로가 이를 &lt;code&gt;goto&lt;/code&gt; 기반의 재개 가능한 상태 머신으로 바꿉니다. await를 넘어 살아 있는 지역 변수는 모두 구조체에 저장됩니다.&lt;/p&gt;
&lt;p&gt;그 위에 타이머, &lt;code&gt;join&lt;/code&gt; / &lt;code&gt;select&lt;/code&gt; / timeout 조합기, 채널, &lt;code&gt;Mutex&lt;/code&gt;, &lt;code&gt;Semaphore&lt;/code&gt;, &lt;code&gt;Notify&lt;/code&gt;, 취소, 베어메탈과 wasm32에서도 도는 결정론적이고 힙을 쓰지 않는 단일 스레드 &lt;code&gt;LocalExecutor&lt;/code&gt;, 멀티스레드 &lt;code&gt;ThreadPool&lt;/code&gt;, 호스트 &lt;code&gt;block_on&lt;/code&gt;, epoll·kqueue·WSAPoll 리액터 위의 비동기 TCP를 제공하는 &lt;code&gt;IoDriver&lt;/code&gt; + &lt;code&gt;Runtime&lt;/code&gt;이 있습니다. 컴파일러는 이를 위해 &lt;code&gt;goto&lt;/code&gt; 규칙(중복 레이블, 선언을 건너뛰는 점프, &lt;code&gt;return&lt;/code&gt; 뒤의 레이블)을 익혔고, &lt;code&gt;safeguard&lt;/code&gt;에는 매크로 기반 패키지를 위한 &lt;code&gt;[build] compat_preprocessor&lt;/code&gt;가 생겼습니다. &lt;code&gt;examples/async_demo&lt;/code&gt;를 보세요.&lt;/p&gt;
&lt;h2 id=&quot;audio&quot; tabindex=&quot;-1&quot;&gt;std/audio: 실시간 오디오와 MIDI &lt;a class=&quot;header-anchor&quot; href=&quot;#audio&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/safec-docs/ko/stdlib/audio.html&quot;&gt;&lt;code&gt;std/audio&lt;/code&gt;&lt;/a&gt;(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/59&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#59&lt;/a&gt;)는 오디오 스트림과 MIDI 포트를 위한 콜백 기반 API 하나로, 포맷 변환을 포함합니다. 오디오 백엔드는 ALSA, JACK, Core Audio, WASAPI, Web Audio, 그리고 테스트용 더미 장치. MIDI는 메시지 타입·파서·락프리 큐로 된 MIDI 코어 위에 ALSA 시퀀서, JACK, Core MIDI, WinMM, Web MIDI가 있습니다. 런타임 테스트는 더미 백엔드, ALSA의 null·file PCM, JACK 루프백, MIDI를 다루며 Windows는 Wine에서 확인합니다. &lt;code&gt;examples/audio_demo&lt;/code&gt;는 장치를 나열하고, 사인파를 재생하고, MIDI를 모니터링합니다. 그 과정에서 &lt;code&gt;safeguard&lt;/code&gt;는 &lt;code&gt;_macos&lt;/code&gt;, &lt;code&gt;_wasm&lt;/code&gt; 플랫폼별 std 소스를 지원하게 되었습니다.&lt;/p&gt;
&lt;h2 id=&quot;web&quot; tabindex=&quot;-1&quot;&gt;웹 스택 &lt;a class=&quot;header-anchor&quot; href=&quot;#web&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/57&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#57&lt;/a&gt;은 &lt;a href=&quot;/safec-docs/ko/stdlib/http.html&quot;&gt;&lt;code&gt;std/http&lt;/code&gt;&lt;/a&gt;를 실제 서비스를 위한 스택으로 다시 만들었습니다: 구조화된 헤더와 요청/응답 헬퍼, chunked 전송을 지원하는 keep-alive &lt;code&gt;HttpServer&lt;/code&gt;, 미들웨어와 경로 패턴을 갖춘 &lt;code&gt;Router&lt;/code&gt;, 정적 파일, 쿠키, multipart 폼, server-sent events, WebSocket 업그레이드, 그리고 리다이렉트를 따라가고 gzip을 푸는 URL 클라이언트. 함께 &lt;code&gt;std/encoding/url&lt;/code&gt;(RFC 3986 파싱과 해석, 쿼리 매개변수, 폼 인코딩)과 &lt;code&gt;std/encoding/deflate&lt;/code&gt;(DEFLATE, zlib, gzip, CRC-32, Adler-32)가 들어왔습니다.&lt;/p&gt;
&lt;p&gt;브라우저 쪽에서는 &lt;a href=&quot;/safec-docs/ko/stdlib/wasm.html&quot;&gt;&lt;code&gt;std/wasm&lt;/code&gt;&lt;/a&gt;이 이벤트, 타이머, fetch, 스토리지, 히스토리 등 DOM과 브라우저 API 전체와 상호 운용하게 되었고, JavaScript 글루가 std에 포함되어 Node에서 테스트됩니다. &lt;code&gt;examples/fullstack_demo&lt;/code&gt;는 둘을 합칩니다: Router 서버와 SafeC→wasm 클라이언트.&lt;/p&gt;
&lt;h2 id=&quot;gui&quot; tabindex=&quot;-1&quot;&gt;std/gui: GUI 툴킷 &lt;a class=&quot;header-anchor&quot; href=&quot;#gui&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;은 &lt;a href=&quot;/safec-docs/ko/stdlib/gui.html&quot;&gt;&lt;code&gt;std/gui&lt;/code&gt;&lt;/a&gt;를 툴킷으로 만들었습니다: TrueType 폰트 로딩·커닝·텍스트 레이아웃을 갖춘 안티에일리어싱 벡터 캔버스(&lt;a href=&quot;/safec-docs/ko/stdlib/gui-graphics.html&quot;&gt;GUI 그래픽&lt;/a&gt;), 레이아웃과 테마를 지원하는 리테인드 &lt;a href=&quot;/safec-docs/ko/stdlib/gui-widgets.html&quot;&gt;위젯 툴킷&lt;/a&gt;, 여러 창 애플리케이션을 위한 &lt;code&gt;GuiApp&lt;/code&gt; — 모두 이식 가능한 창 계층 아래의 &lt;code&gt;GuiBackend&lt;/code&gt; 인터페이스 위에 있습니다. 캔버스 테스트는 골든 이미지와 비교하고, 위젯 테스트는 헤드리스 백엔드에서, 두 창 &lt;code&gt;GuiApp&lt;/code&gt; 테스트는 X11(Xvfb)과 Win32(Wine)에서 돌아갑니다. &lt;code&gt;examples/gui_hello&lt;/code&gt;와 모든 위젯을 보여 주는 &lt;code&gt;examples/gui_gallery&lt;/code&gt;를 실행해 보세요.&lt;/p&gt;
&lt;p&gt;이어서 &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#65&lt;/a&gt;가 툴킷을 &lt;a href=&quot;/safec-docs/ko/stdlib/gui-platforms.html&quot;&gt;더 많은 플랫폼&lt;/a&gt;으로 넓혔습니다: Linux에서 실행 시점에 선택되는 Wayland 백엔드, 페이지 안의 창·IME 텍스트 입력·DOM 상호 운용과 함께 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;나 WebGL로 그리는 WebAssembly 백엔드, 그리고 OpenGL ES(EGL), Metal, Direct3D 11 GPU 프레젠터. &lt;code&gt;safeguard bundle --target wasm32&lt;/code&gt;는 GUI 앱을 실행 가능한 웹 페이지로 패키징합니다.&lt;/p&gt;
&lt;h2 id=&quot;sections&quot; tabindex=&quot;-1&quot;&gt;섹션 단위로 미리 빌드된 std &lt;a class=&quot;header-anchor&quot; href=&quot;#sections&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;이제 릴리스는 플랫폼마다 표준 라이브러리를 &lt;em&gt;섹션&lt;/em&gt; — &lt;code&gt;core&lt;/code&gt;, &lt;code&gt;collections&lt;/code&gt;, &lt;code&gt;gui&lt;/code&gt;, &lt;code&gt;ml&lt;/code&gt; 같은 std의 최상위 디렉터리 — 당 아카이브 하나로 미리 빌드해 제공합니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;). &lt;code&gt;safeguard&lt;/code&gt;는 프로젝트가 쓰는 섹션을 컴파일하는 대신 링크하고, &lt;code&gt;install.sh --std=...&lt;/code&gt; / &lt;code&gt;install.ps1 -Std ...&lt;/code&gt;로 설치할 섹션을 고릅니다. std는 이제 디버그 빌드에서도 항상 최적화되어 컴파일되며, 릴리스 바이너리는 macOS 11과 glibc 2.25(Debian 10, Ubuntu 18.04, RHEL 8 이후)를 대상으로 합니다.&lt;/p&gt;
&lt;h2 id=&quot;docs&quot; tabindex=&quot;-1&quot;&gt;SafeC로 빌드하는 문서 &lt;a class=&quot;header-anchor&quot; href=&quot;#docs&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;지금 읽고 있는 문서 사이트는 이제 VitePress 대신 SafeC 프로그램이 생성합니다. 이를 위해 정적 사이트 생성기에 필요한 std 기능이 추가되었습니다(&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/58&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#58&lt;/a&gt;): 파일 전체를 다루는 &lt;code&gt;File::read_to_string&lt;/code&gt; / &lt;code&gt;write_bytes&lt;/code&gt;와 함께 &lt;a href=&quot;/safec-docs/ko/stdlib/dir.html&quot;&gt;&lt;code&gt;std/dir&lt;/code&gt;와 &lt;code&gt;std/path&lt;/code&gt;&lt;/a&gt;, 컨테이너·헤딩 id·렌더 훅을 지원하는 CommonMark + GFM &lt;a href=&quot;/safec-docs/ko/stdlib/serial.html&quot;&gt;마크다운&lt;/a&gt; 파서, YAML 플로 컬렉션과 블록 스칼라, &lt;code&gt;html_unescape&lt;/code&gt; / &lt;code&gt;html_strip_tags&lt;/code&gt;, &lt;code&gt;memory.grow&lt;/code&gt; 위에서 크기 클래스를 재사용하는 할당기를 갖춘 wasm 런타임, &lt;a href=&quot;/safec-docs/ko/advanced/scx.html&quot;&gt;scx&lt;/a&gt; 템플릿 수정. 컴파일러는 이제 C의 &lt;code&gt;\a \b \f \v \e&lt;/code&gt; 이스케이프를 인식합니다. &lt;a href=&quot;/safec-docs/ko/blog/new-website.html&quot;&gt;새 웹사이트&lt;/a&gt;는 이 모든 것 위에 만들어졌습니다.&lt;/p&gt;
&lt;h2 id=&quot;windows&quot; tabindex=&quot;-1&quot;&gt;Windows 수정 &lt;a class=&quot;header-anchor&quot; href=&quot;#windows&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#64&lt;/a&gt;로 Windows CI가 다시 통과합니다: 컴파일러는 ABI 패스가 제네릭 함수를 다시 만들 때도 그 COMDAT을 유지하고, &lt;code&gt;std/sched&lt;/code&gt;는 &lt;code&gt;WSAStartup&lt;/code&gt;에 실제 408바이트 &lt;code&gt;WSADATA&lt;/code&gt;를 넘기며, WSAPoll 리액터는 디스패치 후 감시 목록을 인덱싱하지 않습니다. &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;의 작은 컴파일러 수정도 있습니다: &lt;code&gt;f&lt;/code&gt; 접미사가 붙은 부동소수점 리터럴은 &lt;code&gt;float&lt;/code&gt;입니다.&lt;/p&gt;
&lt;h2 id=&quot;https&quot; tabindex=&quot;-1&quot;&gt;HTTPS &lt;a class=&quot;header-anchor&quot; href=&quot;#https&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;이 글을 쓰는 동안 마지막 조각이 병합되었습니다: &lt;a href=&quot;https://github.com/safec-org/SafeC/pull/66&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#66&lt;/a&gt;은 &lt;a href=&quot;/safec-docs/ko/stdlib/tls.html&quot;&gt;&lt;code&gt;std/tls&lt;/code&gt;&lt;/a&gt;를 추가합니다. 운영체제의 TLS가 있으면 그것을 — OpenSSL(실행 시점에 로드), SChannel, SecureTransport — 쓰고, 없으면 SafeC로 작성한 TLS 1.3 엔진(클라이언트와 서버)을 쓰며, X.509 파싱, 인증서 경로 검증, 시스템 신뢰 루트를 갖췄습니다. &lt;code&gt;std/crypto&lt;/code&gt;에는 이를 위한 X25519, P-256 / P-384 ECDH·ECDSA, RSA PKCS#1 v1.5·PSS, HKDF, ChaCha20이 추가되었습니다. 이로써 &lt;code&gt;std/http&lt;/code&gt;는 &lt;code&gt;http_fetch&lt;/code&gt; 계열과 SSE 클라이언트에서 &lt;code&gt;https://&lt;/code&gt;를, &lt;code&gt;WsConn&lt;/code&gt;은 &lt;code&gt;wss://&lt;/code&gt;를 지원하고, &lt;code&gt;HttpServer&lt;/code&gt;는 &lt;code&gt;TlsServerConfig&lt;/code&gt;로 HTTPS를 서비스합니다.&lt;/p&gt;
&lt;h2 id=&quot;try&quot; tabindex=&quot;-1&quot;&gt;써 보기 &lt;a class=&quot;header-anchor&quot; href=&quot;#try&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;위 내용은 모두 &lt;code&gt;main&lt;/code&gt;에 있습니다. 다음 릴리스 전까지는 &lt;a href=&quot;/safec-docs/ko/install.html#quick-install&quot;&gt;소스에서 빌드&lt;/a&gt;하거나, &lt;a href=&quot;/safec-docs/ko/blog/releases/v1.0.0-beta-6.html&quot;&gt;1.0.0-beta-6&lt;/a&gt;을 설치하고 &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;을 따라가세요.&lt;/p&gt;
</content>
</entry>
<entry>
<title>SafeC 1.0.0-beta-6 릴리스</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-6.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-6.html</id>
<published>2026-10-22T00:00:00Z</published>
<updated>2026-10-22T00:00:00Z</updated>
<author><name>SafeC 릴리스 노트</name></author>
<category term="release"/>
<summary>SafeC 1.0.0-beta-6 릴리스 노트.</summary>
<content type="html">&lt;p&gt;SafeC &lt;strong&gt;1.0.0-beta-6&lt;/strong&gt;가 2026-10-22에 릴리스되었습니다. 프리릴리스이며, 언어와 표준 라이브러리는 아직 빠르게 바뀌고 있습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;아래 변경 사항은 릴리스 기록의 영어 원문입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 릴리스를 그대로 설치하려면:&lt;/p&gt;
&lt;div class=&quot;language-bash code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;bash&lt;/span&gt;&lt;pre&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/safec-org/SafeC/main/install.sh | bash -s -- --version=v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;language-powershell code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;powershell&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&amp;amp; ([scriptblock]::&lt;span class=&quot;tok-fn&quot;&gt;Create&lt;/span&gt;((irm https://raw.githubusercontent.com/safec-org/SafeC/main/install.ps1))) -Version v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;풀-리퀘스트&quot; tabindex=&quot;-1&quot;&gt;풀 리퀘스트 &lt;a class=&quot;header-anchor&quot; href=&quot;#풀-리퀘스트&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;cuDNN convolution / U-Net and cuFFT transforms on the CUDA backend (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(cuda): close the H200 gaps vs PyTorch (cuDNN graph API, pinned transfers) + fp16/bf16 buffers (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix: std::alloc size class 33 read past the cache tables (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf: CPU SIMD/threads for std/dsp and std/ml; float DSP; vendor BLAS (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std): slab allocator, quarantine byte budget, faster Vec/HashMap, half-spectrum rFFT, arena FeatureMaps (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(std/ml): flash and linear attention on ROCm (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std/ml): MPS bf16 decode/flash/linear attention, faster RMSNorm and GEMV (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(cuda): flash and linear attention (cuDNN SDPA, tensor-core kernels) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/11&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#11&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(cuda): faster head-dim-128 linear and fp32 flash attention (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/12&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#12&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(std): panic/log print through stderr_compat.h (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/10&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#10&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std/ml): MPS flash attention on simdgroup matrices, chunk-parallel linear attention, CUDA/ROCm-compatible API (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/13&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#13&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std/ml): ROCm attention on matrix cores (MFMA) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/14&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#14&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std/ml): 8-simdgroup MPS flash attention threadgroups where they win (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/15&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#15&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;safeguard: honor $SAFEC and key the std archive cache on the compiler (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/16&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#16&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std/dsp): Accelerate vDSP for FIR on Apple; fix fft.sc linking on macOS (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/17&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#17&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(std/ml): ROCm decode ops (half GEMV, RMSNorm, GELU); gpu_mps links off Apple (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/18&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#18&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(std/ml): CPU half_gemv; tensor_blas/tensor_vdsp link on every platform (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/19&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#19&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml CUDA: decode ops from the Gemma 4 engine (half GEMV, RMSNorm, GELU, split-KV attention) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/20&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#20&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perf(std/ml): Apple Silicon half_gemv, half_gemv_batch, P-core pool (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/21&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#21&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(std/sched): wait out connect() in the http and websocket clients (macOS) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/22&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#22&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/http: bound connect and handshake time in HTTP/WebSocket clients (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/23&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#23&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: residual/pooling, Mamba SSM, training stack, generative models, RL, LoRA/QLoRA (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/24&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#24&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(std): panic/log print through stderr_compat.h (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/26&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#26&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: trainable convnets; fp16/bf16 mixed precision on CPU, ROCm and CUDA (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/27&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#27&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml CUDA: faster mixed-precision ops and 16-bit convolutions (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/28&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#28&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: faster CPU training (sgemm packs once per call, vectorized optimizer) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/29&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#29&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(safeguard): prebuilt and local library dependencies; fix [[dependencies]] parsing (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/31&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#31&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: device-resident training on ROCm (nn_rocm.h) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/30&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#30&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml nn_rocm: MIOpen convolutions, fused passes, fp16/bf16 training (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/32&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#32&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: audit outside std/ml — bug fixes, convention fixes, broader tests (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/33&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#33&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: one training interface over CPU and ROCm (traits), backend picked at build time (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/34&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#34&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: operations on stateful types are methods (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/35&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#35&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: AES-GCM TLS records, real MMU formats, chip-generic HAL, verified GUI backends (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/36&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#36&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Trait composition and bounded generic structs; std/ml models as composed traits (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/37&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#37&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: autograd as methods (Tensor::backward / zero_grad, Autograd state) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/38&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#38&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(compiler): static methods, keyword method names, return-type inference (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/39&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#39&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(compiler): methods with their own type parameters (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/40&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#40&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: static-method constructors; single-tensor ops as methods (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/41&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#41&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compiler: static calls through a type parameter; generic functions as values (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/42&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#42&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std/ml: generic DenseTensor&lt;E&gt;; HalfTensor/BF16Tensor with autograd (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/44&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#44&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;std: methods, static constructors and composed traits (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/45&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#45&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(compiler): struct-body declarations, trait method shapes, newtype if const, pointer inference (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/43&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#43&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ml/mps: typed MpsBuf, GPU Mlp training, const-pointer global and dispatch fixes (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/46&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#46&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ml: train on ROCm, CUDA and Metal through tensor devices; fp16/bf16, SparseTensor (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/47&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#47&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ml: trainable attention and transformers on tensor devices; fused attention kernels (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/48&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#48&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ml/device_cuda: cuDNN graph plans for device convolutions; first H200 run (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/49&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#49&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ml/device: every kernel on the Metal GPU from the shared kernel source; macOS link fix (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/50&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#50&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/releases/tag/v1.0.0-beta-6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;GitHub 릴리스 페이지&lt;/a&gt; · &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;&lt;/p&gt;
</content>
</entry>
<entry>
<title>SafeC 1.0.0-beta-5 릴리스</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-5.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-5.html</id>
<published>2026-10-20T00:00:00Z</published>
<updated>2026-10-20T00:00:00Z</updated>
<author><name>SafeC 릴리스 노트</name></author>
<category term="release"/>
<summary>SafeC 1.0.0-beta-5 릴리스 노트.</summary>
<content type="html">&lt;p&gt;SafeC &lt;strong&gt;1.0.0-beta-5&lt;/strong&gt;가 2026-10-20에 릴리스되었습니다. 프리릴리스이며, 언어와 표준 라이브러리는 아직 빠르게 바뀌고 있습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;아래 변경 사항은 릴리스 기록의 영어 원문입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 릴리스를 그대로 설치하려면:&lt;/p&gt;
&lt;div class=&quot;language-bash code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;bash&lt;/span&gt;&lt;pre&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/safec-org/SafeC/main/install.sh | bash -s -- --version=v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;language-powershell code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;powershell&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&amp;amp; ([scriptblock]::&lt;span class=&quot;tok-fn&quot;&gt;Create&lt;/span&gt;((irm https://raw.githubusercontent.com/safec-org/SafeC/main/install.ps1))) -Version v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/releases/tag/v1.0.0-beta-5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;GitHub 릴리스 페이지&lt;/a&gt; · &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;&lt;/p&gt;
</content>
</entry>
<entry>
<title>SafeC 1.0.0-beta-4 릴리스</title>
<link rel="alternate" type="text/html" href="https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-4.html"/>
<id>https://safec-org.github.io/safec-docs/ko/blog/releases/v1.0.0-beta-4.html</id>
<published>2026-10-20T00:00:00Z</published>
<updated>2026-10-20T00:00:00Z</updated>
<author><name>SafeC 릴리스 노트</name></author>
<category term="release"/>
<summary>SafeC 1.0.0-beta-4 릴리스 노트.</summary>
<content type="html">&lt;p&gt;SafeC &lt;strong&gt;1.0.0-beta-4&lt;/strong&gt;가 2026-10-20에 릴리스되었습니다. 프리릴리스이며, 언어와 표준 라이브러리는 아직 빠르게 바뀌고 있습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;아래 변경 사항은 릴리스 기록의 영어 원문입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 릴리스를 그대로 설치하려면:&lt;/p&gt;
&lt;div class=&quot;language-bash code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;bash&lt;/span&gt;&lt;pre&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/safec-org/SafeC/main/install.sh | bash -s -- --version=v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;language-powershell code-block&quot;&gt;&lt;button class=&quot;copy&quot; type=&quot;button&quot; aria-label=&quot;코드 복사&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;powershell&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&amp;amp; ([scriptblock]::&lt;span class=&quot;tok-fn&quot;&gt;Create&lt;/span&gt;((irm https://raw.githubusercontent.com/safec-org/SafeC/main/install.ps1))) -Version v1.&lt;span class=&quot;tok-num&quot;&gt;0.0&lt;/span&gt;-beta-&lt;span class=&quot;tok-num&quot;&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;풀-리퀘스트&quot; tabindex=&quot;-1&quot;&gt;풀 리퀘스트 &lt;a class=&quot;header-anchor&quot; href=&quot;#풀-리퀘스트&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Honor volatile on variables, fields and pointee types (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Target arch macros + WebAssembly targets (wasm32/wasm64) (&lt;a href=&quot;https://github.com/safec-org/SafeC/pull/2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#2&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/safec-org/SafeC/releases/tag/v1.0.0-beta-4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;GitHub 릴리스 페이지&lt;/a&gt; · &lt;a href=&quot;/safec-docs/ko/changelog.html&quot;&gt;변경 내역&lt;/a&gt;&lt;/p&gt;
</content>
</entry>
</feed>
