[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