[영어]
ROVM 소개
ROVM 은 원격에 존재하는 객체를 쉽게 읽기/쓰기/실행 하기 위해서 만들어진 가상 머신입니다. ROVM 패키지인 ROVM Server 와 ROVM Interface 가 이를 이용할 수 있도록 도와주며, ROVM Client 가 쉽게 debugging 을 할 수 있도록 도와 줍니다.
위와 같이 프로그래밍을 할 수 있도록 도와주는 보조 역활을 하는 것이 ROVM 의 탄생 목적이며, 궁극적인 목표입니다.
아래와 같이 프로그래밍을 했으면 좋겠으며,
import weongyo@192.168.58.129:/testsuite/ABCDEF
class OPS
{
int add (int b, int x)
{
ABCDEF a = ABCDEF ();
return a.add (b, x);
}
}
O = OPS ();
t = O.add (3, 4);
|
새소식
새로운 소식이 궁금하세요? ``ROVM (원격 객체 가상 머신) 개발자 메일링 리스트''에 가입하세요. 가장 먼저 최근 소식과 개발 현황이 배달되는 곳입니다.
- 2006 년 3월 21일
- ROVM Server v0.1.35a 가 릴리즈 되었습니다. 암호화 통신 및 옵션, 사용자 인증 기능이 새롭게 추가되었습니다.
- ROVM Client v0.0.1g 가 릴리즈 되었습니다. 암호화 통신 기능 및 사용자 인증 기능이 추가되었습니다.
- ROVM Interface v0.0.1c 가 릴리즈 되었습니다. 암호화 통신 기능이 추가되었습니다.
- ROVM Library v0.0.1g 가 릴리즈 되었습니다. sha1, math 모듈이 새롭게 추가되었습니다.
- 2006 년 3월 2일
- ROVM Library v0.0.1e 가 릴리즈 되었습니다. md5 모듈이 새롭게 추가되었습니다.
- 2006 년 3월 1일
- ROVM Server v0.0.35b 가 릴리즈 되었습니다. 자세한 내용은 아래를 ChangeLog 를 참고하세요.
- ROVM Interface v0.0.1b 가 릴리즈 되었습니다.
- ROVM Library v0.0.1d 가 릴리즈 되었습니다.
- 2006 년 2월 25일
- ROVM Server v0.0.35a 가 릴리즈 되었습니다. 자세한 내용은 아래를 ChangeLog 를 참고하세요.
- ROVM Client v0.0.1f 가 릴리즈 되었습니다.
- ROVM Library v0.0.1c 가 릴리즈 되었습니다. str 클래스와 array 클래스의 대폭적인 업그레이드 있었습니다.
- 2006 년 2월 19일
- ROVM Server v0.0.20a 가 릴리즈 되었습니다.
- ROVM Interface 등이 추가되었습니다. 자세한 사항은 아래의 ChangeLog 를 참고하세요.
- 2006년 2월 17일
- 기존 문서들들의 경우, PDF 검색, 한글 추출, 책갈피에 대한 문제가 존재하였습니다. 한글 처리 부분을 DHUcs 로 LaTeX 를 변경하면서 이 문제를 해결할 수 있었습니다. 품질 좋은 문서 output 얻게 해주신 KTUG 분들에게 감사를 전합니다. 이제 잘 검색이 되며, link 기능도 잘 동작을 하는 듯 합니다. 여전한 문제는 HTML 문서 변환이군요.
- 2006년 2월 14일
- ROVM Server v0.0.10a, ROVM Client v0.0.1d버전이 릴리즈되었으며, ROVM Library 패키지가 새롭게 추가되었습니다.
특징
ROVM 의 특징은 다음과 같습니다.
- 한번 작성된 라이브러리 및 확장 모듈은 모든 언어에서 이용할 수 있습니다.
Python 에서 작성한 모듈은 Python 용입니다. Perl 모듈도 Perl 용입니다. Ruby, Java 도 마찬가지 입니다. 이런 언어들은 `욕심쟁이 언어'들입니다. 다른 언어에서 그와 또 다른 언어의 결과물을 그대로 이용할 수 없는 것들은 전부 욕심쟁이 언어입니다. 자기 배는 계속 채우면서 다른 언어의 배는 채워 주지 않습니다. 하지만 ROVM 에서 작성된 것은 모든 언어를 위한 것입니다. 모든 언어에서 똑같은 기능, 편리한 기능들을 사용할 수 있습니다.
참여를 기다립니다.
현재 아래와 같은 작업들이 당신의 손길을 기다리고 있습니다.
-
(2006-03-01) 홈페이지 및 문서를 영어로 번역해 주실 분을 찾습니다. 영어에 유창할 필요 없으며, 컴퓨터 지식을 영어 문장으로 쓸수 있기만 하면 됩니다.
-
(2006-03-01) 확장 모듈 개발자를 구합니다. ROVM Library 에 들어갈 확장 모듈들에 대한 작업을 맡게 됩니다.
-
(2006-02-01) 현재 `문서' 항목에 존재하는 HTML 문서가 존재하지 않습니다. 제(정원교)가 latex2html 를 윈도우즈 환경에서 설치를 못해서 HTML 문서로의 변환을 못하였습니다. 일반적인 latex2html output 이 아닌 스타일이 들어간 HTML output 을 뽑아주실 분을 찾습니다. 아직 스타일시트는 존재하지 않습니다. 파이썬 문서와 같은 HTML output 을 뽑을 수 있으면 가장 좋습니다. ^^
LaTeX 파일의 컴파일에 필요한 파일들은 모두 여기에 존재합니다.
문서
처음 ROVM 을 들어보시는 분들은 아래 문서 `ROVM Tutorial 문서' 를 먼저 읽어 보시기 바랍니다.
사용자 문서
| › 설치 문서 | ROVM Server 와 ROVM Client 를 어떻게 설치하는지에 대한 문서입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 3월 20일 |
| › ROVM Tutorial 문서 | ROVM Server 와 ROVM Client 를 이용하여 실제로 어떻게 사용하는지에 대한 지도 문서입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 2월 19일 |
| › ROVM Client 문서 |
ROVM Client 사용법 HOWTO 입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 3월 20일 |
개발자 문서
| › ROVM Server Reference 문서 | ROVM 의 Spec 문서입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 3월 20일 |
| › ROVM Interface 문서 |
ROVM Interface 사용법에 대한 내용을 담은 문서입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 2월 18일 |
| › 확장 모듈 만들기 | ROVM Server 가 로드할 수 있는 `확장 모듈'을 만드는 방법에 대해 기술한 문서입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 2월 25일 |
| › ENVLANG 파일 포맷 | ROVM 에서 load 하게 될, Class 파일의 표준 `File Format' 을 정의한 문서입니다. (PDF | PS | HTML | LaTeX) - 최종 업데이트 : 2006년 2월 25일 |
| › ROVM Compiler 사용 설명서 |
``ENVLANG 파일 포맷''의 바이너리를 생성하는 간단한 compiler 에 대한 설명서입니다. (TEXT) - 최종 업데이트 : 2006년 2월 6일 |
다운로드
- ROVM Server (내려받기) - 최신 버전 : 0.1.35a
- ROVM Library (내려받기) - 최신 버전 : 0.0.1g
- ROVM Client (내려받기) - 최신 버전 : 0.0.1g
- ROVM Interface (내려받기) - 최신 버전 : 0.0.1c
- ROVM Compiler (내려받기) - 최신 버전 : 0.0.1a
달라진 점 (ChangeLog)
테이블 형태로 작성하다가 새롭게 ChangeLog 기록 방식을 바꾸었습니다. HTML 문서 관리하는 것도 일이군요.
0.0.35a -> 0.1.35a
- ROVM Server
- OpenSSL 을 이용한 암호화 통신을 기본으로 사용하도록 수정되었습니다. ROVM Server 의 현재 버전과 통신하기 위해서는 반드시 ROVM Client 및 ROVM Interface 를 업그레이드 해주셔야 합니다.
- 사용자 인증 기능이 새롭게 추가되었습니다. conf/passwd 파일을 htpasswd 를 이용하여 생성해 주셔야 합니다.
- 파일 옵션 기능이 새롭게 추가되었습니다. 이제 바이너리를 수정하지 않고 옵션을 변경할 수 있게 되었습니다. conf/rovm.conf 파일을 참조하시기 바랍니다.
- ROVM Client v0.0.1g
- 암호화 통신이 가능하도록 소스가 수정되었습니다.
- 사용자 인증이 가능하도록 소스가 수정되었으며, e://<userid>@<hostname>:<port> 형식으로 접근할 수 있습니다.
- ROVM Interface v0.0.1c
- 암호화 통신이 가능하도록 소스가 수정되었습니다. 하지만 사용자 인증 기능은 Anonymous 모드만 지원하고 있습니다.
- ROVM Library v0.0.1g
- SHA1 모듈이 추가되었습니다.
- math 모듈이 추가되었습니다.
0.0.35a -> 0.0.35b
- ROVM Server
- Multi-thread 를 이용한 스트레스 테스트에서 GC 및 메모리 할당 및 해제가 안정적으로 수행되고 있음을 확인하였으며, 백만개의 반복되는 query 시 ROVM Server 가 안정적으로 실행되고 있음을 확인하였습니다. 이제 예외 사항에 대한 처리가 남았습니다.
- 데몬으로 프로그램을 실행할 수 있도록 코드가 추가되었습니다. 아직 설정 파일 기능이 지원하지 않기 때문에, ROVM Server 소스를 직접 수정해 주셔야 합니다.
- 클래스내에서 __del__ 메쏘드의 경우, finalizer 의 역활을 하는 메쏘드로써, GC 과정에서 ObjRef 가 제거될 경우, __del__ 메쏘드가 자동으로 호출될 수 있도록 하여 리소스 정리를 할 수 있도록 하였습니다.
- ROVM Interface
- 현재 ROVM Server 에서 지원하는 35 개의 opcode 를 모두 지원하도록 업데이트하였습니다.
- ROVM Interface
- regex 클래스 및 regex.regex 클래스가 새롭게 /test 카테고리에 추가되었습니다. 이제 정규 표현식을 원격에서 사용할 수 있게 되었습니다.
0.0.20a -> 0.0.35a
- 홈페이지
- NEW : 홈페이지에 `라이브러리 문서' 메뉴가 추가되었습니다.
- 문서들
- 현재 버전에 맞게 조금씩 수정되었습니다. 점점 커져가는 덩치에 작성할 문서는 넘쳐나는 군요.
- ROVM Client
- UP! : 몇몇 명령어들에 대한 기능 업데이트가 있었습니다. `OPCODE' 모드에서 help 를 쓰면 자세한 추가 내용을 확인할 수 있습니다.
- ROVM Server
- BUG : opcodefunc_call () 의 NPC 설정 오류 해결.
- UP! : 기본적인 스트레스 테스트를 하였으며, 그로 인해 발생하는 예외 상황을 제거하였습니다. GC 과정에서 발생할 수 있는 예외 상황을 중점적으로 테스트 하였으며, 1,000,000 개의 query 를 날렸을 때까지 예외 상황 및 메모리 leak 을 제거하였습니다. 물론 여전히 안정적이거나 완벽한 것은 아닙니다.
- NEW : Ticket 구조체에 대한 Garbage Collection 이 이루어지게 되었습니다.
- NEW : 새로운 opcode 가 15 개 추가되었습니다. BPUSH, FADD, DADD, ISUB, FSUB, DSUB, IMUL, FMUL, DMUL, IDIV, FDIV, DDIV, IREM, FREM, DREM 가 그것입니다.
- NEW : 확장 모듈 작성을 위한 아래의 함수들이 새롭게 추가 되었습니다. 각 함수의 역활에 대한 자세한 설명은 `확장 모듈 만들기' 문서에 자세히 설명되어 있습니다.
- RvStrGetInfo
- RvStrGetPointer
- RvStrSize
- RvSetReturnValue
- RvValueIsStringRef
- RvValueStringRef
- RvValueArrayRef
- RvValueRichCompare
- RvValueCopy
- RvMemMalloc
- RvGetTypeName
- RvLogError
- RvArrayGetItem
- RvArraySetItem
- RvArrayResize
- RvArrayInsert
- RvArraySliceAdvanced
- RvArrayExtend
- RvArrayReverse
- RvArrayPopWithIndex
- RvArrayGetEntry
- RvValueEntryItem
- ROVM Library
- NEW : str 클래스와 array 클래스의 기능이 대폭 강화되었습니다. 진정한 노가다입니다. 문서를 보시면 알 것입니다.
- NEW : str 클래스의 기능이 대폭 업데이트 되었습니다. 현재 아래와 같은 method 가 구현되어 있습니다. 자세한 사용법에 대해서는 /core/str 클래스 레퍼런스 문서를 보시기 바랍니다.
- capitalize (T)S
- center (TI)S
- center (TIC)S
- count (TS)I
- count (TSI)I
- count (TSII)I
- endswith (TS)B
- endswith (TSI)B
- endswith (TSII)B
- expandtabs (T)S
- expandtabs (TI)S
- find (TS)I
- find (TSI)I
- find (TSII)I
- isspace (T)B
- isalpha (T)B
- isalnum (T)B
- isdigit (T)B
- islower (T)B
- isupper (T)B
- istitle (T)B
- join (T[)S
- ljust (TI)S
- ljust (TIC)S
- lower (T)S
- lstrip (T)S
- lstrip (TS)S
- replace (TSS)S
- replace (TSSI)S
- rfind (TS)I
- rfind (TSI)I
- rfind (TSII)I
- rjust (TI)S
- rjust (TIC)S
- rsplit (T)[
- rsplit (TS)[
- rsplit (TSI)[
- rstrip (T)S
- rstrip (TS)S
- split (T)[
- split (TS)[
- split (TSI)[
- splitlines (T)[
- splitlines (TI)[
- startswith (TS)B
- startswith (TSI)B
- startswith (TSII)B
- strip (T)S
- strip (TS)S
- swapcase (T)S
- title (T)S
- upper (T)S
- zfill (TI)S
- NEW : array 클래스의 기능이 대폭 업데이트 되었습니다. 현재 아래와 같은 method 가 구현되어 있습니다. 자세한 사용법에 대해서는 /core/array 클래스 레퍼런스 문서를 보시기 바랍니다.
- append (TB)V
- append (TC)V
- append (TD)V
- append (TF)V
- append (TH)V
- append (TI)V
- append (TS)V
- append (TT)V
- append (T[)V
- count (TB)I
- count (TC)I
- count (TD)I
- count (TF)I
- count (TH)I
- count (TI)I
- count (TS)I
- count (TT)I
- count (T[)I
- extend (T[)V
- index (TB)I
- index (TBI)I
- index (TBII)I
- index (TC)I
- index (TCI)I
- index (TCII)I
- index (TD)I
- index (TDI)I
- index (TDII)I
- index (TF)I
- index (TFI)I
- index (TFII)I
- index (TH)I
- index (THI)I
- index (THII)I
- index (TI)I
- index (TII)I
- index (TIII)I
- index (TS)I
- index (TSI)I
- index (TSII)I
- index (TT)I
- index (TTI)I
- index (TTII)I
- index (T[)I
- index (T[I)I
- index (T[II)I
- insert (TIB)V
- insert (TIC)V
- insert (TID)V
- insert (TIF)V
- insert (TIH)V
- insert (TII)V
- insert (TIS)V
- insert (TIT)V
- insert (TI[)V
- pop (T)B
- pop (T)C
- pop (T)D
- pop (T)F
- pop (T)H
- pop (T)I
- pop (T)S
- pop (T)T
- pop (T)[
- pop (TI)B
- pop (TI)C
- pop (TI)D
- pop (TI)F
- pop (TI)H
- pop (TI)I
- pop (TI)S
- pop (TI)T
- pop (TI)[
- remove (TB)V
- remove (TC)V
- remove (TD)V
- remove (TF)V
- remove (TH)V
- remove (TI)V
- remove (TS)V
- remove (TT)V
- remove (T[)V
- reverse (T)V
0.0.10a -> 0.0.20a
- ROVM Server
- NEW : 'DUP' opcode 추가되었습니다.
- NEW : 'HPUSH', 'FPUSH', 'DPUSH' opcode 추가되었습니다.
- NEW : 'FRETURN', 'DRETURN', 'RETURN', 'ARETURN' opcode 추가되었습니다.
- NEW : 'POP', 'SWAP' opcode 추가되었습니다. 총 10 개의 opcode 가 새롭게 추가된 것입니다.
- NEW : short, float, double 타입 추가되었습니다. 이 타입들 또한 ix86 에서의 각각의 C 언어 타입과 모양, 특징이 모두 같습니다. 이로써 ROVM Server 에서 지원하는 타입의 총 갯수는 9 개가 되었습니다.
- UP! : ArrayRef 의 객체화. 이것의 변화로 인해서 프로토콜 변화 및 opcode 변화 등 많은 부분에서 변화점이 있었습니다.
- CHG : Opcode `NEWARRAY' 의 형식이 변경되었습니다. 기존의 경우, type 을 입력 받도록 하였지만, 이제는 type 의 의존하지 않고 하나의 배열 속에 여러 type 항목을 넣을 수 있게 되었습니다.
- BUG : GC Thread 상에서의 deadlock 상황 패치
- ROVM Library
- NEW : /core/array 클래스가 새롭게 추가되었습니다. 배열 (ArrayRef) 을 위한 클래스입니다.
- UP! : /core/str 클래스에 split (T)[, split (TS)[, split (TSI)[ 메쏘드가 추가되었습니다. Python 혹은 Ruby 의 문자열 split 와 같은 역활을 합니다.
- ROVM Client
- UP! : ROVM Client 에 추가된 opcode 적용되었습니다.
- ROVM Interface
- NEW : 이번에 새롭게 패키지가 생성되었습니다. 이 패키지는 ROVM Client 의 C 언어 버전이라고 할 수 있겠는데요, 하지만 디버깅을 목적이 아니라 실제 ROVM Server 와의 연동을 편리하게 하기 위한 목적이 큽니다. 이제 아래와 같이 C 에서 코딩을 하여 ROVM Server 와 연동할 수 있습니다.
#include "rovm.h" int main (void) { char *msg = "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.call (r, "split", "(TS)["); ret = r->send (r); if (ret) r->printreturn (r, ret); else r->printerror (r); rovm_reqend (r); return 0; }
- NEW : 이번에 새롭게 패키지가 생성되었습니다. 이 패키지는 ROVM Client 의 C 언어 버전이라고 할 수 있겠는데요, 하지만 디버깅을 목적이 아니라 실제 ROVM Server 와의 연동을 편리하게 하기 위한 목적이 큽니다. 이제 아래와 같이 C 에서 코딩을 하여 ROVM Server 와 연동할 수 있습니다.
- 확장 모듈 부분
- UP! : [ROVM Extension] RvStr2ArrayRef (), RvSetFieldValue () 인터페이스 추가.
- 프로토콜 부분
- CHG : [ROVM Protocol] 예약 명령어 'ERROR' 중 에류 메세지 관련 항목이 수정되었습니다.
- 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 의 실행 시점의 차이로 인해 발생할 수 있는 예외 상항을 수정하였습니다.
| ROVM Server | ROVM Client | ROVM Compiler |
|
0.0.7a
|
0.0.1c
|
0.0.1a
|