'합수 합성'의 정의를 좁게 보면 함수형 언어에서만 된다고 생각할 수 있겠지만, 가만 생각해보면 그 실행도 어차피 절차언어인 기계어나 어셈블리어 위에서 돌아가잖아요. 즉 '가능, 불가능'의 문제가 아니라, '언어의 관심사, 취향, 철학'의 문제입니다. '함수 합성'의 정의를 좁게 '특정 언어의 특정 기능'이 아닌 '논리적 기능 간 합성'으로 넓게보면 얼마든지 가능하죠. 그리고 분명히 함수형 언어의 장점은 존재하기에 이를 적극적으로 차용한게 rxjs나 spark 같은것들이구요.
다들 컴과에서 배웠듯이 아래는 같은 결과지만, 단지 표현형이 다를 뿐입니다. 그리고 전위는 함수형이라고 부르는 경우가 많죠.
전위표기법 : + 1 1
중위표기법 : 1 + 1
후위표기법 : 1 1 +
물론 함수형 프로그래밍도 좋은 방법이라고 생각은 하지만, 그 장점을 설득력있게 전달 해주는 사람은 잘 없는것 같습니다. 그냥 좋다고 하면 잘 와닿지 않잖아요?
이하 개인적인 의견으로, 그리고 현대의 모든 프로그램은 사실상 튜링 기계 기반으로 이뤄져 있기에, 추상적으로 크게 함수와 자료로 나눌 수 있고, 때문에 절차적 프로그래밍도 근원적으로는 함수형 이라고 생각합니다. 그럼 함수형의 절차형 대비 진짜 장점은 무엇인가하면, 그냥 '전역 혹은 그에 준하는 영역의 변수 안쓰기'라고 생각됩니다. 이 장점으로 인해 '함수와 함수간의 격리' 및 '멀티쓰레드 컴퓨팅'에도 효율적이죠.
하지만 이건 함수형 프로그래밍으로만 얻을 수 있는 잇점이냐면 그건 아닙니다. 절차형 언어에서도 dependency injection 개념을 통해 클래스 및 함수 단위 격리가 권장되고 (이미 모던한 프레임워크는 모두 기본 차용하고 있죠), rust언어에서는 언어적인 제한으로 편리한 동시성 컴퓨팅을 추구 할 수 있게 해놓았죠.
정리하면 함수형 언어는 좋은 언어이고 방법론이지만, '진화적 의미에서 우월'이라기 보다 그저 go나 rust 언어 처럼 '실패할 가능성을 언어 단위에서 배제하기 위해 노력했으면서, 사용하기 어려운 언어'라고 생각합니다.