Предрекаю, что сразу же после получения широкой популярности, SVM сразу же получит фреймворк вроде Spring Boot :)
Поясню на примере.
Глядите, регистрируете вы у себя shutdown hook:
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
shutdown();
}));
Жмете ctrl+C, и хук не срабатывает. WTF?
Этому посвящен вот этот баг:
https://github.com/oracle/graal/issues/465Вкратце, Виммер считает, что SVM должна быть капец какой embedded-friendly, а значит нельзя при стартапе регистрировать всё подряд, а только самый минимум.
Ну и sigint в этот минимум у него не попадает.
Чтобы хук заработал, нужно пойти и вручную где-нибудь в main (первой же строчкой, наверное), добавить нужный вызов:
Signal.handle(new Signal("INT"), sig -> System.exit(0));
Что в свою очередь приводит к следующему вопросу: и что, я каждый раз должен это делать? Сколько еще вещей из системной разработки я не знаю, а делать их нужно?
Логично сюда сразу же притащить некий фреймворк, который будет заниматься такой деятельностью вместо тебя. Из предположения, что всё-таки это не embedded приложуха, а обычный ынтерпрайзный микросервис. Или обычное десктопное приложение. В мире Spring тоже есть такая проблема, и ее решение - Spring Boot. Здесь же нужно фигачить некий Substrate Boot, или SVM Boot.
Уверен, что регистрация хэндлера - это первая ласточка, только самое начало. Например, если когда-нибудь появится раздельная/инкрементальная компиляция, я не верю, что найдется человек, который захочет разбираться, как приложуху правильно бить на модули. В чудесное время живем - можно своими глазами наблюдать за рождением костылей, которые потом будут тащить десятилетиями :)