ROVM (Remote Object Virtual Machine)
원격 객체 가상 머신

마지막 업데이트 : 2006 년 3월 21일
[영어]

ROVM 소개

ROVM 은 원격에 존재하는 객체를 쉽게 읽기/쓰기/실행 하기 위해서 만들어진 가상 머신입니다. ROVM 패키지인 ROVM Server 와 ROVM Interface 가 이를 이용할 수 있도록 도와주며, ROVM Client 가 쉽게 debugging 을 할 수 있도록 도와 줍니다.

아래와 같이 프로그래밍을 했으면 좋겠으며,

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 의 탄생 목적이며, 궁극적인 목표입니다.

새소식

새로운 소식이 궁금하세요? ``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 문서' 를 먼저 읽어 보시기 바랍니다.

다운로드

달라진 점 (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

0.0.20a -> 0.0.35a

  • 홈페이지
  • 문서들
    • 현재 버전에 맞게 조금씩 수정되었습니다. 점점 커져가는 덩치에 작성할 문서는 넘쳐나는 군요.
  • 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;
      }
      
  • 확장 모듈 부분
    • UP! : [ROVM Extension] RvStr2ArrayRef (), RvSetFieldValue () 인터페이스 추가.
  • 프로토콜 부분
    • CHG : [ROVM Protocol] 예약 명령어 'ERROR' 중 에류 메세지 관련 항목이 수정되었습니다.

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 의 실행 시점의 차이로 인해 발생할 수 있는 예외 상항을 수정하였습니다.
ROVM Server ROVM Client ROVM Compiler
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 버전임을 의미합니다.
  • [기타사항] 각 문서에 대한 내용들이 현재 버전에 맞게 수정되었습니다.
0.0.1b
  • [기능추가] `ENVLANG File Format' v0.1 에 대한 load 기능 추가.
  • [기능추가] `NEW' opcode 추가.
  • [기능변경] ROVM Server 의 기본 포트 번호를 기존 8888 번에서 4390 로 변경.
  • [버그수정] Opcode 실행시 발생할 수 있는 Stack Overflow 수정.
0.0.1a
  • 첫번째 릴리즈입니다. 오늘은 2006년 1월 31일입니다.
0.0.1c
  • ROVM Server 에 새롭게 추가된 `CALL' opcode 를 지원할 수 있도록 코드가 보강되었습니다.
0.0.1b
  • ROVM Server 에 새롭게 추가된 `NEW' opcode 를 지원할 수 있도록 코드가 보강되었습니다.
0.0.1a
  • 첫번째 릴리즈입니다. 오늘은 2006년 1월 31일입니다.
0.0.1a
  • 첫번째 릴리즈입니다. 오늘은 2006년 2월 7일입니다.
ROVM (원격 객체 가상 머신) 개발자 그룹에 가입
이메일:
groups.google.co.kr에서 보관함 브라우즈