LINUX.ORG.RU

История изменений

Исправление 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
}