ROVM (원격 객체 가상 머신) v0.0.35b 릴리즈
홈페이지 : http://envlang.kldp.net
v0.0.35b 가 릴리즈되었습니다. 릴리즈 ChangeLog 는 여기 에서 확인 가능합니다.
이번 릴리즈에서 가장 많이 변경 및 추가된 부분은 아래의 부분들입니다.
0.0.35a -> 0.0.35b * ROVM Server o Multi-thread 를 이용한 스트레스 테스트에서 GC 및 메모리 할당 및 해제가 안정적으로 수행되고 있음을 확인하였으며, 백만개의 반복되는 query 시 ROVM Server 가 안정적으로 실행되고 있음을 확인하였습니다. 이제 예외 사항에 대한 처리가 남았습니다. o 데몬으로 프로그램을 실행할 수 있도록 코드가 추가되었습니다. 아직 설정 파일 기능이 지원하지 않기 때문에, ROVM Server 소스를 직접 수정해 주셔야 합니다. o 클래스내에서 __del__ 메쏘드의 경우, finalizer 의 역활을 하는 메쏘드로써, GC 과정에서 ObjRef 가 제거될 경우, __del__ 메쏘드가 자동으로 호출될 수 있도록 하여 리소스 정리를 할 수 있도록 하였습니다. * ROVM Interface o 현재 ROVM Server 에서 지원하는 35 개의 opcode 를 모두 지원하도록 업데이트하였습니다. * ROVM Interface o regex 클래스 및 regex.regex 클래스가 새롭게 /test 카테고리에 추가되었습니다. 이제 정규 표현식을 원격에서 사용할 수 있게 되었습니다.
== 적응하기 ==
새롭게 변경된 내용에 대한 자세한 설명은 홈페이지에 존재하는 ``Tutorial 문서''를 참조하시고, 설치 방법에 대해서는 ``ROVM 설치 문서''를 살펴보시기 바랍니다.
== 다운로드 ==
홈페이지를 방문하시면 다운로드를 받으실 수 있습니다. *꼭* 메뉴얼을 보시고 설치하여 테스트해보시기 바랍니다.
아래는 처음 릴리즈 때 ㅤㅆㅓㅅ던 내용입니다.
== 인사 ==제가 그 동안 짬짬히 시간을 내어 만든 VM (Virtual Machine) 의 첫번째 배포판을 공개하게 되어 기쁩니다.
프로그램 이름으로 ROVM 이라고 명명을 하였고, Remote Object Virtual Machine (이하 간단하게 ROVM) 의 약자로 구성하였습니다. 이름을 해석하면 그대로 `원격 객체 가상 머신'이 되겠습니다.
== 소개 ==
ROVM 는 envlang 의 한 부분 프로젝트로 시작되었으며 ROVM 의 목적은 별로 특별한 건 없지만
1. 매우 안정적인 Virtual Machine 을 만드는 것
2. 안전한 VM 을 만드는 것
3. 원격 Object 를 사용할 수 있도록 구현하는 것이런 것들이 있습니다. 지금 릴리즈하는 v0.0.1a 는 그 시작으로 이제 겨우 두 개의 opcode (ipush 와 iadd) 만 구현해 놓은 상태입니다. 자세한 동작 방식은 홈페이지 http://envlang.kldp.net 를 보시면 해당 여러 HOWTO 들이 존재합니다.
== 어디에 쓰는 물건인고? ==
아직 어디 쓸데 없습니다. (-_-); opcode 두 개 밖에 없는 VM 을 어디에 쓰겠습니까. (만약 이전에 완성한 VM 을 보고자 한다면 여기 를 방문하시면 이전에 제가 만든 VM 을 보실 수 있습니다. Java VM (Kaffe 와 거의 비슷)입니다.) 현재 실험적으로 프로젝트는 진행 중에 있으며 많은 기능과 opcode 들이 추가되어야 하는 실정입니다. 그에 따라 계속 발전해 나갈 것입니다.
비록 아직 v0.0.1a 이지만, VM 을 구현해보고자 하는 분들이나 저와 같이 ROVM 형태의 VM 을 구현하고자 하는 분들에게는 매우 좋은 자원이 될 것으로 확신합니다. 소스를 보시면 아시겠지만, 매우 친철하게 정성껏 주석을 달았습니다. :D
그리고 이제 VM 의 시작이기 때문에, 전체적인 구조를 파악하는 것도 매우 쉬울 것입니다. 7500 줄 밖에 되지 않습니다!
아직 넘어야 할 산들이 너무 많네요.
감사합니다.
== 변경 사항 : 0.0.1b -> 0.0.7a ==
ROVM Server
* [기능추가] Garbage Collector (이하 GC) 가 추가되었습니다. ObjectRef 에 대한 GC 를 수행합니다.
* [기능추가] `CALL' opcode 추가.
* [기능추가] `ILOAD' opcode 추가.
* [기능추가] `IRETURN' opcode 추가. 총 지원하는 opcode 는 NOP, CPUSH, IADD, ILOAD, CALL, IRETURN, NEW 이 되겠습니다. ^^;
* [기능추가] 클래스 Method 에 대한 함수 호출이 가능해 졌습니다. 자세한 내용은 ``Tutorial 문서''를 참고하시기 바랍니다.
* [기 타사항] 버전 명명 룰을 조금 바꿔어 봤습니다. 버전은 <major>.<minor>.<opcode counter><version> 로 정하였습니다. 0.0.7a 의 의미는 7 개의 opcode 를 가지는 VM 버전 중 a 버전임을 의미합니다.
* [기타사항] 각 문서에 대한 내용들이 현재 버전에 맞게 수정되었습니다.ROVM Client
* ROVM Server 에 새롭게 추가된 `CALL' opcode 를 지원할 수 있도록 코드가 보강되었습니다.
== 변경 사항 : 0.0.1a -> 0.0.1b ==
버전이 한단계 업그레이드 되었습니다.
ROVM Server
* [기능추가] `ENVLANG File Format' v0.1 에 대한 load 기능 추가.
* [기능추가] `NEW' opcode 추가. 이제 총 3 개의 opcode 들을 가지게 되었습니다.
* [기능변경] ROVM Server 의 기본 포트 번호를 기존 8888 번에서 4390 로 변경.
* [버그수정] Opcode 실행시 발생할 수 있는 Stack Overflow 수정.ROVM Client
* 새롭게 추가된 `NEW' opcode 를 처리할 수 있도록 코드 보강.
ROVM Compiler
* 홈페이지에서 해당 설명서를 다운받으실 수 있습니다.
* 새롭게 추가된 패키지로써 ``ENVLANG File Format'' 형식의 바이너리 포맷을 간단하게 만드는 목적으로 제작되었습니다.기타 사항
* ``ENVLANG File Format'' 에 대한 문서가 홈페이지에 등록되었습니다. 로드될 클래스의 실제 파일 형식에 대해 자세히 살펴보실 수 있습니다.
== 변경 사항 : 0.0.7a -> 0.0.10a ==
* NEW : `확장 모듈'의 작성이 가능해 졌습니다. 아직 개발해야 할 부분이 매우 많이 남아 있지만, C 혹은 C++ (공식 지원되지 않음) 을 이용하여 .so 혹은 .dll 형태의 확장 라이브러리를 작성하여 ROVM Server 내에서 클래스 처럼 다룰수가 있 습니다. ROVM Server 운영에서의 핵심 클래스 중 하나인 string 클래스 또한 확장 모듈' 형태로 구현이 되고 있습니다.
* NEW : `IPUSH' opcode 가 추가되었습니다. Integer 를 stack 상에 push 합니다.
* NEW : `SPUSH' opcode 가 추가되었습니다. 문자열을 stack 상에 push 하는 명령어입니다.
* NEW : `NEWARRAY' opcode 가 추가되었습니다. ROVM Server 에서 지원하는 각각의 type 에 대한 배열을 생성할 수 있게 되었습니다.
* NEW : "ENVLANG File Format" 이 v0.1 에서 v0.2 버전으로 개선되었습니다. v0.2 에서는 두 가지 변동 사항이 있었으며, 하나는 field 에 대한 개념 추가이며, 다른 하나는 Method 의 Local Max 를 지정할 수 있도록 변경된 점입니다.
* NEW : 새로운 문서 "확장 모듈 만들기"가 추가되었습니다.
* NEW : 새로운 패키지인 "ROVM Library" 가 추가되었습니다. 실제 ROVM Server 를 운영하는데, 핵심적인 역활을 하는 클래스들을 위한 패키지 입니다.
* NEW : `ROVM Server 의 설치'가 가능해졌습니다. 하지만 여전히 Configuration 쪽은 손수 설정해 주셔야 합니다.
* UP! : 각각의 문서가 현재 버전에 맞게 업데이트 되었습니다.
* UP! : ROVM Client 의 경우, SPUSH' opcode 와 NEWARRAY' opcode 를 다룰 수 있도록 기능 보강이 이루어졌습니다.
* BUG : ObjectRef 와 ArrayRef 의 할당 시점과 GC thread 의 실행 시점의 차이로 인해 발생할 수 있는 예외 상항을 수정하였습니다.== 변경 사항 : 0.0.10a -> 0.0.20a ==
[ROVM Server]
-o NEW : 'DUP' opcode 추가되었습니다.
-o NEW : 'HPUSH', 'FPUSH', 'DPUSH' opcode 추가되었습니다.
-o NEW : 'FRETURN', 'DRETURN', 'RETURN', 'ARETURN' opcode 추가되었습니다.
-o NEW : 'POP', 'SWAP' opcode 추가되었습니다. 총 10 개의 opcode 가 새롭게 추가된 것입니다.
-o NEW : short, float, double 타입 추가되었습니다. 이 타입들 또한 ix86 에서의 각각의 C 언어 타입과 모양, 특징이 모두 같습니다. 이로써 ROVM Server 에서 지원하는 타입의 총 갯수는 9 개가 되었습니다.
-o UP! : ArrayRef 의 객체화. 이것의 변화로 인해서 프로토콜 변화 및 opcode 변화 등 많은 부분에서 변화점이 있었습니다.
-o CHG : Opcode `NEWARRAY' 의 형식이 변경되었습니다. 기존의 경우, type 을 입력 받도록 하였지만, 이제는 type 의 의존하지 않고 하나의 배열 속에 여러 type 항목을 넣을 수 있게 되었습니다.
-o BUG : GC Thread 상에서의 deadlock 상황 패치[ROVM Library]
-o NEW : /core/array 클래스가 새롭게 추가되었습니다. 배열 (ArrayRef) 을 위한 클래스입니다.
-o UP! : /core/str 클래스에 split (T)[, split (TS)[, split (TSI)[ 메쏘드가 추가되었습니다. Python 혹은 Ruby 의 문자열 split 와 같은 역활을 합니다.[ROVM Client]
-o UP! : ROVM Client 에 추가된 opcode 적용되었습니다.[ROVM Interface]
-o NEW : 이번에 새롭게 패키지가 생성되었습니다. 이 패키지는 ROVM Client 의 C 언어 버전이라고 할 수 있겠는데요, 하지만 디버깅을 목적이 아니라 실제 ROVM Server 와의 연동을 편리하게 하기 위한 목적이 큽니다. 이제 아래와 같이 C 에서 코딩을 하여 ROVM Server 와 연동할 수 있습니다.#include "rovm.h" int main (void) { char *msg = "Hello World!, Hello World!"; char *sep = "Wo"; rovm_t *r; rovmret_t *ret; r = rovm_req ("192.168.58.129", 4390); if (!r) { fprintf (stderr, "Connection problem?\n"); return -1; } r->ops.spush (r, msg, strlen (msg)); r->ops.spush (r, sep, strlen (sep)); r->ops.ipush (r, 3); r->ops.call (r, "split", "(TSI)["); ret = r->send (r); if (ret) r->printreturn (r, ret); else r->printerror (r); rovm_reqend (r); return 0; }[확장 모듈 부분]
-o UP! : [ROVM Extension] RvStr2ArrayRef (), RvSetFieldValue () 인터페이스 추가.[프로토콜 부분]
-o CHG : [ROVM Protocol] 예약 명령어 'ERROR' 중 에류 메세지 관련 항목이 수정되었습니다.[문서 부분]
-o `Tutorial 문서' 중 StringRef 에 대한 내용이 추가되었습니다.
-o 전체적인 내용이 현재 버전에 맞게 수정되었습니다.== v0.0.20a -> v0.0.35a==
새로운 버전 v0.0.35a 가 릴리즈되었습니다. 릴리즈 ChangeLog 는 여기 에서 확인 가능합니다.이번 릴리즈에서 가장 많이 변경 및 추가된 부분은 아래의 부분들입니다.
* 새로운 OPCODE 15 개 추가되었습니다. 모두 산술 연산과 관련된 명령어들입니다. * 확장 모듈 작성을 위한 라이브러리에 많은 기능이 추가되었습니다. 대부분 문자열과 배열에 관한 부분입니다.
* str 클래스과 array 클래스에 대한 레퍼런스 문서가 새로 추가되었으며, 그에 따른 메쏘드의 갯수가 많이 증가하였습니다. Python 과 Ruby 에게 감사를..그 외의 자세한 부분은 ChangeLog 를 확인하시기 바랍니다.
댓글
얼마전 kldp wiki의 recent page 목록에서 ROVM 페이지
얼마전 kldp wiki의 recent page 목록에서 ROVM 페이지가 등록되어있는것(내용은 deleteme였지만)을 보고 "누군가가 VM를 만들고 있나보다"라고 생각했었는데 역시 저의 예상이 틀리지 않았군요. 화이팅입니다!
RET ;My life :P
오효효~ 멋집니다.특히 [b]공개합니다[/b] 라고 공표, 선언하는
오효효~ 멋집니다.
특히 공개합니다 라고 공표, 선언하는 부분이 특히 눈부시군요. :D
기대와 관심을 갖고 지켜보겠습니다.
:D :D :D :D :D
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
이게 무엇을 모티브로한 가상머신인가요?제가 자세히는 모르겠군요..
이게 무엇을 모티브로한 가상머신인가요?
제가 자세히는 모르겠군요..
가상머신하면 의뢰 virtual pc나 vmware같은걸 말할텐데..
혹.. jre같은 프레임워크나 런타임엔진을 말하는건지..
스샷이라도 올려주시면 대충감이라도 잡을수있을거같네요
그리고 리눅스용인가보네용..
------------------------------------
F/OSS bless you... ^^*
이전에 만드신 Java VM을 보고 싶어서 링크를 따라갔는데못 찾
이전에 만드신 Java VM을 보고 싶어서 링크를 따라갔는데
못 찾겠습니다. ㅡㅅㅡ;;
어떻게 하면 얻을 수 있는지 알려주세요 ^^
잘 부탁드려요 ^^ (뭘?)
v0.0.1b 가 릴리즈되었습니다.
http://envlang.kldp.net 에 방문하시면 첫 페이지에 만든 이유가 대충 나와 있습니다. 설명된 내용이 모티브의 전부는 아닙니다. 그 일부분이 ROVM 에서 구현하고자 하는`네트워크' 언어입니다.
virtual pc나 vmware 와 같은 것은 cpu 를 가상으로 흉내내는 것이구요, 이 프로그램은 Java Virtual Machine 이나 .NET VM 과 비슷하다고 할 수 있을 것 같습니다.
이전에 만든 Java VM 의 경우, 이름이 eserver 였습니다. 링크를 누르시면 바로 해당 eserver CVS 트리입니다. 현재 패키지로 묶여 제공되지 않으며, CVS 접근을 통해 다운로드 받으셔야 합니다.
그리고 VM core 에 해당하는 부분은 $eserver_prefix/src/call.c 파일에 존재합니다.
감사합니다.
ROVM (원격 객체 가상 머신) v0.0.7a 릴리즈
0.0.1b 에서 0.0.7a 로 버전업을 이루었습니다. 해당 버전에 대한 ChangeLog 입니다.
0.0.7a
* [기능추가] Garbage Collector (이하 GC) 가 추가되었습니다. ObjectRef 에 대한 GC 를 수행합니다.
* [기능추가] `CALL' opcode 추가.
* [기능추가] `ILOAD' opcode 추가.
* [기능추가] `IRETURN' opcode 추가. 총 지원하는 opcode 는 NOP, CPUSH, IADD, ILOAD, CALL, IRETURN, NEW 이 되겠습니다. ^^;
* [기능추가] 클래스 Method 에 대한 함수 호출이 가능해 졌습니다. 자세한 내용은 ``Tutorial 문서''를 참고하시기 바랍니다.
* [기 타사항] 버전 명명 룰을 조금 바꿔어 봤습니다. 버전은 <major>.<minor>.<opcode counter><version> 로 정하였습니다. 0.0.7a 의 의미는 7 개의 opcode 를 가지는 VM 버전 중 a 버전임을 의미합니다.
* [기타사항] 각 문서에 대한 내용들이 현재 버전에 맞게 수정되었습니다.
ROVM (원격 객체 가상 머신) v0.0.10a 릴리즈
새 버전이 릴리즈 되었습니다. 감사합니다.
흥미로운 프로젝트군요.
흥미로운 프로젝트군요.
자바의 rmi 같은 접근법과 어떻게 차이가 있는지 알아보고 싶군요. 자바만 배운 사람으로써...
:)
Re: ROVM (원격 객체 가상 머신) v0.0.20a 릴리즈
새 릴리즈가 나왔습니다!!!
이번 릴리즈의 핵심은 `여기' 를 누르시면 볼 수 있습니다!
== 변경 사항 : 0.0.10a -> 0.0.20a ==
[ROVM Server]
-o NEW : 'DUP' opcode 추가되었습니다.
-o NEW : 'HPUSH', 'FPUSH', 'DPUSH' opcode 추가되었습니다.
-o NEW : 'FRETURN', 'DRETURN', 'RETURN', 'ARETURN' opcode 추가되었습니다.
-o NEW : 'POP', 'SWAP' opcode 추가되었습니다. 총 10 개의 opcode 가 새롭게 추가된 것입니다.
-o NEW : short, float, double 타입 추가되었습니다. 이 타입들 또한 ix86 에서의 각각의 C 언어 타입과 모양, 특징이 모두 같습니다. 이로써 ROVM Server 에서 지원하는 타입의 총 갯수는 9 개가 되었습니다.
-o UP! : ArrayRef 의 객체화. 이것의 변화로 인해서 프로토콜 변화 및 opcode 변화 등 많은 부분에서 변화점이 있었습니다.
-o CHG : Opcode `NEWARRAY' 의 형식이 변경되었습니다. 기존의 경우, type 을 입력 받도록 하였지만, 이제는 type 의 의존하지 않고 하나의 배열 속에 여러 type 항목을 넣을 수 있게 되었습니다.
-o BUG : GC Thread 상에서의 deadlock 상황 패치
[ROVM Library]
-o NEW : /core/array 클래스가 새롭게 추가되었습니다. 배열 (ArrayRef) 을 위한 클래스입니다.
-o UP! : /core/str 클래스에 split (T)[, split (TS)[, split (TSI)[ 메쏘드가 추가되었습니다. Python 혹은 Ruby 의 문자열 split 와 같은 역활을 합니다.
[ROVM Client]
-o UP! : ROVM Client 에 추가된 opcode 적용되었습니다.
[ROVM Interface]
-o NEW : 이번에 새롭게 패키지가 생성되었습니다. 이 패키지는 ROVM Client 의 C 언어 버전이라고 할 수 있겠는데요, 하지만 디버깅을 목적이 아니라 실제 ROVM Server 와의 연동을 편리하게 하기 위한 목적이 큽니다. 이제 아래와 같이 C 에서 코딩을 하여 ROVM Server 와 연동할 수 있습니다.
[확장 모듈 부분]
-o UP! : [ROVM Extension] RvStr2ArrayRef (), RvSetFieldValue () 인터페이스 추가.
[프로토콜 부분]
-o CHG : [ROVM Protocol] 예약 명령어 'ERROR' 중 에류 메세지 관련 항목이 수정되었습니다.
[문서 부분]
-o `Tutorial 문서' 중 StringRef 에 대한 내용이 추가되었습니다.
-o 전체적인 내용이 현재 버전에 맞게 수정되었습니다.
Re: ROVM (원격 객체 가상 머신) v0.0.35a 릴리즈
새로운 버전 v0.0.35a 가 릴리즈되었습니다. 릴리즈 ChangeLog 는 여기 에서 확인 가능합니다.
이번 릴리즈에서 가장 많이 변경 및 추가된 부분은 아래의 부분들입니다.
* 새로운 OPCODE 15 개 추가되었습니다. 모두 산술 연산과 관련된 명령어들입니다. * 확장 모듈 작성을 위한 라이브러리에 많은 기능이 추가되었습니다. 대부분 문자열과 배열에 관한 부분입니다.
* str 클래스과 array 클래스에 대한 레퍼런스 문서가 새로 추가되었으며, 그에 따른 메쏘드의 갯수가 많이 증가하였습니다. Python 과 Ruby 에게 감사를..
그 외의 자세한 부분은 ChangeLog 를 확인하시기 바랍니다.
[/]ROVM (원격 객체 가상 머신) v0.0.35b 릴리즈
v0.0.35b 가 릴리즈되었습니다. 릴리즈 ChangeLog 는 여기 에서 확인 가능합니다.
이번 릴리즈에서 가장 많이 변경 및 추가된 부분은 아래의 부분들입니다.
댓글 달기