[스크랩]VM을 사용하는 이유 기억보조

  • 컴파일러를 쉽게 구현하고 이식하기 위해
  • 성능을 높이기 위해
  • 시스템에 입력되는 프로그램의 특성을 제어하기 위해
  • 플랫폼 독립적인 프로그램 배포를 위해
  • 하드웨어 별 특성을 활용하기 위해
  • 메모리를 절약하기 위해
    • 스크립트 언어 VM

      자바스크립트, 펄(Perl)을 포함한 대부분 스크립트 언어는 소스를 파싱한 후에 트리 형태로 만들어 놓고 트리를 따라가면서 프로그램을 실행하는 구조였다. 이러던 것이 몇몇 스크립트를 중심으로 하부에 VM을 정의해 스크립트 실행 성능을 높이고 있고 널리 쓰이는 스크립트 대부분이 VM 기반으로 이행하고 있다.
      * 자바스크립트의 경우 공식 구현이 하나만 있는 것은 아니지만 어도비가 모질라 재단에 공여한 AVM2(ActionScript VM 2)가 그런 예다. ECMA 표준 4판에 포함될 내용을 지원하기 위한 내용을 포함하다 보니 JVM과 상당히 비슷해졌고 스택 기계 형태에 내부적으로 JIT 컴파일러를 가지고 있다.
      * 파이선(Python) 역시 스택 기계 형태의 VM을 가지고 있고 완전하지는 않지만 JIT 컴파일러 구현도 있다.
      * 게임에서 많이 사용하는 Lua의 경우 RISC와 비슷하게 레지스터 개념을 도입한 VM을 사용하며 이런 형태 탓에 성능이 뛰어 나다는 점을 강조하고 있다.
      * PHP는 Zend 엔진으로 넘어가면서 일찌감치 바이트코드 기반으로 넘어간 상태다.
      * 그 외 루비의 YARV, 펄의 Parrot 같은 프로젝트도 진행 중으로 앞으로 스크립트 언어 구현에 VM이 사용되는 것을 흔히 보게 될 것으로 보인다.


      JVM

      일반에 공개된 것은 1995년이지만 자바의 기본이 된 Oak 언어는 1990년 초에 이미 완성되었다고 한다. JVM이 최초인지는 확실하지 않으나 이전까지의 시도에 비해 특이한 점은 바로 데이터 흐름 분석(data flow analysis)과 데이터 형 개념을 활용해 실행 전에 바이트코드를 검증할 수 있게 한 점이 아닌가 한다. 여기에는 몇 가지 의미가 있는데, 우선 이전까지의 VM은 바이트코드가 잘못되어 C로 작성한 프로그램처럼 메모리를 망가뜨리거나 하는 경우에 대해 고려하지 않았지만 자바는 네트워크를 통해 움직이는 코드를 표방, 검증을 중심에 놓았다. 또 실행 전에 상당 부분의 검증을 행함으로써 실행시 성능을 깎아 먹는 안전 검사를 줄여 성능을 높이고 기계어로 변환하기 쉽도록 했다.

      원문 : http://www.ibm.com/developerworks/kr/library/dwclm/20080212/?ca=dnn-krt-20080220


    덧글

    • aero 2008/02/20 23:59 # 삭제 답글

      Perl 이 VM이 없는것 처럼 얘기하셨는데 현 Perl 5 버젼은 내부적인 자체 스택베이스 VM을 가집니다. 단지 Perl에만 국한 되어 사용되는 VM이지만요. 이건 현재 다른 VM을 가지는 스크립트 언어들과도 비슷한 형태죠.
      참고- http://diotalevi.isa-geek.net/~josh/Presentations/Perl%205%20VM/

      Perl 6프로젝트의 하나인 Parrot은 현 Perl 5 VM과는 다르게 멀티플랫폼을 지향하고 어떤 언어도 Parrot위에서 구현할 수 있는 구조를 지향하고 있다는 점에서 여타 현존 VM들보다 더욱 범용적이라고 할 수 있습니다. 구조도 레지스터 베이스라고 하더군요.
      사실상 Perl 6는 언어 스펙을 뜻하는 단어일 뿐이고 Perl 6의 스펙을 Parrot 위에서 구현하는것을 최근 Rakudo라고 이름 붙였고 Haskell로 Perl 6를 구현하고 있는 Pugs, Perl 5로 Perl 6를 구현하는 kp6 이 3가지가 있습니다.

      Parrot과 Rakudo 프로젝트는 요즘 한층 탄력을 받아 개발 속도를 높여가고 있습니다.
    • 고릴라 2008/02/21 09:30 # 답글

      //aero님 원문에서 기억보조용으로 긁어온 건데 좋은 말씀 잘 보았습니다. 감사합니다
    댓글 입력 영역