일단 함수형 언어가 아닌 함수들은 함수를 first class 로 쓸 수 없습니다.
그래서 C++ 같은 언어에서는 함수 객체를 만드는 등의 방법으로 함수형 언어를 흉내냅니다.
뭐 이런 세세한 것 말고도 일반론에서 접근할 수도 있습니다.
표현력이 뛰어나다는 말은 크게 두 가지 의미가 있는데 하나는 메모리가 무한히 주어졌을 때
계산이론에서 말하는 모든 계산가능한 함수를 표현할 수 있는가 하는 문제이고, 다른 하나는
프로그램을 얼마나 쉽게 추상화(abstraction)할 수 있는가의 정도에 따라 말하는 것입니다.
표현력에 대한 첫번째 의미야 뭐 대부분의 프로그래밍 가능한 시스템은 다 같습니다.
튜링 머신, 람다 셈법, 재귀 이론을 비롯한 추상적인 시스템 및 실제로 사용하는 거의
모든 범용 프로그래밍 언어들은 메모리가 무한하다면 모든 계산가능한 함수를 다 기술할
수 있으니 이건 뭐 굳이 비교할 필요가 없습니다.
표현력이 뛰어다나는 두번째 의미는 single point of control 의 원리에 비추어 보았을 때
얼마나 프로그램을 안전하면서도 작성하기 편하게 지원하는지의 정도라고 저는 봅니다.
예를 들면 C++의 템플릿 등과 같이 parametric polymorphism 지원하는 언어는
그렇지 못한 언어보다 훨씬 더 코드의 중복을 줄임으로서 single point of control 을
쉽게 유지할 수 있습니다. C 같은 경우는 void 포인터 장난을 쳐야 하고 java 도 Object
로 다 캐스팅했다 빼야 되는데 C++ 템플릿은 이런 문제를 비교적 깔끔하게 해결합니다.
(결국 Java 도 이런 문제 때문에 generic 을 지원하게 되었죠)
안전한 타입 시스템을 염두해 두고 다지인된 함수형 언어들은 C++의 템플릿보다도
훨씬 더 깔끔하게 표현할 수 있답니다.
그리고 제한사항이 많은 데는 이유가 있고 오히려 장점이 되는 경우가 많습니다.
제한사항이 많은 RISC 머신이 오히려 CISC 머신보다 현대적인 컴퓨터 구조라고 각광받고 있죠.
파이프라인이나 멀티 프로세서 등 병렬화되는 현대적인 컴퓨터 구조에는 오히려 간단하고 제한이 많은 디자인이 각광받고 있습니다.
복잡하게 프로그램을 작성하지 않고 KISS를 강조하는 것과 같은 이치랍니다.
디자인은 더 집어넣을 것이 없을 때 완성되는 것이 아니라 더 뺄 것이 없을 때 비로소 완성됩니다.
함수형 언어가 아닌 언어들은 함수를 first class 로 쓸 수 없습니다
일단 함수형 언어가 아닌 함수들은 함수를 first class 로 쓸 수 없습니다.
그래서 C++ 같은 언어에서는 함수 객체를 만드는 등의 방법으로 함수형 언어를 흉내냅니다.
뭐 이런 세세한 것 말고도 일반론에서 접근할 수도 있습니다.
표현력이 뛰어나다는 말은 크게 두 가지 의미가 있는데 하나는 메모리가 무한히 주어졌을 때
계산이론에서 말하는 모든 계산가능한 함수를 표현할 수 있는가 하는 문제이고, 다른 하나는
프로그램을 얼마나 쉽게 추상화(abstraction)할 수 있는가의 정도에 따라 말하는 것입니다.
표현력에 대한 첫번째 의미야 뭐 대부분의 프로그래밍 가능한 시스템은 다 같습니다.
튜링 머신, 람다 셈법, 재귀 이론을 비롯한 추상적인 시스템 및 실제로 사용하는 거의
모든 범용 프로그래밍 언어들은 메모리가 무한하다면 모든 계산가능한 함수를 다 기술할
수 있으니 이건 뭐 굳이 비교할 필요가 없습니다.
표현력이 뛰어다나는 두번째 의미는 single point of control 의 원리에 비추어 보았을 때
얼마나 프로그램을 안전하면서도 작성하기 편하게 지원하는지의 정도라고 저는 봅니다.
예를 들면 C++의 템플릿 등과 같이 parametric polymorphism 지원하는 언어는
그렇지 못한 언어보다 훨씬 더 코드의 중복을 줄임으로서 single point of control 을
쉽게 유지할 수 있습니다. C 같은 경우는 void 포인터 장난을 쳐야 하고 java 도 Object
로 다 캐스팅했다 빼야 되는데 C++ 템플릿은 이런 문제를 비교적 깔끔하게 해결합니다.
(결국 Java 도 이런 문제 때문에 generic 을 지원하게 되었죠)
안전한 타입 시스템을 염두해 두고 다지인된 함수형 언어들은 C++의 템플릿보다도
훨씬 더 깔끔하게 표현할 수 있답니다.
그리고 제한사항이 많은 데는 이유가 있고 오히려 장점이 되는 경우가 많습니다.
제한사항이 많은 RISC 머신이 오히려 CISC 머신보다 현대적인 컴퓨터 구조라고 각광받고 있죠.
파이프라인이나 멀티 프로세서 등 병렬화되는 현대적인 컴퓨터 구조에는 오히려 간단하고 제한이 많은 디자인이 각광받고 있습니다.
복잡하게 프로그램을 작성하지 않고 KISS를 강조하는 것과 같은 이치랍니다.
디자인은 더 집어넣을 것이 없을 때 완성되는 것이 아니라 더 뺄 것이 없을 때 비로소 완성됩니다.
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
댓글 달기