Здравствуйте, sambl74, Вы писали:
S>Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>>Да, и по JS такой же вопрос — переходил ли кто-нибудь с C++ на JS
S>А шо такого? На чём я только не кодил — Pascal, Delphi, C, C++, assembler для микропроцессоров, Visual Basic — причём 6-й и это был лет 5 назад бгг, Java, ActionScript, JavaScript.
Тут, наверное, скорее вопрос был: «не чуствуете ли отвращение?» ))
Месяц назад пришлось вспомнить плюсы. Все бесит, начиная с того чтобы что-то сделать надо хорошенько подготовиться с либами. Беру сразу буст, дабы не тянуть еще каких-то поделок. Потом еще пляски с бубнами вокруг инклюдов, строк, алгоритмов конверсий.
Вместо того чтобы за час сделать и протестить ты проходишь квест в день, а то и дольше. Не удивительно что питон так рванул.
Потом возвращаешься на .NET, и вспоминаешь как кошмар. В общем я пару раз подумаю прежде чем на плюсах что-то писать, и если можно без него обойтись я так и сделаю.
Здравствуйте, Grizzli, Вы писали:
G>Если был до шарпа опыт языков низкого уровня — то думаю запросто. Если небыло, да еще разработчику лет 35 и лет 15 опыта шарпа — то на указателях запросто можно споткнуться и никогда не встать. такие понятия нужно как можно раньше впитывать.
А можно поинтересоваться, что в этих указателях такого? В шарпе до черта передается по ссылке. По существу это тот же указатель, только для него определена адресная арифметика, нельзя к ссылке что то прибавить и потом получить значения. Но при этом, если выделять память под огроменный массив байт, то индекс массива будет практически 100 процентным указателем. Единственное отличие — если выйдешь за границу массива — тебе исключение кинется, а не будет не пойми что. То есть от тебя просто требуют в плюсах к большей внимательности, ибо банальная опечатка может проявиться хрен знает когда.
И какой бы ты гуру ни был, а при прямых небезопасных операций с указателями ты рано или поздно ошибешься. Соответственно даже плюсовики стараются этой адресной арифметикой практически не пользоваться. А юзают итераторы, смартпоинтеры и тому подобное. Тоже самое, что в управляемых языках по существу, там тоже оперируют чаще всего более высокими абстракциями, чем простые массивы. Единственное — синтаксис поприятнее и покороче выглядит. Соответственно просто опытный разработчик на плюсах, который всякие *(&(***&(i+1))+10)[5] который писал только в институте, а потом избегал такое дерьмо как только мог — он лет через 15 тоже будет в черти каком шоке, когда в коде такое увидит. А когда успокоится и начнет из приличных слов говорить не только предлоги, захочет еще и поубивать захочет тех, кто такое додумался написать .
Здравствуйте, Danchik, Вы писали:
D>Месяц назад пришлось вспомнить плюсы. Все бесит, начиная с того чтобы что-то сделать надо хорошенько подготовиться с либами. Беру сразу буст, дабы не тянуть еще каких-то поделок. Потом еще пляски с бубнами вокруг инклюдов, строк, алгоритмов конверсий. D>Вместо того чтобы за час сделать и протестить ты проходишь квест в день, а то и дольше. Не удивительно что питон так рванул.
По большому счету выделенное – это главная головная боль C++. Все остальное просто потерянные знания, не более того. Современный C++ (14 и выше) довольно стройный и выдержанный язык, который в купе с санитарайзерами позволяет довольно просто и лего писать код.
Здравствуйте, sergey2b, Вы писали:
KP>>Модель памяти Qt из 90-х прошлого века. Это главная проблема. S>я не работал с Qt объясни пожалуйста, что ты имееш ввиду
Я имею ввиду активное использование `new` без умных указателей, что является плохим тоном в современном C++. Так же Qt активно использует парадигму дочерних объектов, когда ты вроде сделал голое `new` и не сделал `delete`, но объект магически удалится так как является дочерним для кого-то там. А может и не удалиться, и это надо знать, либо вылавливать. Дремучие 90-е, короче
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>Да, и по JS такой же вопрос — переходил ли кто-нибудь с C++ на JS
А шо такого? На чём я только не кодил — Pascal, Delphi, C, C++, assembler для микропроцессоров, Visual Basic — причём 6-й и это был лет 5 назад бгг, Java, ActionScript, JavaScript.
Здравствуйте, AlexGin, Вы писали:
AG>А почему сразу не взять Qt и творить на плюсах с удовольствием?
Дык, ровно наоборот. ))
QT унутре устарел еще примерно в 2002-2003-х годах, когда все популярные компиляторы стали примерно одинаково поддерживать частичную специализацию и библиотечную инстанциацию шаблонов, но при этом внутренняя философия этой библиотеки не была пересмотрена.
QT — это же не только GUI, это куча оберток на нейтивными АПИ сетки, файлов, прмитивов синхронизации, таймеров и т.д. и т.п.
Потому и стали аналогичные либы из "молодого" (на тот момент) буста более популярны в те же года, что QT явно не дотягивал до понятия "библиотека для С++".
C#/Java — очень чистые и красивые языки. Если сравнить с C++ — это как дикая природа (C++) с кучей опасностей и нагромождений и красивый ухоженный парк (C#).
Да, C++ технологически и надежнее (можно гарантировать что и через 10 и через 20 лет он будет использоваться) и намного шире по спектру применения. Но, подозреваю, что чисто психологически перейти не возможно. Можно только так C++ -> C# и потом опять C++.
В общем, если кому удалось перейти с чисто C# на этого монстра — поделитесь опытом. Сколько заняло времени и какие ощущения.
Здравствуйте, AlexGin, Вы писали:
AG>А кто мешает мне использовать мой стиль разработки — с применением абстрактных базовых классов (aka interface), а также всех вкусностей C++ 11/14/17 (лямбд, nullptr, и т.д.) — AG>и в то же время применять всю мощь библиотеки Qt?
https://github.com/Microsoft/GSL
AG>P.S. Хотя — насчет санитайзеров, может и будет несовместимость (если они хотят по-своему освобождать память, а Qt — хочет по-своему).
Я тут малек оговорился. Санитайзеры проблем не привносят в связке с Qt, а вот несколько полезных проверок clang-tidy приходится отключать.
Здравствуйте, AlexGin, Вы писали:
V>>QT унутре устарел еще примерно в 2002-2003-х годах, когда все популярные компиляторы стали примерно одинаково поддерживать частичную специализацию и библиотечную инстанциацию шаблонов, но при этом внутренняя философия этой библиотеки не была пересмотрена. AG>Так как новые пакеты (скажем так — minor version) Qt выходят каждые пол-года, то данная информация уже потеряла актуальность.
Да хоть каждый день пусть пакеты выходят.
Пока с ними не приходит обновления архитектуры — это ни о чём.
V>>QT — это же не только GUI, это куча оберток на нейтивными АПИ сетки, файлов, прмитивов синхронизации, таймеров и т.д. и т.п. V>>Потому и стали аналогичные либы из "молодого" (на тот момент) буста более популярны в те же года, что QT явно не дотягивал до понятия "библиотека для С++". AG>Спасибо, я в курсе. AG>Занимаюсь на Qt последние три года.
Я последние 20 лет за этой либу слежу — ничего не меняется.
Шлак и есть шлак.
Да, этот шлак "вылизали", пофиксили баги, заставили выглядеть достойной картинкой и работать на большем кол-ве платформ.
Но рвотный рефлекс никуда не делся.
Именно поэтому когда-то появились wxWidgets поверх SDL и бинд GTK на С++.
Где-то даже обидно от всей этой ситуации.
Здравствуйте, sergey2b, Вы писали:
D>>Потом возвращаешься на .NET, и вспоминаешь как кошмар. В общем я пару раз подумаю прежде чем на плюсах что-то писать, и если можно без него обойтись я так и сделаю.
S>а дефрагментатор или компилятор на C# написать сможете
А в чём проблема? Для дефрагментатора у винды вроде есть API. Логику на C# может и надёжней написать будет.
Здравствуйте, Somescout, Вы писали:
S>ЗЫ RAII в С++ мне очень нравится, крайне не хватает подобного в шарпе (это только для примера, насчёт lock в курсе): S>
S>{
S> MutexGuard lock(mutex);
S> /// do something
S>}
S>
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Компилятор просто на счет раз. LVV>>>Единственную некоторую проблему составляет генератор нативного кода Интел (это я просто не писал такого... ). CAF>>А в чем проблема? Пиши циферки, да пиши. Вот пример: CAF>>https://www.graalvm.org/ CAF>>Единственное, что рантайм нельзя без С написать, ну нету всех ОС АПИ в этих языках, доступа к памяти. Написал нативный код, а вот исполняемым не сделать. LVV>Ну, то все понятно. LVV>Можно и по-другому. LVV>Написать кодогенератор ассемблерной проги и запускать транслятор с ассемблера — пусть он фигачит уже объектный код...
ну можно и так, но все равно С/С++ для этого не нужен, но исполять — да.
Здравствуйте, Danchik, Вы писали:
D>Месяц назад пришлось вспомнить плюсы. Все бесит, начиная с того чтобы что-то сделать надо хорошенько подготовиться с либами. Беру сразу буст, дабы не тянуть еще каких-то поделок. Потом еще пляски с бубнами вокруг инклюдов, строк, алгоритмов конверсий.
D>Потом возвращаешься на .NET, и вспоминаешь как кошмар. В общем я пару раз подумаю прежде чем на плюсах что-то писать, и если можно без него обойтись я так и сделаю.
а дефрагментатор или компилятор на C# написать сможете
D>>Потом возвращаешься на .NET, и вспоминаешь как кошмар. В общем я пару раз подумаю прежде чем на плюсах что-то писать, и если можно без него обойтись я так и сделаю. S>а дефрагментатор или компилятор на C# написать сможете
Компилятор просто на счет раз.
Единственную некоторую проблему составляет генератор нативного кода Интел (это я просто не писал такого... ).
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, kaa.python, Вы писали:
D>>Месяц назад пришлось вспомнить плюсы. Все бесит, начиная с того чтобы что-то сделать надо хорошенько подготовиться с либами. Беру сразу буст, дабы не тянуть еще каких-то поделок. Потом еще пляски с бубнами вокруг инклюдов, строк, алгоритмов конверсий. D>>Вместо того чтобы за час сделать и протестить ты проходишь квест в день, а то и дольше. Не удивительно что питон так рванул.
KP>По большому счету выделенное – это главная головная боль C++. Все остальное просто потерянные знания, не более того. Современный C++ (14 и выше) довольно стройный и выдержанный язык, который в купе с санитарайзерами позволяет довольно просто и лего писать код.
Вопрос:
А почему сразу не взять Qt и творить на плюсах с удовольствием?
Здравствуйте, AlexGin, Вы писали:
AG>Вопрос: AG>А почему сразу не взять Qt и творить на плюсах с удовольствием?
Я бы не стал его использовать без острой на то необходимости потому что по большому счету это Си-с-классами стиль разработки. Казалось бы в этом нет ничего страшного, но тебе фактически становится недоступной GSL и приходится блокировать изрядное количество проверок в санитарайзерах так как философия Qt в плане управления памятью это C++03. Я сейчас пишу проект который вынужденно базируется на Qt, но с радостью заменил бы его на BOOST.
Здравствуйте, kaa.python, Вы писали:
KP>Я бы не стал его использовать без острой на то необходимости потому что по большому счету это Си-с-классами стиль разработки.
А кто мешает мне использовать мой стиль разработки — с применением абстрактных базовых классов (aka interface), а также всех вкусностей C++ 11/14/17 (лямбд, nullptr, и т.д.) —
и в то же время применять всю мощь библиотеки Qt?
Тот факт, что применение Qt просто как грабли, и позволяет иметь низкий порог входа (даже и используя стиль "Си-с-классами") — не мешает в применению любых возможностей modern С++
KP>Казалось бы в этом нет ничего страшного, но тебе фактически становится недоступной GSL и приходится блокировать изрядное количество проверок в санитарайзерах так как философия Qt в плане управления памятью это C++03. Я сейчас пишу проект который вынужденно базируется на Qt, но с радостью заменил бы его на BOOST.
Здравствуйте, sergey2b, Вы писали:
D>>Потом возвращаешься на .NET, и вспоминаешь как кошмар. В общем я пару раз подумаю прежде чем на плюсах что-то писать, и если можно без него обойтись я так и сделаю. S>а дефрагментатор
Какой такой дефрагментатор?
S>или компилятор на C# написать сможете
Сто раз так делал.
Компилятор самого шарпа, думаешь, на чем написан?
Здравствуйте, kaa.python, Вы писали:
KP>https://github.com/Microsoft/GSL
Я подумал насчёт совсем другой GSL
AG>>P.S. Хотя — насчет санитайзеров, может и будет несовместимость (если они хотят по-своему освобождать память, а Qt — хочет по-своему).
KP>Я тут малек оговорился. Санитайзеры проблем не привносят в связке с Qt, а вот несколько полезных проверок clang-tidy приходится отключать.
То есть, в сухом остатке проверки на CLANG?
Кстати, для Linux — можно применять также и gcc?
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>Сто раз так делал. НС>>Компилятор самого шарпа, думаешь, на чем написан?
S>с вашей точки зрения писать shareware та С# хорошая идея
Да запустите обфускатор или купите готовую шаревару делалку. Нагуглил, думаю не единственную, такую http://xheo.com/
Захотят взломать, взломают, чтобы вы не делали, на чем не писали. А вот попортить нервы хакерам можно.
Здравствуйте, vdimas, Вы писали:
V>QT унутре устарел еще примерно в 2002-2003-х годах, когда все популярные компиляторы стали примерно одинаково поддерживать частичную специализацию и библиотечную инстанциацию шаблонов, но при этом внутренняя философия этой библиотеки не была пересмотрена.
Так как новые пакеты (скажем так — minor version) Qt выходят каждые пол-года, то данная информация уже потеряла актуальность.
Здравствуйте, Shmj, Вы писали:
S>C#/Java — очень чистые и красивые языки. Если сравнить с C++ — это как дикая природа (C++) с кучей опасностей и нагромождений и красивый ухоженный парк (C#).
S>Да, C++ технологически и надежнее (можно гарантировать что и через 10 и через 20 лет он будет использоваться) и намного шире по спектру применения. Но, подозреваю, что чисто психологически перейти не возможно. Можно только так C++ -> C# и потом опять C++.
Если был до шарпа опыт языков низкого уровня — то думаю запросто. Если небыло, да еще разработчику лет 35 и лет 15 опыта шарпа — то на указателях запросто можно споткнуться и никогда не встать. такие понятия нужно как можно раньше впитывать.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, AlexGin, Вы писали:
AG>>То есть, в сухом остатке проверки на CLANG?
KP>Не Clang, а clang-tidy, это самостоятельное приложение не являющееся компилятором.
Ясно, здесь я просто подумал насчёт CLANG компилятора. Инерция подсознания
AG>>Кстати, для Linux — можно применять также и gcc?
KP>Не понял вопроса. На Linux GCC – основной компилятор, где скорее при желании можно применять Clang.
Да, я именно о том, что Qt под Linux в основном предполагает компилятор GCC — по крайней мере менеджеры пакетов Debian и Ubuntu-Linux
обычно предлагают вариант под GCC (g++).
Здравствуйте, Shmj, Вы писали:
S>C#/Java — очень чистые и красивые языки. Если сравнить с C++ — это как дикая природа (C++) с кучей опасностей и нагромождений и красивый ухоженный парк (C#).
S>Да, C++ технологически и надежнее (можно гарантировать что и через 10 и через 20 лет он будет использоваться) и намного шире по спектру применения. Но, подозреваю, что чисто психологически перейти не возможно. Можно только так C++ -> C# и потом опять C++.
Переходил, основные проблемы были не от языка как такового (у него, кстати, хватает плюсов ), а скорее от обвязки, которую приходилось использовать — среда строго eclipse, где автодополнение не могло нормально выводить типы, стандартные библиотеки частично не работали (при попытке использовать auto_ptr из стандарта программа падала), valgrind на стороне эмулятора не позволял добавить исключения для стандартной библиотеки (10000+ сообщений — попробуй найти проблему, facepalm), сама библиотека GUI после Java вызывала тошноту (крайне неудобно модифицировать что-либо). Ну и документация была с огромными пробелами.
В общем, нет смысла говорить "Как вы перешли с одного языка на другой" без упоминания фрэймворков и обвязки всего этого — сами языки, обычно, проблемы не вызывают.
ЗЫ RAII в С++ мне очень нравится, крайне не хватает подобного в шарпе (это только для примера, насчёт lock в курсе):
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Grizzli, Вы писали:
G>>Если был до шарпа опыт языков низкого уровня — то думаю запросто. Если небыло, да еще разработчику лет 35 и лет 15 опыта шарпа — то на указателях запросто можно споткнуться и никогда не встать. такие понятия нужно как можно раньше впитывать. E>А можно поинтересоваться, что в этих указателях такого? В шарпе до черта передается по ссылке.
Передается, но делается это очень мяганько, настолько, что можно 15 лет проработать и даже особо не думать о том как там и где и что передается.
А в си — указатель на указатель, да еще и арифметика по этому всемУ, утечки и проходы по памяти как следствие — если сходу все это не впитал — потом может быть нелегко для понимания.
Здравствуйте, Grizzli, Вы писали:
G>А в си — указатель на указатель, да еще и арифметика по этому всемУ, утечки и проходы по памяти как следствие — если сходу все это не впитал — потом может быть нелегко для понимания.
Так то в С, а речь то про С++
Здравствуйте, Grizzli, Вы писали:
G>Передается, но делается это очень мяганько, настолько, что можно 15 лет проработать и даже особо не думать о том как там и где и что передается. G>А в си — указатель на указатель, да еще и арифметика по этому всемУ, утечки и проходы по памяти как следствие — если сходу все это не впитал — потом может быть нелегко для понимания.
Всё таки речь идёт о С++, а в нём также как и в C# стараются поменьше видеть указателей в коде.
Кроме того в C# есть указатели если кто-то по ним скучает https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>В шарпе для гардов есть using.
Знаю, и в целом оно даже похоже, но сама идея что объект автоматически уничтожается при выходе из области видимости мне нравится. Фактически в C++ при использовании таких объектов нельзя сделать ошибку — очистка ресурсов гарантирована всегда.
Здравствуйте, Somescout, Вы писали:
S>Знаю, и в целом оно даже похоже, но сама идея что объект автоматически уничтожается при выходе из области видимости мне нравится. Фактически в C++ при использовании таких объектов нельзя сделать ошибку — очистка ресурсов гарантирована всегда.
Читаемость кода это не улучшает. И если при управлении памятью это еще сносно, так как слишком много этого управления, то в случае со всякими гардами явное выделение скоупа оператором лучше.
G>Если был до шарпа опыт языков низкого уровня — то думаю запросто. Если небыло, да еще разработчику лет 35 и лет 15 опыта шарпа — то на указателях запросто можно споткнуться и никогда не встать. такие понятия нужно как можно раньше впитывать.
Указатели как раз-таки не самое сложное в C++. Потому что нормальные разрабочики избегают использования адресной арифметики в коде на С++, используются векторы, итераторы из STL или Boost.
Другие фишки будут корежить мозг:
— Множественное наследование классов в С++ (хотя нормальные разработчики и в С++ избегают такой фишки)
— Различия между generic C# & templates в C++
— Отсутствие LINQ (хотя ХЗ, может уже и есть LINQ)
— Отсутствие Expression tree
— Отсутствие reflection.
— Отсутствие событий как единицы синтаксиса.
Список можно продолжать и продолжать...
В общем ломка будет очень сильной, но не смертельной ;)
P.S. Другой вопрос — за чем? В финансы, высокочастотный трейдинг или куда хочешь пойти?
Здравствуйте, Somescout, Вы писали:
S>>C#/Java — очень чистые и красивые языки. Если сравнить с C++ — это как дикая природа (C++) с кучей опасностей и нагромождений и красивый ухоженный парк (C#).
Очень многое зависит от того как писать, плюсы С#-а это IDE, быстрая, и удобная, скорость сборки , nuget и прочая инфраструктура, ну и многословность во многих аспектов С++ большой минус, но потихоньку полегоньку движемся к хорошему.
S>Переходил, основные проблемы были не от языка как такового (у него, кстати, хватает плюсов ), а скорее от обвязки, которую приходилось использовать — среда строго eclipse, где автодополнение не могло нормально выводить типы,
Сочувствую, тот еще тормоз, хотя люди продолжают на нем писать под С++. S>стандартные библиотеки частично не работали (при попытке использовать auto_ptr из стандарта программа падала),
Давно видно писал, auto_ptr уже deprecated. S>valgrind на стороне эмулятора не позволял добавить исключения для стандартной библиотеки (10000+ сообщений — попробуй найти проблему, facepalm),
Вам чего то страного захотелось, обработка ошибок это отдельный бардак. S>сама библиотека GUI после Java вызывала тошноту (крайне неудобно модифицировать что-либо). Ну и документация была с огромными пробелами.
У std С++ нет GUI, что за библиотека была?
S>В общем, нет смысла говорить "Как вы перешли с одного языка на другой" без упоминания фрэймворков и обвязки всего этого — сами языки, обычно, проблемы не вызывают.
Согласен
S>ЗЫ RAII в С++ мне очень нравится, крайне не хватает подобного в шарпе (это только для примера, насчёт lock в курсе):
Это да, можно писать программы без new, delete. И тогда все становится приятней и проще.
Здравствуйте, Igore, Вы писали:
I>Сочувствую, тот еще тормоз, хотя люди продолжают на нем писать под С++.
Там не то что в тормозах проблема — автодополнение вообще не работало для шаблонов (для auto_ptr в частности)
S>>стандартные библиотеки частично не работали (при попытке использовать auto_ptr из стандарта программа падала), I>Давно видно писал, auto_ptr уже deprecated.
Несколько лет назад. Но даже если в стандарте он уже был deprecated, до SDK оно ещё не доползло.
S>>valgrind на стороне эмулятора не позволял добавить исключения для стандартной библиотеки (10000+ сообщений — попробуй найти проблему, facepalm), I>Вам чего то страного захотелось, обработка ошибок это отдельный бардак.
В смысле? Valgrind диагностирует утечки памяти, но если не исключить из диагностики стандартную библиотеку, то эти ошибки хрен найдёшь в десятках тысяч сообщений.
S>>сама библиотека GUI после Java вызывала тошноту (крайне неудобно модифицировать что-либо). Ну и документация была с огромными пробелами. I>У std С++ нет GUI, что за библиотека была?
Здравствуйте, Shmj, Вы писали:
S>C#/Java — очень чистые и красивые языки. Если сравнить с C++ — это как дикая природа (C++) с кучей опасностей и нагромождений и красивый ухоженный парк (C#).
Здравствуйте, LaptevVV, Вы писали:
D>>>Потом возвращаешься на .NET, и вспоминаешь как кошмар. В общем я пару раз подумаю прежде чем на плюсах что-то писать, и если можно без него обойтись я так и сделаю. S>>а дефрагментатор или компилятор на C# написать сможете LVV>Компилятор просто на счет раз. LVV>Единственную некоторую проблему составляет генератор нативного кода Интел (это я просто не писал такого... ).
Единственное, что рантайм нельзя без С написать, ну нету всех ОС АПИ в этих языках, доступа к памяти. Написал нативный код, а вот исполняемым не сделать.
LVV>>Компилятор просто на счет раз. LVV>>Единственную некоторую проблему составляет генератор нативного кода Интел (это я просто не писал такого... ). CAF>А в чем проблема? Пиши циферки, да пиши. Вот пример: CAF>https://www.graalvm.org/ CAF>Единственное, что рантайм нельзя без С написать, ну нету всех ОС АПИ в этих языках, доступа к памяти. Написал нативный код, а вот исполняемым не сделать.
Ну, то все понятно.
Можно и по-другому.
Написать кодогенератор ассемблерной проги и запускать транслятор с ассемблера — пусть он фигачит уже объектный код...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Читаемость кода это не улучшает. И если при управлении памятью это еще сносно, так как слишком много этого управления, то в случае со всякими гардами явное выделение скоупа оператором лучше.
А теперь (C#8) работает и без нестинга:
{
using var lock = new MutexGuard(mutex);
/// do something
} // lock.Dispose()
Уйдемте отсюда, Румата! У вас слишком богатые погреба.