Π ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° 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, ΠΊΠ°ΠΊΡΠΎ ΠΈ runtime Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° JavaScript ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π±ΡΠ°ΡΠ·ΡΡ, ΠΏΠ°ΠΊΠ΅ΡΠ΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ (ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ NPM), ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Bun Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ΅Π²Π°ΡΠ²Π° Deno ΠΈ Node.js (Π² ΡΠ΅ΡΡΠΎΠ²Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° React, ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Bun Π΅ Π΄Π²Π° ΠΏΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·Π° ΠΎΡ Deno ΠΈ ΠΏΠΎΡΡΠΈ ΠΏΠ΅Ρ ΠΏΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·Π° ΠΎΡ Node.js). ΠΠΎΠ΄ΡΡ Π½Π° Bun Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΅Π·ΠΈΡΠΈΡΠ΅ Zig ΠΈ C++ ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ MIT. ΠΠ° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° JavaScript ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° JavaScript Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ JavaScriptCore ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° WebKit Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΡΠΎΠ²Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
