Анонсирован язык программирования Moonbit, оптимизированный для WebAssembly

Хунбо Чжан (Hongbo Zhang), основной разработчик языка программирования ReScript, также участвовавший в разработке языков OCaml и Flow, представил новый язык программирования Moonbit, специально оптимизированный для создания приложений, компилируемых в универсальный промежуточный код WebAssembly. Ключевыми целями разработки названы предоставление простого синтаксиса, высокая скорость компиляции, генерация компактного и быстрого промежуточного кода WebAssembly. Предоставляется несколько бэкендов для генерации кода, среди которых имеются бэкенды для JavaScript и нативного кода.

Необходимость создания нового языка объясняется тем, что разработка приложений для WebAssembly на низкоуровневых языках, таких как C++ и Rust, сопряжена со сложностью изучения и замедлением разработки из-за длительной компиляции. Высокоуровневые языки, такие как Go, проще для изучения и написания программ, но отстают по эффективности и компактности результирующего кода. Разработчики Moonbit попытались объединить лучшие стороны низкоуровневых и высокоуровневых языков, в контексте их использования с технологией WebAssembly.

Для достижения высокой производительности выполнения программ в компиляторе Moonbit задействован многоуровневый промежуточный код (MLIR Multi-Level Intermediate Representation), предоставляющий дополнительные возможности для оптимизаций, учитывающих графы потоков управления и данных, а также позволяющий более эффективно использовать процессорный кэш. Применение MLIR также даёт возможность проводить оптимизацию и исключать избыточный конструкции на более высоком уровне, учитывающем структуру программы.


Для достижения высокой скорости сборки и улучшения интеграции со средами разработки, Moonbit поддерживает распараллеливание операций во время компиляции, выполняет анализ семантики на уровне отдельных функций и может использовать инкрементальную пересборку только изменившегося кода. Для минимизации размера генерируемого кода в языке Moonbit изначально не поддерживаются конструкции, которые могут мешать выявлению и удалению неиспользуемого кода, а структура стандартной библиотеки оптимизирована для включения только кода, востребованного в приложении.


Язык поддерживает несколько парадигм программирования, включая элементы объектно-ориентированного и функционального программирования, простую систему типов и архитектуру, ориентированную на обработку данных. Синтаксис Moonbit разработан с оглядкой на простоту языка Go и некоторые расширенные возможности Rust, такие как поддержка сопоставления с образцом, вывода типов, дженериков и специализированного полиморфизма (подобие типажей). Для упрощения разработки в Moonbit, как и в языке Go, используется автоматическое управление памятью и рекурсивные замыкания. При этом в отличие от языка Go, в Moonbit изначально не поддерживаются потенциально опасные элементы, такие как указатели.


Проектом развивается полноценная платформа разработки, включающая компилятор, сборочный инструментарий, пакетный менеджер и интегрированная среда разработки, доступ к которой осуществляется через web-браузер (поддерживается как работа в облаке, так и запуск в offline-режиме). Также доступен плагин для редактора кода VSCode. В настоящее время проект находится на начальной стадии альфа-тестирования, на которой доступны только бинарные сборки компилятора и online-окружение для проведения экспериментов. Заявлено, что исходные тексты развиваемого проектом компилятора и инструментарий будут открыты после готовности первой бета-версии, выпуск которой ожидается в середине следующего года.

Release. Ссылка here.