2010-05-26 3 views
17

Clojure는 멀티 스레드 프로그래밍을 쉽게하는 언어라고합니다. Clojure.org 웹 사이트에서자바 대 Clojure의 좋은 동시성 예제

:

Clojure의 여러 가지 방법으로 멀티 스레드 프로그래밍을 단순화합니다.

이제는 Java와 Clojure에서 해결 된 간단한 문제를 찾고 있습니다. 그래서 나는 그 단순성을 비교/대조 할 수 있습니다. 누군가?

+0

기능을 설명하는 좋은 블로그 : https : //perkss.github.io/#/clojure/ConcurrencyClojure # text-body – Matt

답변

13

크리스토프 그랜드 (Christophe Grand)의 thread safe blocking queue도보고 싶습니다. 그것은 20 라인 미만이지만, 많은 기능을 담고 있으며, 제 생각에는 Clojure의 동시성 기능, 불변성, 원자 및 지연 시퀀스의 전문가 사용을 보여줍니다.

Java 대체 java.util.concurrent.LinkedBlockingQueue is 842 lines의 미묘한 (틀림없이 복잡한) 주석 코드를 고려하면 Clojure가 실제로 동시성 약속을 어떻게 이행하는지 이해하기 시작합니다. 추상화 수준을 상당히 높이고 약 10-20 배 적은 코드로 올바른 구현을 제공합니다.

Java 코드를 읽을 때 나무 숲을보기가 정말 어렵다는 것을 알게 될 것입니다 ... 주어진다면 그 정확성을 확인할 수 있습니까? 또한이 코드는 Doug Lea (논란의 여지가 있지만 Java Concurrency의 전문가)가 작성했으며 Java를 매우 잘 읽을 수 있다는 것을 명심하십시오. 필자는 Java와 같은 읽기 가능 퍼포먼스 코드를 신속하게 작성하고 그 정확성을 확신 할 수 있는지 의심합니다.

Clojure 버전과 대조적으로 Clojure의 기본 사항에 익숙해지면 분별을하고 쉽게 작동하는 방식을 쉽게 이해할 수 있습니다. 20 분 이내에 구현의 모든 라인을 이해할 수 있었고 단정. 이제 Clojure의 숙어와 FP에 익숙해 졌기 때문에 이제는 5 분이 더 가까워 질 것입니다. 나는 또한 아마도 Clojure에서 이와 같은 "올바른"코드를 몇 시간 또는 몇 분 안에 작성할 수있을 것입니다.

위의 Java 클래스의 Christophes clojure wrapper도 첫 번째 버전과 동일한 기능 인터페이스를 공유하므로 유용합니다.

4

Rich Hickey's Ants example에보고하십시오 - 그것은 팀 브레이 (Tim Bray)에 의해 시작 동시 프로그램

+1

Java 버전이 있습니까? 나는 두 언어로 예제를 찾고 있으므로 비교/대조 할 수 있습니다. –

+0

누군가 자바 버전을 썼다는 것을 기억하지만 지금은 찾을 수 없습니다 ... –

5

The Wide Finder Project을 구축하기 Clojure에서의 기능을 사용하는 방법을 보여줍니다, Clojure의 항목의 숫자가 - 알렉스 오스본에 의해 인의 가장 눈에 띄는를; 그는 a fantastic write-up을 완성했습니다. Java, Scala 등의 항목과 인상적인 다른 언어도 있습니다.

문제는 철저히 실용적이며 병렬 처리 문제로 흥미 롭습니다. Tim의 게시물 (더 최근의 Wide Finder 2 시리즈 참조)은 읽고 즐겁고 (좋은 교육적 가치를 지니고 있습니다). 플렉스 알렉스의 텍스트는 정말 훌륭합니다. 나머지는 건너 뛸지라도 읽으십시오. Java에서 가져온 것들과 함께 Clojure의 특정 기능 (Atom과 같은)을 사용합니다. &이 빠릅니다 ... 사실, Clojure의 뛰어난 Java interop을 보여주는 방식으로는 흥미로울 것입니다.

이 모든 것이 처음부터 가장 좋은 방법이라고 할 수 있습니다.