[jvm] Начинаем обсуждать план

Maxim Karpov me at makkarpov.ru
Tue Mar 13 21:31:14 MSK 2018


Перед нами стоят_ глобальных задач, которые можно (нужно) разбить на 
более локальные:

1. Нужна система сборки, которая будет способна собирать как Java-код, 
так и C++-библиотеку (попутно вызывая javah для генерации хедеров из 
классов). Эту часть я думаю взять себе в первую неделю и сделать её на 
базе Gradle.

2. При интеграции unmanaged языка с языком с управлением памятью 
неизбежно встает вопрос о времени жизни объектов. QBE, к счастью, 
управления памяти не имеет вообще, предоставляя нам одну функцию 
freeall(), которую и надо будет пробросить в Java. Попутно нужно будет, 
во-первых, пройтись по всем существующим объектам и убрать из них 
глобальную ссылку на Java-объект, иначе она так и останется висеть, а 
во-вторых, пройтись по всем Java-объектам и инвалидировать их, чтобы 
предотвратить случайное обращение по уже освобожденному указателю.

3. В файле all.h куча всяких разных констант --- опкоды, условные 
переходы, куча анонимных enum-ов и т.д. Все они должны быть доступны из 
Java, но переносить их руками --- плохой путь. Нужно сделать это 
автоматически --- извлечь все имена констант, распарсив all.h, и 
сгенерировать соответствующий Java-класс и .h файл для натива.

4. Все функции, ответственные за текстовый ввод-вывод, принимают в 
качестве аргумента `FILE*`. Это плохо и ограничивает область применения, 
собственно, файлами. Нужно пропатчить QBE так, чтобы он поддерживал 
чтение из произвольных потоков.

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

6. Все это надо будет протестировать. В качестве тестов, наверное, могут 
сойти домашние задания лекций, реализованные в виде Java-кода.

Зависимости задач: 1 и 4 не зависят ни от чего, 2 зависит от 4 (т.к. 
нужны "деструкторы" всех структур), 3 зависит от 1 (это модификация 
билд-системы), 5 зависит от 1 и 4, тесты зависят от всех задач, кроме себя.

Хорошо паралеллизуются тут задачи 4 (3 места, где эта проблема 
возникает), 5 и 6.

Соответственно, выводы из всего этого:

1. На первую неделю хорошо ложатся задачи 1 и 4, я делаю билд, остальные 
патчат FILE* в разных частях QBE.

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

3. Дальше, наверное, можно занять задачами 2 и 3. Наверное, они 
достаточно объемные, чтобы выделить на них два человека.

4. После этого все пишут тесты к получившейся реализации и фиксят то, 
что вылезло в процессе тестирования.


More information about the jvm mailing list