bootstrapping - Erlang은 무엇으로 쓰여 있습니까?




(4)

  • 얼랭 코드의 65.9 %는 얼랭으로 작성되었습니다.
  • Erlang의 13.4 %는 XML로 작성되었습니다.
  • Erlang의 13.6 %는 C로 작성되었습니다.
  • Erlang의 1.4 %는 C ++로 작성되었습니다.
  • ...

당신은 ohloh 사이트에서 라이브 및 업데이트 통계를 볼 수 있습니다.이 보고서는 주요 erlang git 저장소에서 생성됩니다.

Ericsson의 Erlang 및 Erlang / OTP 구현은 무엇이며 어떻게 작성되고 컴파일됩니까? 어셈블리, C 또는 얼랭 자체가 있습니까?

업데이트 1 : DrJokepu에게 감사드립니다. 내가 올바르게 이해한다면 Erlang source-to-VM 컴파일러는 Erlang 자체로 작성되었다. 그러나 VM은 C로 작성됩니다.

업데이트 2 : Hynek-Pichi-Vychodil은 많은 세부 사항을 지적했습니다.

  • VM 및 HW 상호 작용하는 드라이버 : C.
  • 컴파일러 (VM 용) 및 라이브러리 : Erlang.
  • 확장 기능 : 해당 언어로 포트 또는 얼랭 노드를 작성하여 모든 언어로 가능합니다.

Erlang 자체는 Erlang으로 작성되었습니다. 이상하게 들리니? 네, 부분적으로 만 사실이기 때문에 그렇습니다. 확인해보십시오.

  1. Erlang 전처리 기는 Erlang으로 작성되었습니다.
  2. Erlang 파서는 Erlang으로 작성되었습니다.
  3. Erlang 컴파일러는 Erlang으로 BEAM (바이트 코드 VM)을 작성합니다.
  4. Erlang에서 HiPE (네이티브 VM 확장자) 컴파일러는 Erlang으로 작성되었습니다.
  5. Erlang VM BEAM 및 HiPE는 주로 C로 작성됩니다.
  6. 링크 된 드라이버는 주로 C로 작성됩니다 (VM에 연결되어 외부와 통신합니다).
  7. OTP는 얼랭으로 작성되었습니다.
  8. 다른 포트 또는 노드는 모든 언어로 작성할 수 있습니다.

Erlang FAQ에서 :

10.7 Erlang 컴파일러는 어떻게 작성 되었습니까?

(또는 : Erlang은 어떻게 부트 스트랩 되었습니까? ) Joe의 말로 :

먼저 Erlang을 실행하는 추상 기계를 설계했습니다. 이것은 JAM 기계라고 불렸다. JAM = Joe의 추상 기계.

그런 다음 Erlang에서 JAM으로 컴파일러를 작성하고 에뮬레이터를 사용하여 기계가 작동하는지 확인합니다. 이 두 가지 모두 프롤로그에 기록되었습니다.

동시에 Mike Williams는 JAM을위한 C 에뮬레이터를 작성했습니다.

그런 다음 Erlang에서 erlang-to-jam 컴파일러를 다시 작성하고 프롤로그 컴파일러를 사용하여 컴파일했습니다. 결과 오브젝트 코드는 C 에뮬레이터에서 실행되었습니다. 그런 다음 우리는 프롤로그를 버렸다.


우리는 물리적 인 기계의 수평 확장성에 대해 이야기해야한다고 규정해야합니다. 이것이 유일한 문제입니다. 한 머신의 CPU는 그 수에 관계없이 하나의 VM에 의해 처리됩니다.

node = machine.

우선, 30 ~ 60 개의 노드가 상자 위에 나옵니다 (바닐라 OTP 설치) (Erlang의 경우) 맨 위에 작성된 모든 사용자 정의 응용 프로그램을 사용할 수 있습니다. 증거 : ejabberd.

~ 100-150은 최적화 된 맞춤형 애플리케이션으로 가능합니다. 나는 GC에 대한 지식, 데이터 유형의 특성, 메시지 전달 등으로 작성된 좋은 코드 여야 함을 의미합니다.

+150 이상은 괜찮습니다.하지만 300, 500 같은 숫자에 관해 이야기 할 때 TCP 계층의 최적화와 사용자 정의가 필요합니다. 또한, 우리의 응용 프로그램은 클러스터에서 동기화 호출 등의 비용을 인식하고 있어야합니다.

다른 하나는 DB 레이어입니다. Mnesia (built-in)는 20 개 노드 이상에서 효과적이지는 않을 것입니다 (제 경험 - 잘못된 것일 수 있습니다). 솔루션 : 단지 다른 것을 사용하십시오 : 발전기 DB, MySQL 클러스터, HBase 등.

고품질 응용 프로그램 및 확장 성 작성 비용을 활용하는 가장 보편적 인 기술은 ~ 20-50 노드 클러스터의 연합입니다. 그래서 내부적으로 ~ 50 개의 노드를 효율적으로 연결하고 다른 적절한 노드를 가진 적절한 프로토콜을 통해 50 개의 노드 클러스터를 연결합니다. 요약하면, 그러한 시스템은 N 개의 클러스터 클러스터이다.

분산 형 erlang은 하나의 데이터 센터에서 실행되도록 설계되었습니다. 지리적으로 멀리 떨어져있는 노드가 더 필요한 경우 연합을 사용하십시오.

예를 들어 모든 노드를 서로 연결하지 않는 많은 설정 옵션이 있습니다. 도움이 될 수도 있지만 ~ 50 클러스터에서 오류가 발생하지 않는 것은 중요하지 않습니다. 또한이 풀 메쉬에 참여하지 않는 '숨겨진'연결을 사용하여 erlang 노드의 그래프를 만들 수 있지만 모든 노드에 연결할 수는 없습니다.

이런 종류의 시스템에서 가장 큰 문제는 마스터리스 시스템으로 설계하는 것입니다. 필요하지 않으면 모든 것이 잘되어야합니다.





erlang bootstrapping