Stappler SDK - набор инструментов для разработки современных кроссплатформенных приложений:
- Высокопроизводительная графика и вычисления на Vulkan
- Доступ к базам данных на клиенте и сервере
- Приложение и вебсервер для него на одном языке с разделяемыми компонентами
- Скриптовая машина на WebAssembly (и любом языке, компилируемом в него)
- Только необходимый минимум зависимостей
- Linux - x86_64, arm64, e2k
- Android - все платформы, не требует Google Services
- Windows - x86_64
- MacOS - в разработке
- iOS - в разработке
SDK позволяет создавать полнофункциональные оконные приложения для всех систем. Графическая система основана на Vulkan.
- Графика с использованием векторных элементов и иконок - чёткая при любой плотности пикселей
- Полнофункциональная типографика с поддержкой Rich Text и отображения HTML
- Виджеты на основе Material Design
- Быстрая и отзывчивая система анимаций
- Экономия энергии устройств за счёт отрисовки по необходимости
Работает поверх PostgreSQL или SQLite на клиенте и сервере
- Локальный firebase-подобный объектный интерфейс
- Вычислимые, автоматические, виртуальные поля, триггеры изменений
- Полнотекстовый поиск из коробки
- Принудительный контроль доступа
Построен поверх Apache HTTPD, в виде подключаемого модуля
- Автоматические интерфейсы для доступа к данным
- Поддержка WebSocket
- Асинхронные задачи, работа в фоновом режиме
Использует wit-bindgen для поддержки гостевых языков и интерпретатор WAMR.
- Поддержка любого языка из доступного для wit-bindgen или другого генератора биндингов на основе WIT
- Поддержка скомпилированных под платформу бинарных файлов (скрипты без потери в скорости)
- Возможность отладки WebAssembly кода
Подробнее на странице установка и запуск
- Make 4.0+ (gmake для MacOS)
- GCC 11+ или Clang 14+ (16+ для Windows), lcc 1.26+ для e2k (рекомендуется 1.28+)
PostgreSQL или PostgresPro версии от 12. SQLite входит в поставку Stappler SDK.
- Заголовки Vulkan в системе или Vulkan SDK (Переменная
VULKAN_SDK_PREFIX
) - glslangValidator (входит в Vulkan SDK или пакет glslang/glslang-tools, переменная
GLSLC
) - spirv-link (входит в Vulkan SDK или пакет spirv-tools, переменная
SPIRV_LINK
)
- WASI SDK (
WASI_SDK ?= /opt/wasi-sdk
) - wit-bindgen, возможна установка из cargo:
cargo install wit-bindgen-cli
(WIT_BINDGEN ?= wit-bindgen
)
- Apache HTTPD
- Заголовки в системе (
APACHE_HTTPD_INCLUDE ?= /usr/local/include/apache
)
Быстрая установка для Linux (на apt):
sudo apt-get install git make gcc g++
git clone [email protected]:libstappler/libstappler-root.git
cd libstappler-root
git submodule update --init
Запуск первого примера
cd examples/commandline
make && make install
stappler-build/host/genpasswd
См. полное руководство по установке для всех платформ
Также, см. обучающие примеры и примеры использования.
Структура приложения:
- Makefile - корневой Mekafile проекта
- main.cpp - точка входа
- src - директория с исходными кодами
# Путь к SDK
STAPPLER_ROOT ?= <путь к libstappler-root>
# Указание перестаривать проект, если этот файл изменился
LOCAL_MAKEFILE := $(lastword $(MAKEFILE_LIST))
# Название исполняемого файла
LOCAL_EXECUTABLE := helloworld
# Пути к наборам модулей
LOCAL_MODULES_PATHS = \
$(STAPPLER_ROOT)/core/stappler-modules.mk
# Используемые модули
LOCAL_MODULES := \
stappler_brotli_lib \
stappler_data
# Пути к исходным кодам
LOCAL_SRCS_DIRS := src
LOCAL_INCLUDES_DIRS := src
# Файл исходного кода, содержащий функцию main
LOCAL_MAIN := main.cpp
# Подключения системы сборки
include $(STAPPLER_ROOT)/build/make/universal.mk
// Для функций чтения командной строки
#include "SPData.h"
namespace stappler::app {
// Выбираем стандартную подсистему памяти для текущего пространства имён
using namespace mem_std;
// Строка при запросе помощи по команде
static constexpr auto HELP_STRING(
R"HelpString(helloworld <options> - my first program
Options are one of:
-h (--help))HelpString");
// Разбор коротких переключателей (-h, -v)
static int parseOptionSwitch(Value &ret, char c, const char *str) {
if (c == 'h') {
ret.setBool(true, "help");
}
// прочитан только один символ
return 1;
}
// Разбор строковых переключателей (--help, -verbose)
static int parseOptionString(Value &ret, const StringView &str, int argc, const char * argv[]) {
if (str == "help") {
ret.setBool(true, "help");
}
// прочитан один параметр
return 1;
}
SP_EXTERN_C int main(int argc, const char *argv[]) {
// читаем параметры командной строки
// возвращает дополнительные параметры и список основных аргументов
Pair<Value, Vector<String>> opts = data::parseCommandLineOptions<Interface, Value>(
argc, argv, &parseOptionSwitch, &parseOptionString);
// проверяем, запрошена ли помощь
if (opts.first.getBool("help")) {
std::cout << HELP_STRING << "\n";
return 0;
}
// выполняем в контексте временного пула памяти
// пример не использует подсистему пулов памяти, но всегда заворачивать выполнение основного
// потока во временный пул памяти - практика, позволяющая избегать ошибок
perform_temporary([&] {
std::cout << "Hello world!" << "\n";
});
return 0;
}
}
- build - файлы системы сборки
- deps - файлы зависимостей
- docs - файлы средств документации и инструментации
- core - базовая библиотека SDK
- xenolith - графический движок
- extra - дополнительные библиотеки
- examples - примеры
- tests - тестовые приложения
Основная документация расположена по адресу https://docs.stappler.dev/
Рабочая версия руководства по SDK: https://github.com/libstappler/libstappler-doc/tree/master/docs
Email для связи: [email protected]
- Приложение «Финграмотность» в Google Play
- Сервер для сайта «Финансовая грамотность в вузах» (общий с приложением)
- Приложение «Журнал [off]» в Google Play.
- Приложение «АПК Эксперт» в Google Play.
- Сервер для сайта Sold Online
- Сервер для сайта журнала «Клиническая геронтология»
- Пользовательский веб-интерфейс и вычислительная модель симптом-чекера MeDiCase