Coder Social home page Coder Social logo

haniyasin / capsule Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 0.0 665 KB

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

License: GNU Affero General Public License v3.0

Shell 0.13% JavaScript 95.29% Vala 0.89% Mathematica 3.05% HTML 0.64%

capsule's Introduction

Предназначение

Набор инструментов и компонентов, позволяющие писать программы на javascript для разных окружений и платформ используя один API без каких-либо нюансов. Важно отметить, что главная цель это действительно единый API, для достижения этой цели зачастую приходится чем-то жертвовать. В этом смысле есть большая разница между capsule и различными кросплатформенными фреймворками типа Qt, которые стараются максимально охватить возможности поддерживаемых платформ.

Что значит единый API?

Изначально capsule создавался как основа для проекта dsa(ныне caravan), цель которого предоставить инструменты для мигрируемых приложений в реальном времени. Поэтому никаких различий между разными платформами для caravan не должно было быть. Эта цель является основной и сейчас. Кому может понадобиться столь экзотическая вещь? Например тому, кто хочет сосредоточится на разработке единого программного комплекса, который бы имел поддержку самых разных устройств, но при этом вся эта поддержка была бы сосредоточена в едином модульном приложении или группе взаимо-интегрированных приложений. Звучит сложно? Попробую по-проще. Сейчас, для того чтобы иметь одно и тоже приложение на смартфоне и компьютере надо сделать три вещи:

  • написать основное приложение backend, которое реализует б’ольшую часть логики и предоставит API
  • написать десктопное клиентское приложение, используя backend API
  • написать приложение для смартфона, используя backend API

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

Native или не native

Быть максимально легковесной и native - это цель номер 2 Вот здесь capsule занимает своё место, специфическое. Мы пытаемся сделать так, чтобы не дублировать возможности поддерживаемой платформы настолько, насколько это возможно при создании единого API. Например мы используем разные media фреймворки в зависимости от платформы, смотря что доступно и что уже предустановлено. Но самое главное: стараемся максимально использовать возможности самих платформ для наших целей. Следующий пример, как мне кажется, всё прояснит: Для создания ui мы используем родные(если они есть) window, surfaces,widget,controls и тд платформ. То есть кнопка будет input в web, Gtk.Button в gjs, winapi button на windows и тд. Frame будет div в web, Clutter.Actor в gjs, window в windows. Тоже касается и других объектов, например animation в gjs использует встроенные возможности Clutter для создания анимаций. Конечно, чтобы создать единый API приходится всё таки делать обвязку и реализовывать что-то самим, но это необходимый минимум. Главный результат - это максимальная производительность, сопоставимая с интерфейсами, созданными родными средствами, потому как наши интерфейсы и создаются родными средствами. Подобная производительность и отзывчивость недостижима многими кросплатформенными фреймворками и я уж не говорю про javascript фреймворки, которые зачастую стараются просто использовать web для отрисовки интерфейса на всех устройствах.

Javascript, ну почему?

Причины две:

  • он динамический, подходит для распространения программ прямо с данными, то есть живой миграции
  • есть почти везде так или иначе. По этому пункту есть два конкурента: С и Java. С не подходит потому, что он не динамический и абстракции на нём выглядят некрасиво. Java также не динамична и увы, есть сегодня на меньшем числе платформ которые нас интересуют, чем javascript(например её нет в браузерах, по крайней мере если не захватить с собой компилятор:))

capsule's People

Contributors

freezedu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.