Skip to content

Latest commit

 

History

History
150 lines (94 loc) · 17.5 KB

README_ru.md

File metadata and controls

150 lines (94 loc) · 17.5 KB

English | Русский

lsFusion

Бесплатная открытая платформа разработки информационных систем на основе одноименного языка пятого поколения.

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

Основные возможности

  • Один язык работы с данными

    В платформе отсутствует объектно-реляционный семантический разрыв - когда разработчику приходится постоянно выбирать между "быстрыми" SQL-запросами и кодом на "удобном" императивном языке. И тот и другой подход абстрагированы и объединены настолько, что грань между ними практически отсутствует. Разработчик всегда работает с данными в одной парадигме, а за то, как и где вся эта работа будет выполняться, полностью отвечает сама платформа.

  • No ORM, Yes SQL

    Если некоторое действие предполагает обработку данных сразу для множества объектов, платформа пытается по возможности выполнить эту обработку на сервере БД одним запросом (то есть сразу для всех объектов). Все формируемые запросы при этом максимально оптимизируются с учетом особенностей используемого сервера БД.

  • Абсолютная реактивность

    Все вычисляемые данные автоматически обновляются при изменении данных, которые они используют. Это правило действует всегда и везде - как при отображении интерактивных форм, так и просто при обращении к данным внутри выполняемого действия.

  • Динамическая физическая модель

    Платформа позволяет в любой момент материализовать любой из существующих показателей в системе, добавить новые или удалить существующие таблицы, а также изменить расположение материализованных показателей в этих таблицах.

  • Ограничения любых данных

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

  • Эффективное общение клиента с сервером

    Общение клиента с сервером на физическом уровне построено таким образом, чтобы минимизировать количество синхронных round-trip обращений (то есть одно действие пользователя - один запрос-ответ, по возможности асинхронный). Помимо этого в десктоп-клиенте все передаваемые данные архивируются и, при необходимости, шифруются. Также, при общении клиента с сервером (как десктоп-клиента через TCP/IP протокол, так и веб-клиента через HTTP протокол), в платформе обеспечивается гарантия доставки, то есть в случае если какие-то запросы теряются, платформа посылает их повторно, причем с гарантией того, что они будут обработаны в правильном порядке. Все вышеперечисленное позволяет платформе эффективно функционировать даже на узких и ненадежных каналах связи, а также каналах связи с большим временем отклика.

  • Трехзвенная архитектура

    Платформа построена таким образом, что императивная часть логики системы (все что связано с изменением данных) выполняется на серверах приложений, а декларативная (все что связано с вычислением данных) - на серверах БД. Такое разделение упрощает масштабирование разрабатываемой системы, а также в силу разного характера нагрузки на эти сервера повышает ее отказоустойчивость (к примеру, использование swap на сервере приложений гораздо опасней, чем его же использование на сервере БД)

  • Everything as code

    Все элементы системы, от событий до дизайна форм, задаются в виде кода на языке lsFusion, хранящегося в обычных текстовых файлах (без каких-либо общих репозитариев с неизвестной структурой). Это позволяет использовать при работе с проектами популярные системы контроля версий (Git, Subversion) и сборки проектов (Maven, встроенные в IDE). Кроме того, такой подход упрощает процесс поддержки / развертывания разработанной системы, так как позволяет, во-первых, при помощи обычного текстового редактора просматривать, и, при необходимости, оперативно изменять логику, а, во-вторых, легко идентифицировать любой элемент в системе, по его файлу и номеру строки в этом файле.

  • Язык программирования lsFusion

    • Полиморфизм и агрегации

      Поддержка механизмов наследования (в том числе множественного) и полиморфизма (опять-таки, в том числе множественного). Если механизма наследования по каким либо причинам недостаточно, в платформе также существует механизм агрегаций, который вместе с наследованием позволяет реализовать практически любую полиморфную логику.

    • Модульность и расширения

      Техника расширений позволяет разработчику расширять в одном модуле функционал другого модуля (например, изменять формы или классы созданные в другом модуле). Использование этого механизма позволяет значительно повысить модульность создаваемых решений.

    • Метапрограммирование

      Хотите создать свой высокоуровневый оператор или просто не знаете как обобщить логику, но хотите использовать ее повторно? В платформе реализована полная поддержка автоматической генерации кода, причем как со стороны сервера, так и со стороны IDE.

    • Пространства имен

    • Интеграция с Java и SQL

    • Интернационализация

  • Эргономичная IDE

    IDE на базе Intellij IDEA с полным арсеналом разработчика - поиск использований, подсветка кода / ошибок, умное автодополнение, переход к объявлению, структура класса, переименование элементов, дерево использований, брейкпоинты изменения данных, отладчик и множество других возможностей.

  • Развитые средства администрирования

    Платформа предоставляет целый набор инструментов администрирования уже работающей системы: интерпретатор - выполняет код на языке lsFusion, монитор процессов - получает информацию о текущих процессах с различной информацией о них (например, время начала вызова, стек, пользователь и т.п.), планировщик - выполняет действия в заданные моменты времени (в том числе периодически), профайлер - замеряет производительность всех выполняемых действий для всех / заданных пользователей (строит граф вызовов, разделение времени между сервером приложений и сервером БД и т.п.), чат - для оповещения / общения с пользователями внутри системы, а также многочисленные журналы и логи (подключений, ошибок и т.п.)

Более полный список возможностей можно найти на веб-сайте.

Установка

См. https://docs.lsfusion.org/ru/Install/

Примеры кода

  • Турнирная таблица

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

    При помощи этого примера можно получить представление, как быстро разрабатывать "Excel-style" приложения, в которых данные на формах доступны для редактирования, и при любом их изменении все зависимые данные на форме обновляются инкрементно.

  • Управление материальными потоками

    Пример создания простого бизнес-приложения по управлению складом. В нем пользователь может фиксировать документы приходов и расходов, а также получать остатки по товарам.

    В данном примере показан способ создания приложения по обработке документов, в которых есть шапка и строки. Все формы созданы по "Dialog style" принципу. В таком подходе для каждого объекта в системе создается форма с их списком, в которой доступны для редактирования только кнопки по созданию, редактированию и удалению объектов. При нажатии соответствующей кнопки открывается отдельная диалоговая форма, при помощи которой пользователь добавляет новый или редактирует существующий объект.

  • How-To

    Раздел документации How-to содержит примеры типовых задач, разбитые по категориям.

Попробовать онлайн

Существует возможность выполнять код на языке lsfusion онлайн.

Демонстрационные примеры

Ссылки

Обратная связь

Лицензия

Платформа выпускается под лицензией LGPL v3, позволяющей свободно использовать, распространять, а также модифицировать платформу под свои нужды.