Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° JavaScript Bun Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° C

Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Bun, Ρ€Π°Π·Π²ΠΈΠ²Π°Π½Π° ΠΊΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π½Π° Node.js ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° самостоятСлно изпълнСниС Π½Π° прилоТСния, написани Π½Π° JavaScript, JSX ΠΈ TypeScript, Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° СкспСримСнтална Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° компилация ΠΈ изпълнСниС Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, написани Π½Π° Π΅Π·ΠΈΠΊΠ° C. ΠŸΡ€Π΅Π΄ΠΈ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° нискоуровнСв ΠΊΠΎΠ΄ бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ»ΠΈ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ N-API Π΄ΠΎΠ±Π°Π²ΠΊΠΈ, ΠΈΠ»ΠΈ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΊΠΎΠ΄ Π² WebAssembly (WASM/WASI) Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΡΠ²Π°ΡˆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ налагашС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ограничСния. Π‘Π΅Π³Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° C ΠΌΠΎΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° сС Π²Π³Ρ€Π°ΠΆΠ΄Π° Π² JavaScript ΠΈ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° TinyCC, ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: ".\/hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΅Π·ΠΈΠΊΠ° C сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° прослойка bun:ffi, която ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° изходния ΠΊΠΎΠ΄ Π² машинни инструкции, поставя Π³ΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС ΠΈ осигурява Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° конвСртация Π½Π° Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ JavaScript ΠΈ C. ΠžΡ‚Π±Π΅Π»ΡΠ·Π²Π° сС, Ρ‡Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ C ΠΊΠΎΠ΄ са свСдСни Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, с Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ закъснСния ΠΎΡ‚ ΠΎΠΊΠΎΠ»ΠΎ 2 наносСкунди Π·Π° всяко ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° външни C Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ FFmpeg Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΡ€Π°Ρ‚ΠΊΠΈ Π²ΠΈΠ΄Π΅Π° – Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ² процСс ΠΈ разпрСдСлянСто Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° всяко Π²ΠΈΠ΄Π΅ΠΎ, ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС Π½Π° тСстовата Π·Π°Π΄Π°Ρ‡Π° с bun:ffi успя Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ.

По-Π½ΠΎΠ²ΠΎ, Π² вСрсия Bun 1.1.29 Π·Π° C ΠΊΠΎΠ΄ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° N-API (napi), Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ написанитС Π½Π° C ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²Ρ€ΡŠΡ‰Π°Ρ‚ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π½ΠΈΠ·ΠΎΠ²Π΅, масиви ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΈ стойности Π½Π° JavaScript, освСн Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, ΠΏΡ€ΠΈΡΡŠΡ‰ΠΈ Π·Π° C, ΠΊΠ°Ρ‚ΠΎ int ΠΈ float. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° C Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° всякакви Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с C ABI, нСзависимо ΠΎΡ‚ Π΅Π·ΠΈΠΊΠ°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ са написани (C++, Rust, Zig ΠΈ Ρ‚.Π½.), ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдоставяни ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² JavaScript ΠΊΠΎΠ΄, Π±Π΅Π· нСобходимост ΠΎΡ‚ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π΅Ρ‚Π°ΠΏ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° компилация. НапримСр, Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ JavaScript Π΄ΠΎ систСмни API.

НапомнямС, Ρ‡Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Bun сС Ρ€Π°Π·Π²ΠΈΠ²Π° с Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ към осигуряванСто Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ със ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ прилоТСния, написани Π·Π° Node.js, ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° голяма част ΠΎΡ‚ API Π½Π° Node.js. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструмСнти Π·Π° създаванС ΠΈ изпълнСниС Π½Π° прилоТСния Π½Π° JavaScript ΠΈ TypeScript, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ срСда Π·Π° изпълнСниС Π½Π° JavaScript прилоТСния Π±Π΅Π· Π±Ρ€Π°ΡƒΠ·ΡŠΡ€, ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ (ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с NPM), инструмСнти Π·Π° ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° тСстовС ΠΈ систСма Π·Π° сглобяванС Π½Π° самостоятСлни ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. По производитСлност Bun Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡ€Π΅Π²Π°Ρ€Π²Π° Deno ΠΈ Node.js (Π² тСстовС Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΡƒΡŠΡ€ΠΊΠ° React ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Bun Π΅ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·Π° ΠΎΡ‚ Deno ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠ΅Ρ‚ ΠΏΡŠΡ‚ΠΈ ΠΎΡ‚ Node.js). ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° Bun Π΅ написан Π½Π° Π΅Π·ΠΈΡ†ΠΈ Zig ΠΈ C++, ΠΈ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° MIT. Π—Π° изпълнСниС Π½Π° JavaScript сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JavaScript ядрото JavaScriptCore ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° WebKit с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°Ρ‡ΠΎΠ²Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster