Π ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° 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
