Обычно используется trap
для отмены всего, когда вы закончите. Он должен быть идемпотентным, т. е. он должен изящно завершиться ошибкой, если некоторые из шагов не могут быть выполнены.
#!/bin/bash
clean_up=false
errorhandler () {
umount z || true
$clean_up && cleanup_thing
umount y || true
umount x
}
trap errorhandler ERR EXIT
mount a x
mount b y
setup_thing
clean_up=true
mount c z
do_something
Обратите внимание, что ловушка также срабатывает на EXIT
, поэтому она также будет выполняться до нормального завершения сценария; так что вам вообще не нужно очищать явно.
Я полагаю, что сигнал ERR
псевдо -является расширением Bash. Так что это не будет работать в Ash/Dash/устаревшей оболочке Bourne и т. д.
В основном,должен быть языковой интерфейс и все необходимые вспомогательные библиотеки, лицензированные соответствующим образом, с достаточно качественным (кодом, а также документация и тесты ), с людьми, желающими их поддерживать. Принимают решения руководящий комитет GCC .
Есть примеры добавления и удаления языков в не -слишком -далеком прошлом. D стал кандидатом в 2011 году , был утвержден в 2017 году и доступен в GCC 8. С другой стороны, Java была удалена в GCC 7 после долгого бездействия.
Есть проекты по добавлению Python и Rust , но я не думаю, что там много активности.
GCC разделяется на несколько компонентов ; различные языки, которые он поддерживает, реализованы внешними интерфейсами, которые преобразуют программы в промежуточное представление, GIMPLE (, который не зависит от языка -и машины -). Таким образом, оптимизаторы являются общими для разных языков.