Установка на 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 не нужны.
Установка#
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, …), поэтому проще снять метку один раз.
Проверка и первая программа#
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.dSYMoxl 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. Удаление:
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, если задан)