План разработки включает в себя несколько фаз и несколько этапов.
- Каждая фаза сама по себе преследуют отдельную цель/задачу которая может повторяться.
- Каждый этап включает задачи из различных фаз и для этапа определены сроки/задачи. Этапы не могут повторяться.
Этап | Фаза | Задача | Результат | Статус | 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 | тесты и отчеты о работе с памятью | Реализованно для этапа 2 | |
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 | Реализованно | 86e640d |
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 | ... |
- цель: масштабирование меж-языковых средств, за пределы 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