2011-01-31 4 views
18

나는 C++ 0x (C++ 11) (lambdas와 완벽한 포워딩)가 기능적 언어의 상위 집합인지 궁금합니다. C++에는없는 기능적 언어의 기능이 있습니까?기능 언어로 C++ 0x (C++ 11)?

+8

가비지 수집? –

+0

아무도 기능적 언어 기능 목록을 가지고 있다면 pls도 그것을 게시합니다 –

+2

제가 알고있는 대부분의 언어는 기능적 하위 집합 (심지어 C)을 특징으로합니다 - 즉, 순수한 형태처럼 상태를 수정하지 못하도록 프로그램을 작성할 수 있습니다 함수 언어 (예 : 하스켈)를 사용하므로 좀 더 구체적이어야합니다. – EmeryBerger

답변

15

함수 프로그래밍 패러다임은 집합 간의 관계로 계산을 모델링하며 따라서 본질적으로 선언적입니다. 그러나 실제로는 함수를 필수적이라고 생각합니다. 즉, 프로 시저와 마찬가지로 입력 값을 입력하고 출력 값을 가져 오는 경우가 있습니다. 이 관점에서, 함수의 특성은 부작용이 없다는 것입니다. 용어가 모호하기 때문에 이러한 함수를 이라고하고이라는 순수 함수 만있는 언어는 이고 언어는입니다.

그러나 모든 기능 언어가 순수하지는 않습니다. 기능 언어은 프로그래머가 기능 패러다임을 효율적으로 사용할 수 있도록 구문과 의미가있는 언어입니다. 가능한 패러다임을 사용하는 개념 중 일부는 어휘 폐쇄, 고차 함수, 변형 유형 및 패턴 매칭, 지연 평가, 유형 추론 (정적 유형 언어의 경우)이 포함 된 람다 식 표현을 포함합니다.

이것은 모든 권한 또는 대부분의 권한을 제공하지 않고도 권한있는 목록 일 수는 있지만 언어가 주요한 역할을 수행하지 않고도 사용할 수 있다면 언어가 기능적이라고 간주되어야한다는 강력한 지표입니다.

내가 03 C++ 여부 + 부스트를 결정하는 부스트에 대해 충분히 모른다는 실행 가능한 기능적인 언어이지만 C++ 0X 확실히하게 C++ 기능, 심지어 주관적 경계에 걸쳐 밀어 기능적 언어 영역.

다른 프로그래밍 패러다임에도 동일한 고려 사항이 적용됩니다. C++은 순전히 객체 지향 언어도 아닙니다. 실제로 이론적으로는 불가능하지만 이론적으로 불가능합니다. 순수하게 기능적이고 순수한 언어를 설계하는 것입니다. 객체 지향), OO 언어 (클래스, 상속, 캡슐화)와 일반적으로 연관되는 대부분의 기능은 사실상 아무런 권한도 없습니다.

+1

다소 관련이 있습니다 : http://stackoverflow.com/questions/553536/confused-is-oo- 본질적으로 - 필수 - 또는 - 그것 - 그것 - 멀티 패러다임/4861769 # 4861769 – Christoph

5

C2Wiki에 대한 정의 및 토론 Functional Programming Languages의 목록을 확인하십시오.

가장 일반적인 (그리고 적어도 분쟁 기능)의 일부

은 다음과 같습니다

  • 첫 번째 클래스 함수 - function 클래스는 최고 수준의 기능을 나타냅니다.
  • 고차 함수 - 함수 개체로 에뮬레이트 될 수 있습니다.
  • 어휘 클로저 - 클래스로 에뮬레이션 할 수 있습니다.
  • 단일 과제 - 더 많은 국제 대회. 모든 변수를 선언하여이 작업을 수행 할 수 있습니다 const.
  • 지연 성 평가 - TMP로 달성 할 수 있습니다.
  • 가비지 콜렉션 - 여전히 누락되었습니다. 평생과 범위가 이 아닌과 같기 때문에 함수 언어에서 꽤 많이 필요합니다. @Pascal은 위의 주석에서 지적했습니다.
  • 유형 유추 - auto
  • 테일 콜 최적화 - 기능적 언어에는 엄격히 필요하지 않지만 C++에서는 컴파일러에 종속됩니다.
+1

C++ 0x 표준은 가비지 수집 구현을 허용합니다. – James

+17

모든 것을 에뮬레이트해야하는 경우 기능적 언어가 아닙니다. 에뮬레이트하는 것입니다. – Chuck

+0

매우 동의했습니다. –