여기서는 기능적 언어와 내용에 대해 많은 이야기를합니다. 왜 “전통적인”언어를 사용합니까? 그들은 무엇을 더 잘합니까? 그들은 무엇에 더 나쁜가? 이상적인 기능적 프로그래밍 응용 프로그램은 무엇입니까?
답변
기능적 언어는 명령형 및 객체 지향 언어와 다른 패러다임을 사용합니다. 그들은 부작용없는 기능을 언어의 기본 구성 요소로 사용합니다. 이것은 많은 것들을 가능하게하고 많은 것들을 더 어렵게 만듭니다 (또는 대부분의 경우 사람들이 익숙한 것과 다릅니다).
함수형 프로그래밍의 가장 큰 장점 중 하나는 부작용없는 함수의 실행 순서가 중요하지 않다는 것입니다. 예를 들어, Erlang에서는 매우 투명한 방식으로 동시성을 활성화하는 데 사용됩니다. 함수형 언어의 함수는 수학 함수와 매우 유사하게 동작하므로 함수형 함수로 쉽게 번역 할 수 있습니다. 경우에 따라 코드를 더 읽기 쉽게 만들 수 있습니다.
전통적으로 함수형 프로그래밍의 가장 큰 단점 중 하나는 부작용이 없다는 것입니다. IO없이 유용한 소프트웨어를 작성하는 것은 매우 어렵지만, 기능에 부작용없이 IO를 구현하기는 어렵습니다. 따라서 대부분의 사람들은 단일 입력에서 단일 출력을 계산하는 것보다 기능 프로그래밍을 최대한 활용하지 못했습니다. F # 또는 Scala와 같은 현대 혼합 패러다임 언어에서는 이것이 더 쉽습니다.
많은 현대 언어에는 기능적 프로그래밍 언어의 요소가 있습니다. C # 3.0에는 많은 함수형 프로그래밍 기능이 있으며 Python에서도 함수형 프로그래밍을 수행 할 수 있습니다. 함수형 프로그래밍의 인기 이유는 대부분 두 가지 이유 때문이라고 생각합니다. 동시성 (concurrency)은 점점 더 많은 멀티 프로세서 컴퓨터를 사용하기 때문에 일반 프로그래밍에서 실제 문제가되고 있습니다. 언어에 대한 접근성이 높아지고 있습니다.
답변
나는 약 40 년 동안 (프로그래밍 스타일로) 사용되어 왔기 때문에 “캐치 온”프로그래밍에 대한 기능적 접근 방식에 대해서는 의문이 없다고 생각합니다. OO 프로그래머가 변경 불가능한 객체를 선호하는 깨끗한 코드를 작성할 때마다 해당 코드는 기능적인 개념을 차용합니다.
그러나 기능적 스타일 을 적용 하는 언어는 요즘 많은 가상 잉크를 사용하고 있으며 앞으로 이러한 언어가 지배적 일지 여부는 명백한 질문입니다. 내 자신의 의심은 스칼라 나 오캄 과 같은 하이브리드, 다중 패러다임 언어
가 순수한 OO 언어 (Smalltalk, Beta 등)가 주류 프로그래밍에 영향을 주었지만 끝나지 않은 것과 같은 방식으로 “순수한”기능 언어를 능가 할 가능성이 높다는 것이다 가장 널리 사용되는 표기법으로
마지막으로, 나는 FP에 대한 귀하의 의견이 몇 년 전과는 다른 절차 적 프로그래머로부터 들었던 의견과 매우 유사하다는 점을 지적 할 수 없습니다.
- (신화적인, IMHO) “평균적인”프로그래머는 그것을 이해하지 못한다.
- 널리 알려지지 않았습니다.
- 당신이 그것으로 쓸 수있는 모든 프로그램은 현재 기술로 다른 방법으로 작성할 수 있습니다.
그래픽 사용자 인터페이스와 “비즈니스 모델로서의 코드”가 OO를보다 널리 인식하는 데 도움이되는 개념 인 것처럼, 불변성과 더 단순한 (대규모) 병렬 처리의 사용 증가는 더 많은 프로그래머가 기능적 접근 방식이 제공하는 이점을 보는 데 도움이 될 것이라고 생각합니다 . 그러나 지난 50 년 동안 디지털 컴퓨터 프로그래밍의 전체 역사를 구성하는 많은 것들을 배운만큼 여전히 배울 것이 많다고 생각합니다. 20 년이 지난 지금 프로그래머들은 현재 인기있는 OO 및 FP 언어를 포함 하여 현재 사용하고있는 도구의 기본 특성에 놀랄 것입니다.
답변
저에게있어 가장 큰 장점은 고유 병렬 처리입니다. 특히 우리는 더 많은 MHz에서 멀어지고 점점 더 많은 코어로 이동하고 있습니다.
나는 그것이 다음 프로그래밍 패러다임이 될 것이라고 생각하지 않으며 OO 유형 메소드를 완전히 대체 할 것이라고 생각하지만 기능적 언어로 코드를 작성해야하거나 범용 언어는 더 기능적인 구성을 포함하도록 성장하십시오.
답변
함수형 언어로 전문적으로 작업하지 않아도 함수형 프로그래밍을 이해하면 더 나은 개발자가 될 수 있습니다. 일반적으로 코드와 프로그래밍에 대한 새로운 관점을 제공합니다.
나는 그것을 배울 이유가 없다고 말합니다.
기능적 스타일과 명령형 스타일을 잘 혼합 한 언어가 가장 흥미롭고 성공할 가능성이 높다고 생각합니다.
답변
나는 항상 다음 큰 것에 대해 회의적입니다. 많은 경우 Next Big Thing은 기술의 유무에 관계없이 적시에 적절한 장소에 존재하는 순수한 역사의 사고입니다. 예 : C ++, Tcl / Tk, Perl. 모든 결함이있는 기술은 모두 오늘날의 문제를 해결하거나 확고한 표준과 거의 동일하거나 둘 다에 대해 인식 되었기 때문에 크게 성공했습니다. 함수형 프로그래밍은 실제로 훌륭 할 수 있지만 이것이 채택 될 것을 의미하지는 않습니다.
하지만 난 수 의 사람들이 왜 당신에게 흥분 함수형 프로그래밍에 대해 . 많은 프로그래머들이 함수형 언어를 사용하면 생산하는 동안 두 배의 생산성 (또는 아마도 10 배의 생산성)을 얻는 일종의 “변환 경험”을 경험했습니다. 변경하기에 더 탄력적이고 버그가 적은 코드. 이 사람들은 기능 프로그래밍을 비밀 무기로 생각합니다. 이 사고 방식의 좋은 예는 Paul Graham의 평균을 치는 것입니다. 입니다. 아, 그리고 그의 신청? 전자 상거래 웹 앱.
2006 년 초 이래로 함수형 프로그래밍과 병렬 처리에 대한 논쟁이있었습니다. 사람들이 좋아하기 때문에Simon Peyton Jones 은 적어도 1984 년 이후로 병렬 처리에 대해 걱정하고 있기 때문에 기능적 언어가 멀티 코어 문제를 해결할 때까지 숨을 쉬지 않습니다. 그러나 지금은 몇 가지 추가 버즈에 대해 설명합니다.
일반적으로 미국 대학은 기능 프로그래밍을 가르치는 일을 잘 못하고 있습니다. Scheme을 사용한 인트로 프로그래밍 교육에 대한 강력한 지원이 있으며 Haskell도 그에 대한 지원을 받고 있지만 기능 프로그래머를위한 고급 기술을 가르치는 방법은 거의 없습니다. 저는 하버드에서 그러한 과정을 가르쳤으며 올 봄 터프 츠에서 다시 할 것입니다. Benjamin Pierce는 Penn에서 그러한 과정을 가르쳤습니다. 폴 휴닥이 예일에서 무슨 짓을했는지 모르겠습니다. 유럽의 대학들은 훨씬 더 나은 일을하고 있습니다. 예를 들어 덴마크, 네덜란드, 스웨덴 및 영국의 중요한 장소에서는 기능 프로그래밍이 강조됩니다. 나는 호주에서 무슨 일이 일어나고 있는지에 대한 감각이 적습니다.
답변
나는 여기 방에서 코끼리를 언급하는 사람을 보지 못하므로 그것이 나에게 달려 있다고 생각합니다. 🙂
JavaScript는 기능적인 언어입니다. 점점 더 많은 사람들이 jQuery, Dojo 및 기타 프레임 워크의 미세한 지점을 활용하여 JS로 더 발전된 작업을 수행함에 따라 FP는 웹 개발자의 백도어에 의해 도입 될 것입니다.
클로저와 함께 FP는 JS 코드를 실제로 가벼우면서도 읽을 수있게 만듭니다.
건배, PS
답변
대부분의 응용 프로그램은 일반적인 OO 방식으로 해결할 수있을 정도로 간단합니다.
-
OO 방식이 항상 “정상적인”것은 아닙니다. 이 10 년 표준은 지난 10 년간 소외된 개념이었습니다.
-
함수형 프로그래밍은 수학입니다. Lisp의 Paul Graham ( Lisp의 대체 기능 프로그래밍) :
따라서이 1950 년대 언어가 왜 구식이 아닌지에 대한 간단한 설명은 기술이 아니라 수학이며 수학이 부실하지 않다는 것입니다. Lisp를 비교하는 올바른 방법은 1950 년대 하드웨어가 아니라 1960 년에 발견 된 Quicksort 알고리즘인데, 여전히 가장 빠른 범용 정렬입니다.
