이런 재미있는 언어도 있네요.

Kroisse의 이미지

http://www.iolanguage.com/about/

io라는 OOPL인데, C++이나 Java처럼 클래스를 구체화시켜서 객체를 만드는 방식이 아니라 이미 있는 객체를 복제하는 프로토타입 방식이라네요. :shock: 난 왜 이런 게 있을 거란 생각을 한번도 못 해 본 거지... :cry:
그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요. (두뇌 엿먹이기 같은건 거절이에요 :evil: )

댓글

segfault의 이미지

Kroisse의 이미지

sigsegv wrote:
아희

=3

캬악! 잡아먹어버릴테닷! :twisted:
(........)

lifthrasiir의 이미지

Kroisse wrote:
http://www.iolanguage.com/about/

io라는 OOPL인데, C++이나 Java처럼 클래스를 구체화시켜서 객체를 만드는 방식이 아니라 이미 있는 객체를 복제하는 프로토타입 방식이라네요. :shock: 난 왜 이런 게 있을 거란 생각을 한번도 못 해 본 거지... :cry:
그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요. (두뇌 엿먹이기 같은건 거절이에요 :evil: )

Forth라던지 Oz라던지 찾아 보면 많아요. 헛헛헛. APL은... 음 이건 추천하고 싶지 않군요.

- 토끼군

juneaftn의 이미지

> 그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요.

Io를 보고 놀라셨다면 J를 권해드립니다.

http://xper.org/wiki/seminar/IoAndJay

Io나 Smalltalk 같은 것을 좋아하면서 J도 좋아하는 것은 어울리지 않는다고 생각할지도 모르겠지만, 어찌보면 양자는 맞닿는 부분이 있는 것 같기도 합니다. 예컨대, 클래식과 재즈가 반대 축에 있는 것 같기도 하지만 음악 공부를 많이 하신 분들에게 들어보면 긴밀한 관계가 있다고 하더군요.

ferma의 이미지

학부시절에는 별로 반갑지 않은 언어였지만, 막상 페이퍼의 압박에서 벗어나고 보니 상당히 흥미로웠습니다.

http://www.haskell.org/haskellwiki/Introduction

스프레드시트로 프로그래밍한다고 하면 이해가 쉬우시려나 모르겠네요...

dummy999의 이미지

Kroisse wrote:
http://www.iolanguage.com/about/

io라는 OOPL인데, C++이나 Java처럼 클래스를 구체화시켜서 객체를 만드는 방식이 아니라 이미 있는 객체를 복제하는 프로토타입 방식이라네요. :shock: 난 왜 이런 게 있을 거란 생각을 한번도 못 해 본 거지... :cry:
그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요. (두뇌 엿먹이기 같은건 거절이에요 :evil: )

이게 무슨말씀인지 제가 알아들을수있도록 설명해주시겟습니까?
솔직히 잘모르겠네요..
코드를 봐도 C언어에 익숙해서인지 당체 감이안오네용 ^^;

코드예를 들어서 어떻게 그렇게 되는건지 분석이라도 부탁드립니다.
이런유형의 코드는 제가 해석불가라설
솔직히 파이선인가? 그것도 잘모르겠음

------------------------------------
F/OSS bless you... ^^*

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

dummy999 wrote:
Kroisse wrote:
http://www.iolanguage.com/about/

io라는 OOPL인데, C++이나 Java처럼 클래스를 구체화시켜서 객체를 만드는 방식이 아니라 이미 있는 객체를 복제하는 프로토타입 방식이라네요. :shock: 난 왜 이런 게 있을 거란 생각을 한번도 못 해 본 거지... :cry:
그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요. (두뇌 엿먹이기 같은건 거절이에요 :evil: )

이게 무슨말씀인지 제가 알아들을수있도록 설명해주시겟습니까?
솔직히 잘모르겠네요..
코드를 봐도 C언어에 익숙해서인지 당체 감이안오네용 ^^;

코드예를 들어서 어떻게 그렇게 되는건지 분석이라도 부탁드립니다.
이런유형의 코드는 제가 해석불가라설
솔직히 파이선인가? 그것도 잘모르겠음


간단합니다. '모든 것은 객체다!' :twisted:
클래스 마저도 객체의 한 복제물이라고 생각하시면 됩니다.
skyul의 이미지

원래 객체지향프로그래밍(OOP) 언어는 크게 2가지로 나눌 수 있습니다.

1. Class-based OO
2. Prototype-based OO

클래스 기반의 OO가 대세이기 때문에 "객체 지향 = 클래스 기반"이라는 등식이 생겨버렸습니다. 실제로는 프로토타입에 기반한 아이디어도 여러 OO 언어에서 사용되고 있습니다. 개발자들에게 가장 익숙한 언어는 아마 JavaScript가 아닐까 싶네요.

클래스 기반 OO의 경우 클래스라는 틀이 있고 이 틀을 이용해 객체를 붕어빵 찍듯이 찍는 개념이죠. 반면에 프로토타입 기반 OO의 경우 원형이라 부를 수 있는 객체가 이미 시스템에 존재하고 있고 이걸 클론(clone), 복사(copy)하거나 상속하는 방식으로 다른 객체를 더 만들어 나가는거죠.

Self나 Cecil같은 객체지향 언어를 보시면 프로토타입 기반 OO가 OO의 다른 요소들과 어떻게 유기적으로 연관되어 있는지 알 수 있을실 겁니다.

--
서광열 소프트웨어 블로그: http://skyul.tistory.com 입니다.

NN의 이미지

skyul wrote:
원래 객체지향프로그래밍(OOP) 언어는 크게 2가지로 나눌 수 있습니다.

1. Class-based OO
2. Prototype-based OO

클래스 기반의 OO가 대세이기 때문에 "객체 지향 = 클래스 기반"이라는 등식이 생겨버렸습니다. 실제로는 프로토타입에 기반한 아이디어도 여러 OO 언어에서 사용되고 있습니다. 개발자들에게 가장 익숙한 언어는 아마 JavaScript가 아닐까 싶네요.

클래스 기반 OO의 경우 클래스라는 틀이 있고 이 틀을 이용해 객체를 붕어빵 찍듯이 찍는 개념이죠. 반면에 프로토타입 기반 OO의 경우 원형이라 부를 수 있는 객체가 이미 시스템에 존재하고 있고 이걸 클론(clone), 복사(copy)하거나 상속하는 방식으로 다른 객체를 더 만들어 나가는거죠.

Self나 Cecil같은 객체지향 언어를 보시면 프로토타입 기반 OO가 OO의 다른 요소들과 어떻게 유기적으로 연관되어 있는지 알 수 있을실 겁니다.

질문있습니다.

그럼 프로토타입 기반 OO는 이미 만들어져 있는 클래스들을 재사용하는 클래스 기반 OO와 무슨 차이가 있는거죠?

skyul의 이미지

좋은 지적입니다.

그 문제는 "infinte regress problem of classes"라고 불립니다.

프로토타입 기반 OO는 객체를 직접 이용하는데 비해, 클래스 기반의 OO는 클래스라는 틀을 이용해서 객체를 생성하죠.

자연스럽게 나오는 질문은 "그럼 클래스는 대체 어디서 나온 것인가?"라는 거죠.

대표적 클래스 기반 OO인 Java는 클래스도 객체로 봅니다. 그런데 클래스가 객체면 클래스를 찍어낸 클래스가 있어야 합니다. 클래스를 찍어낸 클래스도 객체이므로, 클래스를 찍어낸 클래스를 만드는 클래스도 있어야 합니다. 이렇게 무한히 반복 되기 때문에 "inifnite regress problem of classes"라고 불리는 것이죠.

Java는 이 문제를 java.lang.Class가 모든 클래스의 틀이라고 이야기하면서, 은근 슬쩍 넘어갔지만 여기에 숨은 논리적인 문제를 확실히 못풀고 "태초에 Class가 있었다"라는 해법이 나와버리는거죠.

다른 접근 방법을 취한 언어가 있는지 모르겠지만, 대부분의 클래스 기반 언어는 클래스는 second-order citizen으로 특별히 취급해서 찍어낼 수 있는 틀은 원래 있었다라고 얘기하게 되는거죠. 그 대상이 클래스라는 거만 제외하면 접근 방법은 프로토타입 방식과 크게 다르지 않은 거고요.

그렇지만 이런 근본적인 문제 보다는 실제로 프로토타입 OO의 패턴이나 유용성에 대해서 고민해 보는 게 더 나은 것 같습니다. AJAX 같은 게 주목 받으면서 JavaScript가 다시 뜨고, 자연스럽게 프로토타입 OO에 대한 관심도 높아지고 있는 것 같으니깐요.

--
서광열 소프트웨어 블로그: http://skyul.tistory.com 입니다.

pok의 이미지

skyul wrote:

프로토타입 기반 OO는 객체를 직접 이용하는데 비해, 클래스 기반의 OO는 클래스라는 틀을 이용해서 객체를 생성하죠.

오호... 이런게 있었군요. 좋은걸 배웠습니다. 개인적으로 자바스크립트 배울때 참 어려웠습니다. 갑자기 document.어쩌고로 당췌 익숙하지도 않고...

dummy999의 이미지

skyul wrote:
좋은 지적입니다.

그 문제는 "infinte regress problem of classes"라고 불립니다.

프로토타입 기반 OO는 객체를 직접 이용하는데 비해, 클래스 기반의 OO는 클래스라는 틀을 이용해서 객체를 생성하죠.

자연스럽게 나오는 질문은 "그럼 클래스는 대체 어디서 나온 것인가?"라는 거죠.

대표적 클래스 기반 OO인 Java는 클래스도 객체로 봅니다. 그런데 클래스가 객체면 클래스를 찍어낸 클래스가 있어야 합니다. 클래스를 찍어낸 클래스도 객체이므로, 클래스를 찍어낸 클래스를 만드는 클래스도 있어야 합니다. 이렇게 무한히 반복 되기 때문에 "inifnite regress problem of classes"라고 불리는 것이죠.

Java는 이 문제를 java.lang.Class가 모든 클래스의 틀이라고 이야기하면서, 은근 슬쩍 넘어갔지만 여기에 숨은 논리적인 문제를 확실히 못풀고 "태초에 Class가 있었다"라는 해법이 나와버리는거죠.

다른 접근 방법을 취한 언어가 있는지 모르겠지만, 대부분의 클래스 기반 언어는 클래스는 second-order citizen으로 특별히 취급해서 찍어낼 수 있는 틀은 원래 있었다라고 얘기하게 되는거죠. 그 대상이 클래스라는 거만 제외하면 접근 방법은 프로토타입 방식과 크게 다르지 않은 거고요.

그렇지만 이런 근본적인 문제 보다는 실제로 프로토타입 OO의 패턴이나 유용성에 대해서 고민해 보는 게 더 나은 것 같습니다. AJAX 같은 게 주목 받으면서 JavaScript가 다시 뜨고, 자연스럽게 프로토타입 OO에 대한 관심도 높아지고 있는 것 같으니깐요.

음.. 님의 말씀을들어보니까. 그 뭔가 집히는거같은데..
님의 글을보고 제가 이해한바를 아래에 적어봤습니다.
- 객체지향에는 두가지종류가있는데 하나는 객체를 직접사용하는것과 하나는 클래스를 이용하는방법이있다
-자바는 위의 내용중 후자인 클래스를 이용하는방법이다.

이정도입니다.
이하는 이에따른 궁금증입니다.
- 그렇다면 파이선이나 스몰토크는 어디에 속하나요?
- inifnite regress problem of classes라는 말을 대충 뭔말인지알겠는데 그렇다면 님께서 지적하신 태초의 클래스인 java.lang.Class 이것은 어떻게 구현되어있는겁니까?
원래있었다고하는그것은 어떤 메카니즘을 가지고있는건가요?
- 객체를 직접사용하는것이라면.. 클래스처럼 만들지않고 쓰는것을말하나요? 그럼 내장객체를 사용하는것을 말하는건가요?
만약 내장객체를 쓴다면 필요에의해 만들어야하는객체는 어떻게 쓰나요?

너무 궁금한게 많은건가요 ^^;

------------------------------------
F/OSS bless you... ^^*

Kroisse의 이미지

skyul wrote:
좋은 지적입니다.

그 문제는 "infinte regress problem of classes"라고 불립니다.

프로토타입 기반 OO는 객체를 직접 이용하는데 비해, 클래스 기반의 OO는 클래스라는 틀을 이용해서 객체를 생성하죠.

자연스럽게 나오는 질문은 "그럼 클래스는 대체 어디서 나온 것인가?"라는 거죠.

대표적 클래스 기반 OO인 Java는 클래스도 객체로 봅니다. 그런데 클래스가 객체면 클래스를 찍어낸 클래스가 있어야 합니다. 클래스를 찍어낸 클래스도 객체이므로, 클래스를 찍어낸 클래스를 만드는 클래스도 있어야 합니다. 이렇게 무한히 반복 되기 때문에 "inifnite regress problem of classes"라고 불리는 것이죠.

Java는 이 문제를 java.lang.Class가 모든 클래스의 틀이라고 이야기하면서, 은근 슬쩍 넘어갔지만 여기에 숨은 논리적인 문제를 확실히 못풀고 "태초에 Class가 있었다"라는 해법이 나와버리는거죠.

다른 접근 방법을 취한 언어가 있는지 모르겠지만, 대부분의 클래스 기반 언어는 클래스는 second-order citizen으로 특별히 취급해서 찍어낼 수 있는 틀은 원래 있었다라고 얘기하게 되는거죠. 그 대상이 클래스라는 거만 제외하면 접근 방법은 프로토타입 방식과 크게 다르지 않은 거고요.

그렇지만 이런 근본적인 문제 보다는 실제로 프로토타입 OO의 패턴이나 유용성에 대해서 고민해 보는 게 더 나은 것 같습니다. AJAX 같은 게 주목 받으면서 JavaScript가 다시 뜨고, 자연스럽게 프로토타입 OO에 대한 관심도 높아지고 있는 것 같으니깐요.

Smalltalk의 경우에는,
모든 클래스들은 각각 '클래스명 class'라고 불리는 어떤 클래스의 인스턴스예요.
그 '클래스명 class'는 Metaclass라는 클래스의 인스턴스이고,
위에서 쓴 대로 Metaclass는 'Metaclass class'라는 클래스의 인스턴스, 'Metaclass class'는 다시 Metaclass의 인스턴스, 또... (헥헥;;

다시 말해 이런 거지요 :)

someObject <- SomeClass <- SomeClass class <- Metaclass <- Metaclass class <- Metaclass <- Metaclass class <- Metaclass <- ...(무한반복 -_-)

그리고,

dummy999 wrote:
- 그렇다면 파이선이나 스몰토크는 어디에 속하나요?

Java와 마찬가지로 클래스 기반 OOPL에 해당된답니다. :D
dummy999의 이미지

저는 아직도 근본적인 숙제를 풀지못했습니다.
내장객체를 사용하는 프로토타입기반 객체지향의 경우인데
내장객체를 쓰는경우 대부분 우리가 원하는 형태의 프로그램을 어떻게 만들수있는가가 가장궁금한겁니다.

제가 이해하는바는.
C언어로 따지면 사용자가 만들수잇는것은 오직 main()뿐이고 다른 사용자정의함수는
생성이 불가능하다라는뜻으로이해가 되었습니다.
왜냐면 내장객체라는 말이 첨부터 만들어져있다는 의미가 강한거같아서그런거같습니다.

http://www.iolanguage.com/about/samplecode/
여기를 보면..
중간쯤에 아래와같은게 있네요.

Quote:

Print the source code of a method

myMethod := method(return testing(1+2+3))
getSlot("myMethod") code print
==> "return(testing(1+(2)+(3)))"

이걸 자바식대로하면

class myMethod 
{ 
  static int testing(int x) 
  {
	return x;	
  }
  static int getSlot(Object obj) 
  { 
    return testing(1+2+3); 
  } 

  public static void main(String a[]) 
  { 
    System.out.println(getSlot( "myMethod" )); // return testing(1+(2)+(3)) 
  } 
} 

이게 맞나요?

없는거까지 만들어줘야하는건지( 코드가부분만있는건지)
아니면 진짜이렇게 돌아가는건지..

즉 모든 객체나 메서드가 static이 붙어있다라는건가요?
알쏭달쏭.

------------------------------------
F/OSS bless you... ^^*

hongminhee의 이미지

dummy999 wrote:
즉 모든 객체나 메서드가 static이 붙어있다라는건가요?
알쏭달쏭.

(ㅎㅎ 잘못 알고 있던 것을 답변으로 올려서 자삭합니다.)

perky의 이미지

dummy999 wrote:
즉 모든 객체나 메서드가 static이 붙어있다라는건가요?
알쏭달쏭.

Io에서는 C++ 계열의 언어들의 static/non-static/class 메쏘드 개념이 없습니다. 그냥 모두가 다 메쏘드일 뿐입니다. 클래스에 해당하는 것도 오브젝트이고, 인스턴스에 해당하는 것도 오브젝트이기 때문에 모두 다 오브젝트 기준으로 이루어지며 this 포인터 역할을 하는 self가 오브젝트를 참조합니다. C++/Java 계열의 지식과 하나씩 대응하려고 하시는 것 보다 모두 잊어버리시고 마치 발생학에서 세포가 자라는 것을 연상하시면 쉽습니다. 프로토타입 언어의 Protos는 줄기세포라고 보면 되겠지요.

보통 예로 많이 쓰는 동물원 예를 보면..

Eukaryote := Object clone
Animal := Eukaryote clone

Dog := Animal clone do (
    bark := method("bark bark!" linePrint)
)
Cat := Animal clone do (
    bark := method("meow~~" linePrint)
)

Chiwawa := Dog clone do (
    bark := method("barrrr.... barrr....." linePrint)
)
BullDog := Dog clone do (
    bark := method("warrrrk!! walllkrr!!" linePrint)
)
RussianBlue := Cat clone do (
    bark := method("me.. (ehm) ow..." linePrint)
)

MyChiwawa := Chiwawa clone
MyChiwawa Daughter := MyChiwawa clone (
    bark := method("(silent)" linePrint)     # took surgery
)
MyChiwawa Daughter Son := MyChiwawa Daughter clone (
    bark := MyChiwawa bark   # surgery doesn't last for next generations
)

MyChiwawa bark
MyChiwawa Daughter bark
Cat bark
RussianBlue bark
MyChiwawa Daughter Son bark
Dog bark

이런 식으로 인스턴시에이션이나 상속 등이 모두 clone 으로 이뤄집니다.

You need Python

ed.netdiver의 이미지

perky wrote:
C++/Java 계열의 지식과 하나씩 대응하려고 하시는 것 보다 모두 잊어버리시고 마치 발생학에서 세포가 자라는 것을 연상하시면 쉽습니다. 프로토타입 언어의 Protos는 줄기세포라고 보면 되겠지요.

오옷. 정말 듣고보니 그럴듯한 비유이군요. :D

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

perky의 이미지

ed. wrote:
perky wrote:
C++/Java 계열의 지식과 하나씩 대응하려고 하시는 것 보다 모두 잊어버리시고 마치 발생학에서 세포가 자라는 것을 연상하시면 쉽습니다. 프로토타입 언어의 Protos는 줄기세포라고 보면 되겠지요.

오옷. 정말 듣고보니 그럴듯한 비유이군요. :D

줄기세포 부분을 한번 Io 코드로 만들어 봤습니다. :)

RedBoneMarrow := Organ clone

Protos Cell := Object clone
Protos MultipotentStemCell := Cell clone

RedBoneMarrow do(
    MyeloidStemCell := MultipotentStemCell clone
    LymphaticStemCell := MultipotentStemCell clone

    Erythroblast := MyeloidStemCell clone
    Megakaryoblast := MyeloidStemCell clone
    Myeloblasts := MyeloidStemCell clone
    Monoblasts := MyeloidStemCell clone

    Lymphoblasts := LymphaticStemCell clone
)

Body do(
    createErythrocyte := method(RedBoneMarrow Erythroblast clone)
    createBasophil := method(
        RedBoneMarrow Myeloblast clone setSlot("granularType", "baso")
    )
    createEosinophil := method(
        RedBoneMarrow Myeloblast clone setSlot("granularType", "eosino")
    )
    createNeutrophil := method(
        RedBoneMarrow Myeloblast clone setSlot("granularType", "neutro")
    )
    createMonocyte := method(Monoblast clone)
)

You need Python

ed.netdiver의 이미지

켁. (-.-)=b
:D

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

ydhoney의 이미지

뭐 소스를 대충만 보았습니다만 대략 프로토스 종족도 나오고 레드바론옹 비슷한 사람도 나오고 그 사람은 오르간 클론이라고 하는걸 보니 대략 피아노랑 비슷한것인것 같기도 하고 프로토스 종족을 Clone도 하고 뭐 그러는군요. -_-a;

ed.netdiver의 이미지

켁. (-.-)=p
:D

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

NN의 이미지

perky wrote:
dummy999 wrote:
즉 모든 객체나 메서드가 static이 붙어있다라는건가요?
알쏭달쏭.

Io에서는 C++ 계열의 언어들의 static/non-static/class 메쏘드 개념이 없습니다. 그냥 모두가 다 메쏘드일 뿐입니다. 클래스에 해당하는 것도 오브젝트이고, 인스턴스에 해당하는 것도 오브젝트이기 때문에 모두 다 오브젝트 기준으로 이루어지며 this 포인터 역할을 하는 self가 오브젝트를 참조합니다. C++/Java 계열의 지식과 하나씩 대응하려고 하시는 것 보다 모두 잊어버리시고 마치 발생학에서 세포가 자라는 것을 연상하시면 쉽습니다. 프로토타입 언어의 Protos는 줄기세포라고 보면 되겠지요.

보통 예로 많이 쓰는 동물원 예를 보면..

Eukaryote := Object clone
Animal := Eukaryote clone

Dog := Animal clone do (
    bark := method("bark bark!" linePrint)
)
Cat := Animal clone do (
    bark := method("meow~~" linePrint)
)

Chiwawa := Dog clone do (
    bark := method("barrrr.... barrr....." linePrint)
)
BullDog := Dog clone do (
    bark := method("warrrrk!! walllkrr!!" linePrint)
)
RussianBlue := Cat clone do (
    bark := method("me.. (ehm) ow..." linePrint)
)

MyChiwawa := Chiwawa clone
MyChiwawa Daughter := MyChiwawa clone (
    bark := method("(silent)" linePrint)     # took surgery
)
MyChiwawa Daughter Son := MyChiwawa Daughter clone (
    bark := MyChiwawa bark   # surgery doesn't last for next generations
)

MyChiwawa bark
MyChiwawa Daughter bark
Cat bark
RussianBlue bark
MyChiwawa Daughter Son bark
Dog bark

이런 식으로 인스턴시에이션이나 상속 등이 모두 clone 으로 이뤄집니다.

재밌네요. 객체를 프로토타입에서 모두 유도한다는 개념이군요.
process fork를 보는듯 합니다.

그럼 clone 키워드는 상속의 언어적 구현이 되는건가요?

아무튼 모든 객체를 상위의 프로토타입에서 clone을 통해 유도하도록 언어자체가 강제하고 있다는 점에서 더 깔끔해보이긴 하네요.

배추의 이미지

erlang 과 lisp를 통합해보려는 분들이 계시네요.
인용해봅니다.

Bill Clementson wrote:
First of all, for those who are not familiar with Erlang, it is worthwhile to highlight the characteristics of Erlang that have contributed to its success (from the Erlang white paper):

Concurrency: Erlang has extremely lightweight processes whose memory requirements can vary dynamically. Processes have no shared memory and communicate by asynchronous message passing. Erlang supports applications with very large numbers of concurrent processes. No requirements for concurrency are placed on the host operating system.

Distribution: Erlang is designed to be run in a distributed environment. An Erlang virtual machine is called an Erlang node. A distributed Erlang system is a network of Erlang nodes (typically one per processor). An Erlang node can create parallel processes running on other nodes, which perhaps use other operating systems. Processes residing on different nodes communicate in exactly the same way as processes residing on the same node.

Robustness: Erlang has various error detection primitives which can be used to structure fault-tolerant systems. For example, processes can monitor the status and activities of other processes, even if these processes are executing on other nodes. Processes in a distributed system can be configured to fail-over to other nodes in case of failures and automatically migrate back to recovered nodes.

Soft real-time: Erlang supports programming "soft" real-time systems, which require response times in the order of milliseconds. Long garbage collection delays in such systems are unacceptable, so Erlang uses incremental garbage collection techniques.

Hot code upgrade: Many systems cannot be stopped for software maintenance. Erlang allows program code to be changed in a running system. Old code can be phased out and replaced by new code. During the transition, both old code and new code can coexist. It is thus possible to install bug fixes and upgrades in a running system without disturbing its operation.
Incremental code loading: Users can control in detail how code is loaded. In embedded systems, all code is usually loaded at boot time. In development systems, code is loaded when it is needed, even when the system is running. If testing uncovers bugs, only the buggy code need be replaced.

External interfaces: Erlang processes communicate with the outside world using the same message passing mechanism as used between Erlang processes. This mechanism is used for communication with the host operating system and for interaction with programs written in other languages. If required for reasons of efficiency, a special version of this concept allows e.g. C programs to be directly linked into the Erlang runtime system.

--
추신: 배추 = 무우

제아이디와비번은 배추, 12ws 입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.