Advent of Code를 위해 Gleam을 사용해 본 후기

1 month ago 16

  • Advent of Code 2025의 12일간 퍼즐을 Gleam으로 해결하며, 언어의 Rust 수준 오류 메시지파이프라인 중심 함수형 스타일이 특히 인상적이었음
  • echo , fold_until , list.transpose 등 내장 함수들이 디버깅과 조합 문제 해결을 단순화하며, 옵션 타입 기반 안전성이 그리드 퍼즐 처리에 유용하게 작동함
  • 표준 라이브러리에 파일 IO와 정규식 기능이 포함되지 않은 점, 리스트 패턴 매칭 제약, 명시적 비교 구문 등은 반복 사용 시 불편 요소로 지적됨
  • Erlang VM과 JavaScript 타깃 간 정수 처리 차이로 인해 bigi 사용이 필요했으며, 일부 퍼즐에서는 외부 도구(glpsol) 호출로 문제를 해결함
  • 전반적으로 함수형 사고 전환이 퍼즐 풀이를 명확하게 만들었으며, Gleam을 실제 프로젝트(예: 웹서버 개발)에 적용해 보고 싶다는 기대를 표현함

Advent of Code 2025과 Gleam 선택

  • 매년 Advent of Code를 완주해 온 작성자는 올해 Gleam 언어를 선택해 12일간의 퍼즐을 해결함
    • 올해 행사는 25일 대신 12일로 축소되었으며, 각 문제의 난이도는 높았지만 학습에는 적합한 구조였음
  • 퍼즐 진행 속도가 빠르고 도구 세트가 완성되기 전에 복잡한 문제를 만나, 새 언어 학습에 이상적인 환경이 되었음

Gleam의 언어적 장점

  • 간결한 문법, 유용한 컴파일러 오류 메시지, Rust 수준의 친절한 피드백이 특징
  • 파이프 연산자 중심의 함수형 스타일이 AoC 문제 구조(파싱→변환→fold)에 잘 맞음
  • IntelliJ용 Gleam 확장과 LSP가 안정적으로 작동해 개발 환경이 쾌적했음
  • 함수형 프로그래밍(FP)은 명령형 코드보다 문제의 본질을 기술하는 방식으로 사고를 전환하게 함

주요 기능과 코드 활용 사례

  • echo : 파이프라인 중간에서 값 확인이 가능한 단순 출력 함수로, 문자열 포맷 없이 디버깅 가능
    • 문자열 보간 기능이 없어 텍스트 생성 시 <>" 연산이 많아지는 점은 불편 요소로 언급
  • 옵션 타입(dict.get) : 그리드 퍼즐에서 경계 검사 없이 안전한 이웃 탐색 가능
  • 리스트 유틸리티
    • list.transpose: 행렬 전치 연산으로 퍼즐 구조 단순화
    • list.combination_pairs: 3D 포인트 쌍 생성 시 중첩 루프 없이 한 줄로 처리
    • fold_until: 조건 충족 시 조기 종료 가능한 fold 함수로, 퍼즐 반복 계산에 효율적

Gleam의 제약과 불편 요소

  • 표준 라이브러리에 파일 IO 부재, simplifile 패키지로 대체 사용
  • 정규식 기능도 외부 의존(gleam_regexp) 필요
  • 리스트 패턴 매칭 제약: [first, ..middle, last] 형태 불가
  • 비교 연산의 명시적 처리: order 타입을 사용해야 하며, 단순 비교 시 구문이 장황해짐

고급 활용과 퍼즐별 사례

  • bigi : JavaScript 타깃 시 정수 오버플로 방지를 위해 사용
  • XOR 비트마스크: Day 10-1에서 조명 토글 문제를 XOR 연산으로 모델링해 효율적 해결
  • glpsol 호출: Day 10-2에서 선형 방정식 풀이를 위해 LP 파일 생성 후 외부 명령 실행
  • 메모이제이션 키: Day 11-2에서 노드와 상태를 함께 키로 사용해 즉시 계산 완료
  • 마지막 퍼즐은 입력 가정에 의존적이었으며, 단순 면적 비교(heuristic_area <= max_area)로 해결

결론과 향후 계획

  • Gleam은 표준 라이브러리 한계에도 불구하고 안전성과 표현력에서 강점을 보임
  • 파이프라인, 옵션/결과 타입, 리스트 함수, fold_until 등은 퍼즐 풀이를 명확하게 만듦
  • 향후 웹서버 개발 등 실제 프로젝트 적용을 계획하며, 다음 해 Advent of Code에서도 Gleam을 계속 사용할 의향을 밝힘
  • 전체 소스코드는 GitHub 저장소에 공개됨 (tymscar/Advent-Of-Code/2025/gleam/aoc/src)

Read Entire Article