##Живое программирование

В рамках **«Крестьянство» SDK** разрабатывается **программная среда**, которая может быть интегрирована в любое существующее интернет-приложение.  
Эта среда позволяет добавлять **функции**:
* **живого программирования** (Live Coding)
* **средства создания пользователем собственных предметных языков** (Domain Specific Languages)
* **поддержку распределенных вычислений** (Distributed Computing) и **виртуального времени** (Virtual Time) на объектах интернет-приложения

Если раньше единицей сети интернет являлся **сайт**, статический или динамический с декларативным описанием содержания в виде **гипертекста HTML**, то теперь сеть интернет строится из **множества приложений**, работающих как на стороне сервера, так и стороне клиента. Взаимодействие приложений между собой осуществляется с использованием **клиент-серверной архитектуры** или пиринговой **сети точка-точка**. Приложения создаются с использованием общих языков программирования (например Clojure, Ruby, Java Script). Но если в свое время, язык гипертекста HTML был расширен до языка **XHTML (XML)**, что позволило клиенту определять собственный декларативный язык разметки содержания, то сейчас по аналогии требуется уже расширять язык программирования, на котором написано само приложение. То есть, дать возможность клиенту/серверу/узлу **создавать собственные языки предметной области** (Domain Specific Languages) функционирующие на объектах запущенного приложения в интернет **в реальном времени**, с функциями **живого программирования** (Live Coding). Это значит, что к интернет-приложению, которое должно работать не выключаясь 24/7 могут быть добавлены, протестированы, открыты для пользования новые функции, запрограммированные клиентом или разработчиком на им же созданном языке предметной области. Одновременно с этим, существующие интернет-приложения в своем большинстве используют различные **сетевые библиотеки** (например Meteor.JS) для обеспечения функций сетевого взаимодействия между собой (Collaboration). При этом объекты интернет-приложения остаются фундаментально не готовыми ни к **распределенным вычислениям**, ни к **масштабированию сети**. Интеграция **технологий виртуального времени** и **виртуальных миров** позволят с легкостью **трансформировать** существующие объекты интернет-приложений в готовые к **распределенным вычислениям**.

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

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

---

В октябре **2014** г. **прототип проекта** участвовал в международном конкурсе и был отобран для представления на **крупнейшей международной конференции по программированию SPLASH 2014, Портленд (Орегон, США)** на закрытом семинаре [**“Будущее программирования”**](http://www.future-programming.org/2014/index.html). 
Всего для участия в семинаре было отобрано двенадцать человек. Рецензентами выступили: [**Richard P. Gabriel**](https://en.wikipedia.org/wiki/Richard_P._Gabriel) - один из создателей языка программирования Lisp, **Avi Bryant** - создатель динамической среды интернет-приложений Seaside на языке Smalltalk, которая явилась прототипом среды Ruby On Rails,  **Yoshiki Ohshima** - ведущий исследователь Viewpoints Research Institute под руководством [**Алана Кэя**](https://ru.wikipedia.org/wiki/Кэй,_Алан_Кёртис),  **Alessandro Warth** - разработчик языка OMeta (Communications Design Group SAP Labs) и др. [программный коммитет конференции](http://www.future-programming.org/2014/call.html).
**Название работы**: **"Инструментарий виртуальных миров и OMeta: совместное программирование распределенных объектов с помощью создаваемых пользователем языков / Virtual World Framework & OMeta: collaborative programming of distributed objects with user defined languages”**.

В июле **2015** г прототип проекта был представлен на **первой международной конференции по живому программированию ICLC'15** университет г. Лидс, Великобритания, 13 - 15 июля 2015 г. Доклад и публикация: **"От живого программирования к виртуальному бытию / From Live Coding to Virtual Being”**. Программный комитет конференции включал ведущих специалистов в области живого программирования в мире: http://iclc.livecodenetwork.org/team.html.   
**Ссылка на публикацию**: https://zenodo.org/record/19353#.VZuuP3jfHBc  

В сентябре **2015 г**. прототип проекта был представлен на **пятом европейском образовательном саммите 7 - 10 сентября 2015 г., 5th European Immersive Education Summit (EiED) / IMMERSION'15** (университет Сорбонна, Франция) с докладом и публикацией: **"Живое конформное масштабирование сред полного погружения в контексте систем дополненной реальности и интернета вещей / Live conformal scaling of full-body immersion environments in the case of augmented reality systems and internet of things”.**

---

**Техническое описание прототипа**: 

[**Подробнее на странице проекта**](https://www.krestianstvo.org/books/projects/ru/vwf-ometa/)

Существующий инструментарий виртуальных миров (Virtual World Framework) представляет собой синхронизированную, распределенную среду, работающую внутри Веб браузера. Продолжая исследования, начатые в проекте OpenCroquet и Крестьянство SDK, связанные с понятием виртуального времени (публикация автора: Suslov Nikolai, Krestianstvo SDK Towards End-user Mobile 3D Virtual Learning Environment. In Proceedings of the Conference on Creating, Connecting and Collaborating through Computing (C5) 2012, Institute for Creative Technologies, University of Southern California, Playa Vista, California, USA, January 18-20, 2012, IEEE), данный инструментарий виртуальных миров позволяет легко создавать приложения и предоставляет упрощенный интерфейс для взаимодействия нескольких пользователей с одним состоянием приложения, которое синхронизировано у всех участников соединения. Приложение, созданное с использованием инструментария виртуальных миров, состоит из компонентов, которые запрограммированы на языке JavaScript, что позволяет разделенному коду, обеспечивающему распределенные вычисления, модифицироваться непосредственно во время работы приложения. OMeta - это новый объектно-ориентированный язык программирования сопоставлений с образцами. Он базируется на варианте (PEGs) грамматик, разбирающих выражения, которые были расширены до поддержки обработки произвольных типов данных (не только строк). Общие функции OMeta по сопоставлению с образцом обеспечивают естественный и удобный способ для реализации анализаторов, посетителей, трансформаторов деревьев и т.д.  
Представляемое прототипом объединение позволяет определить на любом компоненте инструментария виртуальных миров свою собственную грамматику языка и реплицировать ее всем экземплярам приложения. Затем, уже запускать скрипты (программы), использующие эту грамматику для этого же компонента. Например, можно реализовать все возможные языки, начиная с “Logo" или “Lisp” до языка программирования Smalltalk, сделав их доступными для программирования компонентов виртуального мира непосредственно в Веб браузере.
Все объекты могут сосуществовать друг с другом в одном реплицируемом виртуальном мире. И будучи запрограммированными на разных языках, объекты участвуют в вычислениях, поддерживаемых одну общую симуляцию или модель.