C에서 union으로 타입 안전 제네릭 자료구조 만드는 4단계 기법

C에서 union으로 타입 안전 제네릭 자료구조 만드는 4단계 기법

  • Daniel Hooper가 union으로 타입 정보를 자료구조에 묶어 C에서 컴파일 타임 타입 검사를 받는 제네릭 자료구조 기법을 소개. 같은 방식의 사례를 다른 곳에서 본 적 없다고 밝힘
  • 매크로 헤더를 타입마다 반복 include하는 level 0 방식은 타입과 함수 정의를 찾기 어렵고, 코드 완성 지원이 약하고, 같은 함수가 복사돼 바이너리와 빌드 시간이 늘고, Foo_list_prepend()처럼 타입 접두어가 붙은 함수명을 강제함
  • level 1 void* 방식은 노드마다 할당 2회와 순회 시 캐시 미스 2회를 유발. level 2는 flexible array member로 노드와 데이터를 한 번에 할당해 이 문제를 없애지만 데이터 크기를 넘겨야 하고 memcpy가 필요함
  • list_alloc_front로 노드 메모리를 직접 초기화하면 memcpy를 피할 수 있고, malloc 대신 arena 할당자를 쓰라고 권함
  • 예제는 연결 리스트지만 map, 배열, 이진 트리 등 어떤 자료구조에도 적용된다고 밝힘

Hacker News opinions

David Priver의 Templates in C도 봐라, 링크 걸어둠. 걔가 C에 reflection 추가하기, _Generic 타입 재화, C2y REPL 인터프리터 DrC까지 만들었더라. 글 스타일이 간결하고 군더더기 없어서 좋음.

ㅋㅋ 어느 순간 C로 작은 컴파일러 만드는 수준까지 가네. 제네릭은 매크로로 하면 그렇게 어렵지도 않고 많이들 원하는 기능인데 reflection은 좀 웃기긴 함.

어 그거 나임! 내 글 좋아해줘서 반갑다.

나도 타입 안전 컨테이너 타입 정리한 글 썼는데 C23 변경사항 반영했고 복잡한 타입에도 잘 맞게 고쳤음. 링크 남겨둠.

(1 ? (item) : (list)->payload) 트릭 신기하더라. 최적화로 사라지지만 타입 비교는 그 전에 일어남. 좀 트릭 같긴 한데 되긴 되네.

컴파일은 되고 평가는 안 되는 표현식은 C++ 템플릿 메타프로그래밍의 기본임.

요즘은 좀 억지 트릭인 것 같음. 나도 제목 보고 _Generic 쓸 줄 알았는데 아니었음.

C에 기능을 계속 추가해서 C++처럼 새 언어를 만드는 게 가능한가?

Objective-C도 그렇게 나왔는데 사람들이 C로 그걸 다시 나쁘게 재발명하고 있음.

그런 언어 이미 많음. Zig 같은 것도 있고.

매크로 핵 진짜 싫음. 대부분 컨테이너 하나만 필요하니까 그냥 즉석에서 구현하는 게 더 깔끔함.

C++ 안 건드리려고 저 지경까지 가는 거임.

몇 년 동안 해봤는데 완전 구림. 제대로 된 제네릭 자료구조 필요하면 그냥 C++ 템플릿 써라. C는 결함 있는 언어임.

다른 언어에서 수년 전에 해결한 걸 왜 C 매크로로 재발명하는지 모르겠음. C++ 쓰면 되는데, 기존 C 코드베이스에 넣기도 꽤 간단하고.

C++ 런타임이랑 표준 라이브러리가 워낙 복잡해서 가능하면 안 건드리려 함. "C++도 단점이 있다"는 말은 눈알 빼는 것도 단점 있다는 소리랑 비슷함.

배열 컨테이너 하나 쓰자고 C 코드베이스를 C++로 옮기긴 싫음. 코드베이스를 C++의 엄격한 부분집합으로 유지하기가 매우 어려움.

C++ 많이 써봤는데 C++ 쪽이 훨씬 더 엉망임. C 코드베이스에 C++ 도입한 프로젝트에 기여하는데 안 했으면 싶음.

C99의 VLA 추가는 실수였다고 보는 C 프로그래머가 많던데, 이 접근법의 단점은 뭔가?

그래서 C11에서 선택적 부속서가 됐고 구글이 리눅스 커널에서 VLA를 다 걷어내는 데 돈을 냈음.

이 맥락에서 VLA랑 무슨 상관인지 모르겠음. VLA 필요하면 쓰면 되고 대부분 대안보다 나음.

해커뉴스
Haskell 블로그, foldl과 foldr 차이 설명 재게재: 지연 평가에서 foldl이 thunk 사슬로 공간을 선형으로 늘림치사 유전자 모기로 뎅기열 95% 줄였는데, 미국 승인은 15년째 공전 중C에서 union으로 타입 안전 제네릭 자료구조 만드는 4단계 기법2026 노벨 생리의학상, 광유전학 연 칼 디서로스·페터 헤게만·게오르크 나겔 3인 수상화웨이·퀄컴, 5G와 AI 포함 다년 특허 크로스라이선스와 미국 특허 매입 계약 발표벤 톰슨의 맥 미니, macOS 화면 공유 결함으로 루트 탈취…클로드 에이전트가 채굴기 발견Cloudflare, AI 에이전트용 Web Search API 베타 공개. Ceramic.ai, Exa, Linkup 3개 제공자 지원GrapheneOS, 픽셀 11에서 MTE 빠진 걸 확인하고 시리즈 건너뛰기 검토... 모토로라로 초점 이동독일 RobCo, $1B 밸류에이션으로 유럽 로봇 유니콘 등극덴마크 CPR 레지스터에서 880만 명 이름·주소·주민번호 무단 유출레드햇 벤치마크: Jev 같은 결정 모델, LLM-as-a-judge와 전통 분류기를 이기지 못함석유 제품을 식물 소재로 바꾸는 리뷰가 해커뉴스 프론트페이지에 올라 바이오연료 회의론으로 번짐Claude에게 스캐너를 맡겼다가 기어를 부순 뒤, 네거티브 변환만 자동화한 35mm 필름 스캔 파이프라인Xray-core, 인증서 검증 우회 취약점 반년간 은폐 의혹...'코드 단순화'라며 조용히 패치Stripe Katie Dill의 AI 시대 'zombie UI' 경계 강연, 해커뉴스는 "예술은 확장 대상이 아니다" 반발스왑으로 밀려난 Go GC 메타데이터가 40ms stop-the-world 정지를 만든 사례CedarDB, 1993년 원본 Doom의 게임 로직과 렌더러를 SQL로 이식해 35 FPS로 구동팁펫 스튜디오 폐업 후 90GB 스톱모션 자료, 인터넷 아카이브에 공개1997년 백업 우화 'The Tao of Backup'이 해커뉴스에 다시 올라, 테이프 비용과 NixOS 재현성 이야기로 번짐F1 바레인 GP 포메이션 랩 소프트웨어 결함으로 전 차량 출력 상실, 드라이버들 "용납할 수 없다"스탠퍼드 Ousterhout의 "TCP는 AI 클러스터의 병목" Homa 강연, HN에서 설계 비판까지SSH 원격 포워딩과 nginx secure_link로 만드는 셀프호스팅 HTTP 터널Jane Street, 11x11 스타배틀 검사 ASIC 퍼즐 해답 공개, 30개국에서 400여 건 풀이 제출인포콤 '인피델'에서 40년 묵은 와일드 포인터 컴파일러 버그 발견브라우저에서 VB6 IDE를 그대로 재현, 폼 디자이너와 샘플 주문 앱까지 실행천장 선풍기가 팬들리에로: 웨이페어 $169 크리스털 팬과 교체 불가 LED잘못된 마스킹으로 드러난 구글 데이터센터 물·전기 사용량: 링컨 52.65MW, 파피리언 연 547.88MgalmacOS 27에서 Apple Intelligence 끄고 모델 파일까지 지우는 CLI RemoveMacAI, HN에서 curl | bash 신뢰 논쟁 촉발울프럼, AI가 수학을 대신한다는 주장에 1988년 Mathematica 사례 들어 반박해커뉴스 프런트에 다시 오른 피터 왓츠의 '블라인드사이트', 의식은 진화의 사치라는 논쟁하일브론 문제 최선 배치 모은 사이트, 아마추어 수학자들이 신기록 잇달아 갱신Apple Magic 키보드·트랙패드를 Apple ID 없이 두 Mac에서 공유하는 오픈소스 Magic Switch전 세계 등화 75,919개를 지구본에 올린 mapped.earth, 모바일 핀치 줌 깨짐과 데이터 과다 표시 지적macOS 사진·동영상 모든 프레임을 AI로 검색하는 오픈소스 SCM, HN에서 프레임 샘플링 비용 논쟁Rust 메타데이터 조기 방출로 빌드와 검사가 최대 2배 빨라진 프로토타입 공개글라슈테에서 주운 쓰레기로 만든 30분짜리 진자시계, NOMOS 레지던시에서 제작돼 GTC 기준 시계로노스이스턴대, 차량 21대와 동반 앱 30개 추적해 커넥티드카 데이터 흐름 공개Strata, RTX 4090에서 Qwen3.8 Flash Next 125B를 초당 124 토큰으로 돌려Playdate C 최적화 비법: 게임보이 에뮬레이터 코어를 20KB에서 2KB로GPU 트레이스 시각화 도구 gpuvis, 커밋 1,778개에 스타 921개VGHF 디지털 아카이브, 잡지 5000종 돌파하고 일본어 잡지 지원 시작C2PA 제외 범위로 파일 전체를 서명에서 빼내 타임스탬프까지 위조한 PoC 공개3Blue1Brown 그랜트 샌더슨의 2023년 '수학의 교육적 저주' 강연이 해커뉴스에서 다시 화제메타 Muse가 앱스토어 1위, 기술은 새로울 게 없고 설계가 이겼다는 분석Jagex, 언리얼 엔진으로 만드는 신작 RuneScape MMO RS4 공개. 출시까지 몇 년러시아가 발전소를 때려도 미콜라이우 수돗물이 나온 이유는 덴마크 지원 오프그리드 태양광쓰레기통 6개에 UWB 태그 붙여 "내놨는지" 확인하는 BinRangeLiDAR로 찾은 뉴욕시 최고 높이 나무 후보 4그루, 20년 넘은 기록 갱신 제안Nolan Lawson이 본 '플랫폼을 쓰라'는 말이 안 먹히는 이유: jQuery 시대의 습관, 문서화 격차, 직접 만드는 재미에이전트에 필요한 건 메모리가 아니라 문서라는 주장, 메모리 플러그인은 전부 RAG라는 지적EMT 자격을 딴 소프트웨어 엔지니어가 꼽은, EMT가 되지 않은 21가지 이유 순위로댕 미술관 3D 스캔 소송, 콩세유 데타가 포인트 클라우드를 비문서로 재분류현직 전기공의 반박: 대학 순등록금은 연 $2,500 미만, 임금 프리미엄은 여전히 대졸 쪽HN: 'Triumph of the Nerds' 제작자 밥 크링글리 별세, 애플 초기 직원 출신사이먼 윌리슨 "사용량 기반 서비스엔 기본 하드 예산 상한 필요"... AWS·구글 클라우드 지출 한도 도입OpenAI 안전 리더 데이비드 로빈슨 사임, "문화가 망가졌다" 경고얀 르쿤 "AI가 인류 멸망시킬 우려 전혀 없다", 아모데이는 '현혹된 상태'라고 비판OPM 국장이 '모범 연방 직원'으로 지목한 20세 DOGE 출신, 최소 6개 주에서 형사 책임 위험밸브 Timur Kristóf, GCN 1.0/1.1 구형 AMD GPU를 AMDGPU 커널 드라이버로 끌어올린 작업 XDC 2026에서 발표Cloudflare, Workers와 Artifacts로 차세대 Git 플랫폼 공모전 개최... 상금 $25k는 크레딧 지급 논란Opus 5.5 프롬프트 가이드: 'think carefully' 지우고 CLAUDE.md에 정지 규칙 넣으라고 권고연방판사, Flock 번호판 검색을 '무차별 대량 감시'라며 수정헌법 4조 위반 판결중력장으로 우주선을 슬링하는 브라우저 게임 Hole Punch 공개MPEG-2 TS를 MOQ로 패키징하는 IETF 드래프트, 해커뉴스 프런트페이지 논의는 가치를 잘못 짚었다는 반박스탠퍼드 철학백과 'Holes' 항목 2025년 개정: 구멍은 실재하는가, 아니면 없는 것인가Goffin 앵무새 15마리, 몸을 장애물로 인식하는 BAO 과제서 97.8% 성공지렁이 이동을 지도로 그리는 탐지기 구상, 현장 데이터는 1988년 연구뿐Show HN: Offrun, 맥에서 Claude Code와 Codex를 한 워크스페이스로 관리FTL, 리눅스 바이너리 호환 사용자 공간 OS로 클라우드 컨테이너 격리 겨냥Cities: Skylines 2의 도시가 너무 사각형이고 너무 깨끗하다는 미학 비판, AI 목업 이미지 두고 HN에서 공방C++ Insights: 컴파일러 눈으로 본 C++ 소스, GitHub 스타 4.5kAleph Alpha, 78B 총 파라미터에 활성 3B, 1M 컨텍스트의 오픈웨이트 MoE Kolibri를 Apache 2.0으로 공개GitHub 새 대시보드가 기본 화면으로 전환, 이슈와 PR 중심 개편에 피드는 별도 탭으로 분리cp의 -r과 -R, GNU coreutils에서는 2002년에 병합됐지만 BSD와 POSIX는 여전히 -R만 권장16억 삼각형 Zorah 씬, meshoptimizer 압축으로 glTF 63.3GB를 32.6GB로 줄여닌텐도 64용 파트너-N64 개발 키트, 개조 콘솔로 브레이크포인트와 리셋을 구현GS1, 50년 만에 바코드 퇴출 선언하고 2027년부터 QR코드로 전환Mat Duggan이 그린 'tmux가 OS인' 데스크톱, 하루 6번 화면 전환과 창 관리 3유형 문제 짚음Kagi, Orion 리눅스와 윈도우 개발 중단하고 오픈소스로 전환Cloudflare, OHTTP 게이트웨이 클로즈드 베타 공개. Privacy Gateway는 OHTTP Relay로 개명이디오크라시 풍자 사이트 'Extra Big Ass Intelligence', Brawndo와 'OW! My BALLS!'로 LLM 슬롭 흉내Emacs에서 Org-mode로 쓰고 Gleam과 Pandoc으로 굽는 블로그 파이프라인Show HN: LDraw 어셈블리 언어로 레고 CAD 모델 생성하는 오픈소스 툴셋 ldraw-nova 공개베네치아의 콘스탄티노플 전쟁 실패가 최초 채권시장을 낳았다해커뉴스 화제: Newgrounds 25년째 그대로, Ruffle이 플래시 게임 살려냄GLM 5.3 Flash 한 달 챌린지, 2B 토큰 중 절반만 지켜지고 에너지 사용은 계획의 3.5배하버드 원전 인근 암 연구 방법론, 코스트코에 적용하니 연 12만 명 사망애플, macOS Full Disk Access에 추가 통제 예고, AI 에이전트 위험을 근거로 제시M4 Mac mini에 리눅스 부팅 성공, 잠긴 레지스터와 SPTM 벽 넘은 기록Meta, Muse AI 하드웨어 연동 오픈소스 SDK 공개... ESP32와 라즈베리파이 지원Redis 만든 antirez, C로 쓴 로컬 추론 엔진 ds4 공개. 128GB 맥에서 DeepSeek V4 Flash 2비트 양자화로 초당 39토큰 생성4살에 미국으로 이주한 중국계 미국인이 쓴 LessWrong 에세이 '중국의 사회적 실재', 해커뉴스에서 국가 심리 일반화 논쟁으로 번짐전략(Stratego) AI 아타락소스, 세계 최강자에 15승 1패. GPU 16장에 수천 달러로 학습노화는 손상 축적이 아니라 세포 정체성 상실: 네이처·셀 새 논문 2편이 제시한 모델133광년 밖 HR 8799, 켁 망원경 10장으로 만든 12년 행성 궤도 타임랩스Greg Kroah-Hartman, Anthropic Mythos가 보고한 커널 취약점 79개 중 실제 버그픽스는 10개뿐이라고 밝혀Zig 0.17.0 릴리스, 빌드 시스템 재작업과 x86_64 리눅스 증분 컴파일 지원OpenAI, ChatGPT에서 프롬프트로 사이트 만들고 게시하는 'Sites' 공개애플, Wallet 패스 디자인 도구 Pass Designer 베타 공개, macOS 27 요구미국 연방법원, 유타주 VPN 연령인증법 SB 73에 예비 금지명령
3 alerts
New alert

My alerts

Sign in to create alerts.

All alerts

Duneby 제욱AIby 제욱해커뉴스by 성현