OxL Справочник OxL
РусскийEnglish

Установка на macOS

Версия 1.0.0-beta для macOS — архив oxl-1.0.0-beta-macos-arm64.tar.xz на странице релиза (рядом лежит файл контрольной суммы oxl-1.0.0-beta-macos-arm64.tar.xz.sha256). Состав тот же, что у архива для Linux (см. установка из архива), кроме того, что относится к Linux.

Что внутри (те же проверки делает scripts/test_release.sh над архивом): bin/oxl и bin/oxl-docs, вложенные libLLVM.dylib и libclang.dylib с заголовками ресурсов clang для import c (lib/oxl/lib, lib/oxl/clang), стандартная библиотека, liboxlrt.a и статические библиотеки, которые ей нужны (OpenSSL, nghttp2, SQLite, PCRE2, libpq в lib/oxl/runtime/lib, в lib/oxl/runtime/link.flags они названы относительными путями), сайт документации, расширение VS Code и лицензии; PDF — отдельные файлы релиза. Все четыре Mach-O-файла — arm64, собраны под macOS 14.0, подписаны ad hoc и зависят только друг от друга и от системных библиотек (/usr/lib, /System). Программы, которые собирает oxl build, зависят только от libSystem/libc++.

Требования#

  • Mac с чипом Apple (arm64), macOS 14 или новее (релиз собран под MACOSX_DEPLOYMENT_TARGET=14.0).
  • Xcode Command Line Tools: xcode-select --install (компоновщик, SDK, dsymutil, codesign, lldb-dap). Полный Xcode и Homebrew не нужны.

Установка#

sh
xcode-select --install                             # один раз; если инструменты уже стоят, команда сообщит об этом

mkdir -p ~/Downloads/oxl-dl && cd ~/Downloads/oxl-dl
curl -LO https://github.com/DesCaldnd/OxwaldLink/releases/download/v1.0.0-beta/oxl-1.0.0-beta-macos-arm64.tar.xz
curl -LO https://github.com/DesCaldnd/OxwaldLink/releases/download/v1.0.0-beta/oxl-1.0.0-beta-macos-arm64.tar.xz.sha256
shasum -a 256 -c oxl-1.0.0-beta-macos-arm64.tar.xz.sha256       # oxl-1.0.0-beta-macos-arm64.tar.xz: OK

mkdir -p ~/opt && tar -C ~/opt -xJf oxl-1.0.0-beta-macos-arm64.tar.xz          # sudo не нужен
xattr -dr com.apple.quarantine ~/opt/oxl-1.0.0-beta                            # зачем — ниже

echo 'export PATH="$HOME/opt/oxl-1.0.0-beta/bin:$PATH"' >> ~/.zprofile         # zsh — оболочка по умолчанию
export PATH="$HOME/opt/oxl-1.0.0-beta/bin:$PATH"                               # для текущего окна
oxl --version

Установку можно положить и в другой каталог (например /usr/local/oxl-1.0.0-beta с sudo): oxl находит стандартную библиотеку и рантайм рядом с собой. Для bash вместо ~/.zprofile — ~/.bash_profile.

Почему xattr: подпись ad hoc и нотаризация#

Исполняемые файлы и библиотеки архива подписаны ad hoc (codesign -s -): подпись нужна, чтобы код arm64 вообще запускался, но она не связана с учётной записью разработчика. Архив не нотаризован Apple. Файл, скачанный браузером, получает атрибут com.apple.quarantine, и Gatekeeper отказывается запускать ненотаризованные программы («невозможно проверить разработчика», «повреждён»). xattr -dr com.apple.quarantine <каталог> снимает метку со всего распакованного дерева; перед этим сверьте контрольную сумму (shasum), чтобы убедиться, что архив — тот, что выложен в релизе. Скачанный curl-ом архив обычно метки не получает, и команда в этом случае безвредна. Если архив получен браузером, метка стоит на архиве, и tar копирует её на каждый распакованный файл: либо выполните xattr -d com.apple.quarantine oxl-1.0.0-beta-macos-arm64.tar.xz до распаковки, либо xattr -dr для дерева, как выше. Делайте это до первого запуска oxl: запуск под карантином блокирует Gatekeeper (диалог или команда просто ждёт), и файлы, заблокированные один раз, могут остаться заблокированными и после снятия метки: в этом случае распакуйте архив заново. Программы, которые собирает oxl build, подписываются на вашей машине (ad hoc) и под карантин не попадают. Если пропустили xattr, разрешить запуск можно в «Системные настройки → Конфиденциальность и безопасность», но придётся подтверждать каждый файл (oxl, libLLVM.dylib, …), поэтому проще снять метку один раз.

Проверка и первая программа#

sh
oxl --version                                      # oxl 1.0.0-beta (edition 2027, …)
mkdir -p ~/oxl-smoke && cd ~/oxl-smoke
oxl doctor                                         # проверка всего окружения, см. ниже
oxl new hello && cd hello && oxl run               # Hello, world!
oxl build -o hello-bin && ls -d hello-bin hello-bin.dSYM

oxl build кладёт рядом с программой <имя>.dSYM с отладочной информацией (для lldb); остальные проверки — проверка установки. Первый запуск только что собранной программы может занять несколько секунд (система проверяет новый файл с подписью ad hoc), последующие — миллисекунды (D-8688). Если что-то не работает, выполните oxl doctor. На macOS он проверяет Command Line Tools (xcode-select -p), dsymutil, метку com.apple.quarantine на установленных файлах (строка fail с командой xattr -dr com.apple.quarantine <каталог>; копию, которую macOS уже один раз заблокировала, нужно распаковать заново, см. выше), подпись oxl (codesign --verify), разрешение Developer Tools и пределы (ulimit -n, длина TMPDIR), а также собирает и запускает hello world (проверка установки). Если oxl build пишет linking failed или xcrun: error, не установлены Command Line Tools. Различия платформы (kqueue, надёжность записи OXL_FULLFSYNC, --static, --image) — платформы.

Надёжность записи (для узлов с данными)#

fsync в macOS не сбрасывает кэш накопителя, поэтому по умолчанию (как у SQLite и PostgreSQL на macOS) подтверждённая запись хранилища и журнала Raft переживает падение программы и перезагрузку macOS, но может пропасть при внезапной потере питания. Если данные должны её пережить, запускайте программу с OXL_FULLFSYNC=1 (export OXL_FULLFSYNC=1): запись пойдёт через F_FULLFSYNC, примерно 4 мс на сброс на внутреннем SSD (параллельные записи объединяются). Для разработки и тестов оставьте значение по умолчанию. Подробности — платформы, приложение D Стандарта (impl-fsync).

Отладка#

oxl dap, oxl debug и oxl test --debug работают через lldb-dap. Он входит в Xcode Command Line Tools или в Homebrew llvm (brew install llvm; версия не обязана быть 18). oxl ищет адаптер в PATH, затем в каталогах Command Line Tools, Xcode и Homebrew; явный путь — OXL_LLDB_DAP=/opt/homebrew/opt/llvm/bin/lldb-dap или oxl dap --lldb-dap <путь>. Программа и её .dSYM должны лежать вместе (lldb находит отладочную информацию по UUID). Остановка всех потоков и удалённая отладка узла (oxl debug attach, --all-stop) подключают lldb-dap к процессу узла через debugserver Apple.

Для процессов того же пользователя (то, что создаёт oxl build) права администратора не нужны. При первом подключении к процессу macOS может запросить разрешение «Developer Tools Access needs to take control of another process»: подтвердите его своим паролем; то же делает один раз sudo DevToolsSecurity -enable. Нужно также состоять в группе _developer (администраторы состоят). Если отладчик пишет, что не может подключиться к процессу, проверьте это и то, что программа собрана oxl build (ad hoc, без hardened runtime). Настройка редакторов — отладка из редактора.

Обновление и удаление#

Каждая версия лежит в своём каталоге oxl-<версия>: распакуйте новую рядом и переключите PATH. Удаление:

sh
rm -rf ~/opt/oxl-1.0.0-beta                        # сама установка
# удалите строку export PATH=... из ~/.zprofile
code --uninstall-extension oxwaldlink.oxl-lang     # если ставили расширение VS Code
rm -rf ~/.cache/oxl                                # необязательно: кэш сборки и пакетов ($OXL_HOME, если задан)
OxL 1.0.0-beta · Версия документации 1.0.0-beta© OxwaldLink · сгенерировано из Стандарта, исходников std и руководства