ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • QuickJS JavaScript Engine
    카테고리 없음 2019. 7. 12. 16:41

    Bellard 선생님이 또 한건 하셨다.

     

    https://desc.link/zo

     

    bellard.org|QuickJS Javascript Engine

    ES2019 표준을 거의 준수하고, 190KiB의 아주 작은 Javascript Engine. embeddable 중에 가장 작고, 빠른 JavaScript 엔진. 거기에 끈기와 장기 지원의 상징인 Bellard 선생이 작업하시었다.

    desc.link

     

    이 시대의 또하나의 천재인 Bellard님이 작업하신 JavaScript engine인데, 특징은 순수 C 구현, 다른 외부 의존성 없이 190KiB로 binary가 떨어짐, 인터프리터 치고는 상당히 빠른 속도. ES2019 표준을 "거의" 지원, ECMAScript test suite를 모모두 pass함, reference counting방식의 GC, 수학 확장(BigInt, BigFloat 등 지원), CLI interface 지원, C로 native 확장 지원.

     

    이것이 가지는 의미는, 웬만한 SW에 약간의 노력으로 JavaScript scripting을 지원 가능해 졌다는 말이다. 이전에도 DuckTape 같은 작은 Javascript 구현체가 있기는 했지만, 표준 Javascript와의 호환성이 떨어져서 자신있게 도입하기가 어려웠었다. 하지만 표준을 거의 지원하고, 준수하는 놈이 나왔으니, 아주 간단하게 JavaScript scripting을 도입하고(문론 자신 있으면 V8을 붙여도 되는데.. 배보다 배꼽이 백배는 큰 꼴이 된다) 추후에 배가 커지면, 큰 배꼽으로 갈아타는 것이 가능해 졌다는 것이다. 즉, 저기서 돌아가는 코드는 왠만하면 V8에서도 돌아간다것이 보장된다는 말이다.

     

    가끔가다 코딩해 두고, scripting을 넣어 볼까 하다가 lua 말고는 적절한 대안이 없어서 포기한 경우가 많았는데, 이제야 쓸만한게 나와 주었다.

     

    성능은, 문론 JIT가 없는 interpreter 방식이라 V8의 2~3% 정도인 듯 하다.

     

    같은 machine은 아니지만 내 notebook에서 chrome으로 돌린것과 홈 페이지에 공개된 bench-v8 결과 수치를 비교해 보면 아래와 같다.

    Engine QuickJS V8 비내 
    Richards 777 24284 3.19%
    DeltaBlue 761 46338 1.64%
    Crypto 1061 19003 5.58%
    RayTrace 915 59597 1.53%
    EarleyBoyer 1417 34610 4.09%

     

    에게, 2~3%.. 엄청 느리네.. 하겠지만, 이건 V8 Engine이 얼마나 빠른지를 몰라서 하는 말이고, 저정도면 왠만한 scripting을 하는데에는 지장 없다. 저게 너무 느려서 뭘 못하겟다는 시점이 되면 V8로 바꾸면 된다.

     

    build는 bellard선생답게 make 한방으로 깔끔하게 끝나고, 떨어진 qjs binary를 실행시키면, 대략 아래와 같은 느낌으로 실행된다.

     

    Bellard 선생님, 오랫만에 좋은 선물 감사합니다.

     

    Bellard 선생님이 어떤분인지 궁금하신분은,

    https://bellard.org/

     

    Fabrice Bellard's Home Page

     

    bellard.org

     

    여담

    이 QuickJS를 사용한 예제라고 달랑 걸어 놓은 link인 

    http://numcalc.com/

     

    http://numcalc.com/

    NumCalc Tutorial NumCalc is a lightweight and easy to use scientific calculator. It has the following features: Arbitrary precision integers and floating point numbers, fractions Complex numbers including complex transcendental functions Polynomials, ratio

    numcalc.com

    는, 무려 Javascript를 지원하는 "계산기"이다. 달랑 계산기 서비스 사이트 하나 만들기 위해, C로 javascript engine을 만들고, 그것을 emscripten으로 javascript로 compile해서, javascript extension을 지원하는 계산기 site를 만들었다. 너무나 대담한 잉여력 아닌가?

     

    댓글

Designed by Tistory.