Smalltalk의 객체 / 메시지 와 Erlang의 프로세스 / 메시지의 차이점을 이해하려고합니다 . 나는 주제에 대한 다음 게시물을 읽었습니다 .
내가 이해하는 한 Smalltalk에서는 모든 것이 객체 이며 모든 것이 동일한 “객체 / 메시지”추상화를 갖습니다. 심지어 숫자 1
는 메시지 전달을 통해서만 도달 할 수있는 객체입니다. 가 1
얼랑 / 비약의 과정은? Erlang의 모든 것이 메시지 / 프로그램 패러다임에 대한 응답입니까? Erlang의 번호로 메시지를 보낼 수 있습니까?
고마워
답변
Erlang의 프로세스와 Smalltalk의 개체는 실제로 동일합니다.
얼랭은 놀랍지 않습니다. Erlang은 배우 모델 언어입니다. 액터 모델은 스몰 토크의 메시지 중심 평가 모델에 기반한 메시지 중심 평가 모델 인 Carl Hewitt가 발명했습니다. (실제로 Actor와 Objects는 동일합니다. 세부 사항 만 다릅니다.) Alan Kay는 스몰 토크를 디자인 할 때 Carl Hewitt의 PLANNER의 영향을 받았습니다.
따라서 액터와 오브젝트 사이에는 밀접한 관계가 있으므로 Erlang의 프로세스와 스몰 토크의 오브젝트가 너무 비슷하다는 것은 놀라운 일이 아닙니다.
한 가지를 제외하고 : Erlang의 디자이너들은 Actor Model에 대해 몰랐습니다 !!! 조 암스트롱 (Joe Armstrong)은 1990 년대 후반에 프로그래밍 패러다임에 관한 결정적인 책의 공동 저자 인 세이프 하리 디 (Seif Haridi)에 의해 박사 학위 논문을 썼을 때만 나중에 알게되었습니다.
Joe Armstrong은 OO에 대해 강력하게 옹호하는 기사를 작성 했지만 OO Sucks는 왜 Erlang이 실제로 객체 지향적이라는 것을 깨달았을 때 마음이 바뀌 었습니다. 사실, 그는 심지어 Erlang이 Joe Armstrong 및 Ralph Johnson과의 인터뷰 에서 유일한 객체 지향 언어 라고 주장하기까지했습니다 .
이것은 진화 생물 학자들이 수렴 진화 , 즉 유사한 외부 압력에 반응하여 유사하게 진화하는 두 개의 관련이없는 종이 라고 부르는 흥미로운 사례입니다 .
그러나 Erlang과 Smalltalk 사이에는 여전히 많은 관계가 있습니다.
Erlang은 Prolog의 동시 확장으로 시작했으며 (Erlang이 별도의 언어가 된 경우에도 첫 번째 구현은 Prolog로 작성 되었음) 여전히 오늘날까지 Prolog에 크게 뿌리를두고 있습니다. 프롤로그는 Carl Hewitt의 PLANNER의 영향을 많이받습니다.
스몰 토크는 또한 나중에 ARPANet (그리고 나중에 인터넷)이되는 것에 큰 영향을 받았다. Erlang은 네트워크 시스템을 위해 설계되었습니다.
그러나 Erlang과 Smalltalk의 중요한 차이점 중 하나는 모든 것이 프로세스가 아니라는 것입니다. 1
프로세스가 아닌 숫자입니다. 번호로 메시지를 보낼 수 없습니다.
Erlang의 여러 “레이어”가 있습니다 :
- Functional Erlang : 통일과 같이 Prolog에서 상속 된 일부 “oddities”를 가진 가장 일반적이고 동적으로 유형화 된 기능 언어입니다.
- 동시 Erlang : 기능적 Erlang + 프로세스 및 메시지.
- 분산 Erlang : 동시 Erlang + 원격 프로세스.
- 내결함성 Erlang : OTP 라이브러리에 체계화 된 분산 Erlang + 특정 디자인 패턴 (예 : 감독자 트리 및)
gen_server
.
Erlang / OTP로 작성된 Fault-Tolerant 시스템은 일반적으로 “객체 지향”으로 인식 될 수 있습니다. 그러나 이러한 객체의 내부는 종종 객체 지향 스타일보다 더 기능적으로 구현됩니다.
흥미롭게도, Erlang이 겪었던 “진화적인 압력”, 즉 Erlang의 설계자들이 해결하려고했던 문제 (신뢰성, 복제, 중복성 등)는 세포의 진화를 초래 한 것과 동일한 압력입니다. Alan Kay는 미생물학을 전공했으며 생물학적 세포에서 OO를 명시 적으로 모델링했습니다. 이것은 Erlang과 Smalltalk의 또 다른 유사점입니다.
나는 이것에 대해 또 다른 답변을 썼다 .