The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"В ядро Linux 6.8 намечено включение первого сетевого драйвер..."
Отправлено Витюшка, 18-Дек-23 21:35 
> Я про зиг уже писал. Это по сути СИшка

Так, видимо ты не понимаешь что такое defer.

Ты пишешь сразу же

mutex.lock()
defer mutex.unlock()

И компилятор автоматически везде вставляет mutex.unlock() перед ЛЮБЫМ выходом из функции. Где бы ты и как потом ни выходил.

Согласись, надо быть тупым чтобы не вставить на следующей строке unlock. Тебе не нужно по всем return бегать. Это делает компилятор автоматически.

errdefer сделает тоже самое везде, но только для ошибки. И обычный errdefer ты вызываешь в 99% случаев. Однако, если надо, ты можешь прописать значительно более хитрые и продвинутые условия. В Rust этого сделать нельзя, в С++ тоже.

Конструкторы и деструкторы это ужасные костыли.

А что если ты не хочешь вставлять unlock() и тебе не нужно "очищать ресурс"? Например, зачем тебе обнулять память, если она будет перезаписана потом? В С++ и Rust ты этого сделать не можешь.

Какие-то пустые бредовые деструкторы вызываются всегда. Это совсем не бесплатно, делать все эти вызовы. Тем более рекурсивно!

> Но дефер все таки вернули

Потому что ты явно пишешь errdefer mutex.unlock(). Ты видишь этот вызов, ты видишь что ты делаешь и как очищаешь. Это явно. Прямо в функции. Даже в язык С есть proposal добавить defer.

Более того, ты можешь делать больше чем "деструктор", например пометить объект удалённым в массиве индексов. С деструктором это невозможно. Или вызывать "очищение" только при определённом условии или при определенной ошибке.

А деструкторы вызываются неявно. И ты не знаешь что и как они делают, что они там очищают и тп. Отменить ты их не можешь.

Я опять же писал что Zig БЕЗОПАСНЕЕ чем Rust. Многие ошибки, если не большинство, в compile time невозможно отловить никогда. В Zig есть все автоматические проверки безопасности. Выхода за границы массива, безопасность выравнивания типов данных (в Rust нет), разные аллокаторы (в Rust нет) и мноооого чего ещё, я сам всё не знаю.

Он БОЛЕЕ кроссплатформенный чем Rust. Он БЫСТРЕЕ чем Rust. Он компилируется быстрее. У него лучшая интероперабельность с С и С++. Он гораздо более продвинутый в низкоуровневых возможностях.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, [email protected] (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру