The OpenNET Project / Index page

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



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

Исходное сообщение
"Уязвимость в zlib, проявляющаяся при сжатии специально оформ..."
Отправлено burjui, 01-Апр-22 19:34 
Вот мне всегда было интересно: каково это - быть упёртым хейтером. Наверное, это сродни религии.

Ссылки в Rust - это просто указатели, для которых компилятором даются определённые СТАТИЧЕСКИЕ гарантии (во время компиляции). Разыменование ссылки, явное или неявное (скажем, через вызов метода) - то же самое, что и разыменование указателя. Скептикам - rust.godbolt.org в помощь:

pub fn add1(num: &i32) -> i32 {
    *num + 1
}

Добавляем флаг -C opt-level=1 (самый слабый уровень оптимизаций) и видим:

example::add1:
        mov     eax, dword ptr [rdi]
        add     eax, 1
        ret

Ну как, достаточно производительно?

Оптимизации, если что - для краткости листинга. Без оптимизаций (-C opt-level=0) разыменование будет точно такое же, только будет добавлена обработка переполнения при сложении:

example::add1:
        push    rax
        mov     eax, dword ptr [rdi]
        inc     eax
        mov     dword ptr [rsp + 4], eax
        seto    al
        test    al, 1
        jne     .LBB0_2
        mov     eax, dword ptr [rsp + 4]
        pop     rcx
        ret
.LBB0_2:
        lea     rdi, [rip + str.0]
        lea     rdx, [rip + .L__unnamed_1]
        mov     rax, qword ptr [rip + core::panicking::panic@GOTPCREL]
        mov     esi, 28
        call    rax
        ud2

.L__unnamed_1:
        .quad   .L__unnamed_2
        .asciz  "\017\000\000\000\000\000\000\000\002\000\000\000\005\000\000"

str.0:
        .ascii  "attempt to add with overflow"

А сырыми или "сишными" указателями приходится пользоваться КРАЙНЕ редко - скажем, для реализации умных указателей и тому подобных трюков. То есть, практически никогда, если вы не разработчик оных или просто любитель заниматься преждевременными "оптимизациями", если это можно так назвать, учитывая отсутствие практической разницы между сырыми указателями и идиоматическими ссылками.

Но вы и дальше продолжайте собирать мусор на Go и считать, что что-то выиграли. В конечном итоге, с вашим походом к изучению документации и компитятора, ваши знания о Go будут столь же скудны и бесполезны, как и ваши знания о Rust, C и т.д.

 

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



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

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