История изменений
Исправление Atlant, (текущая версия) :
Это было реализовано ещё в первой версии языка «D». Когда ещё и GO то не было.
Вариант выполнения при выходе из функции.
void locked_foo()
{
Mutex m = new Mutex;
lock(m); // lock the mutex
scope(exit) unlock(m); // unlock on leaving the scope
foo(); // do processing
}
Вариант выполнения при ошибке в функции(исключение).
Transaction transaction()
{
Foo f = dofoo();
scope(failure) dofoo_undo(f);
Bar b = dobar();
return Transaction(f, b);
}
https://dlang.org/spec/statement.html#ScopeGuardStatement
Исправление Atlant, :
Это было реализовано ещё в первой версии языка «D». Когда ещё и GO то не было.
Вариант выполнения при выходе из функции.
void locked_foo()
{
Mutex m = new Mutex;
lock(m); // lock the mutex
scope(exit) unlock(m); // unlock on leaving the scope
foo(); // do processing
}
Вариант выполнения при ошибке в функции(исключение).
Transaction transaction()
{
Foo f = dofoo();
scope(failure) dofoo_undo(f);
Bar b = dobar();
return Transaction(f, b);
}
Исходная версия Atlant, :
Это было реализовано ещё в первой версии языка «D»
void locked_foo()
{
Mutex m = new Mutex;
lock(m); // lock the mutex
scope(exit) unlock(m); // unlock on leaving the scope
foo(); // do processing
}