일단 내가 읽고있는 책은

Real World Ocaml 임.

제인스트리트의 기술책임자와 오카멜 언어를 관리하는사람,
그리고 이게 대학이랑도 연결되어있는데 뭐시기뭐시기대학들의 수많은 공동저자들이 참여한 책 임.




그래서 오카멜에 대해 느낀점은,

이건 함수형도 지원하는 언어이지, 절차지향이 굉장히 많이 섞인 언어라는 점이고,
철학적이라기보단 실용적인 언어라는 사실임.


그나마 철학이라고 얘기할만한건 타입시스템정도가 있겠음.
오카멜을 잘 표현하는 한단어는 함수형이 아니라 타입시스템임.

순수함수적인 타입들과 더불어서
가변적인 자료형들도 다루고
Polymorphic Variant
GADT
object
class
그리고 모듈타입.

이런것들을 활용하는데,

아주 논리적으로 이제껏 배웠던 절차지향 객체지향 함수형을 종합해서 다룰수가 있음.


오카멜이 실용적인 언어인 이유는
아마 이 책 만든새끼들이 오카멜좀 써달라고 일부러 기능적인 것들을 잔뜩 소개한거겠지만,


단적인 예시로
FFI를 들 수가 있음.

스칼라한테서도 느낀 감정인데,
다른 개발환경이랑 잘 섞여들어가도록 디자인 하고, 우리거 써주세요 하는 그 느낌.

그게 있음.

FFI 진짜 잘되어있음. 함수형이랑 C는 굉장히 멀어보이는데 C랑 섞어쓸수있다고 광고를 한다?
그 섞어 쓰는 과정에서 아예 C타입이랑 오카멜타입 변환기도 만들고... 포인터연산까지 하고 있음.
함수형언어가.

스칼라랑 오카멜 둘다 멀티패러다임인점도 우연은 아닐거라고 생각함.


오카멜은 무언가를 고집하지 않음.

그리고 자유롭고 강력한 언어임.


스칼라랑 포지션이 비슷한거같은데
스칼라처럼 JVM위에서 자바생태계를 갖다놔도 스칼라 안쓰는데
퍽이나 오카멜 쓰겠다...



근데 오카멜 진짜 매력적임.


그리고 어? 객지 < 함수형 <<< 멀티패러다임인가?

싶겠지만

객지는 객지만의 장점이 있음.
함수형은 Subtype이 쉽지 않음.

객체지향이 가지는 우월함은 두가지임.
상속과 다이너믹 디스패치.

상속이랑 다이너믹 디스패치 구현할 수 있음. 오카멜에 구현 되어있음.


근데 서브타입이 구현이 빡셈.

오카멜에서 서브타입이 구현된 방식을 한줄로 설명하자면

polymorphic 한데,

대충 메소드가 오버랩되면 슈퍼타입 서브타입이 갈리는거임.

그래서 자바로따지면 연관관계가 없을 타입끼리도
서브타입이 형성되어버림.

타입이 고정되어있지 않고 폴리몰픽한 결과임.

이 폴리몰피즘 안에서 상속이 이뤄지고 다형성이 구현되는건데,

함수형의 타입에는 서브타입이란게 없으니까 폴리몰피즘으로 구현해버린거임.


그래서 순수 객체지향을 쓸거면 객체지향언어가 더 적합한건 맞는거같고

순수함수 하고싶으면 하스켈 가는거고



글구 함수형 자체가 뭔가 메인으로 단일철학만 고집할 그런 영역은 아닌거같음.
오카멜이 멀티패러다임이다 그러는데
사실 스칼라도 멀티패러다임이고
리습만 비 멀티패러다임 후보거든?
(하스켈은 순수함수 고집하니까 예외)


순수함수를 지향하지 않으면서 멀티패러다임이 아닌 함수형 언어가 존재하는가


리습 곧 공부하니까 직접 까보면 알겠지.


오카멜을 공부하면서 기대한점은,
함수형 철학으로 어떻게 고생산성 작업을 할까 였는데
오카멜의 방식은 멀티패러다임이라서 그거에대한 정답을 못들었고
(즉, 임의의 상황에서도 표현력을 강하게 가져가려면 철학을 섞어써야함)



만약 리습조차 멀티패러다임을 쓰면


그러면 내 그다음 행선지는

Concurrent Programming in Haskell 이라는 책임.

다른 도구들이랑 섞어쓰는 도구라면
언제 그 효용이 극대화되는지 봐야겠지.

그리고 그 상황에서 함수형의 존재가치를 활용해야지.


아, 함수형의 존재가치를 찾아나선다 뭐다 해서 함수형 무쓸모고 단독으로 못쓸물건이고 뭐 이런 뉘앙스로 얘기했지만
나는 객지보다 멀티패러다임을 선호함.
이거 진짜 속이 뻥~뚫리는게 있음.

오카멜 쓰는사람이 없어서그렇지, 공부하기에 진짜 좋은 언어다.
하스켈 하위호환따리일줄알았는데 언어가 진짜 다재다능하고 기능도 강력하고 표현력이 좋음.