Trawling

보안·인프라 · 최신기사

보안과 개인정보, 운영체제와 클라우드·데이터 인프라를 다룹니다.

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

발행

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

증분 계산 그래프

발행

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

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

발행

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

Rust 1.99.1 출시

발행

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

Factor 0.102 출시

발행

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

Zeta의 차세대 빌림 검사기 — Rust 메모리 관리 모델을 대체하려는 실험

발행

Zeta는 Rust의 빌림 검사기가 놓치는 메모리 영역 간 비중첩 관계를 추론하고, 별칭 가변 참조인 `&alias`와 출처(provenance) 기반 수명 추론을 도입한 실험적 언어입니다. 작성자는 이를 이용해 런타임 참조 세기나 검사 없이 연결 리스트와 병렬 슬라이스 처리를 구현하는 예를 제시하지만, 함수 본문에 기대는 추론의 API 안정성과 모델의 안전성은 토론에서도 쟁점이 됐습니다.

분기 없는 코드에 끼어드는 조건 분기

발행

소스에서 비트 연산으로 분기를 없애도 컴파일러가 RISC-V용 조건 분기로 바꿀 수 있습니다. 컴파일러 버전과 최적화 옵션, 대상 CPU의 명령어 확장에 따라 결과가 달라지므로 상수 시간 암호 코드는 생성 어셈블리를 다시 확인해야 합니다.

제로화 1부: 메모리 지우기가 오히려 상황을 악화할 수 있습니다

발행

비밀값을 지우려고 넣은 코드가 컴파일러 최적화나 함수 호출 규약 때문에 효과를 내지 못하고, 오히려 메모리에 복사본을 만들기도 합니다. 글은 C와 arm64 컴파일 결과를 비교하며, 버퍼 삭제는 계속하되 작은 지역 변수는 실제로 어디에 저장되고 무엇이 남는지 확인하라고 설명합니다.

rat의 작은 레지스터 할당기

발행

소형 컴파일러 rat의 선형 스캔 레지스터 할당기를 1,392줄에서 584줄짜리 우선순위 기반 할당기로 바꾼 과정을 설명합니다. 새 할당기는 레지스터 축출이나 구간 분할 없이도 명령어를 3.6% 줄이고, SQLite를 -O0으로 컴파일할 때 전체 컴파일 시간을 43% 단축했습니다.

Infidel에서 발견한 메모리 손상 버그

발행

텍스트 어드벤처 Infidel의 ZIL 코드에서 선택적 인수의 기본값으로 전역 변수를 지정한 부분이 컴파일 오류를 일으킵니다. 사막에 물건을 여러 개 버리면 메모리 주소 30번대부터 덮어쓰고, 결국 문자열 압축용 약어 데이터까지 손상됩니다.

Turbo Haskell — GHC Core를 JVM에서 실행하는 컴파일러

발행

Edward Kmett가 만든 THC는 GHC의 프런트엔드와 Core 최적화를 유지하면서, GHC Core를 Truffle·GraalVM 위에서 JIT 또는 AOT 컴파일하는 프로젝트입니다. GHC 9.14.1의 prim-op와 여러 고급 기능을 지원하며, Haskell 프로그램은 물론 GHC 자체도 실행합니다. 성능은 워밍업 뒤 GHC보다 대체로 10~20% 느렸지만, 최근 회귀가 발생해 개선 중입니다.

llvm/llvm-project — 모듈형 컴파일러·툴체인 기술 모음

발행

LLVM Project는 최적화 컴파일러와 런타임 환경을 만드는 데 쓰는 도구 모음입니다. LLVM 코어는 중간 표현을 처리해 오브젝트 파일로 변환하며, Clang 프런트엔드와 libc++, LLD 같은 구성 요소도 함께 제공합니다.

요하네스 되퍼트를 추모하며

발행

LLVM 컴파일러 프로젝트의 주요 기여자이자 OpenMP·고성능 컴퓨팅 연구자인 요하네스 되퍼트가 암 투병 끝에 36세로 세상을 떠났습니다. 그는 Attributor 프레임워크와 GPU 오프로딩 개발을 이끌었고, 연구·멘토링·커뮤니티 활동으로 LLVM 생태계에 흔적을 남겼습니다.

골든 스파이크, 그리고 Vale(n) 프로그래밍 언어의 부활 — rustc와 직접 통신하는 Rust++ 언어를 향하여

발행

Vale 언어의 저자 Evan Ovadia가 Rust 컴파일러와 직접 통신하는 새 언어 Valen의 첫 상호운용 성공 사례를 공개했습니다. C ABI를 우회하고 rustc를 라이브러리로 구동해 언어 경계를 넘는 제네릭 호출과 Rust 트레이트 구현을 실현했으며, 최종 목표는 경계를 넘나드는 메모리 안전성입니다.