이런 재미있는 언어도 있네요.
글쓴이: Kroisse / 작성시간: 월, 2006/01/30 - 2:06오전
http://www.iolanguage.com/about/
io라는 OOPL인데, C++이나 Java처럼 클래스를 구체화시켜서 객체를 만드는 방식이 아니라 이미 있는 객체를 복제하는 프로토타입 방식이라네요. :shock: 난 왜 이런 게 있을 거란 생각을 한번도 못 해 본 거지... :cry:
그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요. (두뇌 엿먹이기 같은건 거절이에요 :evil: )
댓글
아희=3
아희
=3
----
http://www.planetmono.org
[quote="sigsegv"]아희=3[/quote]캬악!
캬악! 잡아먹어버릴테닷! :twisted:
(........)
Re: 이런 재미있는 언어도 있네요.
Forth라던지 Oz라던지 찾아 보면 많아요. 헛헛헛. APL은... 음 이건 추천하고 싶지 않군요.
- 토끼군
APL과 그 후손들
> 그래서 말인데, 여러분께서도 자기가 알고 있는 신기한 아이디어가 있는 언어 좀 소개해 주세요.
Io를 보고 놀라셨다면 J를 권해드립니다.
http://xper.org/wiki/seminar/IoAndJay
Io나 Smalltalk 같은 것을 좋아하면서 J도 좋아하는 것은 어울리지 않는다고 생각할지도 모르겠지만, 어찌보면 양자는 맞닿는 부분이 있는 것 같기도 합니다. 예컨대, 클래식과 재즈가 반대 축에 있는 것 같기도 하지만 음악 공부를 많이 하신 분들에게 들어보면 긴밀한 관계가 있다고 하더군요.
Haskell도 재미있지요...
학부시절에는 별로 반갑지 않은 언어였지만, 막상 페이퍼의 압박에서 벗어나고 보니 상당히 흥미로웠습니다.
http://www.haskell.org/haskellwiki/Introduction
스프레드시트로 프로그래밍한다고 하면 이해가 쉬우시려나 모르겠네요...
Re: 이런 재미있는 언어도 있네요.
이게 무슨말씀인지 제가 알아들을수있도록 설명해주시겟습니까?
솔직히 잘모르겠네요..
코드를 봐도 C언어에 익숙해서인지 당체 감이안오네용 ^^;
코드예를 들어서 어떻게 그렇게 되는건지 분석이라도 부탁드립니다.
이런유형의 코드는 제가 해석불가라설
솔직히 파이선인가? 그것도 잘모르겠음
------------------------------------
F/OSS bless you... ^^*
Re: 이런 재미있는 언어도 있네요.
간단합니다. '모든 것은 객체다!' :twisted:
클래스 마저도 객체의 한 복제물이라고 생각하시면 됩니다.
원래 객체지향프로그래밍(OOP) 언어는 크게 2가지로 나눌 수 있습니다.
원래 객체지향프로그래밍(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 입니다.
[quote="skyul"]원래 객체지향프로그래밍(OOP) 언어는 크게
질문있습니다.
그럼 프로토타입 기반 OO는 이미 만들어져 있는 클래스들을 재사용하는 클래스 기반 OO와 무슨 차이가 있는거죠?
좋은 지적입니다. 그 문제는 "infinte regress pro
좋은 지적입니다.
그 문제는 "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 입니다.
[quote="skyul"]프로토타입 기반 OO는 객체를 직접 이용하
오호... 이런게 있었군요. 좋은걸 배웠습니다. 개인적으로 자바스크립트 배울때 참 어려웠습니다. 갑자기 document.어쩌고로 당췌 익숙하지도 않고...
poklog at http://poksion.cafe24.com/poklog/
[quote="skyul"]좋은 지적입니다. 그 문제는 "infi
음.. 님의 말씀을들어보니까. 그 뭔가 집히는거같은데..
님의 글을보고 제가 이해한바를 아래에 적어봤습니다.
- 객체지향에는 두가지종류가있는데 하나는 객체를 직접사용하는것과 하나는 클래스를 이용하는방법이있다
-자바는 위의 내용중 후자인 클래스를 이용하는방법이다.
이정도입니다.
이하는 이에따른 궁금증입니다.
- 그렇다면 파이선이나 스몰토크는 어디에 속하나요?
- inifnite regress problem of classes라는 말을 대충 뭔말인지알겠는데 그렇다면 님께서 지적하신 태초의 클래스인 java.lang.Class 이것은 어떻게 구현되어있는겁니까?
원래있었다고하는그것은 어떤 메카니즘을 가지고있는건가요?
- 객체를 직접사용하는것이라면.. 클래스처럼 만들지않고 쓰는것을말하나요? 그럼 내장객체를 사용하는것을 말하는건가요?
만약 내장객체를 쓴다면 필요에의해 만들어야하는객체는 어떻게 쓰나요?
너무 궁금한게 많은건가요 ^^;
------------------------------------
F/OSS bless you... ^^*
[quote="skyul"]좋은 지적입니다. 그 문제는 "infi
Smalltalk의 경우에는,
모든 클래스들은 각각 '클래스명 class'라고 불리는 어떤 클래스의 인스턴스예요.
그 '클래스명 class'는 Metaclass라는 클래스의 인스턴스이고,
위에서 쓴 대로 Metaclass는 'Metaclass class'라는 클래스의 인스턴스, 'Metaclass class'는 다시 Metaclass의 인스턴스, 또... (헥헥;;
다시 말해 이런 거지요 :)
그리고,
Java와 마찬가지로 클래스 기반 OOPL에 해당된답니다. :D
저는 아직도 근본적인 숙제를 풀지못했습니다.내장객체를 사용하는 프로토
저는 아직도 근본적인 숙제를 풀지못했습니다.
내장객체를 사용하는 프로토타입기반 객체지향의 경우인데
내장객체를 쓰는경우 대부분 우리가 원하는 형태의 프로그램을 어떻게 만들수있는가가 가장궁금한겁니다.
제가 이해하는바는.
C언어로 따지면 사용자가 만들수잇는것은 오직 main()뿐이고 다른 사용자정의함수는
생성이 불가능하다라는뜻으로이해가 되었습니다.
왜냐면 내장객체라는 말이 첨부터 만들어져있다는 의미가 강한거같아서그런거같습니다.
http://www.iolanguage.com/about/samplecode/
여기를 보면..
중간쯤에 아래와같은게 있네요.
이걸 자바식대로하면
이게 맞나요?
없는거까지 만들어줘야하는건지( 코드가부분만있는건지)
아니면 진짜이렇게 돌아가는건지..
즉 모든 객체나 메서드가 static이 붙어있다라는건가요?
알쏭달쏭.
------------------------------------
F/OSS bless you... ^^*
[quote="dummy999"]즉 모든 객체나 메서드가 static이
(ㅎㅎ 잘못 알고 있던 것을 답변으로 올려서 자삭합니다.)
[quote="dummy999"]즉 모든 객체나 메서드가 static이
Io에서는 C++ 계열의 언어들의 static/non-static/class 메쏘드 개념이 없습니다. 그냥 모두가 다 메쏘드일 뿐입니다. 클래스에 해당하는 것도 오브젝트이고, 인스턴스에 해당하는 것도 오브젝트이기 때문에 모두 다 오브젝트 기준으로 이루어지며 this 포인터 역할을 하는 self가 오브젝트를 참조합니다. C++/Java 계열의 지식과 하나씩 대응하려고 하시는 것 보다 모두 잊어버리시고 마치 발생학에서 세포가 자라는 것을 연상하시면 쉽습니다. 프로토타입 언어의 Protos는 줄기세포라고 보면 되겠지요.
보통 예로 많이 쓰는 동물원 예를 보면..
이런 식으로 인스턴시에이션이나 상속 등이 모두 clone 으로 이뤄집니다.
You need Python
[quote="perky"]C++/Java 계열의 지식과 하나씩 대응하려
오옷. 정말 듣고보니 그럴듯한 비유이군요. :D
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
[quote="ed."][quote="perky"]C++/Java 계열의
줄기세포 부분을 한번 Io 코드로 만들어 봤습니다. :)
You need Python
켁. (-.-)=b :D
켁. (-.-)=b
:D
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
뭐 소스를 대충만 보았습니다만 대략 프로토스 종족도 나오고 레드바론옹 비
뭐 소스를 대충만 보았습니다만 대략 프로토스 종족도 나오고 레드바론옹 비슷한 사람도 나오고 그 사람은 오르간 클론이라고 하는걸 보니 대략 피아노랑 비슷한것인것 같기도 하고 프로토스 종족을 Clone도 하고 뭐 그러는군요. -_-a;
켁. (-.-)=p :D
켁. (-.-)=p
:D
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
[quote="perky"][quote="dummy999"]즉 모든 객체
재밌네요. 객체를 프로토타입에서 모두 유도한다는 개념이군요.
process fork를 보는듯 합니다.
그럼 clone 키워드는 상속의 언어적 구현이 되는건가요?
아무튼 모든 객체를 상위의 프로토타입에서 clone을 통해 유도하도록 언어자체가 강제하고 있다는 점에서 더 깔끔해보이긴 하네요.
erlang 과 lisp를 통합해보려는 분들이 계시네요.인용해봅니다.
erlang 과 lisp를 통합해보려는 분들이 계시네요.
인용해봅니다.
--
추신: 배추 = 무우
제아이디와비번은 배추, 12ws 입니다.
댓글 달기