함수형 프로그래밍은 웹 개발과 관련이 있습니까? [닫은]


88

나는 최근에 함수형 프로그래밍에 대해 많이 보았고 Clojure는 특히 흥미로워 보입니다. 그것이 무엇인지에 대한 기본 설명을 '이해'하고 있지만, 가능하다면 웹 개발자로서 매일 어떻게 사용하는지 알 수 없습니다. 내가 읽은 많은 내용은 일반 OO에서 볼 수있는 일반적인 프로그래밍 상황보다는 함수형 프로그래밍의 수학 측면에 초점을 맞추고 있습니다.

스틱의 끝이 잘못 되었나요? 함수형 프로그래밍은 웹 개발과 전혀 관련이 없습니까? 그렇지 않다면 '웹용'으로 사용되는 예가 있습니까?

답변:


31

내 머릿속에서 몇 가지 예 :

  • 야후! Store는 Lisp에서 제공합니다 (원래는 인수 이전에 Viaweb으로 명명 됨 ).
  • Reddit 은 2005 년 에 Python 으로 전환 했지만 Lisp에서 완전히 프로토 타입 화되었습니다.
  • Hacker News 는 전적으로 Arc (Lisp 방언)로 작성되었습니다.

7
야후! Store는 몇 년 전에 C ++로 다시 작성되었습니다.
apg

5
언어! = 프로그래밍 패러다임.
phkahler 2010 년

58
이상한 예 선택 ... Yahoo! Store는 Lisp 옹호자 인 Paul Graham이 작성했습니다. 그는 또한 실질적으로 Reddit 클론 인 Hacker News를 썼습니다. 아마도 HN은 Reddit의 Lisp에서 Python으로의 전환에 대한 응답으로 작성되었으며 Reddit 직원은 Paul Graham이 운영하는 가속기 프로그램 인 YCombinator의 일부였습니다. 나는 이것을 세 가지가 아닌 하나의 예라고 생각합니다.
Brandon Bloom

@ShermPendley 서버 구성, 네트워크 설정 및 데이터베이스 액세스도 성능의 주요 요소입니다. 웹 앱의 스크립트 실행 시간은 일반적으로 전체 비용의 아주 작은 부분입니다.
AgmLauncher 2015

62

함수형 프로그래밍은 웹 앱과 매우 잘 어울립니다. 웹 앱은 HTTP 요청을 받고 HTML 결과를 생성합니다. 이것은 요청에서 페이지로의 기능으로 간주 될 수 있습니다.

일반적으로 장기 실행 프로세스, 상태 저장 UI 및 여러 방향의 데이터 흐름이있는 데스크톱 앱과 비교해보십시오. 이는 상태 및 메시지 전달이있는 객체에 관심이있는 OO에 더 적합합니다.


20

표준을 준수하는 HTML을 브라우저에 제공하는 한 브라우저는 기능적 언어, 명령형 언어 또는 훈련 된 원숭이가 무엇이든 상관하지 않습니다.


20

순수한 함수형 프로그래밍은 웹 프로그래밍 환경에 잘 매핑되지 않을 수 있습니다. 그러나 주요 장애는 인프라 (프레임 워크 및 API)의 부족입니다. 기능적 언어가 Java, Python 또는 Ruby와 같이 풍부한 웹 프로그래밍 환경을 갖기까지는 오랜 시간이 걸릴 것입니다 (정직하지 않을 것입니다).

즉, 몇 가지 옵션이 있습니다.

나는 이것들에 대한 경험이 없습니다. 댓글 작성자는 자신에게 잘 맞는 것이 무엇인지 평가할 수 있습니다.



4

Clojure에게는 Clojure와 Google App Engine을 사용하여 개발 한 흥미로운 스타트 업 (TheDeadline)이 있습니다. 그들은 Slideshare에 대한 좋은 ppt와 InfoQ에 대한 인터뷰를 가지고 있습니다.

GAE를 사용한 Clojure 배포에 대한 좋은 토론 : http://news.ycombinator.com/item?id=1239788

내가 아는 한 Clojure에는 웹 개발 라이브러리가 몇 개 있습니다. Compojure Ring Conjure

이것이 당신의 질문에 답하기를 바랍니다 =) (저도 막 시작하고 있습니다 ..)

베스트, 라이언


3

웹 개발과는 전혀 관련이 없습니다. 서버에있는 앱은 클로저, 고차 함수, 불변성, 참조 투명성과 같은 기능적 기능을 매우 잘 활용할 수 있습니다. 예를 들어 어떤 방식 으로든 변형하거나 조작해야하는 컬렉션이 있습니다. 함수형 프로그래밍은 여기에 도움이되며 그 관용구가 주류 언어에 침투하고 있기 때문입니다. 기능적 기능은 간결성, 테스트 가능성, 병렬화에 도움이되며 패턴으로 해결할 수있는 문제에 대한 기본 솔루션을 제공 할 수도 있습니다.

업데이트 : 기능 언어에 대한 웹 프레임 워크도 있습니다. Common Lisp 용 Weblocks, Scala 용 Lift. 이것들은 내가 들어 본 것들이고, 더 많은 것이있을 수 있습니다 ...하지만 반드시 순수하게 기능 할 필요는 없습니다. 예를 들어 Scala는 순수하지 않으며 모든 Java 프레임 워크에서 작동해야하지만 여전히 가능합니다. 비즈니스 계층 등에 함수형 프로그래밍을 사용합니다.


3

Ur / Web을 확인하십시오 . 매우 빠르며 정적 유형 시스템은 HTML 및 SQL과 같은 것을 알고 있으므로 보안에 대한 모든 종류의 좋은 것을 보장 할 수 있습니다.


3

Erlang은 확장 가능한 웹 앱을위한 일부 인프라에서 많이 사용되고있는 것 같습니다. CouchDB 및 Riak 데이터베이스는 RabbitMQ 메시지 대기열 서버와 마찬가지로 대부분 Erlang으로 작성됩니다. 성공의 열쇠 중 하나는 공유 된 변경 가능 상태없이 메시지 전달을 통해 동시성을 처리한다는 것입니다. 특정 함수형 프로그래밍 언어보다 유용한 문제에 대해 생각하는 방식입니다.

또는 MapReduce를 살펴보십시오. 맵과 리 듀스 함수가 ​​내부적으로 상태 저장이 되더라도 계산을 보는 매우 기능적인 방법입니다. 그러한 이유로 대규모 데이터 세트를 내결함성, 분산 방식으로 쿼리하는 데 매우 적합합니다.

꼭 가장 실용적인 것으로 보이는 것을 선택하십시오. 그러나 함수형 프로그래밍은 언제 유용 할 지 결코 알 수 없기 때문에 항상 마음 속에 있어야합니다.



2

언어와 패러다임은 웹 앱에서 중요하지 않으며 모두 똑같이 좋고 나쁩니다. 새로운 패러다임을 배워야 할 이유를 찾고 있다면 그냥 뛰어 드십시오. 제 조언은 해결하려는 문제를 분석하고 적절한 도구 세트를 선택하는 것입니다.


2

자바 스크립트 (웹의 FE 부분의 언어이며 점점 더 BE로 사용됨)는 그 자체로 작동하지 않지만 기능은 1 차 기능입니다.


2

백엔드가 완전히 Erlang으로 작성된 온라인 스프레드 시트를 방금 시작했습니다.

http://hypernumbers.com

어떤 표준에서든 이것은 정신적으로 복잡한 GUI로 구축 할 수있는 가장 복잡한 웹 앱 중 하나입니다.


2

다음은 Haskell을 사용하여 웹 앱을 빌드하는 웹 개발자 경험입니다 . 함수형 언어는 매우 형식이 안전하고 동시성이 우수하지만, 오랫동안 학계에서 사랑을 받아 왔지만 현실 세계에서 강력하게 수용되지 않았기 때문에 항상 최고의 API가 부족했습니다. 너무 멀지 않았 으면 좋겠어요. Erlang은 이미 그것에 참여했습니다.


1

함수형 프로그래밍이 웹 프로그래밍에서 인기있는 이유는 공유 및 변경 상태를 명시하고 프로그래머가 순수 함수 부분을 순수 함수로 표현할 수 있도록하기 때문입니다. 순수 함수는 부작용이 없기 때문에 병렬 실행이 매우 간단하다는 장점이 있습니다.

적어도 그게 내 이유입니다.


1

또 다른 짧은 대답 : http : //www.mlstate.com-FP 기반의 완전한 웹 개발 플랫폼. 언어의 명확한 의미는 모든 종류의 자동화 된 안전 및 보안 분석, 최적화 등을 허용합니다.

경고 : 나는 거기에서 일한다.


1

기능적 언어는 훌륭한 앱을 구축하는 데 직접적으로 유용하지 않을 수 있지만 우리는 앱 구축을 위해 함수형 프로그래밍 패러다임을 많이 사용합니다. 순수 함수형 프로그래밍은 "부작용 없음"이라는 제약 조건을 둡니다. 이렇게하면 순수 함수 호출이 호출되는 순서에 따라 동일한 결과가 생성됩니다. 이것은 웹 개발에 이상적이지 않지만 함수형 프로그래밍이 상태 변경 시스템과 결합되면 강력한 웹 앱을 구축 할 수 있습니다. 자세한 내용은 내 문서를 참조하십시오. FAST Server 또한이 슬라이드 .


0

예, 함수형 프로그래밍은 모든 언어로 수행 할 수 있으므로 매일 웹 개발자로 사용할 수 있습니다.

그럴까요? 해결하려는 문제에 따라 다릅니다. 함수형 프로그래밍은 프로그래밍 패러다임이며이를 사용해야하는 위치는 해결하는 문제에 따라 다릅니다.

결정을 더 간단하게 만들기 위해 캡슐화, 다형성, 기능과 같은 상속이 삶을 더 쉽게 만들 수있는 OOP 개념을 사용하여 문제를 해결하는 것이 더 쉬운 지 생각해보십시오.

그렇다면 함수형 프로그래밍을하지 말고 단순히 OOP를 사용하십시오. 애플리케이션이 복잡한 계산 / 계산 / 비즈니스 로직을 수행하고 많은 동시 처리를 포함하는 경우 함수형 프로그래밍은 이러한 경우에 많은 도구와 이점을 제공 할 수 있습니다.

이는 프로그램의 구조와 요소를 구축하는 다른 스타일 일 뿐이므로 올바른 작업에 적합한 도구를 사용하는 것입니다. 나머지는 무엇이든 사용할 수 있습니다.

웹 개발의 기능적 프로그래밍 :

JavaScript는 함수형 프로그래밍을 지원하며 웹 개발의 맥락에서 매우 많은 지원을 제공합니다 .React 프레임 워크는 함수형 프로그래밍 원칙의 영향을 많이 받고 많은 웹 애플리케이션에서 사용됩니다.

또한 아래 나열된 함수형 프로그래밍 언어로 개발 된 프레임 워크로 빌드되고 실행되는 많은 웹 애플리케이션을 찾을 수 있습니다.

• WebSharper (F #)

• Snap (Haskell)

• 리프트 (스칼라)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

희망 그래서 내 대답은 누구에게나 도움이 될 것입니다.


-2

당신은 아마 그것을 사용하지 않을 것이고 그것을 사용해서는 안되지만 누군가가 항상 규칙에 대한 예외를 찾을 것이라고 말할 때 (Viaweb 등). 기본적으로 "슈퍼 언어"는 없습니다. 일반적으로 "Blub"에 작업하는 코드 줄만 있습니다. Paul Graham조차도 Lisp의 주요 (사실상) 이점은 신속하게 프로토 타입을 만들 수있는 능력이라고 말합니다.

또한 "슈퍼 언어"는 일반적으로 코드 가독성을 높이기보다는 영향을 미칩니다. 즉, 코드를 작성한 "천재"는 다른 사람이 이해할 수 없기 때문에이를 영원히 유지해야합니다. 특히 자신의 수정 된 방언으로 작성할 가능성이 있기 때문입니다. 이는 모든 프로젝트의 가능한 범위를 감소시킵니다. 즉, 새롭고 혁신적인 작업을 수행 할 수 있더라도 확장 할 수 없으므로 상대적으로 소규모로 유지됩니다 (예 : Hacker News in Arc).

그것은 누군가가 천재적인 아이디어를 가지고 이해할 수없는 스타일로 구현할 수 없다는 것을 말하는 것이 아닙니다. 그런 다음 Blub에서 다시 작성하여 많은 사람들이 혜택을 볼 수 있도록 확장 할 수 있습니다. 사실, 그것은 Lisp의 모든 성공 스토리에서 정확히 일어난 일이며, 지금까지 살았던 모든 유명한 철학자는 말할 것도 없습니다. 그러나 물론, 당신이 "천재"라면 당신은 다른 방식으로 당신의 제품을 프로토 타입 할 수도있을 것입니다.

JVM의 FP에 관해서는 제한적이지만 멋진 것이 가능합니다. 개인적으로 프로토 타이핑에만 사용 하겠지만 약간의 개선을 제공하는 사용 사례 (일반적으로 멀티 스레딩과 관련된 것)가있을 수 있습니다.


1
실제로 Paul Graham은 Lisps가 "가장 강력한"언어라는 점이 큰 장점이라고 말합니다. 그는 viaweb의 1/4과 같은 것이 Lisp 매크로라고 말함으로써 그의 주장을지지합니다. 대부분의 언어 (특히 90 년대 중반에 사용 가능한 언어)의 메타 프로그래밍은 어렵습니다. 프로덕션 서버로 푸시되면 프로토 타입이 아닙니다.
nmichaels
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.