Π‘ΠΎΡΡΠΎΡΠ»ΡΡ Π²ΡΠΏΡΡΠΊ Fil-C 0.682 β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C ΠΈ C++, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»Π½ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ (memory safety) ΠΈ Π΄Π°ΡΡΠ΅Π³ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π±ΠΠ»ΡΡΠΈΠ΅, ΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Rust. ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π€ΠΈΠ»ΠΈΠΏΠΎΠΌ ΠΠΈΠ·Π»ΠΎ (Filip Pizlo), ΠΊΠΎΡΠΎΡΡΠΉ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ.
Fil-C ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Clang/LLVM 20.x ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° C/C++ Ρ Π³Π°ΡΠ°Π½ΡΠΈΠ΅ΠΉ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ (out-of-bounds access, use-after-free, double free, type confusion). Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ASan ΠΈΠ»ΠΈ MTE, Fil-C ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΠΎΠ³ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»Π°Π·Π΅Π΅ΠΊ Π²ΡΠΎΠ΄Π΅ Π±Π»ΠΎΠΊΠΎΠ² unsafe.
ΠΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΠΈΠΉ Π³ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΡΠΎΡΡΠ» ΠΏΡΡΡ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ ΠΌΠ°ΡΡΡΠ°Π±Π½ΠΎΠΉ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ:
- InvisiCaps 2.0 ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Capability: Π‘ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΠΉ (capabilities), ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΠΈΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠΈΠΏΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡ 64-Π±ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ C. ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ capability, ΡΠ½ΠΈΠΆΠ΅Π½Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° union, memcpy, Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΌΠ°Π½Π΄Π°ΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΈΠ½Π»Π°ΠΉΠ½-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ.
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° (FUGC): Π ΡΠ°Π½ΡΠ°ΠΉΠΌ-ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° Filβs Unbelievable Garbage Collector Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²ΡΠΎΠ΄Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΠΈ GNU Indirect Function.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ARM64: ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Ρ Π½ΡΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π±ΡΠΊΠ΅Π½Π΄, ΡΠ°Π½ΡΠ°ΠΉΠΌ, Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΈ ABI Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ARM64 (Linux/aarch64), ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠ΅Π» Π² ΡΠ°Π·Ρ Π±Π΅ΡΠ°-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΈΠ½Π»Π°ΠΉΠ½-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΈ SIMD: ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ Π²ΡΡΠ°Π²ΠΎΠΊ (Π²ΠΊΠ»ΡΡΠ°Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ OpenSSL) Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΠΉ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ»Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ SSE, AVX, AVX2 ΠΈ AVX512 (Π²ΠΊΠ»ΡΡΠ°Ρ masked load/store, expand/compress, sfence ΠΈ prefetch).
- Escape Analysis: ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 0.671 Π²Π½Π΅Π΄ΡΠ΅Π½ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΊΠ°. ΠΡΠΎ ΡΡΠ°Π»ΠΎ ΡΠ°ΠΌΡΠΌ ΠΊΡΡΠΏΠ½ΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π° Π³ΠΎΠ΄: ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ QuickJS Π²ΡΡΠΎΡΠ»Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 6 ΡΠ°Π·, Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ β Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° 10%.
- Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ C++ ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌΠΈ: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ C++, ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°, ucontext, Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ², std::optional ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΠ»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠΎΠ².
- ΠΠ°ΡΠΈΡΠ° ΠΎΡ ΠΎΠΏΠ°ΡΠ½ΡΡ UB-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ LLVM: Fil-C ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΠ» Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ LLVM, ΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΠ΅ΡΡ Π½Π° Undefined Behavior (UB). Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ strict aliasing ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ Π°Π½Π°Π»ΠΎΠ³ -fwrapv, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
- ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° LLVM/Clang 20: ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ Clang 20 (c Π²Π΅ΡΡΠΈΠΈ Fil-C 0.670), ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ»ΠΎ Π»ΡΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ.
- Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Linux ABI ΠΈ FFI Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡ: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΌΡΠ»ΡΡΠΈΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΎΠ±Π΅ΡΡΠΊΠΈ Π΄Π»Ρ Π΄Π΅ΡΡΡΠΊΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Linux (statx, openat2, pidfd, epoll, splice, futex, timer API ΠΈ Π΄Ρ.), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° dlopen, dlvsym, libffi ΠΈ FFI-ΡΠ»ΠΎΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
- ΠΠΎΠ²Π°Ρ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ API ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°: ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ABI Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΎΠ²Π΅ΡΡ Π΅Π΄Π°. ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ API, Π²ΠΊΠ»ΡΡΠ°Ρ zlock_runtime_threads() (ΡΠΈΠΊΡΠ°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΡΠΎΠ³ΠΈΡ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡ), Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ sampling profiler ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π°ΠΌΠΏΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ userspace-Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² /opt/fil: Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ glibc 2.40, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ OpenSSH, OpenSSL, sudo, git, curl, wget, rsync, tmux, make, grep, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (PAM, Kerberos, SELinux, ICU).
ΠΠΎΡΠΎΠ²ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π² Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ : Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Π½Π° Π±Π°Π·Π΅ musl (filc) ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ /opt/fil Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ x86_64 ΠΈ ARM64.
Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Linux β Pizlix
ΠΡΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
