이러한 모든 장점도 단점이기 때문입니다.
무국적 프로그램; 부작용 없음
실제 프로그램은 모두 부작용과 돌연변이에 관한 것입니다. 사용자가 버튼을 누르면 무언가 일어나기를 원하기 때문입니다. 그들은 무언가를 입력 할 때, 그 상태가 이전에 있던 상태를 대체하기를 원합니다. 회계에서 Jane Smith가 결혼하고 이름을 Jane Jones로 변경하면 급여 체계를 인쇄하는 비즈니스 프로세스를 뒷받침하는 데이터베이스가 그러한 종류의 돌연변이를 처리하는 것이 더 좋습니다. 외계인에서 기관총을 발사 할 때, 대부분의 사람들은 적중률이 더 낮은 새로운 외계인의 건설로 정신적으로 그것을 모델링하지 않습니다. 그들은 기존의 외계인 속성의 변이로 모델링합니다.
프로그래밍 언어 개념이 모델링되는 도메인에 대해 근본적으로 작동하는 경우 해당 언어를 사용하여 정당화하기는 어렵습니다.
동시성; 떠오르는 멀티 코어 기술로 매우 훌륭하게 재생
문제는 방금 추진되었습니다. 불변의 데이터 구조를 사용하면 오래된 데이터로 작업 할 수있는 비용으로 저렴한 스레드 안전성을 얻을 수 있습니다. 변경 가능한 데이터 구조를 사용하면 데이터를 일관성있게 유지하기 위해 복잡한 논리를 작성해야하는 비용으로 항상 새로운 데이터를 처리 할 수 있다는 이점이 있습니다. 그중 하나가 다른 것보다 낫다는 것은 아닙니다.
프로그램은 일반적으로 더 짧고 경우에 따라 읽기가 더 쉽습니다
더 길고 읽기 어려운 경우를 제외하고. 기능적 스타일로 작성된 프로그램을 읽는 방법을 배우는 것은 어려운 기술입니다. 사람들은 일련의 계산을 수행하는 것이 아니라 레시피처럼 수행해야 할 일련의 단계로 프로그램을 생각하는 것이 훨씬 더 나은 것처럼 보입니다.
생산성 향상 (예 : Erlang)
기능적 스타일로 프로그래밍하는 방법을 알고있는 프로그래머를 고용하는 데 드는 막대한 비용을 정당화하려면 생산성이 크게 높아져야합니다.
그리고 작업 시스템을 버리고 싶지 않다는 것을 기억하십시오. 대부분의 프로그래머는 새로운 시스템을 처음부터 구축하지 않고 기존 시스템을 유지 관리합니다. 대부분 기존 시스템은 작동하지 않는 언어로 작성되었습니다. 이를 주주들에게 정당화하려고한다고 상상해보십시오. 기존 작업 급여 시스템을 폐기하여 수백만 달러의 비용으로 새로운 시스템을 구축 한 이유는 무엇입니까? "기능 프로그래밍이 훌륭하기 때문에"주주들을 기쁘게 할 것 같지 않습니다.
명령형 프로그래밍은 매우 오래된 패러다임 (내가 아는 한)이며 21 세기에는 적합하지 않을 수 있습니다.
함수형 프로그래밍도 매우 오래되었습니다. 나는 개념의 나이가 어떻게 관련되어 있는지 알지 못한다.
나를 잘못 이해하지 마십시오. 함수형 프로그래밍을 좋아합니다. 함수형 프로그래밍의 개념을 C #으로 가져 오기를 원했기 때문에이 팀에 합류했습니다. 불변 스타일로 프로그래밍하는 것이 미래의 방식이라고 생각합니다. 그러나 단순히 원치 않는 기능적 스타일의 프로그래밍 에는 막대한 비용이 듭니다 . 보다 기능적인 스타일로의 전환은 수십 년에 걸쳐 천천히 그리고 점차적으로 일어날 것입니다. 이것이 바로 기능입니다. 더 기능적인 스타일로의 전환입니다. Haskell의 순도와 아름다움을 포용하지 않고 C ++을 포기한 것이 아닙니다.
나는 생계를 위해 컴파일러를 만들고 차세대 컴파일러 도구에 대한 기능적 스타일을 확실히 수용하고 있습니다. 함수형 프로그래밍은 근본적으로 우리가 직면 한 여러 종류의 문제에 적합하기 때문입니다. 우리의 문제는 문자열과 메타 데이터와 같은 원시 정보를 다른 문자열과 메타 데이터로 변환하는 것입니다. 누군가 IDE에서 타이핑하는 것처럼 돌연변이가 발생하는 상황에서 문제 공간은 본질적으로 변경된 트리 부분 만 점진적으로 재구성하는 것과 같은 기능적 기술에 적합합니다. 많은 도메인에는 기능적 스타일을 적용 할 수있는 훌륭한 속성이 없습니다 .