Trawling

최신기사

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

가장 이상한 글자 W의 필연적인 역사

발행

로마 제국 말기 라틴 문자에 없던 /w/를 적으려는 필요에서 W가 생겨났고, 프랑크 왕국의 UU 표기가 11세기 무렵 한 글자로 합쳐졌습니다. 고대 영어의 Ƿ가 W에 밀려난 과정부터 wolf·wood·wonder의 철자, was·wand·wash의 모음 변화까지 살피며 W가 발음과 철자의 간극을 어떻게 남겼는지 설명합니다.

테스트 메서드 이름에 줄 바꿈 없는 공백을 사용하기

발행

PHP 테스트 메서드 이름에 일반 공백처럼 보이는 non-breaking space를 넣어 문장처럼 읽히게 만드는 방법을 소개합니다. 팀 내부에서는 1년 넘게 만족스럽게 사용했지만, 터미널 검색과 다른 언어의 식별자 규칙, 오픈소스 협업에서는 혼란을 부를 수 있다는 반론도 나옵니다.

Quarkdown: 튜링 완전한 Markdown 조판 시스템

발행

Quarkdown은 CommonMark와 GFM을 확장해 함수, 변수, 조건문, 반복문을 제공하는 Markdown 기반 조판 시스템입니다. 하나의 소스에서 책·논문·문서 사이트·프레젠테이션·PDF 등을 생성할 수 있으며, 라이브 미리보기와 빠른 컴파일을 지원합니다.

UTF-8000: 무제한 UTF-8

발행

UTF-8000은 UTF-8의 자기 동기화·자기 구두점 구조를 유지하면서 코드 유닛 길이를 임의로 확장하는 인코딩 설계입니다. 길이에 따라 시작 비트를 여러 바이트에 분산해 임의로 큰 코드포인트를 표현하며, 기존 UTF-8의 정렬·오버롱 인코딩 규칙도 계승합니다.

Ruby UTCP — MCP를 대체하는 확장 가능하고 안전한 도구 호출 프로토콜

발행

Ruby UTCP는 AI 에이전트가 별도의 래퍼 서버 없이 JSON 매니페스트로 네이티브 API와 도구를 호출하도록 하는 Universal Tool Calling Protocol(UTCP) 1.1의 Ruby 구현입니다. HTTP, CLI, WebSocket, gRPC, GraphQL, MCP, WebRTC 등 12개 전송 방식을 지원해 Ruby 애플리케이션에서 도구 검색·인증·스트리밍·다중 도구 워크플로를 표준화하려고 합니다.

V 언어 리뷰 (2023) — 약속과 실제 구현 사이의 간극

발행

V 언어를 6개월간 사용한 리뷰어가 문서, 메모리 관리, 자동 메모리 해제, 할당, 안전성, 바이너리 크기를 직접 검증합니다. 문서의 설명과 실제 동작이 크게 다르고, autofree와 컴파일러 자체 빌드에서도 누수와 런타임 오류가 발생한다고 지적합니다.

영어의 A와 An — 철자가 아니라 발음으로 결정되는 부정관사

발행

영어 텍스트를 절차적으로 생성할 때 a와 an 중 어느 관사를 붙일지는 첫 글자가 아니라 단어의 첫 발음으로 판단해야 합니다. CMU Pronouncing Dictionary의 32,455개 단어를 조사한 결과, 철자와 발음이 어긋나 예외 처리가 필요한 단어는 129개뿐이었습니다.

Rust 개발자가 경험한 Zig

발행

7년간 Rust를 사용한 개발자가 RFC 9535 기반 JSONPath 구현을 Zig로 다시 만들며 두 언어의 개발 경험을 비교합니다. Zig의 단순한 빌드 도구와 낮은 추상화는 긍정적으로 평가하지만, 수동 메모리 관리와 미성숙한 생태계에서는 Rust와 뚜렷한 차이를 확인합니다.

Frozendict 🧊: Python·Node.js를 위한 최신 불변 해시맵

발행

frozndict는 Rust로 구현하고 Python·Node.js 바인딩을 제공하는 불변·해시 가능 딕셔너리입니다. 삽입 순서를 유지하면서 해시를 캐시하고 copy()를 O(1)로 처리하며, 작성자가 제시한 벤치마크에서는 반복·복제·동등성 검사에서 기존 구현과 비교 가능한 성능을 보입니다.

C++20의 u8/char8_t 하위 호환성 참사

발행

C++20에서는 UTF-8 문자열 리터럴인 u8"..."의 원소 타입이 기존 const char에서 const char8_t로 바뀌었습니다. 그 결과 C++17에서 정상적으로 컴파일되던 코드가 const char*를 요구하는 기존 API 호출에서 깨질 수 있으며, Google C++ Style Guide도 가능한 경우 u8 접두사를 피하라고 권고합니다.

Typst 0.15, 큰 진전을 이루다 — LaTeX 대체재를 향한 발걸음

발행

Rust로 작성된 조판 시스템 Typst가 0.15 버전을 공개하며 가변 폰트, MathML 수식 출력, 다중 문서 번들, 챕터별 참고문헌, 다중 PDF 표준 지정 등 대형 기능을 추가했습니다. HTML 출력은 아직 실험 단계지만 MathJax 없이 TeX 수준의 수식을 브라우저에 렌더링할 수 있게 되어 LaTeX 대체재로서의 가능성을 다시 보여주었습니다.

Go map 100만 엔트리는 16MB가 아닌 38MB — Swiss Table map의 실제 메모리 비용 분석

발행

Go 1.24부터 기본이 된 Swiss Table 기반 map에서 map[int64]int64 100만 엔트리가 이론값 16MB가 아닌 37.8MB를 차지하는 이유를 강제 GC와 HeapAlloc 측정으로 분석한 글입니다. 그룹·테이블 구조와 7/8 로드 팩터, 할당자의 크기 클래스 올림 때문에 엔트리당 비용이 21~44바이트 사이를 오가며, struct{} set의 패딩 회귀와 삭제 시 메모리 미회수 같은 실무 영향도 함께 다룹니다.

Pre-Greek — 고대 그리스어 속에 숨겨진 잃어버린 언어

발행

고대 그리스어에는 인도유럽어로 거슬러 올라가지 않는 단어가 약 1,000개 존재하며, '미로(labyrinth)', '올리브', '바다(θάλασσα)', 아테네, 아킬레우스 같은 이름까지 포함됩니다. 이 글은 이 단어들이 그리스인 이전 에게해 지역의 기층 언어(Pre-Greek)가 남긴 흔적임을 음운 규칙, 발음 변형, 의미 범주 분포라는 세 가지 증거로 추적합니다.

Flet 1.0 – Python으로 크로스플랫폼 앱 만들기

발행

Python 코드만으로 데스크톱·모바일·웹 앱을 만들 수 있는 UI 프레임워크 Flet이 1.0을 공개했습니다. Flutter 기반으로 150개 이상의 컨트롤을 제공하며, NumPy와 pandas 같은 Python 패키지를 그대로 쓰고 flet build로 각 플랫폼용으로 패키징할 수 있습니다.

PHP 배열에 키 하나를 추가했더니 메모리 25MB — packed 배열이 해시 테이블로 바뀌는 순간

발행

PHP 배열이 정수 순서대로 채워진 packed list로 유지되는 동안에는 원소당 16바이트로 매우 효율적이지만, 문자열 키 하나만 추가해도 해시 테이블로 전환되며 백만 개 원소 기준 25MB가 추가로 소모됩니다. 저자는 PHP 8.4 기준으로 zend_array 내부 구조를 뜯어보며 전환 조건과 비용을 계측했고, 연관 배열 대신 타입이 선언된 클래스로 행을 담으면 메모리가 거의 절반이 된다는 결론을 제시합니다.

PWC 391: 중앙값과 상자 쌓기 — Perl로 푼 두 가지 알고리즘 문제

발행

Perl Weekly Challenge 391회의 두 과제 — 정렬된 두 배열을 합쳐 중앙값을 구하는 문제와 상자를 서로 안에 넣어 최대 스택을 구하는 문제 — 를 Perl로 풀이한 글입니다. 저자는 통계 모듈·직접 정렬·부분 병합 세 접근을 벤치마크해 직접 정렬이 가장 빠르다는 결과를 확인했고, 상자 문제는 Perl 5.44의 새 class 문법과 너비 우선 탐색으로 해결합니다.

레이블된 매치 — 왜 모든 정규식 엔진에 없는가?

발행

RE#(resharp) 정규식 엔진의 저자가 여러 패턴에 레이블을 붙여 한 번의 스캔으로 텍스트를 분류하는 'categorize_all' 기능을 소개합니다. spaCy NER 대비 약 4,500배 빠른 1.92 GB/s 처리량을 보였고, 교집합(&)과 여집합(~) 연산으로 윤년까지 포함한 달력 패턴이 32개 DFA 상태로 컴파일됨을 보여줍니다.