GN⁺: Elixir 1.17 출시: 패턴의 집합 이론적 타입, 기간, OTP 27
(elixir-lang.org)Elixir v1.17 출시: 집합 이론적 타입, 캘린더 지속 시간, Erlang/OTP 27 지원
점진적 집합 이론적 타입 경고
- Elixir v1.17은 패턴에서 타입을 추론하고 이를 사용해 프로그램을 타입 체크하는 집합 이론적 타입을 도입함.
- 이 타입 시스템은 기존 소프트웨어를 변경하지 않고도 코드베이스의 오류와 버그를 찾을 수 있게 해줌.
- 현재는 경고를 통해서만 개발자들이 이 타입 시스템과 상호작용할 수 있음.
- 주요 경고:
- 존재하지 않는 키에 대한 패턴 매칭
- 존재하지 않는 키에 대한 접근
- 모듈이 아닌 곳에서 함수 호출
- 익명 함수 호출 시 함수가 아닌 것을 호출
- 구조체 간의 비교
- 겹치지 않는 타입 간의 비교
- 잘못된 바이너리 패턴 매칭
- 정의되지 않은 예외 구조체를 구출하려는 시도
- 구출된 예외에서 정의되지 않은 필드 접근
Erlang/OTP 지원
- Elixir v1.17은 Erlang/OTP 27을 지원하며, Erlang/OTP 24에 대한 지원을 중단함.
- Elixir 개발자들은 Erlang/OTP 26 이상으로 마이그레이션할 것을 권장함.
- Erlang/OTP 27의 주요 기능:
- json 모듈 추가
- 프로세스 레이블 (proc_lib:set_label/1) 추가
새로운 Duration 데이터 타입과 날짜 이동 함수
- Elixir v1.17은 Duration 데이터 타입과 날짜, 시간, 날짜 시간을 주어진 기간만큼 이동시키는 API를 도입함.
- 예시:
iex> Date.shift(~D[2016-01-31], month: 2) ~D[2016-03-31]
- Duration은 간격, 반복 이벤트, 일정 모델링에 필수적임.
- DateTimes의 경우, Elixir는 시간대 변경을 올바르게 처리함.
기타 주요 변경 사항
- 새로운 Keyword.intersect/2,3 함수 추가.
- 새로운 Mix 프로파일러 mix profile.tprof 추가.
- Kernel.is_non_struct_map/1 가드 추가.
- Elixir의 Logger가 gen_statem 보고서를 포맷하고 Erlang/OTP 27 프로세스 레이블을 포함함.
GN⁺의 의견
- 집합 이론적 타입: 이 타입 시스템은 코드의 안정성과 신뢰성을 높이는 데 큰 도움이 될 수 있음. 특히, 대규모 프로젝트에서 유용함.
- Erlang/OTP 27 지원: 최신 버전의 Erlang/OTP를 지원함으로써 성능과 기능 면에서 많은 이점을 제공함.
- Duration 데이터 타입: 시간대와 캘린더를 고려한 날짜 이동 기능은 일정 관리와 같은 애플리케이션에서 매우 유용함.
- 타입 시스템의 한계: 현재는 함수 경계 너머의 타입 분석이 불가능하므로, 이 부분은 향후 업데이트에서 개선될 필요가 있음.
- 경쟁 제품: 다른 언어들, 예를 들어 TypeScript와 같은 정적 타입 시스템을 제공하는 언어들과 비교해볼 때, Elixir의 접근 방식은 동적 언어의 유연성을 유지하면서도 타입 안정성을 제공함.
Hacker News 의견
-
Elixir와 Erlang 팀이 최근 몇 년 동안 뛰어난 성과를 내고 있음. 라이브러리와 책 저자들의 기여도 큼. Elixir와 OTP의 커밋을 지켜보며 흥미로움을 느낌. 모든 관련자들에게 감사함.
-
Elixir를 백엔드로 사용한 사이드 프로젝트에서 생산적이고 즐거운 경험을 함. LiveView의 생산성을 높이 평가하지만, 네트워크 연결이 불안정한 경우에는 적합하지 않음. Elixir가 LiveView와 분리되어도 충분히 재미있게 사용할 수 있음.
-
스타트업을 Elixir로 풀스택 개발 중이며, 지금까지 사용한 기술 중 가장 훌륭함. 친구들에게 Elixir의 장점을 전파 중. RabbitMQ와 클라이언트가 OTP 27에서 작동하면 좋겠음.
-
Elixir와 Erlang 개발자들의 멋진 작업에 감사함. Elixir의 대규모 채택을 위해 "타입이 없다"는 변명이 사라지길 기대함. 계속해서 좋은 성과를 내길 바람.
-
10년 동안 Elixir에 대해 읽어왔고, 언어를 사랑함. 하지만 주류 언어보다 낮은 급여 때문에 Elixir 관련 직업을 포기함. 기술 스택보다 급여와 멋진 제품이 더 중요함. 여전히 Elixir를 멀리서 지켜보는 것은 재미있음.
-
이번 릴리스의 멋진 기능은
get_in/1
의 추가임. 예를 들어,get_in(struct.foo.bar)
에서foo
가nil
을 반환하면bar
에 접근해도 오류가 발생하지 않음. -
이번 릴리스가 내가 원하던 마지막 조각임. 앞으로의 단계가 기대됨. 언어는 이제 100% 기능이 완비되었다고 생각함.
-
타입 시스템에 대해 기대가 큼. José가 "점진적 타입 시스템"이라고 설명한 것을 기억함. 이는 단계적으로 추가될 예정임. 다음 단계에서 새로운 타입 시스템 관련 기능이 나올지 궁금함. 특히 새로운 컴파일러 최적화를 기대함.
-
이번 릴리스에 매우 흥분됨. Elixir IntelliJ 플러그인에 자원이 투입되길 바람. VSCode를 사용하는 것이 즐겁지 않음.
-
"집합 이론적 타입"이 무엇을 의미하는지 아는 사람이 있는지 궁금함. 프로그래밍 언어에 관심이 많지만 이 용어는 처음 들어봄.