2008-11-10 5 views
4

Microsoft의 새로운 F # 프로그래밍 언어는 기능 프로그래밍 (일급 어휘 클로저 및 꼬리 호출)과 멀티 코어를 쉽게 활용할 수있는 효율적인 동시 가비지 수집기의 강력한 조합을 제공합니다.동시 가비지 수집기가있는 기능 언어?

OCaml, Haskell, Erlang 및 내가 알고있는 모든 무료 Lisp 및 Scheme 구현에는 동시 GC가 없습니다. 스칼라와 Clojure는 동시 GC를 가지고 있지만 꼬리 호출은 없다.

따라서 이러한 기능을 결합한 오픈 소스 프로그래밍 언어가없는 것으로 보입니다. 그 맞습니까?

+3

http://blogs.msdn.com/clyon/archive/2004/09/08/226981.aspx에 따르면 MS의 동시 GC는 단일 스레드 (비 병렬)입니다. 이들은 동시 GC ("GC")를 제공하지만 동시 GC보다 처리량이 높다고 주장합니다. –

+0

당신이 인용 한 블로그 게시물은 2004 년에 나온 것이고 .NET GC는 .NET 3.5 SP1의 새로운 "백그라운드 GC"로 대체되었습니다. –

답변

0

질문에 대한 답변은 아니지만, F #은 표준 .NET 가비지 수집기를 사용합니다. 이는 동시 적이 지 않습니다. 모든 스레드는 GC 중에 중지됩니다.

편집 : 실수로, 다중 프로세서 모드에서 동시 GC가 있습니다.

+1

.NET은 동시 GC를 지원합니다 (적어도 레벨 2 모음의 경우). http://blogs.msdn.com/clyon/archive/2004/09/08/226981.aspx 및 http://www.julmar.com을 참조하십시오. /blog/mark/PermaLink,guid,3670d081-0276-48e6-b97d-1b644093b52e.aspx –

4

최신 버전의 GHC는 병렬 GC를 지원합니다. release notes을 참조하십시오.

+3

이 점도주의 할 것이지만 병렬 및 동시 가비지 수집은 동일한 것이 아닙니다. – mipadi

+0

실제로. 그래서 하스켈의 GC는 확장되지 않습니다. –

+1

오류 ... 확장하려는 대상에 따라 다릅니다. 위에서 지적했듯이, MS는 병행 GC보다 처리량 측면에서 더 잘 확장되므로 실제로 비 동시 GC를 제공합니다. –

0

자바가 꼬리 호출을 추가하고 있습니다. 그런 일이 생기면 클로제가 가져올 것입니다. 그 동안 루프/반복 메커니즘을 사용하여 수동으로 가져올 수 있습니다.

+0

loop/recur는 tail * recursion * (self에 대한 tail 호출)을 갖지만 일반적인 tail 호출은 가져 오지 않습니다. – bendin

+0

맞아, 벤디. 명령형 루프는 대체 할 수 없습니다. –

3

스칼라에는 꼬리 재귀 최적화 기능이 있습니다. 그러나 모든 것을 얻으려면 SISC scheme을 얻으십시오.

7

얼랭에는 공유 된 모델이 없습니다. each process has it's own garbage collector입니다. 당신은 그것이 병행 성이 아니라고 생각하든 그렇지 않든간에 그것은 당신에게 달린 것입니다. 그러나 프로세스의 수가 올라 갈수록 확장 성이 좋습니다.

+2

Erlang은 한 프로세스에서 다른 프로세스로 전달 된 데이터를 어떻게 처리합니까?각 전송시 복제됩니까? – Yoric

+1

일반적으로 Erlang은 원활한 배포를 지원하므로 예. 구현은 후드에서 프로세스간에 메모리를 공유하지만 기존 구현 중 어떤 것도 수행하지 않는다고 생각합니다. – svenningsson

관련 문제