Ruby 3에서의 타입 - 새로운 타입 구분용 언어, RBS를 소개합니다.
(developer.squareup.com)Ruby 3부터 Typescript와 같은 Type Annocation이 추가되는데. Matz와 Ruby Commiter Team이 Ruby에 정적 타입을 도입하면서 어떤 고민을 하였고, 어떤 해결방법을 사용했는지 설명한 글입니다. 아래는 요약입니다.
Ruby 3에서는 새로운 언어인 RBS가 추가되며, 이는 Ruby 3와 함께 제공됩니다.
RBS는 Ruby의 Type Annocation을 위한 언어입니다.
- 도입 배경
( untype을 동적 타입으로 번역했습니다. )
타입과 동적 타입은 프로그래밍 언어에서 오래된 대결이며. 동적 타입은 빠른 개발이 가능하지만 팀과 코드 베이스를 확장하는데 문제가 있고, 타입은 대규모에는 적합하지만, 유연성은 떨어집니다.
두 방식 사이의 장점을 얻기 위해 C#은 런타임까지 타입 체크를 미루는 dynamic 기능을, PHP, Python은 타입 검사 옵션을. TypeScript는 타입을 지정하지 않은 언어를 만드는 타입 언어를 선택했습니다.
루비는 두 방식의 장점을 얻기 위해 표준 타입 구분 언어 - RBS를 만들었습니다.
- RBS는 어떻게 생겼나요?
RBS는 C/C++/ObjC 의 .h나 Typescript의 .d.ts와 유사합니다. 이 방식의 장점은, 기존 작성된 Ruby 파일을 수정하지 않고 타입 확인의 장점을 취할 수 있다는 것입니다.
RBS에선 해당 클래스의 속성, 메서드의 타입을 정의하였습니다. RBS는 Ruby 프로그램의 구조를 설명하는 언어이며. 개발자에게 코드 개요와 정의된 클래스 및 메소드를 제공합니다. 가장 큰 장점은, 구현과 실행 모두에 대해 형식 정의를 확인할 수 있다는 것입니다.
- RBS의 핵심 기능
동적 언어의 타입 시스템 개발은 이미 정적으로 타입이 지정된 언어와 다릅니다. 이미 세상에는 많은 루비 코드가 있고. 루비를 위한 타입 시스템은 가능한 많은 코드를 지원해야 했습니다.
그래서 루비 코드의 두 가지 중요한 특성과. RBS의 해결 방법을 소개합니다.
- 덕 타이핑
덕 타이핑은 타입은 모르지만, 특정 메서드가 있을 것이라고 예상하고 작성하는 기법입니다. RBS는 해당 기법을 지원하기 위하여 interface를 도입하였고. 인자가 해당 메서드가 있는지 확인할 수 있게 하였습니다.
- 비 - 균일성
식이 다른 타입의 값을 가질 수 있도록 하는 다른 코드 패턴입니다. Ruby에서도 인기가 있으며. RBS 또한 union 타입 지원과 메서드 오버로드로 이를 가능하게 합니다.
- 타입과 함께하는 루비 프로그래밍
RBS의 주된 장점을 소개합니다.
- 더 많은 버그를 찾을 수 있음.
- Nil 안정성
- 더 좋은 IDE 통합성.
- Duck Typing 가이드
https://crystal-lang.org - 크리스탈이 RBS와 관계를 어떻게 가져갈까 궁금하네요. (크리스탈은 루비 문법을 차용한 컴파일 언어입니다.)
아앗 코드에 있는 < 때문에 그런듯 하네요. 이거 코드가 기사 내용에 들어올거라는건 예상을 안해서 ^^;
차후에 마크다운 일부만 도입해서 확장을 해볼까 하는데 그때 고려하겠습니다.