2016-08-12 2 views
0

Erlang에 대해 널리 광고되는 기능은 앱이 실행되는 동안 코드를 핫 스왑하는 기능이며 다른 언어에서는 사용할 수없는 독특한 킬러 기능으로 표시됩니다. 여기 Erlang 핫 코드 스와핑과 인터프리터 언어

Joe Armstrong's book에서 인용 한 것입니다 : 서버의 동작을 수정하려면

대부분의 서버가 고정 프로그램을 실행하고 , 서버 를 중지 한 다음 그것을 다시 시작해야 수정 된 코드.

웹 개발과 관련하여 대다수의 언어는 코드 호출없이 소위 핫 스왑 핑을 지원합니다. 단지 코드를 업데이트하고 git 또는 지속적인 통합 솔루션을 통해 웹에 게시하는 것입니다.

저는 Erlang이 웹 이외의 도메인에서 많은 응용 프로그램을 가지고 있다는 것을 알고 있습니다. 따라서이 경우에는 의미가 있다고 확신합니다.

그러나이 기능은 Python, Ruby, JavaScript와 같이 웹에 사용되는 동적 언어와 비교할 때 이점이 있습니까? 인기있는 웹 지향 언어보다 우수한 웹 개발 사례는 무엇입니까?

답변

0

이 기능은 Erlang 자체가 특별히 웹 개발을 염두에두고 제작 된 것이 아니기 때문에 웹 개발 대상이 아닙니다.

웹에서 사용되는 일반적인 동적 언어에서 사용되는 모델보다이 기능이 뛰어난 부분 중 하나는 코드가 업그레이드되는 방식을 정밀하게 제어하는 ​​것입니다.

  • 코드는 당신이 얼랑에 swaping 핫 코드는보다 더 제공
2

를 호출하는 관련 상태에 대한 업그레이드의 명시 적 경로를 제공 할뿐만 아니라 호출 사이뿐만 아니라 전화

  • 동안 업데이트 할 수 있습니다 코드 를 업그레이드 할 수있는 능력 (I 파이썬, 루비 또는 자바 스크립트와 어떤 비교를하지 않습니다, 나는 그들의 매우 제한된 지식을 가지고) :

    • 각 노드마다 새로운 코드 버전을로드 할 때 결정할 수 있습니다.
    • 2 개의 코드 버전이 VM에 존재하므로 실행중인 모든 프로세스는 다음 정규화 될 때까지 각 모듈의 이전 버전을 사용합니다 이 모듈에 대한 호출이 발생합니다 (Mod : Func/arity)
    • OTP 비헤이비어를 사용하는 경우 서버 (또는 fsm 또는 gen_event)가 해당 code_change call_back과 함께 먼저 호출되어 매개 변수에서 모듈의 이전 버전을 수신합니다 . 따라서 업그레이드를 관리하고 상태 Data, ETS, 프로세스 동기화에 필요한 작업을 수행 할 수 있는지 여부를 확인하는 것이 가능합니다. 실제로 새 코드로 이동하기 전에 가능합니다.
    • OTP 동작을 사용하지 않는 경우 {system, From, Req}이라는 메시지를받은 다음 sys:handle_system_msg/6으로 전화를 걸면 code_change call_back을 호출 할 수 있습니다.