План

План разработки включает в себя несколько фаз и несколько этапов.

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

Список этапов разработки

Этап Фаза Задача Результат Статус git commit
1 начальная Описание модели байт кода JVM Набор классов Реализованно для JVM 11 66e9c14
1 начальная Получение байт-кода лямбды сериализованное представление Реализованно для JVM 11 66e9c14
1 начальная генерация класса JVM для сериализованного представления рабочий вызов для сериализованного представления Реализованно для JVM 11 66e9c14
1 начальная Поддержка внешних переменных в лямбде - замыкания рабочий вызов для сериализованного представления Реализованно для JVM 11 66e9c14
1 начальная Поддержка JVM 11 Библиотека работающая JVM 11 Реализованно для JVM 11 66e9c14
1 начальная Разработка протокола передачи Рабочий API Реализованно для JVM 11 66e9c14
1 начальная Передача байт кода по сети Рабочий API Реализованно для JVM 11 66e9c14
1 начальная Начальная версия Опубликованная версия в maven В процессе
2 безопасность Информации об используемых типах в лямбде Автоматический отчет о используемых типах Частично реализовано abce53e
2 безопасность Информации об используемых методах в лямбде Автоматический отчет о используемых методах Реализовано контроль вызовов и работы со свойствами abce53e
2 безопасность Информации об используемых полях в лямбде Автоматический отчет о используемых полях Реализовано контроль вызовов и работы со свойствами abce53e
2 безопасность Рефакторинг Обновленная документация Реализовано abce53e
2 безопасность API для фильтров о типах,методах,полях Рабочий API Реализовано контроль вызовов и работы со свойствами abce53e
2 безопасность Смена версии Опубликованная версия в maven В процессе
3 стабилизация Устранение memory leak тесты и отчеты о работе с памятью В процессе
3 стабилизация Повышение performance тесты и отчеты о задержках Не начато
3 стабилизация Повышение thread safety тесты на нарушение конкуренции Не начато
3 стабилизация Рефакторинг Обновленная документация Не начато
3 стабилизация Смена версии Опубликованная версия в maven Не начато
4 масштабирование Поддержка JVM 8 Библиотека работающая JVM 8 Не начато
4 масштабирование Поддержка Scala Библиотека работающая для программ написанных на Scala Не начато
4 масштабирование Поддержка Kotlin Библиотека работающая для программ написанных на Kotlin Не начато
4 масштабирование Рефакторинг Обновленная документация Не начато
4 масштабирование Смена версии Опубликованная версия в maven Не начато
5 сеть Поддержка множественных сервисов в пределах одного сетевого соединения Рабочий API Не начато
5 сеть Поддержка двунаправленного обмена данных Рабочий API Не начато
5 сеть Поддержка шифрования сетевого уровня Рабочий API Не начато
5 сеть Рефакторинг Обновленная документация Не начато
5 сеть Смена версии Опубликованная версия в maven Не начато
6 мониторинг Модификация байт кода с целью профилирования Рабочий API Не начато
6 мониторинг Модификация байт кода с целью остановки кода Рабочий API Не начато
6 мониторинг Рефакторинг Обновленная документация Не начато
6 мониторинг Смена версии Опубликованная версия в maven Не начато
7 де компиляция Парсинг AST Представление человеко-читабельного кода из байт кода Не начато
7 де компиляция Генерация байт кода из AST, без поддержки проверки типов Рабочий API Не начато
7 де компиляция Рефакторинг Обновленная документация Не начато
7 де компиляция Смена версии Опубликованная версия в maven Не начато

Список фаз разработки

Фаза - начальная

  • цикличность: зависит от уровня поддержки байт кода (фаза 1 - задача: Описание модели байт кода JVM)
  • последовательность: задачи внутри фазы могут следовать хаотично, кроме смены версии.
Задача Результат Статус
Изучение тематических источников информации Рабочая идея В процессе
Описание модели байт кода JVM Набор классов Реализованно для JVM 11
Получение байт-кода лямбды сериализованное представление Реализованно для JVM 11
генерация класса JVM для сериализованного представления рабочий вызов для сериализованного представления Реализованно для JVM 11
Поддержка внешних переменных в лямбде - замыкания рабочий вызов для сериализованного представления с внешними данными Реализованно для JVM 11
Поддержка JVM 11 Библиотека работающая JVM 11 Реализованно для JVM 11
Разработка протокола передачи Рабочий API Реализованно для JVM 11
Передача байт кода по сети Рабочий API Реализованно для JVM 11
Начальная версия Опубликованная версия в maven В процессе

Фаза - стабилизация разработки

  • цель: устранить не функциональные не достатки (утечки памяти, низкая производительность)
  • цикличность: данная фаза может повторяться после любой фазы, если есть такая потребность
  • последовательность: задачи внутри фазы могут следовать хаотично, кроме смены версии.
Задача Результат Статус
Устранение memory leak тесты и отчеты о работе с памятью В процессе
Повышение performance тесты и отчеты о задержках
Повышение thread safety тесты на нарушение конкуренции
Рефакторинг Обновленная документация
Смена версии Опубликованная версия в maven

Фаза - безопасность

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

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

Задача Результат Статус
Информации об используемых типах в лямбде Автоматический отчет о используемых типах Частично реализовано
Информации об используемых методах в лямбде Автоматический отчет о используемых методах Реализовано контроль вызовов и работы со свойствами
Информации об используемых полях в лямбде Автоматический отчет о используемых полях Реализовано контроль вызовов и работы со свойствами
API для фильтров о типах,методах,полях Рабочий API Реализовано контроль вызовов и работы со свойствами
Смена версии Опубликованная версия в maven В процессе

Фаза - масштабирование решения

  • цель: охватить большинство решений на java и jvm
  • цикличность: зависит от уровня поддержки байт кода (фаза 1 - задача: Описание модели байт кода JVM)
  • последовательность: задачи внутри фазы могут следовать хаотично, кроме смены версии.

Разные компиляторы Java, Scala, Kotlin и их версии могут генерировать такой байт-код который будет отличаться друг от друга и не поддерживать.

Цель фазы - сделать возможным использовать решения на популярных JVM языках.

Задача Результат Статус
Поддержка Kotlin Библиотека работающая для программ написанных на kotlin
Поддержка Scala Библиотека работающая для программ написанных на Scala
Поддержка JVM 8 Библиотека работающая JVM 8
Рефакторинг после Kotlin, Scala Документация что было, что стало
Смена версии Опубликованная версия в maven

Фаза - развитие сетевого протокола

  • цель: расширение методов работы по сети
  • цикличность: не предполагается
  • последовательность: задачи внутри фазы могут следовать хаотично, кроме смены версии.

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

Задача Результат Статус
Поддержка множественных сервисов в пределах одного сетевого соединения Рабочий API
Поддержка двунаправленного обмена данных Рабочий API
Поддержка шифрования сетевого уровня Рабочий API
Рефакторинг Обновленная документация
Смена версии Опубликованная версия в maven

Фаза - мониторинг

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

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

Задача Результат Статус
Модификация байт кода с целью профилирования Рабочий API
Модификация байт кода с целью остановки кода Рабочий API
Рефакторинг Обновленная документация
Смена версии Опубликованная версия в maven

Фаза - де компиляция

  • цель: иметь возможность просматривать в читабельном виде код и его-же компилировать в байт-код
  • цикличность: зависит от уровня поддержки байт кода (фаза 1 - задача: Описание модели байт кода JVM)
  • последовательность: задачи внутри фазы могут следовать хаотично, кроме смены версии.

Формально в сервис передается байт код, из которого нелегко понять его предназначение.

Крайне желательно иметь возможность его декомпилировать и компилировать обратно,

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

Задача Результат Статус
Парсинг AST Представление человеко-читабельного кода из байт кода
Генерация байт кода из AST, без поддержки проверки типов Рабочий API
Рефакторинг Обновленная документация
Смена версии Опубликованная версия в maven

Фаза - трансляция в SQL

  • цель: масштабирование меж-языковых средств, за пределы jvm.
  • цикличность: зависит от уровня поддержки де компиляции
  • последовательность: задачи внутри фазы могут следовать хаотично, кроме смены версии.

Совсем не обязательно, что это может быть SQL, это могут быть другие средства - например MongoDB или REST который работает со сложной структурой входящей/исходящей информации - например IMAP протокол или WebDAV.

Цель выяснить возможность оперировать с тем или иным сетевым сервисом в рамках типа безопасного языка Java / JVM.

Потенциально это может быть другой язык программирования: SQL, JavaScript, C#, Bash/batch, Python, Delphi, …

Задача Результат Статус
Проектирование CRUD операций Набор template классов для работы с SQL таблицами
Проектирование CRUD WHERE фильтров Описание генератора AST
Реализация CRUD WHERE фильтров API Генератора AST
Компиляция AST в SQL запрос Рабочий API для сущностей и SQL WHERE (lambda)
Рефакторинг Обновленная документация
Смена версии Опубликованная версия в maven

Источники информации