qjs 통역사qjsc 컴파일러qjscalc 응용 프로그램std 모듈os 모듈qjsc 컴파일러QuickJS는 모듈, 비동기 발전기 및 프록시를 포함한 ES2020 사양을 지원하는 작고 내장 가능한 JavaScript 엔진입니다.
선택적으로 큰 정수 (bigint), 큰 부동 소수점 번호 (bigfloat) 및 연산자 과부하와 같은 수학적 확장을 지원합니다.
공식 사이트 : https://bellard.org/quickjs/
중국 사이트 : https://github.com/quickjs-zh/
QuickJS QQ 그룹 1 : 598609506 .
중국 위키 : https://github.com/quickjs-zh/quickjs/wiki
QuickJS 벤치 마크 테스트의 특정 콘텐츠를 보려면 클릭하십시오.
Linux 또는 MacOS/X에서 컴파일 할 수있는 makefiles를 제공합니다. MINGW 도구를 사용하여 Linux 호스트에서 크로스 컴파일을 통해 예비 Windows 지원을 얻을 수 있습니다.
특정 옵션을 선택하려면 Makefile 의 상단을 편집하고 make 실행하십시오.
루트를 사용하여 make install 컴파일 된 바이너리를 설치하고 파일을 /usr/local (QuickJS를 사용하지 않아도됩니다)을 설치합니다.
참고 : Windows에서 컴파일 및 설치에 대한 QuickJS 중국어 문서, Linux에서 컴파일 및 설치를 참조하십시오.
qjs 는 명령 줄 파서 (Read-Eval-Print Loop)입니다.
./qjs examples/hello.js
qjsc 는 명령 줄 컴파일러입니다.
./qjsc -o hello examples/hello.js
./hello
외부 종속성없이 hello 실행 파일을 생성합니다.
qjsbn 및 qjscbn
./qjsbn examples/pi.js 1000
PI의 1000 자리를 표시합니다
./qjsbnc -o pi examples/pi.js
./pi 1000
PI 프로그램을 컴파일하고 실행하십시오.
qjs 통역사사용법 : QJS [옵션] [파일]
옵션 :
-h
--help
옵션 목록.
-e `EXPR`
--eval `EXPR`
Expr을 수행하십시오.
-i
--interactive
대화식 모드로 이동하십시오 (파일이 명령 줄에서 제공되는 경우 기본 모드가 아닙니다).
-m
--module
ES6 모듈로로드합니다 (기본값은 .mjs 파일 확장자).
고급 옵션은 다음과 같습니다.
-d
--dump
메모리 사용 통계를 전송합니다.
-q
--quit
통역사를 인스턴스화하고 종료하십시오.
qjsc 컴파일러사용법 : qjsc [옵션] [파일]
옵션 :
-c
C 파일의 바이트 코드 만 출력이고 기본값은 실행 파일을 출력하는 것입니다.
-e
main() 출력 및 바이트 코드 C 파일의 기본값은 출력 실행 파일입니다.
-o output
출력 파일 이름을 설정하십시오 (default = out.c 또는 a.out).
-N cname
생성 된 데이터의 C 이름을 설정합니다.
-m
JavaScript 모듈로 컴파일합니다 (기본값은 .mjs 확장자입니다).
-M module_name[,cname]
외부 C 모듈의 초기화 코드를 추가하십시오. c_module 예제를 확인하십시오.
-x
바이트 스왑 출력 (교차 컴파일 만).
-flto
링크 시간 최적화를 사용하십시오. 컴파일은 느리지 만 실행 파일은 더 작고 빠릅니다. 이 옵션은 옵션 -fno-x 사용할 때 자동으로 설정됩니다.
-fno-[eval|string-normalize|regexp|json|proxy|map|typedarray|promise]
선택한 언어 기능을 비활성화하여 더 작은 실행 파일을 생성하십시오.
qjscalc 응용 프로그램 qjscalc 응용 프로그램은 qjsbn Command Line 통역사의 슈퍼 세트로 임의의 큰 정수 및 부동 소수점 번호, 분수, 복소수, 다항식 및 행렬을 갖춘 JavaScript 계산기를 구현합니다. 소스 코드는 qjscalc.js에 있습니다. 더 많은 문서 및 웹 버전은 http://numcalc.com에서 확인할 수 있습니다.
QuickJS 아카이브에 포함 된 일부 내장 테스트를 실행하려면 make test 실행하십시오.
QuickJS 아카이브에는 Test262 러너 프로그램이 포함되어 있습니다.
참고로, 완전한 test262 테스트는 아카이브 qjs-tests-yyyy-mm-dd.tar.xz에 제공됩니다. QuickJS 소스 디렉토리로 압축을 해제하면됩니다.
또는 Test262 테스트를 설치할 수 있습니다.
git clone https://github.com/tc39/test262.git test262
cd test262
git checkout 94b1e80ab3440413df916cd56d29c5a2fa2ac451
patch -p1 < ../tests/test262.patch
cd ..
패치는 구현 별 harness 기능을 추가하고 비효율적 인 RegexP 문자 클래스 및 유니 코드 속성 탈출 테스트를 최적화합니다 (테스트 자체는 수정되지 않으며 느린 문자열 초기화 기능 만 최적화됩니다).
테스트가 실행될 수 있습니다
make test2
자세한 내용은 ./run-test262 실행하여 Test262 Runner의 옵션을 확인하십시오. 구성 파일 test262.conf 및 test262bn.conf 에는 다양한 테스트를 실행하는 옵션이 포함되어 있습니다.
부록 B (레거시 웹 호환성) 및 유니 코드 관련 기능을 포함하는 ES2019 Specification 2는 이미 기본적으로 지원되었습니다. 다음과 같은 기능은 아직 지원되지 않습니다.
JSON 파서는 현재 사양보다 더 넓은 범위로 지원됩니다.
ECMA402 (International API)는 아직 지원되지 않았습니다.
"use strip" 메모리를 저장하기 위해 디버그 정보 (기능 소스 코드 포함)를 유지하지 않습니다. "use strict" 글로벌 스크립트 또는 특정 기능을 적용 할 수 있습니다.#! 수학 확장은 qjsbn 버전 jsbignum.pdf 제공되며 표준 JavaScript와 완전히 호환됩니다.
BigInt (큰 정수) TC39는 이미 지원되었습니다.BigFloat 지원 : 카디널리티의 큰 부동 소수점 번호 2."use bigint" 지침은 Bigint 모드를 활성화하며 BigInt 기본적으로 정수입니다."use math" 명령은 정수의 분할 및 전원 운영자가 분수를 생성하는 수학 모드를 가능하게합니다. 기본적으로 부동 소수점 리터럴은 기본값이며 정수는 Bigint의 기본값입니다.ES6 모듈은 전적으로 지원됩니다. 기본 이름 해상도 규칙은 다음과 같습니다.
. .. 현재 모듈과 관련된 경로입니다.std 또는 .. os 같은 . 모듈입니다..so 로 끝나고 QuickJS C API를 사용하는 기본 모듈입니다. 기본적으로 표준 라이브러리는 명령 줄 통역사에 포함됩니다. 여기에는 두 개의 모듈 std 와 os 와 일부 전역 객체가 포함되어 있습니다.
scriptArgs
명령 줄 매개 변수를 제공합니다. 첫 번째 매개 변수는 스크립트 이름입니다.
print(...args)
인쇄 매개 변수는 공간과 후행 신성 라인으로 분리됩니다.
console.log(...args)
print ()와 동일합니다.
std 모듈 std 모듈은 LIBC STDLIB.H 및 STDIO.H 및 기타 유틸리티 용 래퍼를 제공합니다.
사용 가능한 내보내기 :
exit(n)
프로세스를 종료하십시오.
evalScript(str)
문자열 str 스크립트 (Global Eval)를 실행하십시오.
loadScript(filename)
filename 스크립트 (Global Eval)를 실행하십시오.
Error(errno)
std.Error 생성자. 오류 인스턴스에는 필드 errno (오류 코드)와 message ( std.Error.strerror(errno) 의 결과)가 포함됩니다.
생성자는 다음 필드를 포함합니다.
EINVAL
EIO
EACCES
EEXIST
ENOSPC
ENOSYS
EBUSY
ENOENT
EPERM
EPIPE
일반적으로 잘못된 정수 값 (추가 오류 코드를 정의 할 수 있음).
strerror(errno)
오류를 설명하는 문자열 errno 반환합니다.
open(filename, flags)
파일을 엽니 다 (libc의 래퍼 fopen() ). I/O 오류로 std.Error 던지십시오
tmpfile()
임시 파일을 엽니 다. I/O 오류로 std.Error 던지십시오.
puts(str)
std.out.puts(str) 와 같습니다.
printf(fmt, ...args)
std.out.printf(fmt, ...args) 에 해당합니다.
sprintf(fmt, ...args)
libc의 sprintf ()와 동일합니다.
in
out
err
Libc 파일 stdin stdout stderr
SEEK_SET
SEEK_CUR
SEEK_END
Seek ()의 상수
global
글로벌 대상에 대한 참조.
gc()
루프 삭제 알고리즘을 수동으로 호출하십시오. 루프 제거 알고리즘은 필요할 때 자동으로 시작 되므로이 기능은 특정 메모리가 제한되거나 테스트 할 때 매우 유용합니다.
getenv(name)
환경 변수의 값 name 반환하거나 정의되지 않은 경우 undefined .
파일 프로토 타입 :
close()
파일을 닫습니다.
puts(str)
출력 문자열에 UTF-8 인코딩을 사용하십시오.
printf(fmt, ...args)
libc printf 형식과 동일한 printf 형식입니다.
flush()
버퍼링 된 파일을 새로 고치십시오.
seek(offset, whence)
특정 파일 위치를 찾고 있습니다 ( std.SEEK_* 에서). I/O 오류로 std.Error 던지십시오.
tell()
현재 파일 위치로 돌아갑니다.
eof()
파일이 종료되면 true를 반환합니다.
fileno()
관련 OS 핸들을 반환합니다.
read(buffer, position, length)
바이트 위치의 파일 position 에서 length 바이트에서 Arraybuffer buffer (LIBC의 래퍼 fread )를 읽으십시오.
write(buffer, position, length)
바이트 위치의 position 부터 파일 (LIBC의 래퍼 fread )으로 시작하는 ArrayBuffer buffer 에 length 바이트를 작성하십시오.
getline()
후행 신형을 제외하고 UTF-8 인코딩이라고 가정하면 파일의 다음 줄을 반환합니다.
getByte()
파일의 다음 바이트를 반환합니다.
putByte(c)
파일에 바이트를 작성하십시오.
os 모듈 os 모듈은 운영 체제 별 기능을 제공합니다.
OK 인 경우 OS 함수는 일반적으로 0을 반환하거나 OS는 특정 오류 코드를 반환합니다.
사용 가능한 내보내기 기능 :
open(filename, flags, mode = 0o666)
파일을 엽니 다. 오류 인 경우 핸들 또는 <0을 반환하십시오.
O_RDONLY
O_WRONLY
O_RDWR
O_APPEND
O_CREAT
O_EXCL
O_TRUNC
posix 오픈 사인.
O_TEXT
(Windows-Specific). 텍스트 모드에서 파일을 엽니 다. 기본값은 이진 모드입니다.
close(fd)
파일 핸들 fd 를 닫습니다.
seek(fd, offset, whence)
파일을 찾고 있습니다. std.SEEK_* 또는 whence 사용하십시오.
read(fd, buffer, offset, length)
바이트 위치 offset 으로 파일 핸들 fd 에서 시작하여 length 바이트를 Arraybuffer buffer 의 읽기를 읽으십시오. 읽는 바이트 수를 반환하고 오류가 발생하면 0보다 작은 값을 반환합니다.
write(fd, buffer, offset, length)
Arraybuffer buffer 에 length 바이트를 작성하여 파일 핸들 fd offset 으로 시작하십시오. 작성된 바이트 수를 반환하고 오류가 발생하면 0보다 작은 값이 반환됩니다.
isatty(fd)
fd 는 TTY (터미널) 핸들로 true 반환합니다.
ttyGetWinSize(fd)
사용할 수없는 경우 tty 크기 [width, height] 또는 null 반환합니다.
ttySetRaw(fd)
원래 모드로 tty를 설정하십시오.
remove(filename)
파일을 삭제하십시오. 정상 인 경우 0을 반환하고 오류가 발생하면 <0을 반환합니다
rename(oldname, newname)
파일의 이름을 바꿉니다. 정상 인 경우 0을 반환하고 오류가 발생하면 <0을 반환합니다
setReadHandler(fd, func)
파일 핸들 fd 에 읽기 핸들러를 추가하십시오. fd 프로세스에 추가 할 데이터가있을 때마다 func 호출합니다. 각 파일 핸들에 대한 단일 읽기 핸들러를 지원합니다. func = null 사용하여 핸들을 삭제하십시오.
setWriteHandler(fd, func)
파일 핸들 fd 에 쓰기 핸들러를 추가하십시오. fd 는 func 작성하여 처리 할 데이터가 각 파일 핸들에 대한 쓰기 핸들러를 지원합니다. `func = null을 사용하여 핸들을 삭제하십시오.
signal(signal, func)
signal 발생하면 func 호출하십시오. 신호 번호 당 하나의 핸들러 만 지원됩니다. null 이 설정 한 기본 처리 또는 undefined 무시 신호를 사용하십시오.
SIGINT
SIGABRT
SIGFPE
SIGILL
SIGSEGV
SIGTERM
POSIX 신호 번호.
setTimeout(func, delay)
delay 밀리 초 후에 함수 func 호출하십시오. 핸들을 타이머로 반환합니다.
clearTimer(handle)
타이머를 취소하십시오.
platform
"linux" , "darwin" , "win32" 또는 "js" 라는 플랫폼을 나타내는 문자열을 반환합니다.
C API는 간단하고 효과적입니다. C API는 quickjs.h 헤더에 정의됩니다.
JSRuntime 객체 힙에 해당하는 JavaScript 런타임을 나타냅니다. 여러 개의 런타임이 동시에 존재할 수 있지만 객체를 바꿀 수는 없습니다. 주어진 런타임 내에서 멀티 스레딩은 지원되지 않습니다.
JSContext JavaScript 컨텍스트 (또는 도메인)를 나타냅니다. 각 JSContext에는 고유 한 글로벌 및 시스템 객체가 있습니다. JSRuntime에는 여러 개의 JSContexts가있을 수 있으며 웹 브라우저에서 JavaScript 객체를 공유하는 동일한 소스를 가진 프레임 워크와 유사한 개체를 공유 할 수 있습니다.
JSValue JavaScript 값을 나타내며, 이는 원시 유형 또는 객체 일 수 있습니다. 참조 수를 사용하므로 명시 적으로 복사 ( JS_DupValue() , 참조 수 증가) 또는 릴리스 ( JS_FreeValue() , 참조 수 감소) jsValues를 복사하는 것이 중요합니다.
JS_NewCFunction() 사용하여 C 함수를 만듭니다. JS_SetPropertyFunctionList() 주어진 객체에 기능, 세터 및 getter 속성을 쉽게 추가 할 수있는 쉬운 방법입니다.
다른 임베디드 JavaScript 엔진과 달리 QuickJS에는 암시 적 스택이 없으므로 C 함수는 매개 변수를 일반 C 매개 변수로 전달합니다. 일반적인 규칙은 C 함수가 JSValue 인수로 취하고 (따라서 해방 될 필요가 없음) 새로 할당 된 (활성) JSValue 반환한다는 것입니다.
예외 : 대부분의 C 함수는 JavaScript 예외를 반환 할 수 있습니다. C 코드를 통해 명시 적으로 테스트하고 처리해야합니다. 특정 JSValue , 즉 JS_EXCEPTION 은 예외가 발생했음을 나타냅니다. 실제 예외 객체는 JSContext 에 저장되며 JS_GetException() 사용하여 검색 할 수 있습니다.
JS_Eval() 사용하여 스크립트 또는 모듈 소스 코드를 평가하십시오.
스크립트 나 모듈이 qjsc 사용하여 바이트 코드로 컴파일 된 경우 JS_EvalBinary() 사용하면 동일한 결과를 얻을 수 있습니다. 이점은 컴파일이 필요하지 않기 때문에 eval 필요하지 않으면 실행 파일에서 컴파일러를 제거 할 수 있기 때문에 더 빠르고 크기가 작습니다.
참고 : 바이트 코드 형식은 특정 QuickJS 버전과 관련이 있습니다. 또한 실행 전에 보안 점검이 수행되지 않았습니다. 따라서 바이트 코드는 신뢰할 수없는 소스에서로드되어서는 안됩니다. 그렇기 때문에 qjsc 에 바이 테코 코드를 이진 파일에 출력하는 옵션이없는 이유입니다.
C의 불투명 데이터는 JavaScript 객체에 첨부 될 수 있습니다. C 불투명 데이터의 유형은 객체의 클래스 ID ( JSClassID )에 의해 결정됩니다. 따라서 첫 번째 단계는 새로운 클래스 ID 및 JS 클래스 ( JS_NewClassID() , JS_NewClass() )를 등록하는 것입니다. 그런 다음 JS_NewObjectClass() 사용하여 해당 클래스의 객체를 생성하고 JS_GetOpaque() / JS_SetOpaque() 사용하여 불투명 포인터를 C로 설정하거나 설정할 수 있습니다.
새 JS 클래스를 정의 할 때 물체가 파괴 될 때 호출되는 소멸자를 선언 할 수 있습니다. 루프 제거 알고리즘이 객체에서 참조 된 다른 객체를 찾을 수 있도록 gc_mark 메소드를 제공 할 수 있습니다. 이기종 객체 동작을 정의하는 데 사용할 수있는 다른 방법이 있습니다.
클래스 ID는 전 세계적으로 할당됩니다 (즉, 모든 런타임에 적용 가능). JSClass는 각 JSRuntime 에 할당됩니다. JS_SetClassProto() 주어진 JSContext 에서 주어진 클래스의 프로토 타입을 정의하는 데 사용됩니다. JS_NewObjectClass() 이 프로토 타입을 생성 된 개체에서 설정합니다.
예제는 JS_LIBC.C에 제공됩니다.
동적 또는 정적 링크를 지원하는 기본 ES6 모듈. test_bjson 및 bjson.so 예를 확인하십시오. 표준 라이브러리 JS_LIBC.C는 또한 기본 모듈의 좋은 예입니다.
JS_SetMemoryLimit() 사용하여 주어진 JSRuntime에 대한 글로벌 메모리 할당 제한을 설정하십시오.
JS_NewRuntime2() 사용자 정의 메모리 할당 함수를 제공 할 수 있습니다.
JS_SetMaxStackSize() 최대 시스템 스택 크기를 사용하여 설정할 수 있습니다.
JS_SetInterruptHandler() 사용하여 엔진이 코드를 실행할 때 정기적으로 호출되는 콜백 함수를 설정하십시오. 이 콜백 기능을 사용하여 실행 시간 초과를 구현할 수 있습니다.
명령 라인 인터프리터는이를 사용하여 Ctrl-C 핸들러를 구현합니다.
컴파일러는 중간 표현 (예 : 구문 분석 트리)없이 바이트 코드를 직접 생성하므로 매우 빠릅니다. 생성 된 바이트 코드에서 몇 가지 최적화 단계가 수행됩니다.
스택 기반 바이트 코드는 간단하고 생성 된 코드가 작기 때문에 선택됩니다.
각 함수에 대해 최대 스택 크기는 컴파일 시간에 계산되므로 런타임 스택 오버플로 테스트가 필요하지 않습니다.
디버깅 정보를 위해 별도의 압축 행 번호 테이블이 유지됩니다.
폐쇄 변수에 대한 액세스는 최적화되어 있으며 로컬 변수만큼 빠릅니다.
엄격한 모드의 직접 eval 최적화됩니다.
qjsc 컴파일러 qjsc 컴파일러는 JavaScript 파일에서 C 소스 코드를 생성합니다. 기본적으로 C 소스 코드는 시스템 컴파일러 ( gcc 또는 clang )를 사용하여 컴파일됩니다.
생성 된 C 소스 코드에는 컴파일 된 함수 또는 모듈의 바이트 코드가 포함됩니다. 완전한 실행 파일이 필요한 경우 JavaScript 엔진을 초기화하고 컴파일 된 기능 및 모듈을로드하고 실행하는 데 필요한 C 코드가 포함 된 main() 함수도 포함되어 있습니다.
JavaScript 코드는 C 모듈과 혼합 될 수 있습니다.
더 작은 실행 파이브를 생성하기 위해 특정 JavaScript 기능, 특히 eval 또는 일반 표현식을 비활성화 할 수 있습니다. 코드 제거는 시스템 컴파일러 종속 링크 시간 최적화에 연결됩니다.
qjsc 스크립트 또는 모듈을 컴파일 한 다음 이진 형식으로 직렬화하여 작동합니다. 이 형식의 서브 세트 (함수 또는 모듈 제외)는 이진 JSON으로 사용할 수 있습니다. 샘플 test_bjson.js 사용 방법을 보여줍니다.
경고 : 바이너리 JSON 형식은 통지없이 변경 될 수 있으며 영구 데이터를 저장하는 데 사용해서는 안됩니다. test_bjson.js 예제는 이진 객체 형식의 함수를 테스트하는 데만 사용됩니다.
문자열은 8 비트 또는 16 비트 문자 어레이로 저장됩니다. 따라서 캐릭터에 대한 임의의 액세스는 항상 빠릅니다.
C API는 JavaScript 문자열을 C UTF-8 인코딩 스트링으로 변환하는 기능을 제공합니다. 가장 일반적인 경우는 JavaScript 문자열에 ASCII 문자열 만 포함되어 있으며 복사를 포함하지 않는다는 것입니다.
객체 모양 (오브젝트 프로토 타입, 속성 이름 및 플래그)은 메모리를 저장하기 위해 객체간에 공유됩니다.
구멍이없는 최적화 된 배열 (배열 끝에 제외).
TypedArray 액세스가 최적화되었습니다.
객체 속성 이름과 일부 문자열은 메모리를 저장하고 빠른 비교할 수 있도록 원자 (고유 한 문자열)로 저장됩니다. 원자는 32 비트 정수로 표시됩니다. 원자 범위의 절반은 0에서 2^{31} -1의 즉각적인 정수 액면가를 위해 예약되어 있습니다.
숫자는 32 비트 서명 정수 또는 64 비트 IEEE-754 플로팅 포인트 값으로 표시 될 수 있습니다. 대부분의 작업에는 32 비트 정수 케이스에 대한 빠른 경로가 있습니다.
참조 수는 객체를 자동으로 정확하게 릴리스하는 데 사용됩니다. 할당 된 메모리가 너무 커지면 별도의 루프 제거 작업이 수행됩니다. 루프 제거 알고리즘은 참조 수와 객체 내용 만 사용하므로 C 코드의 쓰레기 수집 루트를 명시 적으로 조작 할 필요가 없습니다.
JSValue는 원시 유형 (예 : 숫자, 문자열 등) 또는 객체 일 수있는 JavaScript 값입니다. 32 비트 버전에서 NAN 권투는 64 비트 플로팅 포인트 번호를 저장하는 데 사용됩니다. 표현은 32 비트 정수 및 기준 수 값을 효율적으로 테스트하도록 최적화되었습니다.
64 비트 코드에서 JSValue의 크기는 128 비트이며 NAN을 사용하여 박스화되지 않습니다. 그 이유는 64 비트 코드에서 메모리 사용이 그다지 중요하지 않기 때문입니다.
두 경우 모두 (32 비트 또는 64 비트)에서 JSValue는 정확히 두 개의 CPU 레지스터에 적합하므로 C 함수에 의해 효율적으로 반환 될 수 있습니다.
엔진이 최적화되어 기능 호출이 빠릅니다. 시스템 스택에는 JavaScript 매개 변수와 로컬 변수가 포함되어 있습니다.
특정 정규 발현 엔진이 개발되었습니다. 작고 효율적이며 유니 코드 특성을 포함한 모든 ES2019 기능을 지원합니다. JavaScript 컴파일러로서 구문 분석 트리없이 바이트 코드를 직접 생성합니다.
시스템 스택에 재귀가 없도록 명시 적 스택 역 추적을 사용하십시오. 간단한 양자화기는 재귀를 피하기 위해 특별히 최적화됩니다.
빈 용어를 가진 양자화기로부터의 무한 재귀는 피합니다.
완전한 정규 표현 라이브러리의 무게는 유니 코드 라이브러리를 제외한 약 15 kib (x86 코드)입니다.
특정 유니 코드 라이브러리가 개발되므로 ICU와 같은 외부 대형 유니 코드 라이브러리에 의존하지 않습니다. 합리적인 액세스 속도를 유지하면서 모든 유니 코드 테이블을 압축하십시오.
라이브러리는 케이스 변환, 유니 코드 정규화, 유니 코드 스크립트 쿼리, 유니 코드 일반 범주 쿼리 및 모든 유니 코드 이진 속성을 지원합니다.
완전한 유니 코드 라이브러리의 무게는 약 45 kib (x86 코드)입니다.
Bigint and Bigfloat는 libbf 라이브러리 libbf 라이브러리를 사용하여 구현됩니다. 약 60 개의 kib (x86 코드)를 가지며 임의의 정밀도 및 초월적인 기능을 가진 IEEE 754 플로팅 포인트 작업을 정확한 반올림으로 제공합니다.
QuickJS는 MIT 프로토콜에 따라 릴리스됩니다.
달리 명시되지 않는 한, QuickJS 소스의 저작권은 Fabrice Bellard와 Charlie Gordon에 속합니다.
https://github.com/tc39/test262
https://tc39.github.io/ecma262/
우리는 현재 테일 콜 사양이 너무 복잡하고 실제 이점이 제한되어 있다고 생각합니다.
https://bellard.org/libbf
iOS의 QuickJS-Quickjs 라이브러리
QuickJS -Android의 Android Quickjs 라이브러리
QuickJS-RS Rust의 QuickJS 라이브러리
QuickJSPP C ++ QuickJS 라이브러리
Go-Quickjs Go의 QuickJS 라이브러리
txiki.js Quickjs, Libuv 및 ❤️으로 구축 된 작은 JavaScript 런타임
QuickJS-Pascal Quickjs Freepascal / Delphi 바인딩