Trawling

보안·인프라 · 최신기사

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

비동기 Rust에서 스케줄러는 어디에 있어야 할까요?

발행

비동기 Rust의 복잡성은 스케줄러가 필요한 동시성의 속성이지, Rust만의 결함이 아니라고 설명합니다. 런타임을 라이브러리로 두는 설계의 이점과 비용을 짚고, Zig처럼 I/O 인터페이스를 함수 매개변수로 전달하는 대안을 살펴봅니다.

Gleam, 이제 Erlang 소스 코드로 컴파일하지 않습니다

발행

Gleam 1.19.0은 Erlang 코드를 생성하던 방식을 바꿔 Erlang 컴파일러의 중간 표현인 abstract forms를 직접 출력합니다. 빌드 속도와 오류 위치 정보가 개선됐으며, JavaScript 코드 생성, TypeScript 타입 선언, 빌드 도구 연동과 언어 서버 기능도 함께 다듬었습니다.

자바 컴파일러가 런타임의 테스트 케이스가 되기까지

발행

Java-to-C 번역기 자체를 ParparVM에서 실행하는 셀프 호스팅에 성공했습니다. 약 3만 7천 줄 규모의 프로그램으로 런타임 결함과 성능 병목을 찾았으며, 출력 일치율은 247개 중 245개였습니다. 성능은 JDK 25보다 느리고 메모리 사용량도 큽니다.

CHICKEN Scheme 관리자가 말하는 Scheme 구현과 CHICKEN 6

발행

CHICKEN Scheme 관리자 Peter Bex가 CHICKEN 6의 UTF-8 처리와 출시 지연을 부른 힙 손상 버그, Scheme 생태계의 표준화 문제를 설명합니다. 컴파일러 최적화 구상과 PostgreSQL을 선호하는 이유, REPL 개발 경험도 함께 다룹니다.

Zig 0.17.0 출시 — 빌드 시스템 재구성과 증분 컴파일 개선

발행

Zig 0.17.0은 5개월 동안 206명의 기여자가 만든 925개 커밋을 담은 릴리스입니다. 빌드 시스템을 재구성하고 Build Server Protocol을 도입했으며, x86_64 Linux 프로젝트에서 증분 컴파일을 활용할 수 있도록 ELF 링커를 개선했습니다.

Generic Const Arguments와 개발자

발행

Rust Const Generics 프로젝트 그룹이 제네릭 매개변수를 포함한 상수 인자를 지원하는 GCA 기능군의 설계와 사용법을 소개합니다. 기존 제약을 풀지만 모든 기능은 아직 실험 단계이며, 안정화 제안까지 시간이 더 필요합니다.

Rust 1.99.0 출시

발행

Rust 1.99.0이 안정 버전으로 출시됐습니다. C ABI 가변 인자를 받는 함수를 Rust로 정의하는 기능과 raw pointer의 크기·정렬 정보를 다루는 기능이 안정화됐으며, Box::leak으로 누수시킨 메모리를 나중에 해제하는 패턴은 피하도록 문서 지침을 바꿨습니다.

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% 느렸지만, 최근 회귀가 발생해 개선 중입니다.

1+1을 계산하려다 함수형 프로그래밍 언어를 만들었습니다

발행

이 글은 이진 트리로 산술식을 계산하는 과제에서 출발해 C로 그래프 환원 기반 함수형 언어를 만든 과정을 설명합니다. 클로저와 청크 메모리 할당기, 마크-앤드-스윕 가비지 컬렉터를 구현하며 fib(40)의 메모리 사용량을 12GB 이상에서 1.7MB로 줄였지만, 실행에는 6분이 걸렸습니다.

C의 유연한 정수 크기는 설계 실수가 아니었습니다

발행

C의 int와 long이 고정된 비트 수를 보장하지 않는 이유를 1970년대의 다양한 컴퓨터 구조와 C의 이식성 목표에서 설명합니다. 글은 최소 범위를 보장하면서 하드웨어에 맞춰 타입 크기를 정한 선택이 당시에는 효율적인 코드 생성과 여러 기종 지원에 도움이 됐다고 주장하고, 오늘날의 고정 폭 정수 타입과 남은 불편도 함께 다룹니다.

LuaRocks 보안 사고: LuaJIT 바이트코드로 서버 원격 코드 실행

발행

LuaRocks.org가 LuaJIT 바이트코드를 일반 Lua 소스처럼 불러오는 취약점으로 원격 코드 실행 공격을 받았습니다. 운영자는 서버를 교체하고 자격 증명을 폐기했으며, 기존 패키지 변조 흔적은 찾지 못했다고 밝혔습니다. 이용자는 API 키를 재발급하고 비밀번호와 2단계 인증을 다시 설정해야 합니다.

포인터는 화살표가 아닙니다 — C와 C++가 메모리를 다루는 방식

발행

C와 C++의 포인터를 메모리 주소와 바이트 단위의 관점에서 설명합니다. 포인터 연산, 배열 인덱싱, 동적 할당, 가상 메모리와 세그멘테이션 오류가 어떻게 연결되는지 예제로 살펴봅니다. 다만 포인터를 단순한 정수로 보는 설명에는 언어 표준과 구현에 따른 주의점이 있습니다.

멜의 이야기

발행

Ed Nather가 1983년에 쓴 글로, 기계어만으로 프로그램을 짜고 드럼 메모리의 회전 타이밍까지 맞춘 프로그래머 멜의 일화를 들려줍니다. 명령어 주소를 직접 수정해 반복문을 만들고 주소 오버플로를 분기 명령으로 활용한 사례가 중심입니다.

Zig를 배우는 여정

발행

Zig 개발자 Andrew Kelley가 Zigtoberfest에서 제안한 학습 경로를 소개합니다. 시스템과 의존성을 깊이 이해하고, 빌드와 실행 동작을 직접 설계하며, 프로젝트를 완성하는 과정이 Zig뿐 아니라 소프트웨어 엔지니어로 성장하는 데 도움이 된다고 설명합니다.

프로그래밍 언어를 제대로 설계하기

발행

새 프로그래밍 언어가 초기에 결정해야 할 설계 원칙을 정리합니다. 들여쓴 여러 줄 문자열, 파일 경로와 확장자, 후행 쉼표, 키워드와 숫자 리터럴, 개발·배포 환경, 버전 관리, 빌드 시스템과 파일 감시까지 생태계와 호환성을 좌우하는 세부 사항을 짚습니다.

왜 0xCAFEBABE인가?

발행

Java .class 파일의 첫 4바이트를 식별하는 매직 넘버 0xCAFEBABE의 유래를 다룹니다. Java라는 이름보다 먼저 정해졌으며, 재미와 기억하기 쉬운 형태를 고려해 선택했다는 당시 개발자의 설명과 다른 시스템의 유사한 값도 소개합니다.