Trawling

최신기사

AI, 개발 도구, 오픈소스, 보안과 인프라의 변화와 이용 조건을 설명하는 최신 기사와 해설입니다.

GCC는 switch문을 비트 검사·점프 테이블·비교 트리로 조합합니다

발행

GCC는 case 값의 밀도와 연속 범위, 실행 경로와 비교 비용을 살펴 switch문을 비트 검사와 점프 테이블, 비교 트리로 나눠 처리합니다. 촘촘한 값은 점프 테이블로 만들고 멀리 떨어진 값은 별도 분기로 두는 식으로 한 문 안에서 방식을 조합할 수 있습니다. 글의 휴리스틱 수치는 분석한 조건에 해당합니다.

Windows 11에 Intel APX 설정 추가, Nova Lake 출시 준비

발행

Windows 11 Insider Preview 빌드에 Intel APX 지원을 켜는 설정이 추가됐습니다. APX는 범용 레지스터를 16개에서 32개로 늘리는 x86-64 확장 명령어 집합이며, 성능 향상에는 지원 CPU와 APX 명령어를 생성한 소프트웨어가 필요합니다.

Zig, 모호한 연산자 조합에 괄호를 요구합니다

발행

Zig가 일부 연산자 조합의 우선순위를 정의하지 않고, 그런 조합에는 괄호를 요구하도록 바꿨습니다. 기존 규칙을 외우는 부담과 잘못 해석한 우선순위에서 생기는 버그를 줄이려는 변경입니다.

JIT 컴파일러를 단계적으로 만들기

발행

이 논문은 작은 Scheme 계열 언어를 확장하며 AOT 컴파일과 JIT 컴파일을 함께 구현하는 교육 과정을 제안합니다. Rust와 x86-64를 사용해 실행 메모리 버퍼, REPL의 지속 상태, 첫 호출 시점의 타입 특수화를 다루며 컴파일러 수업 두 차례에 적용했습니다.

UB는 괜찮다고 생각하는 사람들에게

발행

C++의 정의되지 않은 동작(Undefined Behavior, UB)은 단순히 실행 결과를 예측하기 어렵다는 뜻이 아닙니다. GCC와 Clang의 어셈블리 예제로 UB가 함수의 명령어를 없애거나 예상 밖의 메모리 쓰기와 충돌로 이어질 수 있음을 보여주고, 댓글에서는 그 사례의 범위와 실용적인 대응을 두고 논쟁합니다.

증분 계산 그래프

발행

Yabu의 인터랙티브 타입 검사와 컴파일을 빠르게 하려고 계산을 의존성 그래프로 묶고 결과를 메모이제이션하는 방법을 설명합니다. 입력이 바뀌면 의존 경로를 red-green 방식으로 검증해 실제 값이 달라진 계산만 다시 실행합니다.

macOS의 gcc 바이너리 들여다보기

발행

macOS의 /usr/bin/gcc는 별칭이 아니라 실행 파일이며, 선택된 개발자 도구 경로에서 clang을 찾아 실행하는 래퍼입니다. 글은 바이너리 분석으로 이 호출 과정을 추적하고, GCC와 혼동을 부르는 이름과 도구 경로 선택에 관한 사용자 경험을 짚습니다.

Rust 컴파일러에 기대되는 2026년, 그리고 필자에게도

발행

Rust 컴파일러에서는 차세대 trait solver와 Polonius, 병렬 프런트엔드, LLVM 성능 개선 등 오래 진행한 작업이 함께 진척되고 있습니다. 필자는 이를 새 기능 하나의 성과보다 장기적인 내부 정비와 성능 투자가 결실을 맺는 시기로 설명합니다.

0.000000000000000000542%의 버그를 고치려 모든 나눗셈을 느리게 만들기

발행

Futhark 컴파일러가 signed integer division의 오버플로를 피하도록 고치자 CUDA 성능이 특정 벤치마크에서 5,548μs에서 12,592μs로 느려졌습니다. 일반 벤치마크에서는 차이가 측정되지 않았지만, 모든 나눗셈에 추가된 분기 때문에 GPU 코드 생성이 달라지는 사례를 보여줍니다.

FPU 에뮬레이터를 슈퍼최적화하기

발행

저자는 부동소수점 값의 비트 표현에서 최하위 비트에 해당하는 값을 구하는 분기문을 없애려고, 후보 수식을 열거하고 테스트 사례로 검증하는 슈퍼최적화기를 만들었습니다. 검색기는 사람이 쉽게 떠올리기 어려운 비트 연산 조합을 찾아냈고, 저자는 이를 개발 중인 FPU 에뮬레이터에 적용했습니다.

역방향으로 생각하는 새로운 대여 검사 방식

발행

Valen의 대여 검사기는 함수 본문을 뒤에서 앞으로 훑으며 참조의 사용, 선언, 변경을 추적합니다. 글은 이 방식이 마지막 사용 지점을 찾고 반복문을 처리하는 데 편리하다고 설명하지만, 반복문 처리에는 별도 규칙이 필요하며 검사기의 기능도 아직 완성되지 않았습니다.

Rust 1.99.1 출시

발행

Rust 팀이 1.99.1을 배포했습니다. 이번 업데이트는 일부 대상에서 발생한 wcslen 링크 오류, x86_64에서 FFI bool 반환값이 잘못 전달되는 컴파일 오류, macOS에서 rust-lld가 libLLVM를 찾지 못하는 문제를 수정합니다.

팬의 시선으로 살펴본 Gleam의 case 완전성 검사

발행

Gleam 컴파일러가 case 패턴의 누락과 도달 불가능한 분기를 찾는 과정을 설명합니다. 패턴 매칭 연구를 바탕으로 결정 트리와 누락 패턴 진단을 만들고, 문자열 접두사와 비트 배열, 타입 좁히기까지 처리하는 방식을 코드와 함께 살펴봅니다.

Factor 0.102 출시

발행

스택 기반 언어 Factor 0.102가 1,068개 커밋을 포함해 출시됐습니다. ARM64 네이티브 지원과 Linux용 GTK4 기본 백엔드, RISC-V 포트가 추가됐으며 컴파일러와 VM, 라이브러리의 기능과 안정성도 폭넓게 개선됐습니다.

antcc의 -O2 성능 저하를 추적하다

발행

C 컴파일러 antcc에서 Lua 벤치마크가 -O2로 더 느려지는 원인을 추적합니다. mem2reg가 루프 안의 초기화되지 않은 지역 변수를 잘못 처리해 불필요한 phi 노드를 만들었고, 레지스터 압박과 스필링이 늘어났습니다. alloca 처리 한 줄을 고쳐 성능 저하가 사라졌습니다.

여러분의 C는 표준 C가 아닙니다

발행

GCC, Clang, glibc, musl이 C 및 POSIX 표준과 다르게 동작하는 사례를 정리합니다. 컴파일러 확장과 미지원 pragma, 라이브러리의 오류 처리 및 헤더 정의 차이가 표준에 맞춘 코드의 이식성을 떨어뜨릴 수 있다고 설명합니다.

Valen의 메모리 안전성 — 새로운 방식의 대여 검사

발행

Valen은 참조가 가리키는 데이터의 경로를 컴파일러가 추적해 해제 뒤 사용(use-after-free)을 막는 대여 검사 방식을 제안합니다. Rust의 ‘공유 또는 변경’ 규칙 대신 무효화 여부를 검사해 같은 객체를 가리키는 여러 참조의 읽기와 쓰기를 허용하며, Rust 상호운용과 참조 카운팅 지원도 내다봅니다.