[프로그래밍언어개론] Ocaml에 대해 알아보자
Ocaml과 함수형 프로그래밍 언어
Ocaml은 ML(Meta Language)계열의 함수형 프로그래밍 언어의 일종입니다.
Meta Language는 다음과 같은 특징을 가집니다.
함수형 프로그래밍 패러다임, 불변 데이터와 순수 함수형 프로그래밍을 장려합니다.
함수형 프로그래밍은 함수를 first-class value로 취급하는 점입니다.
First-class value란? 값이나 객체가 다른 데이터와 동일하게 취급된다는 것을 의미합니다.
이렇게 함수들을 값으로 취급하면, 순수 함수(pure function)을 쉽게 구현하고 활용할 수 있어 side-effect(전역 변수 변경, 파일 쓰기, 콘솔 출력)를 최소화하고 코드의 안정성을 높일 수 있습니다.
다만 side-effect가 없으면, 예측 가능성과 유지 보수성은 늘어나나, 구현이 어려운 단점이 존재합니다.
따라서 이런 문제를 해결하기 위해 Monad라는 디자인 패턴(side-effect를 일부 허용하되, 이를 안전하게 관리함)이 존재합니다.
강력한 정적 타입 시스템과 타입 추론(Type inference)
컴파일러가 타입 추론 알고리즘을 이용해 자동으로 타입을 추론합니다.
이를 통해 코드의 간결함과 가독성, 런타임 오류 줄이기, 프로그램의 안정성, 성능 향상에 기여할 수 있습니다.
복잡한 데이터 구조를 다루기 위해 패턴 매칭 기능을 제공합니다.
패턴 매칭은 데이터 구조나 값이 특정 패턴과 일치하는지를 검사하고 분기 처리를 하는 기능입니다.
if-else
, switch
문 보다 간결하다는 특징이 있지만, 구현이 상대적으로 어렵습니다.
이외에도 다형성, Module System 등의 특징이 있습니다.
이러한 특징들로 인해, 캡슐화, 코드 재사용, 유지보수가 용이하다는 장점이 존재합니다.
Ocaml의 기초
Ocaml은 .ml 확장자를 사용합니다.
컴파일러는 ocamlc를 사용하고, 빌드 시스템은 dune을 사용합니다.
특이한 점으로는 Ocaml은 명시적인 main()
함수가 없다는 점입니다.
Ocaml의 라이브러리
Ocaml은 코드 작성의 생산성과 안정성을 높여주는 라이브러리 또한 가지고 있습니다.
- Core, 기본 표준 라이브러리보다 더 많은 기능과 개선된 API를 제공해줍니다.
- ppx-compare, 사용자 정의 타입에 대해 자동으로 비교(compare) 함수를 생성해줍니다.
- Menhir, 파서 제너레이터로, 에러 메세지와 디버깅을 지원합니다.