지난 글들
747개의 글이 있습니다
Ruby의 마법을 포용하며: DSL 정적 분석
[EN] Embracing Ruby magic: Statically analyzing DSLs / Vinicius Stock @vinistock
- Ruby LSP는 동적 특성을 지닌 Ruby DSL의 정적 분석을 위해 확장 가능한 애드온 API를 도입했습니다.
- DSL 분석의 주요 난제인 런타임 의존성과 성능 제약을 해결하고자 정확성과 유용성의 균형을 추구합니다.
- 애드온 API는 선언형 DSL을 위한 인덱싱 강화와 호출 사이트 DSL을 위한 기능별 확장을 통해 유연한 분석을 가능하게 합니다.
jeff
2025년 05월 27일
Ruby 라이트닝 토크: 임베디드부터 개발 도구까지 Ruby의 확장된 활용 사례
[EN][JA] Lightning Talks
- 임베디드 시스템 및 하드웨어 제어에 Ruby(mRuby, PicoRuby)를 활용한 다양한 프로젝트가 소개되었습니다.
- Ruby를 활용하여 프로그래밍 언어 프론트엔드, 파서 시각화 도구, CI 시스템, 안전한 자격 증명 관리 등 개발 도구를 구축하는 방법이 제시되었습니다.
- Ruby의 고급 기능을 활용하여 사운드 생성, 비동기 처리(Fiber Scheduler), 유니코드 문자열 처리 등 심층적인 기술적 도전과 해결책이 공유되었습니다.
RubyKaigi
2025년 05월 27일
타입스크립트로 루비 타입 추론기 작성하기
[JA] Writing Ruby Scripts with TypeProf / Yusuke Endoh @mametter
- 루비 타입 추론 도구 TypeProf의 개발 현황과 편집기 지원 기능, 그리고 최신 개선 사항이 공유되었습니다.
- 타입 시스템의 원리를 설명하는 저서 '型システムの仕組み'가 소개되었으며, 루비 타입 개발 참여가 독려되었습니다.
- 루비 상수 탐색의 복잡성으로 인한 TypeProf의 난해한 버그 해결 과정과 대규모 프로젝트를 위한 분석 단위 개념 도입이 상세히 설명되었습니다.
RubyKaigi
2025년 05월 27일
Ruby 호출의 분류학
[EN] A taxonomy of Ruby calls / Alan Wu @alanwusx
- Ruby 호출을 인자 전달 작업의 본질에 따라 분류하고, C Ruby 및 WJET 구현 관점에서 복잡한 의미론을 탐구합니다.
- 스플랫, 키워드 스플랫, 블록 인자 변환, 숨겨진 데이터 전달 등 다양한 호출 유형의 내부 동작과 최적화 기회를 분석합니다.
- 언어 변화 이해, 테스트 케이스 도출, 버그 발견에 도움이 되는 Ruby 호출 분류의 실용적 가치를 제시합니다.
RubyKaigi
2025년 05월 27일
Hotwire 및 HTML ERB 툴링: Herp 파서를 통한 Ruby 개발 경험 개선
[EN] Empowering Developers with HTML-Aware ERB Tooling / Marco Roth @marcoroth
- Herp는 HTML과 ERB를 동시에 이해하는 C99 기반의 파서로, 기존 HTML 전용 LSP의 한계를 극복하고 Ruby 및 JavaScript 환경에서 정교한 구문 분석을 제공합니다.
- 이 파서는 ERB 템플릿 내의 컨텍스트를 정확히 파악하여 향상된 자동 완성, 진단, 코드 변환 기능을 가능하게 하며, 개발 생산성을 크게 향상시킵니다.
- Herp는 포매터, 린터, 스마트 ERB 렌더링 엔진(Reaction View) 및 범용 HTML 템플릿 구문 트리로 확장되어 Ruby 뷰 레이어 툴링의 미래를 제시합니다.
RubyKaigi
2025년 05월 27일
JRuby 10: Ruby를 위한 최적화와 새로운 가능성
[EN] Optimizing JRuby 10 / Charles Nutter @headius
- JRuby 10은 Ruby 3.4 호환성을 달성하며, Java 21+의 최신 JVM 기능을 활용하여 시작 시간, 객체 할당, 동시성 등 전반적인 성능을 대폭 향상시켰습니다.
- JVM의 AppCDS, Project Leyden, Project CRaC 등의 기술을 통해 JRuby의 고질적인 약점이었던 시작 및 워밍업 시간이 획기적으로 개선되었습니다.
- JRuby는 C 확장 대신 JVM의 최적화 능력을 활용하여 순수 Ruby 코드 및 Java로 포팅된 C 코드를 C Ruby보다 빠르게 실행하며, 스레드를 통한 효율적인 멀티코어 활용으로 Rails 애플리케이션의 리소스 효율성을 높입니다.
RubyKaigi
2025년 05월 27일
C 확장부터 순수 C까지: RBS 라이브러리 마이그레이션 이야기
[EN] From C extension to pure C: Migrating RBS / Alexander Momchilov @amomchilov
- Shopify는 Ruby 개발 경험 향상을 위해 RBS(Ruby Signature)를 C 확장 Ruby Gem에서 순수 C 라이브러리로 마이그레이션했습니다.
- 이번 마이그레이션으로 Sorbet과 같은 타입 체커가 Ruby VM 종속성 없이 RBS를 활용할 수 있게 되어 성능과 이식성이 크게 향상되었습니다.
- 주요 기술적 과제는 Ruby의 예외 처리와 가비지 컬렉션을 C의 수동 오류 전파 및 아레나 할당으로 대체하는 것이었습니다.
jeff
2025년 05월 27일
Ruby Wasm 기반 브라우저 D-Ruby: 분산 객체 프로그래밍의 새로운 지평
[JA] dRuby on Browser Again! / @youchan @ledsun
- Ruby Wasm과 D-Ruby를 결합하여 브라우저 환경에서 Ruby 분산 객체 프로그래밍을 구현하는 두 가지 혁신적인 접근 방식이 소개되었습니다.
- Yo-chan은 `drb-websocket` 및 `wasm-drb` 젬을 통해 D-Ruby의 서버/클라이언트 기능을 브라우저에 통합하고, 비동기 처리 및 Wasm-JavaScript 경계 상호작용의 복잡성을 지적했습니다.
- Red-san은 `Wasm-Socket` 젬으로 Ruby와 브라우저 간 웹소켓 통신 API를 추상화하여 동기적 소켓 프로그래밍 경험을 제공하며 'Socket Programming in Browser' 개념을 제시했습니다.
RubyKaigi
2025년 05월 27일
마이크로컨트롤러에서 Ruby 실행: MicroRuby와 PicoRuby의 메모리 효율성 비교
[JA] MicroRuby: True Microcontroller Ruby / Hitoshi HASUMI @hasumikin
- MicroRuby 기반 R2P2 애플리케이션이 실용적인 RAM 소비량으로 성공적으로 구동되어, 풀스펙 Ruby의 마이크로컨트롤러 활용 가능성을 입증했습니다.
- mruby의 Pre-sym 및 Object Space 기능이 대규모 애플리케이션에서 mrbc보다 효율적일 수 있다는 '하미킨의 예상'을 실제 측정으로 뒷받침하며, 메모리 사용량 격차가 줄어들고 있음을 확인했습니다.
- 마이크로컨트롤러 환경을 위한 선점형 태스크 스케줄링 및 커스텀 메모리 할당기를 구현하여 MicroRuby의 IoT 플랫폼 구축 역량을 강화했습니다.
RubyKaigi
2025년 05월 27일
Ruby로 만드는 그루브박스: 전자 악기 소프트웨어 개발 경험 공유
[JA] How to make the Groovebox / Yuya Fujiwara @asonas
- Ruby를 활용하여 신시사이저와 시퀀서 기능을 갖춘 전자 음악 제작 소프트웨어 'Groovebox Ruby'를 개발하고 그 과정과 구현 기술을 상세히 소개합니다.
- 복잡한 전자 악기 학습의 어려움을 해결하기 위해 소프트웨어 개발 방식을 적용했으며, DRb를 활용하여 모듈 간의 유연한 연동을 구현했습니다.
- 오실레이터, 엔벨로프 제너레이터, 시퀀서 등 핵심 모듈의 Ruby 코드 구현 방식과 시연을 통해 실제 작동 원리를 명확하게 보여줍니다.
jeff
2025년 05월 27일
Ruby Ractor 로컬 가비지 컬렉션: 병렬 처리를 통한 성능 향상
[EN] Toward Ractor local GC / Koichi Sasada @ko1
- Ruby Ractor의 병렬 처리를 위한 로컬 가비지 컬렉션 도입은 성능 향상에 유망하나, 공유 가능한 객체(Sharable Objects) 관리의 복잡성으로 인해 큰 도전 과제를 안고 있습니다.
- 제안된 보수적인 접근 방식은 공유 가능한 객체를 항상 살아있는 루트 객체로 간주하고, 필요 시 전역 가비지 컬렉션으로 대체하여 안전성과 성능 향상을 동시에 달성합니다.
- 마이크로벤치마크 결과, Ractor 로컬 가비지 컬렉션은 기존 전역 가비지 컬렉션 대비 최대 5배의 상당한 성능 개선을 보여주며, 특히 Ractor 수가 증가할수록 효율성이 두드러집니다.
jeff
2025년 05월 27일
컨티뉴는 계속될 것이다
[JA] Continuation is to be continued / Masayuki Mizuno @fetburner
- Ruby의 `callcc`는 현재의 실행 흐름(컨티뉴에이션)을 일급 값으로 다루어 비결정 계산을 위한 DSL 구현에 유용하지만, 전체 컨티뉴에이션을 캡처하고 성능이 저하되는 문제가 있습니다.
- `shift/reset`은 `callcc`와 달리 제한된 범위의 컨티뉴에이션만 캡처하여 DSL 구현을 간소화하고, `callcc`를 기반으로 구현하더라도 성능 개선을 이룰 수 있습니다.
- `shift/reset`을 C 확장 라이브러리로 VM 상태를 직접 조작하여 구현하면 스택 관리 최적화를 통해 `callcc`의 성능 문제를 근본적으로 해결하고 더욱 높은 효율성을 달성할 수 있습니다.
RubyKaigi
2025년 05월 27일
Bazel을 활용한 Ruby 프로젝트 빌드 및 테스트: rules_ruby 소개
[EN] Bazel for Ruby / Alex Rodionov @p0deje
- Bazel은 Google에서 개발된 다국어 빌드 및 테스트 도구로, 모노레포에 최적화되어 효율성, 확장성, 재현성 및 분산 실행 기능을 제공합니다.
- `rules_ruby`는 Bazel 생태계 내에서 Ruby 언어를 지원하며, Ruby 인터프리터 설치, Bundler를 통한 의존성 관리, Gem 빌드 및 테스트 실행 기능을 제공합니다.
- Bazel의 그래프 기반 접근 방식은 변경된 코드에 필요한 테스트만 선별적으로 실행하고 결과를 캐싱하여, 테스트 시간을 단축하고 병렬 실행을 통해 개발 워크플로우를 가속화합니다.
RubyKaigi
2025년 05월 27일
루비 3.4의 암묵적 할당 최적화: 불필요한 객체 할당 제거
[EN] Eliminating Unnecessary Implicit Allocations / Jeremy Evans @jeremyevans0
- 루비 3.4에서는 이전에 발생했던 세 가지 주요 할당 회귀(allocation regression) 문제를 해결하여 불필요한 배열 및 해시 할당을 제거했습니다.
- 할당 테스트 스위트 도입을 통해 향후 할당 회귀를 방지하고, Prism 컴파일러의 최적화를 지원하며, 추가적인 최적화 대상을 식별하는 데 기여했습니다.
- 대규모 리터럴 배열, 포지셔널 스플랫, 키워드 스플랫을 포함하는 리터럴 배열에서 발생하는 다중 할당 문제를 PUSH_TO_ARRAY, CONCAT_2_ARRAY, PUSH_TO_ARRAY_KEYWORD_SPLAT 등 새로운 VM 명령어를 통해 단일 할당으로 최적화했습니다.
RubyKaigi
2025년 05월 27일
ZJIT: 차세대 Ruby JIT 컴파일러
[EN] ZJIT: Building a Next Generation Ruby JIT / Maxime Chevalier-Boisvert @maximecb
- ZJIT은 YJIT의 한계를 극복하고 Ruby 성능을 획기적으로 향상시키기 위한 차세대 JIT 컴파일러 프로젝트입니다.
- 표준적인 메서드 기반 아키텍처와 SSA 기반 IR을 채택하여 유지보수성, 확장성 및 커뮤니티 접근성을 높였습니다.
- 빠른 JIT-to-JIT 호출 및 JIT 캐싱 기능을 통해 마이크로벤치마크에서 YJIT를 능가하는 초기 성능을 보이며 Ruby 3.5에 탑재될 예정입니다.
RubyKaigi
2025년 05월 27일