Emscripten 4.0, C / C ++ rau WebAssembly compiler muaj

Kev tso tawm ntawm Emscripten 4.0 toolkit tau tshaj tawm, tso cai rau koj los sau cov lej hauv C / C ++ thiab lwm yam lus uas LLVM-raws li frontends muaj nyob rau hauv universal low-level intermediate code WebAssembly. Cov txiaj ntsig tau tuaj yeem siv rau kev koom ua ke nrog JavaScript tej yaam num, khiav hauv lub web browser, siv nyob rau hauv Node.js, los yog tsim stand-alone multi-platform daim ntawv thov launched siv wasm runtime. Txoj haujlwm code raug faib raws li daim ntawv tso cai MIT. Lub compiler siv kev txhim kho los ntawm LLVM qhov project, thiab lub tsev qiv ntawv Binaryen yog siv los tsim WebAssembly thiab optimization.

Lub hom phiaj tseem ceeb ntawm Emscripten yog kev tsim cov cuab yeej uas tso cai rau koj los ua cov lej hauv lub vev xaib, tsis hais txog hom lus programming uas cov cai no tau sau ua ntej. Cov ntawv sau ua ke tuaj yeem siv hu rau cov qauv C thiab C ++ cov tsev qiv ntawv (libc, libcxx), C ++ extensions, pthreads-based multithreading, POSIX APIs, thiab ntau lub tsev qiv ntawv multimedia. APIs rau kev koom ua ke nrog Web API thiab JavaScript code yog muab cais.

Emscripten txhawb kev tshaj tawm cov ntaub ntawv tawm ntawm SDL2 lub tsev qiv ntawv los ntawm Canvas, thiab tseem siv kev txhawb nqa rau OpenGL thiab EGL los ntawm WebGL API, uas tso cai rau koj los hloov cov duab kos duab thiab kev ua si rau WebAssembly (piv txwv li, muaj qhov chaw nres nkoj ntawm Qt toolkit, lub game engines Unreal Engine thiab Unit tau txais kev txhawb nqa, nrog rau lub cev simulation engine Bullet txheej txheem).

Ntxiv rau kev sau cov code C/C++, cov projects raug tsim cais rau kev khiav cov neeg txhais lus hauv browsers thiab cov tshuab virtual rau Lua, C #, Python, Ruby, thiab Perl. Nws kuj tseem siv tau LLVM frontends uas tsis yog Clang, xws li frontends rau Swift, Rust, D, thiab Fortran.

Txoj haujlwm ntawm tus lej version 4.0 yog vim qhov kev qhia txog kev hloov pauv uas cuam tshuam kev sib raug zoo ntawm ABI qib (thaum rov tsim kho qhov project hauv Emscripten 4.0, nws yuav tsim nyog los tsim kho cov ntaub ntawv thiab cov tsev qiv ntawv sau los ntawm cov ntawv dhau los ntawm Emscripten). Kev hloov pauv loj hauv Emscripten 4.0:

  • Ntxiv kev xaiv "-sWASM_LEAGCY_EXCEPTIONS" los xaiv ntawm cov qub thiab tshiab tshwj xeeb tuav mechanisms. Los ntawm lub neej ntawd, cov txheej txheem qub tseem siv tau, vim tsis yog txhua tus browsers tau siv WebAssembly peev xwm los tswj cov kev zam tshiab.
  • Compiler-rt, libcxx, libcxxabi thiab libunwind Cheebtsam tau hloov kho rau LLVM 19 ceg.
  • Qhov tsawg kawg nkaus version ntawm Safari browser txhawb nqa hauv cov rooj sib txoos (MIN_SAFARI_VERSION teeb tsa) tau nce los ntawm 14.1 txog 15.0, uas ua rau nws tuaj yeem siv ntau qhov WebAssembly siab heev los ntawm lub neej ntawd:
    • Pab kom siv cov ntab tshiab rau int hloov dua siab tshiab cov lus qhia (nontraping-fptoint), uas es tsis txhob pov ib qho kev zam thaum qhov tshwm sim dhau, rov qab qhov tsawg kawg nkaus lossis siab tshaj tus nqi (tsim nyog rau SIMD).
    • Qhov kev xaiv WASM_BIGINT tau qhib, uas siv hom BigInt los pauv 64-ntsis tus lej lej ntawm WebAssembly thiab JavaScript code.
    • Qhov kev xaiv BULK_MEMORY tau qhib, uas siv WebAssembly cov lus qhia memory.copy thiab memory.fill los siv C functions memcpy thiab memset.
  • Txoj kev normalization yog neeg xiam nyob rau hauv PATH.basename() muaj nuj nqi (PATH.normalize()), i.e. hu 'PATH.basename("a/.")' tam sim no yuav rov qab "." es tsis txhob "a", thiab 'PATH.basename("a/b/..")' yuav rov ".." es tsis txhob "a".
  • Thaum siv qhov kev xaiv -sMODULARIZE, lub Hoobkas ua haujlwm uas tsim thiab xa rov qab piv txwv ntawm WebAssembly modules thiab cov khoom rau JavaScript tam sim no tau chij ua "async" thaum muab tso ua ke hauv WASM_ASYNC_COMPILATION hom.
  • Ntxiv lub peev xwm los qhia cov tsev qiv ntawv JavaScript siv "-lfoo.js" kev xaiv. Tsis zoo li qhov kev xaiv "--js-library", lub tsev qiv ntawv tau tshawb hauv txhua txoj hauv kev uas tau teev tseg los ntawm kev xaiv "-L".
  • Thaum sib txuas hauv hom kev debug (-O0 lossis -sASSERTIONS), lub neej ntawd debug version ntawm malloc muaj nuj nqi tau qhib, nrog kev lees paub tau qhib kom pom qhov yuam kev xws li hu dawb () ob zaug.

Tau qhov twg los: opennet.ru

Ntxiv ib saib