Skip to content

표준 라이브러리 개요

SafeC 표준 라이브러리(std/)는 핵심 유틸리티, 컬렉션, 얼로케이터, 네트워킹, 파일시스템, DSP, 디버깅, 보안을 아우릅니다. 각 모듈은 .h(선언)와 .sc(구현) 파일 쌍으로 구성됩니다. prelude.h를 include하면 모든 모듈을 한 번에 가져올 수 있습니다.

c
#include "prelude.h"

int main() {
    println("Hello from SafeC stdlib!");
    return 0;
}

모듈 분류

코어

모듈헤더설명
memmem.h할당, 해제, 안전한 memcpy/memmove/memset/memcmp; 캐시라인 헬퍼, 정렬 유틸리티
ioio.h서식화된 출력(stdout/stderr), stdin 입력, 버퍼 서식화
strstr.h문자열 길이, 비교, 복사, 검색, 토큰화, 복제
mathmath.h상수(PI, E 등), float/double 수학, 분류
threadthread.h스레드, 뮤텍스, 조건 변수, 읽기-쓰기 락
atomicatomic.h락-프리 원자 연산 (C11 <stdatomic.h> 래퍼)

직렬화

모듈헤더설명
valueserial/value.h형식에 구애받지 않는 Value 트리 (Null/Bool/Int/Float/String/Array/Object)
jsonserial/json.hJSON 작성기 + 파서, 정확한 왕복 변환
xmlserial/xml.hXML 작성기 + 파서 (자체 문법 왕복)
htmlserial/html.hHTML 조각 작성기 + 파서 (<dl>/<ul> 형태)

컬렉션

모듈헤더설명
slicecollections/slice.h경계 검사된 팻 포인터 + 제네릭 배열 함수
veccollections/vec.hpush/pop/sort/filter/map을 지원하는 동적 배열
stringcollections/string.h가변, 힙 할당 성장형 문자열 (30개 이상의 메서드)
stackcollections/stack.h성장형 배열 기반 LIFO 스택
queuecollections/queue.hFIFO 원형 버퍼 큐
listcollections/list.h이중 연결 리스트
mapcollections/map.h해시 맵 (오픈 어드레싱, 선형 탐사)
bstcollections/bst.h불균형 이진 탐색 트리
btreecollections/btree.hB-트리 정렬된 맵 (차수-4, 256노드 풀)
ringbuffercollections/ringbuffer.hSPSC 락-프리 2의 거듭제곱 링 버퍼
static_collectionscollections/static_vec.h헤더 전용 제로-힙 vec + map 매크로

얼로케이터

모듈헤더설명
bumpalloc/bump.h선형 범프-포인터 아레나; O(1) 할당, 리셋 전용 해제
slaballoc/slab.h고정 크기 객체용 프리리스트 슬랩; O(1) 할당/해제
poolalloc/pool.h혼합된 내용을 위한 고정 블록 풀; O(1) 할당/해제
tlsfalloc/tlsf.hTwo-Level Segregated Fit; 최악의 경우도 O(1)인 범용 힙

동기화

모듈헤더설명
spinlocksync/spinlock.h바쁜 대기(busy-wait) 상호 배제 (__sync_lock_test_and_set)
lockfreesync/lockfree.h컴파일러 배리어를 사용하는 대기-프리 SPSC 링 버퍼
channelsync/channel.h언어 내장 바운디드 블로킹 MPMC 채널(chan_create/chan_send/chan_recv/chan_close)을 감싸는 타입 지정(chan_send_t<T>/chan_recv_t<T>) 래퍼
mpscsync/mpsc.h스핀락으로 보호되는 바운디드 MPSC 링 버퍼, 논블로킹 API
tasksync/task.h협조적 라운드로빈 태스크 스케줄러
thread_baresync/thread_bare.h우선순위 기반 프리스탠딩 스레드 (OS 없음)
bare_spawnsync/bare_spawn.sc프리스탠딩 타깃에서 spawn/join 언어 키워드를 위한 참조 "훅" 백엔드

IPC

모듈헤더설명
pipeipc/pipe.h익명 파이프 (호스티드) — 단방향 바이트 스트림, 보통 fork() 이후 부모/자식 간
udsipc/uds.h유닉스 도메인 소켓 (호스티드) — 무관한 프로세스 간의 이름 지정 IPC, 논블로킹/Reactor와 페어링 가능

실시간 스케줄러

모듈헤더설명
reactorsched/reactor.hReactor — kqueue 기반 I/O 이벤트 루프가 TaskScheduler를 구동
io_nbsched/io_nb.h리액터와 함께 사용하도록 설계된 논블로킹 파일/소켓 헬퍼

네트워킹

모듈헤더설명
net-corenet/net_core.hPacketBuf, NetIf, 바이트 순서 유틸리티, IP/MAC 헬퍼
ethernetnet/ethernet.hEthernetHdr, eth_parse, eth_build
arpnet/arp.hArpTable (16개 항목 FIFO), arp_build_packet, arp_parse_packet
ipv4net/ipv4.hIpv4Hdr, 인터넷 체크섬, ipv4_parse, ipv4_build
ipv6net/ipv6.hIpv6Addr/Ipv6Hdr, 링크 로컬/루프백 판별, ipv6_frame
udpnet/udp.hUdpHdr, udp_parse, udp_build, udp_frame
tcpnet/tcp.hTcpConn 10상태 상태 기계, 의사 헤더 체크섬
dnsnet/dns.hA 레코드 쿼리 빌더 + 응답 파서 (레이블 압축)
dhcpnet/dhcp.hDhcpClient DORA 핸드셰이크

HTTP & 웹

모듈헤더설명
httphttp/http.hHTTP/1.1 클라이언트 + 서버 (http_serve/http_serve_threaded), 요청/응답 타입
corshttp/cors.hCORS 프리플라이트 감지 + 응답 헤더
jwthttp/jwt.hHS256 JWT 서명/검증 (HMAC-SHA256)
oauth2http/oauth2.hOAuth2 클라이언트: 인가 코드 + 리프레시 토큰 교환 (RFC 6749)
websockethttp/websocket.hWebSocket 핸드셰이크 + 프레임 읽기/쓰기
rpcrpc/rpc.hgRPC에서 영감을 받은 HTTP 기반 RPC (길이 프리픽스 프레이밍, 경로 기반 디스패치)
server_fnrpc/server_fn.h"한 번 작성하고 어디서든 호출" 방식의 JSON 마셜링 서버 함수 (Dioxus/Leptos 스타일)
reactivereactive/signal.hSignal<T> 세밀한 반응형 상태 (WASM 클라이언트 하이드레이션)
wasmwasm/dom.h, wasm/hydrate.hwasm32 DOM 상호 운용 + 클라이언트 하이드레이션; wasm/wasm_rt.h는 프리스탠딩 malloc/free 런타임(wasm32 전용 — 호스티드 stdlib 아카이브에는 절대 링크되지 않음)
scx해당 없음 (트랜스파일러)JSX/TSX 스타일 HTML 템플릿 — .scx 파일은 safec가 보기 전에 일반 SafeC로 트랜스파일됨

머신러닝 — ML 참고

GUI (std/gui/)

포터블한 GuiWindow/GuiEvent API 위에 만들어진 리테인 모드 위젯 툴킷으로, 일치하는 .sc 파일을 include하여 선택하는 네 가지 백엔드가 있습니다: gui_cocoa.sc(macOS, Objective-C 런타임 상호 운용 — 실제 하드웨어에서 완전히 검증됨), gui_win32.sc/gui_x11.sc(Windows/X11 — 실제 Win32/Xlib ABI 형태에 맞춰 작성 및 타입 검사됨, 미검증: Windows/X11 호스트가 없음), gui_fb.sc(베어메탈 선형 프레임버퍼 — 완전히 검증됨, OS 의존성 없음). gui_widget.h는 위젯 트리(컨테이너, 버튼/레이블/체크박스/텍스트 입력/슬라이더, 커스텀 위젯 확장 API)이며, gui_draw.h/gui_font.h는 프리미티브와 비트맵 폰트를 다루고, gui_png.h/gui_svg.h는 처음부터 작성된 PNG(DEFLATE)와 SVG 디코더/렌더러입니다.

파일시스템

모듈헤더설명
blockfs/block.hBlockDevice 드라이버 인터페이스 (함수 포인터 기반)
partitionfs/partition.hMBR 파티션 테이블 파서 (4개의 기본 항목)
vfsfs/vfs.h최장 접두사 마운트 라우팅을 사용하는 VFS; VfsNode 포워딩
fatfs/fat.hFAT32 읽기 전용 드라이버; 8.3 경로 탐색, 클러스터 체인
extfs/ext.hext2 읽기 전용 드라이버; 아이노드 탐색, 직접 블록 읽기
tmpfsfs/tmpfs.h인메모리 FS; 32개 아이노드, 64 KiB 데이터 풀; 완전한 CRUD

DSP & 실시간

모듈헤더설명
fixeddsp/fixed.hQ8.24 고정소수점 연산 (newtype Fixed = int)
dspdsp/dsp.hdsp_dot, dsp_scale, dsp_add, dsp_clip, dsp_peak, dsp_rms, SIMD-FMA dsp_dot_f64
complex_dspdsp/complex_dsp.h연산자 오버로딩을 지원하는 값 타입 Complex/FComplex (+,-,*,/,abs,arg,conj)
dftdsp/dft.h직접 O(n²) DFT/IDFT, 임의 길이 (float + Q8.24)
fftdsp/fft.h제자리 radix-2 Cooley-Tukey FFT/IFFT, O(n log n), 2의 거듭제곱 길이 (float + Q8.24)
convolutiondsp/convolution.h선형 컨볼루션 — 직접 O(len_x·len_h) (SIMD 가속) 및 FFT 기반 O(n log n)
windowdsp/window.h사각/Hann/Hamming/Blackman 분석 윈도우
filterdsp/filter.h일반 스트리밍 FIR/IIR (피드포워드/피드백) 차분 방정식 필터 (float + Q8.24)
biquaddsp/biquad.h2차 IIR 섹션 + RBJ "Audio EQ Cookbook" 설계기 + 일반 쌍선형 변환
dctdsp/dct.hDCT-II/DCT-III (JPEG/MPEG 스타일 이산 코사인 변환), float + Q8.24
stftdsp/stft.h단시간 푸리에 변환 + 역변환(윈도우 오버랩-애드) + 다중 해상도 STFT 손실
resampledsp/resample.h업/다운샘플링 — 최근접, 선형, 윈도우드-싱크(대역 제한); float + Q8.24 최근접/선형
ztransformdsp/ztransform.h임의 차수의 쌍선형(라플라스-투-Z) 변환 + Z-도메인 주파수 응답 평가기
combdsp/comb.h피드포워드/피드백 콤 필터 + Karplus-Strong 현 합성 (float + Q8.24)
minphasedsp/minphase.h실 켑스트럼을 통한 최소 위상 재구성 (호모모픽 처리)
cqtdsp/cqt.hConstant-Q 변환 (로그 간격 빈, 직접 상관 형식)
cwtdsp/cwt.h연속 웨이블릿 변환 (Morlet 웨이블릿, 시간-스케일 스칼로그램)
imagingdsp/imaging.h2D 컨볼루션, 2D FFT (행-열 분해), 가우시안/Sobel 커널
audio_bufferdsp/audio_buffer.h다채널 SPSC 오디오 링 버퍼 (인터리브드 Fixed 프레임)
timer_wheeldsp/timer_wheel.h256슬롯 O(1) 타이머 휠; 일회성 + 주기적

보안 & 암호학

모듈헤더설명
aescrypto/aes.hAES-128/256 ECB + CBC; 완전한 S-box + 키 확장
sha256crypto/sha256.hSHA-256/224; 스트리밍 및 원샷 API
rngcrypto/rng.hChaCha20 CSPRNG; rdrand//dev/urandom 시딩
secure_alloccrypto/secure_alloc.h해제 시 제로화를 수행하는 슬랩 얼로케이터
x509crypto/x509.hX.509 DER/ASN.1 파서; SAN, 와일드카드 호스트네임, 유효성
tlscrypto/tls.hTLS 1.3 레코드 레이어; AES-CBC + PKCS#7 + 논스 XOR 시퀀스

디버깅 & 프로파일링

모듈헤더설명
perfdebug/perf.h아키텍처별 디스패치되는 사이클 카운터 (RDTSC/cntvct_el0/CSR); ns 보정
coveragedebug/coverage.h1024지점 커버리지 트래커; COV_SITE() 매크로; report()
jtagdebug/jtag.h아키텍처별 debug_break; ARM/AArch64 세미호스팅; ITM 포트

SIMD

모듈헤더설명
simdsimd/simd.h포터블 코어: 네이티브 vec<T,N> 위의 f32x4/i32x8/... 타입 별칭; 로드/저장, splat, fma, min/max, 수평 축소
x86_64 / aarch64 / riscv / wasm / spirv / cortex_m / cuda / rocmsimd/*.hISA별 얇은 편의 레이어 (네이티브 우선 폭 명명, 실제 하드웨어 검증 노트) — 동일한 포터블 소스를 기반으로 하며 별도 구현 없음

하드웨어 추상화 레이어

모듈헤더설명
gpiohal/gpio.hGpioPin: 방향, read/write/toggle, 풀업/풀다운
i2chal/i2c.hI2cBus: 폴링 마스터 — write/read/write_read/probe
spihal/spi.hSpiDevice: 폴링 마스터 — transfer/write/read, 칩 셀렉트
uarthal/uart.hUart: 폴링 시리얼 — 바이트/문자열 I/O, 준비 플래그
timerhal/timer.hTimer: 주기/시작/정지/읽기/플래그
watchdoghal/watchdog.hWatchdog: 활성화/피드/리셋 원인 확인
cortex_mhal/cortex_m.hNVIC, SysTick, SCB (ARM Cortex-M)
aarch64hal/aarch64.h시스템 레지스터, Generic Timer, GICv2 (ARMv8-A)
riscvhal/riscv.hCSR 접근, CLINT, PLIC

인터럽트 & MMIO

모듈헤더설명
mmiointerrupt/mmio.hMmioReg + 자유 함수 레지스터 read/write/필드 접근
bitfieldinterrupt/bitfield.h순수 비트 조작 함수 (bf_extract32, bf_insert32, ...)
isrinterrupt/isr.h소프트웨어 ISR 디스패치 테이블 (256슬롯)
vector_tableinterrupt/vector_table.h하드웨어 벡터 테이블 — Cortex-M VTOR/RISC-V mtvec/AArch64 VBAR_EL1
clockinterrupt/clock.hPLL/클록 소스 구성

커널 프리미티브

모듈헤더설명
framekernel/frame.h비트맵 물리 프레임 얼로케이터 (4 KiB 프레임)
pagingkernel/paging.hPageEntry/PageTable — 원시 페이지 테이블 조작
mmukernel/mmu.hMmuContext — 2단계 가상 메모리, map/unmap/walk/TLB/activate
processkernel/process.hPCB — 프로세스 제어 블록
schedulerkernel/scheduler.hPCB 기반 우선순위 라운드로빈 스케줄러
ipckernel/ipc.hMailbox — 고정 용량 메시지 큐
syscallkernel/syscall.h시스템 콜 등록/디스패치 테이블

테스트 & 벤치마킹

모듈헤더설명
testtest/test.hTestSuite + ASSERT_* 매크로
benchtest/bench.hBenchSuite — 벽시계 기준 반복 벤치마크
fuzztest/fuzz.hFuzzTarget — 경량 인프로세스 뮤테이션 퍼저

유틸리티

헤더설명
bit.h비트 조작 (C23 <stdbit.h> + popcount/clz/ctz/bswap 내장 함수)
convert.h문자열 ↔ 숫자 파싱 (C11/C17), 실패 시 *ok 성공 플래그
dma.h캐시 일관성 DMA 버퍼 디스크립터 (64바이트 정렬)
fmt.h호출자가 제공한 버퍼로 서식화하는 안전한 snprintf 기반 서식화
heap.h통합 힙: TLSF 기반 정적 버퍼(프리스탠딩) 또는 malloc/free/realloc(호스티드)
log.h구성 가능한 로깅, LOG_LEVEL이 0이면 오버헤드 없음
panic.h옵트인 패닉 핸들러 — 기본값으로 무한 루프(프리스탠딩) 또는 abort()(호스티드)
result.h명시적 Result 오류 전파 타입 (힙 할당, ?T 옵셔널을 반영)
sys.h프로세스 제어 상수 (EXIT_SUCCESS/EXIT_FAILURE), PRNG 상수
complex.h복소수 (C99 <complex.h>), [real, imag] float/double 쌍

C 호환 헤더

헤더설명
assert.h런타임 어서션 (runtime_assert, assert_true); NDEBUG 지원
ctype.h문자 분류 (char_is_alpha, char_is_digit, ...) 및 변환
errno.h스레드 로컬 errno 값과 오류 설명 (C11)
fenv.h부동소수점 예외 플래그와 반올림 모드 (C99)
locale.h로케일 카테고리 상수 (C11)
signal.h시그널 핸들러 설치 및 디스패치 (C11)
time.h달력/벽시계 시간 (C11), sys.h의 고해상도 클록을 보완
stdckdint.h검사된 정수 연산 (C23 스타일 ckd_add/ckd_sub/ckd_mul)
stdint.h고정 폭 정수 타입
stddef.hsize_t, NULL, offsetof
stdbool.h불린 상수
limits.h정수 한계값
float.h부동소수점 한계값
inttypes.h고정 폭 타입을 위한 서식 매크로

제네릭 패턴

표준 라이브러리 자체의 컬렉션들은 SafeC의 제네릭 구조체 지원(제네릭 참고 — 이제 구조체와 유니온도 제네릭이 될 수 있습니다)보다 먼저 만들어졌고, 아직 그쪽으로 마이그레이션되지 않았습니다. 여전히 내부 자료구조에는 void* 구조체를 사용하며, 타입 안전한 접근을 위한 generic<T> 래퍼 함수를 함께 씁니다. T는 호출 지점에서 T* 인자로부터 단형화(monomorphization)를 통해 추론됩니다. 이 방식은 요소 타입 T마다 하나씩이 아니라, 컬렉션 타입당 하나의 컴파일된 구조체만 유지합니다 — 이는 제네릭 구조체의 존재 여부와 무관한 실질적인 트레이드오프이며, 단순히 그 부재에 대한 임시방편이 아닙니다(전체 근거는 컬렉션 참고).

c
#include "collections/vec.h"

int main() {
    struct Vec v = vec_new(sizeof(int));

    // 타입 소거된 API
    int x = 42;
    vec_push(&v, &x);

    // 제네릭 타입 래퍼 — T는 int* 인자로부터 추론됨
    vec_push_t(&v, 100);
    int* p = vec_at(&v, 0);  // int*를 반환

    vec_free(&v);
    return 0;
}

void*-plus-typed-wrapper 형태는 명시적 런타임 다형성(void* datafn 필드를 가진 구조체) 뒤에 있는 것과 동일한 일반적인 기법입니다 — 다형성 & OOP 참고.

표준 라이브러리 포함하기

개별 모듈:

c
#include "mem.h"
#include "io.h"
#include "collections/vec.h"

모든 모듈을 한 번에:

c
#include "prelude.h"

safeguard 패키지 매니저로 빌드할 때는 표준 라이브러리가 자동으로 build/deps/libsafec_std.a로 컴파일되어 링크됩니다.

수동으로 빌드할 때는 -I로 std 디렉터리를 전달하세요.

bash
./build/safec myfile.sc -I /path/to/SafeC/std --emit-llvm -o myfile.ll
clang myfile.ll -o myfile

MIT 라이선스로 배포됩니다.