LINUX.ORG.RU

Почему defer из Go не принят другими ЯП?

 ,


0

6

Это же так удобно - f = fopen(path); defer({ fclose(f) })
Те мы сразу рядом написали что файл закроем. Именно рядом а не через экран строчек в каком нибудь finally или, еще хуже, в конце функции вообще.
А потом глаза ломай смотри сверяй что все что по пути было открыто - закрыто.

Знаю что можно костылить такую фичу через деструкторы в крестах и через setTimeout(..., 0)(очень плохой способ) в ЯП с event loop

★★★★
Ответ на: комментарий от anonymous

В деструкторе не надо это писать? Или там нельзя это забыть?

Деструктор пишется один раз. И всякий раз, когда будешь использовать объекты этого класса, все будет ок.

В случае defer и аналогов нужно писать в каждом месте использования.

Но defer выглядит костылем(в духе finally, хотя и чуть лучше) даже на фоне конструкций with, using, try-with-resources из разных языков, а не только крестовых деструкторов.

В D же есть как деструкторы, так и deferоподобный механизм, но с большими возможностями (отдельные обработчики на любой выход, на успешный выход и на зафейленный).

anonymous
()
Ответ на: комментарий от anonymous

Вряд ли стабильность KDE как-либо связана с ресурсами и деструкторами. В C++ полно дерьма, но RAII это действительно годная тема.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.