Теория языков программирования
WebAssembly
Solomon Hykes, создатель Docker: 'Если бы WASM+WASI существовал в 2008, мне не пришлось бы создавать Docker'. WASM запускает Doom, Photoshop, Python, SQLite прямо в браузере. На сервере - изолированные плагины без контейнеров, edge computing без cold start. Это не очередной compile-to-JS - это новая платформа.
- **Shopify Functions**: каждый мерчант пишет checkout logic на любом языке, Shopify запускает как WASM в sandbox с 5ms timeout. 1M+ executions per день
- **Figma**: перенёс C++ rendering engine в браузер через WASM. Результат: 3x быстрее чем предыдущая JavaScript реализация, те же алгоритмы
- **Cloudflare Workers**: 50M+ WASM deployments, cold start <1ms vs Lambda 100ms+. Wasmtime runtime изолирует каждый worker
Дизайн WebAssembly
WebAssembly - бинарный формат с формальной семантикой, компактным представлением и предсказуемой производительностью. Цели дизайна: portable (один бинарник везде), fast (близко к нативной скорости), safe (memory-safe sandbox), compact (меньше JavaScript). Не замена JavaScript - дополнение для вычислительно-интенсивных частей.
WASM validation: формальная спецификация гарантирует что любой валидный WASM модуль не нарушает memory safety. Impossible по конструкции - нет arbitrary pointer arithmetic, нет buffer overflow за пределы linear memory. Это stronger guarantee чем C или Rust unsafe код.
Почему WASM обеспечивает memory safety без GC?
Component Model
WASM Component Model - стандарт для межъязыкового взаимодействия без ABI проблем. Проблема MVP WASM: только i32/i64/f32/f64 на границе модуля. Строки, списки, структуры - через linear memory с ручным маршаллингом. Component Model добавляет WIT (WebAssembly Interface Types) - типизированный интерфейс для компонентов.
Какую проблему решает Component Model, которую не решает базовый WASM?
WASI - WebAssembly System Interface
WASI - стандартный API для доступа к системным ресурсам из WASM вне браузера. POSIX-подобный, но capability-based: модуль получает только те права которые явно предоставлены. Нет ambient authority - нельзя открыть произвольный файл, только те директории которые разрешил host. Wasmtime, WasmEdge, WAMR - WASI runtimes.
Чем capability-based security WASI лучше традиционной POSIX модели прав?
Polyglot Runtime
WASM как universal compilation target: один runtime для кода на C, Rust, Go, Python, Ruby, Swift. Shopify использует WASM для плагинов - разработчик пишет на любом языке, платформа запускает в sandbox. Fastly Compute - WASM edge computing. Fermyon Spin - microservices на WASM.
WebAssembly - технология только для браузера и замена JavaScript
80% интереса к WASM сейчас - серверная сторона (WASI, edge computing, plugins). Shopify, Fastly, Cloudflare - используют WASM на сервере. JavaScript остаётся, WASM дополняет
Solomon Hykes (создатель Docker): 'Если бы WASM+WASI существовал в 2008, мне не пришлось бы создавать Docker'. Edge runtimes: Cloudflare Workers запускает 50M+ WASM инстансов в день. Fermyon Spin: microservices стартуют за <1ms
Почему WASM sandbox лучше Docker контейнера для plugin систем?
Итоги
- **WASM дизайн**: стековая VM, linear memory, 4 числовых типа (MVP). Memory safety через bounds + traps. Portable binary формат
- **Component Model**: WIT типы для межъязыкового взаимодействия. Автогенерированный marshalling для strings/records без ручного копирования памяти
- **WASI**: capability-based access к системным ресурсам. Принцип least privilege. Wasmtime/WasmEdge runtime. Альтернатива Docker для sandboxing
- **Polyglot**: один runtime для C/Rust/Go/Python/Swift. Plugin системы без языковых ограничений. Edge computing без cold start
Связанные темы
WASM пересекается с несколькими областями теории ПЯ:
- JIT компиляция — WASM создан как ответ на непредсказуемость JIT - AOT компиляция с гарантированной скоростью
- Type-safe API — WASM Component Model использует идеи phantom types и branded types для безопасного межъязыкового интерфейса
Вопросы для размышления
- WASM linear memory - один буфер байт. Как Emscripten компилирует C++ с pointer arithmetic и heap allocation в эту модель? Что происходит с malloc?
- WASM GC proposal добавляет managed types (structs, arrays) прямо в WASM. Как это меняет модель: garbage collector в runtime vs язык управляет своей linear memory?
- WASM Component Model решает межъязыковый ABI через WIT типы. Как это соотносится с gRPC (Protobuf) и Cap'n Proto? Где boundary между IPC протоколом и cross-language calling convention?