Теория языков программирования

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?

Связанные уроки

  • fl-18-turing-machine
WebAssembly

0

1

Войти