План
План разработки включает в себя несколько фаз и несколько этапов.
- Каждая фаза сама по себе преследуют отдельную цель/задачу которая может повторяться.
- Каждый этап включает задачи из различных фаз и для этапа определены сроки/задачи. Этапы не могут повторяться.
Список этапов разработки
| Этап | Фаза | Задача | Результат | Статус | 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 | … |
Источники информации
- Теоритическая база
- Книга - Альфред Ахо, Рави Сети, Джеффри Ульман, Моника Лам “Компиляторы. Принципы, технологии, инструменты”
- Грамматика - Нормальная форма Бэкуса (BNF)
- Абстрактное синтаксическое дерево (AST)
- Машина Тьюринга
- Полнота по Тьюрингу
- Тьюринг-полнота
- Неожиданная полнота по Тьюрингу повсюду
- Проблема остановки
- Алгоритмическая разрешимость
- Задача разрешимости
- Система типов
- Вывод типов
- Просто о Хиндли-Милнере
- JVM Stacks and Stack Frames
- Виртуальная машина Java (Стек)
- Memory Layout of Objects in Java
- Заголовок Java объекта
- ASM
- stackoverflow.com
- Invoke Dynamic
- TCP
