기능적 언어 : 그들이 무엇인지, 어디로 가는지

어떤 사람들은 그것이 무엇인지 정확히 주장하지만 함수형 프로그래밍은 계속해서 개발자를 끌어들입니다. 그리고 가장 널리 사용되는 세 가지 기능 언어 인 Clojure, F # 및 Scala가 개선을 위해 사용됩니다.

함수형 프로그래밍은 일부 개발자들에게 핵심적인 매력을 가지고 있다고 스칼라 창립자 인 Martin Odersky는 말합니다. "이 세그먼트의 프로그래머는 코드를 더 명확하고 구조화하며 많은 종류의 오류를 방지하기 때문에 함수형 프로그래밍과 비슷합니다." 그러나 일부는 함수형 프로그래밍이 소프트웨어의 효율성을 떨어 뜨린다 고 주장합니다.

함수형 프로그래밍은 또한 새로운 방식의 프로그래밍에 대해 생각해야한다고 마이크로 소프트의 .Net 프로그램 관리자이자 F # 대변인 ​​인 David Stephens는 말합니다. 추상화가 문제가 될 수 있습니다. "코드를 좀 더 추상적으로 만들면 비트 조작에서 멀어지고 명시 적으로 루프를 통과 할 때 이러한 추상화를 이해하는 데 더 많은 시간이 걸릴 수 있습니다."

기능적 언어는 정확히 무엇입니까?

가장 기본적인 용어로 함수형 프로그래밍은 계산을 수학적 함수로 취급하는 것입니다. 처음부터 기능적으로 청구되는 언어 외에도 Java 및 C #과 같은 언어는 람다 식에 대한 지원을 추가하여 기능이 향상되었습니다.

그러나 함수형 프로그래밍에 대한 정확한 정의는 정확히 파악하기 어려울 수 있습니다. Clojurefun 블로그는 함수형 프로그래밍을 고차 함수로 함수형 스타일을 활성화하거나 람다를 지원하는 언어로 정의하는 등 잘못되었다고 생각하는 여러 정의를 인용합니다. 올바른 정의는 기능과 불변 데이터를 강조하는 언어라고 말합니다.

그러나 Clojure 블로그가 선호하는 정의가 반드시 정확하지는 않다고 다른 사람들은 말합니다. Scala의 Odersky는 "저자가 우연히 Clojure에 가장 잘 맞는 하나를 선택했습니다. 당연히 이것이 Clojure 블로그입니다."라고 Scala의 Odersky는 말합니다. "나는 그의 해석과 비슷하지만 같지는 않다."

Odersky는 함수는 입력을 출력에 매핑하는 코드 조각이며 그 이상의 다른 효과는 없습니다. "이것은 우리가 여기서 사용하는 함수의 수학적 정의입니다. 때때로 이러한 함수는 C의 함수와 구별하기 위해 '순수'라고 불립니다." 함수형 언어는 순수 함수를 사용한 프로그래밍에 중점을 두어 쉽고 강력하게 만들 수 있다고 Typesafe JVM 애플리케이션 개발 플랫폼 제공 업체 인 Typesafe를 설립 한 Odersky는 말합니다.

함수형 프로그래밍은 다른 패러다임과 결합 될 수 있다고 그는 지적합니다. "예를 들어, 함수는 객체 지향과 정말 잘 어울립니다. 스칼라는 그런 의미에서 함수 언어입니다. 저는 람다를 가지고 있다고해서 언어가 작동하는 것은 아니라는 데 동의합니다. 필요하지만 충분하지는 않습니다."

시스템 개발자 인 Cognitect의 CTO이기도 한 Clojure 개발자 Rich Hickey는 Clojure 블로그의 주요 논쟁에 동의합니다. "이 기사는 일류 또는 고차 함수가 함수형 프로그래밍의 전부가 아니라는 점을 정확하게 지적합니다. 함수형 프로그래밍은 프로그래밍을 수학처럼 만드는 것에 관한 것"이라고 그는 말합니다. 즉, 함수형 프로그래밍에 대한 정의의 스펙트럼이 여전히 남아 있다고 Hickey는 말합니다.

Microsoft의 Stephens는 기능적 기능이 언어만으로 확장되는 것을보고 있습니다. "세계에서 가장 인기있는 함수형 프로그래밍 언어는 Excel입니다."라고 그는 말합니다. 간단한 Excel 워크 시트에는 A1 X 2와 같은 여러 값이 포함 된 열이있을 수 있습니다. "이는 A1의 순수 함수이고 A1은 변경되지 않으므로 기존 데이터에서 값을 계산합니다."

마이크로 소프트의 Linq (Language-Integrated Query) 기술은 함수형 프로그래밍도 제공한다고 그는 말했다. "현재 거의 모든 프로그래밍 언어가 기능적 언어의 기능을 채택하고 있습니다."

Stephens는 불변 데이터를 함수형 프로그래밍에 중요한 것으로 언급합니다. 동시성 (여러 스레드가 동시에 데이터에서 작동하는 프로그램)도 불변 데이터의 이점을 제공한다고 그는 지적합니다. "[F #]은 다른 언어의 유산에서 비롯 되었기 때문에 기능적 우선 언어라고 부릅니다." 또한 객체 지향 프로그래밍을 지원하고 C # 및 Visual Basic에서 작동한다고 그는 말합니다.

Clojure의 Hickey는 요즘 더 큰 문제를 해결해야하는 개발자들이 직면하고있는 압력 증가에 대한 대응으로 기능적 언어의 채택을보고 있습니다. 이를 위해서는 프로그램의 부수적 인 복잡성을 줄여야합니다. 현재 널리 퍼져있는 상태와 부작용이 프로그램의 복잡성과 버그의 주요 원인이라는 사실이 널리 인식되고 있습니다. "비 기능적 언어로 작성된 프로그램에서 상태의 양을 줄이는 것은 가능하지만, 함수형 프로그래밍을 관용적이고 기본값으로 만드는 언어에서는 그렇게하는 것이 훨씬 쉽고 빠릅니다."

세 가지 주요 기능 언어의 다음 단계

13 살의 Scala는 데이터 과학의 기본 언어라고 Scala 설립자 Odersky는 말합니다. JVM에서 지원되며 약 400,000 ~ 500,000 명의 사용자가 있습니다. 단기적인 계획은 최신 표준 Java 업그레이드의 바이트 코드 명령을 통해 Scala가 더 효율적인 코드를 생성 할 수 있도록 Java 8에 최적화되도록 요구합니다.

장기적으로 Scala는 LLVM 컴파일러 백엔드를 고려하여 정리 된 유형 시스템, 더 안전한 매크로 및 더 많은 플랫폼 지원을 얻을 것입니다. Scala를 JavaScript로 컴파일하기 위해 Scala.js의 유용성을 개선하기 위해 추가 개선이 계획되어 있습니다.

또한 JVM을 기반으로 한 9 년 된 Clojure는 금융, 소매, 소프트웨어 및 엔터테인먼트 분야에서 사용되어 왔다고 Hickey는 말합니다. "트랜잭션 처리 및 분석, 빅 데이터, 네트워크 운영, 예측 분석, 검색, 보안 및 소비자 제품과 같은 다양한 애플리케이션 영역에 적용되었습니다."

11 년 된 F #은 Don Syme가 Microsoft Research에서 설립했으며 F # Foundation에서 감독합니다. 광범위한 애플리케이션에서 사용되며 Linux, OS X, Android, iOS, Windows 및 브라우저에서 실행됩니다. .Net Framework의 오픈 소스, 크로스 플랫폼 모듈 식 버전 인 ".Net Core와 함께 작동하도록 지금 작업하고 있습니다."라고 Stephens는 말합니다. 문자열을 더 쉽게 작성할 수 있도록하는 문자열 보간이 드로잉 보드에 있습니다.