F # 성능 대 Erlang 성능, Erlang의 VM이 더 빠르다는 증거가 있습니까?


19

나는 함수형 프로그래밍을 배우는 데 시간을 쏟았으며 튜토리얼 / 예제를 다루는 대신 프로젝트 작성을 시작하려는 부분에 왔습니다.

연구를 수행하는 동안 Erlang은 동시 소프트웨어 (제 목표)를 작성할 때 매우 강력 해 보이지만 개발을위한 리소스와 도구는 Microsoft 개발 제품만큼 성숙하지 않습니다.

F #은 Linux (Mono)에서 실행될 수 있으므로 요구 사항이 충족되지만 인터넷을 둘러 보는 동안 F #과 Erlang을 비교할 수 없습니다. 현재 Erlang에 대한 압박이 가장 큰 것 같아서 두 시스템간에 성능 차이가 있는지 궁금합니다.

.NET에서 개발하는 데 익숙하기 때문에 Erlang보다 F #을 훨씬 빠르게 사용할 수는 있지만 F #이 Erlang만큼 확장 가능하다는 것을 확신시키는 리소스를 찾을 수는 없습니다.

시뮬레이션에 가장 관심이 있습니다. 시뮬레이션은 빠르게 처리되는 많은 메시지를 영구 노드에 전달합니다.

요청하려는 내용을 제대로 수행하지 않은 경우 추가 확인을 요청하십시오.


12
언어는 속도가 없습니다. 특정 입력에서 특정 프로그램을 실행하는 특정 언어 구현 (프로그램에 따라 외부 세계 전체가 포함될 수 있음) 속도가 빠릅니다.

1
F #은 .NET 런타임에서 실행되고 Erlang은 자체 VM에서 실행됩니다. Erlang의 프로세스는 스칼라와 같이 도메인에있는 언어에 비해 경량 인 것으로 간주됩니다. 시뮬레이션 생성 노드 및 많은 메시지 전달의 경우 .NET / Mono 런타임이 Erlang의 VM만큼 우수합니까? 아니면 Erlang의 VM이 우수합니까?
afuzzyllama

3
@delnan : 언어에는 성능 특성이 있습니다.
Jon Harrop

2
@JonHarrop 어떻게 그렇게? 프로그래밍 언어는 단지 몇 가지 구문과 관련 의미입니다.

1
@delnan : 시맨틱은 최적화를 제한합니다. 예를 들어, 동적 유형 언어는 실제로 최적화하기가 엄청나게 어렵습니다. JVM에 값 유형이 없으면 .NET보다 힙 할당이 훨씬 많으므로 GC에 대한 스트레스가 훨씬 커집니다. 코드 생성기와 마찬가지로 가비지 수집기는 성능을 향상시키기 위해 불변성과 같은 정보를 이용할 수 있습니다. 프로그래밍 언어의 디자인은 이것에 큰 영향을 미칩니다.
Jon Harrop 2019

답변:


21

"생존"이란 무엇입니까? "가장 많이 누르는 것"이 ​​반드시 언어를 선택하는 가장 좋은 방법은 아닙니다.

명성에 대한 Erlang의 주장은 대규모 병렬 처리 기능입니다. 이것이 Ericsson 전화 스위치에서 일반적으로 사용되는 이유입니다. Erlang은 소프트 실시간이므로 특정 성능을 보장 할 수 있습니다.

F #은 .NET Jitter의 최적화 기능을 활용합니다. 또한 언어 자체는 고성능 기능 언어로 설계되었습니다 (속도 때문에 금융 업계에서 널리 사용되는 OCaml의 변형 임).

궁극적으로 수백만 개의 작은 에이전트를 동시에 실행할 계획이 아니라면 (Erlang이 최적화 된 것임) F #은 작업에 달려 있어야합니다.

이 페이지 는 Erlang의 적절한 사용 사례를 설명합니다.


"생존"이란 확장 성을 의미했습니다. 언론이 있다고해서 그 언어가 반드시 더 좋아지는 것은 아니지만 Erlang이 (Ericsson에 의해) 입증 된 것 같습니다. 요원이 무슨 뜻입니까? 프로세스?
afuzzyllama

1
예. Erlang은 Ericsson 스위치에서 동시에 많은 전화 통화를 처리하는 것으로 입증되었습니다. 유스 케이스가 유사한 지 알아 내야합니다. 나는 상대적으로 전문화 된 유스 케이스로 본다. 이 특성에 존재하지 않는 경우 귀하의 응용 프로그램, 나는 얼랑를 사용하여 어떤 이점을 볼 수 없습니다와 얼랑 페이지는 실제로 얼랑이되는 몇 가지 사용 사례에 대해 설명 하지 적합.
Robert Harvey

2
에이전트, 배우, 기능적 언어 토론에서 많이 등장하는 디자인 컨셉입니다. 아직 당신이 그것을 뛰어 넘지 않은 것에 놀랐습니다. en.wikipedia.org/wiki/Agent-based_model
Patrick Hughes

다시 말해, Erlang이 제공하는 종류의 대규모 확장 성 (현재 또는 결국) 이 필요 합니까? 대부분의 프로그램은 그렇지 않습니다.
Robert Harvey

1
F #은 또한 Erlang과 같은 종류의 약간 'MailboxProcessor' 를 사용하여 에이전트 모델을 가지고 있습니다 . 그래도 각각의 상대적인 성능 특성에 대해서는 언급 할 수 없습니다.
FinnNk

7

이 두 언어의 성능은 응용 프로그램 및 프로그래밍 스타일에 크게 의존하기 때문에이 주제에 대한 객관적인 진술은 거의 없습니다.

내가 줄 수있는 유일한 조언은 F #이 정적 유형 시스템의 성능 이점을 가지고 있으며 CLR 은이를 활용하여 성능을 향상시키기 위해 이것을 잘 수행한다는 것입니다. F #에는 비동기 에이전트와 메시지 전달이 있지만 최적화되지 않았으며 동기 코드가 10 배 이상 빠릅니다.

Erlang은 동적으로 유형이 지정되어 성능 측면에서 상당한 단점이 있습니다 (더 많은 권투 기대) 비동기 에이전트간에 빠른 메시지 전달을 지원하기 위해 처음부터 구축되었으므로 동등한 F #보다 훨씬 빠를 수 있습니다 . 그러나 이것을 백업 할 벤치 마크 결과는 없습니다. 그것은 단지 나의 기대입니다.

게다가, Erlang과 F #은 소규모 커뮤니티에서 상대적으로 프린지 언어이며 대상 시장이 다르기 때문에 둘 다에 익숙한 사람들은 거의 없습니다. 내가 거의 자격을 갖춘 사람이라고 생각할 수있는 유일한 사람은 Jesper Louis Andersen 이지만 그가 얼마나 많은 F #을했는지 잘 모르겠습니다.


4

Joe Armstrong의이 게시물을 읽어야합니다. http://erlang.org/pipermail/erlang-questions/2012-February/064277.html

Erlang은 빠르도록 설계되지 않았습니다! 많은 경우에 상당히 빠르지 만 내결함성 및 안정성과 같은 문제에 대해서는 부차적입니다.

: 진실은 얼랑 및 F # 모두 좋은 언어이고, 난 단지 F 번호에 잠깐 모습을 촬영 한 동안 내가 얼랑에 대한 책을 쓸 수 있었 얼랑와 건물 웹 응용 프로그램을 내가이 직장에 재미있는 언어라고 말할 수 있습니다.

또한 향후 6-9 개월 내에 기능적 언어 서적이 호황을 누릴 것으로 보인다. 나는 Erlang (내 것을 포함하여)에서 적어도 4 개, Haskell에서 1 개, OCaml, Clojure 및 F #의 타이틀을 알고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.