Сохранен 41
https://2ch.hk/news/res/2622291.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Без new: Указатели будут удалены из C++

 Аноним 01/04/18 Вск 15:33:30 #1 №2622291     RRRAGE! 3 
2db8b8c820a64362d6781cc6ed77545a.png
3c0acf18354dee7476952470b8ab7c6c.jpg
ab333e9ba2014867a64f59ac8cd549ce.jpg
b29f4c15d75cbfc283246b4e1a097161.png
ве недели назад в Джэксонвилле встречался комитет стандарта ISO C++. Сегодня я хочу представить короткую сводку и написать о революционном решении, принятом на собрании в Джэксонвилле. Для получения дополнительной информации я рекомендую к прочтению статью C++ больше не будет иметь указатели. Комитет по стандартизации языка принял решение о том, что указатели будут объявлены устаревшими в C++20 и с большой долей вероятности будут удалены из C++23.

Откровенно говоря, то, что кажется революционном, — всего лишь последний шаг длинной эволюции.

Эволюция указателей в C++

Указатели существуют в C++ с самого начала. Мы получили их из C. С самого начала развития C++ всегда была тенденция сделать управление указателями более безопасным без значительных потерь.

В C++98 мы получили std::auto_ptr для выражения исключительного владения. Но std::auto_ptr имел большой изъян. Когда вы копирует std::auto_ptr, владение ресурсом передавалось копии. Копирование выглядело как перемещение. Изображение ниже показывает неприятное поведение std::auto_ptr.

Это было очень плохо, приводило к множеству серьёзных багов. Поэтому мы получили std::unique_ptr в C++11, и объявили std::auto_ptr устаревшим в C++11, и окончательно удалили из C++17. Дополнительно мы получили std::shared_ptr и std::weak_ptr в C++11 для управления владением. Вы не можете копировать, но можете перемещать std::unique_ptr, и если копируете или присваиваете std::shared_ptr, счётчик ссылающихся указателей увеличивается. Посмотрите сюда:

Начиная с C++11 C++ имеет многопоточную библиотеку. Это делает управление std::shared_ptr достаточно сложным, потому что std::shared_ptr по определению разделяемое, но не потоко-безопасное. Только контрольная часть со счётчиками является потоко-безопасной, но не доступ к адресу контролируемого ресурса. Это значит, что изменение счётчика — атомарная операция, но вы не имеете гарантии, что ресурс будет удалён ровно один раз. По этой причине мы получаем в C++20 атомарные умные указатели: std::atomic_shared_ptr и std::atmic_weak_ptr. Про детали предложений комитета стандартизации читайте здесь: Атомарные умные указатели.

Теперь переходим к более интересным частям будущих стандартов C++20 и C++23. Указатели будет объявлены устаревшими в C++20 и удалены из C++23. Скажем три слова: Нет Новому New (NNN).

std::unique_ptr спасёт нас

Но подождите, как же догма C++: Не платить за то, что вам не нужно. Как мы сможем программировать без указателей? Просто используйте std::unique_ptr. Из своего дизайна std::unique_ptr такой же быстрый и экономный, как и обычный указатель, и имеет явное преимущество — автоматическое управление ресурсом.

Ниже простой тест производительности.

// all.cpp

#include <chrono>
#include <iostream>

static const long long numInt= 100000000;

int main(){
auto start = std::chrono::system_clock::now();

for ( long long i=0 ; i < numInt; ++i){
int* tmp(new int(i));
delete tmp;
// std::shared_ptr<int> tmp(new int(i));
// std::shared_ptr<int> tmp(std::make_shared<int>(i));
// std::unique_ptr<int> tmp(new int(i));
// std::unique_ptr<int> tmp(std::make_unique<int>(i));
}

std::chrono::duration<double> dur= std::chrono::system_clock::now() - start;
std::cout << "time native: " << dur.count() << " seconds" << std::endl;
}

Эта программа выделяет и освобождает память для 100 миллионов int. Я использую указатели, std::shared_ptr и std::unique_ptr в двух вариациях. Я компилирую программу с и без максимальной оптимизации в Linux и в Windows. Получаются такие числа:

Две вариации std::unique_ptr на Linux и Windows показывают такую же производительность, как обычные указатели. За деталями этого теста обратитесь к моей прошлой статье: Потребление памяти и производительность умных указателей.


Семантика владения

Честно говоря, мы используем указатели и, в частности, обычные указатели очень часто. Вопрос, должны ли вы использовать указатель, сводится к следующему: Кто владелец? К счастью, с помощью кода мы можем чётко выразить это.

Локальные объекты. Рантайм C++ как владелец автоматически управляет жизнью таких ресурсов. То же самое относится к глобальным объектам или членам класса. Справочники сводят это к области видимости.
Ссылки: я не владелец. Я только обеспечиваю, что ресурс не может быть пустым.
Обычные указатели: я не владелец. Я только ссылаюсь на ресурс, если он есть. Я не должен удалять ресурс.
std::unique_ptr: я исключительный владелец ресурса. Я могу явно освободить мой ресурс.
std::shared_ptr: я разделяю ресурс с другими std::shared_ptr. Я могу явно удалить мой разделяемый ресурс, если он больше никому не нужен.
std::weak_ptr: я не владелец ресурса, но я могу временно разделять ресурс при вызове моего метода std::weak_ptr::lock.

Нам нужно будет изменить только одну из шести практик использования указателей и мы рады следующему шагу в развитии C++.
Аноним 01/04/18 Вск 15:34:50 #2 №2622297     RRRAGE! 4 
Нахуй иди, клоун
Аноним 01/04/18 Вск 15:40:37 #3 №2622314     RRRAGE! 2 
E218325D-8AA2-4DFE-8B92-8753A9E88ABF.jpeg
>>2622291 (OP)
мамкин погромист закукарекал
Аноним 01/04/18 Вск 15:41:33 #4 №2622322     RRRAGE! 0 
Ого, эти дебилы повторно изобрели Rust, кек.

>писать что-то на с++ в две 1000 8надцатом
Аноним 01/04/18 Вск 15:44:33 #5 №2622334     RRRAGE! 1 
Ой бля, сегодня ж первое апреля, ясно

>>2622322 -370кЗП-господин
Аноним 01/04/18 Вск 15:46:40 #6 №2622345     RRRAGE! 0 
И зачем, ты это в ньсач запостил? Пукай давай на лор, опеннет, хубрахабр.

Тут только сидят эксперты по питушариям и подобному дерьму и твои указатели не интересуют
Аноним 01/04/18 Вск 15:46:53 #7 №2622346     RRRAGE! 1 
IMG3494.JPG
>>2622291 (OP)
TFW язык нужно подстраивать под вкатывальщиков неосиляторов-вебмакак, чтобы его хоть как то оживить
Аноним 01/04/18 Вск 15:48:30 #8 №2622363     RRRAGE! 1 
Это шутка на первое апреля?
Аноним 01/04/18 Вск 15:53:06 #9 №2622403     RRRAGE! 1 
Указатель вырезаем, string всё ещё не добавляем. Расходимся ребят, это первое апреля.
Аноним 01/04/18 Вск 15:54:41 #10 №2622416     RRRAGE! 0 
>>2622291 (OP)
Охуеть, вот бы весь ньюсач таким был. Но бля, это они чё, джаву переизобрели?
Аноним 01/04/18 Вск 15:55:26 #11 №2622432 
Golang решает все проблемы C++, только тоже есть указатели.
Аноним 01/04/18 Вск 15:55:44 #12 №2622435     RRRAGE! 1 
>>2622416
Мне кажется это 1 апреля.
Аноним 01/04/18 Вск 15:57:08 #13 №2622444     RRRAGE! 0 
>>2622435
Блядь, точно! Годный тред.
Аноним 01/04/18 Вск 15:59:52 #14 №2622464     RRRAGE! 1 
Какая-то сложная новость, я не смог понять, соснули хохлы или пидарашки?
Аноним 01/04/18 Вск 16:02:19 #15 №2622484 
>>2622432
Cool story, уебывай
Аноним 01/04/18 Вск 16:03:03 #16 №2622493 
я не против, делайте.
Аноним 01/04/18 Вск 16:04:56 #17 №2622502 
>>2622314
Кто я погромист? А может быть ты погромист, солнишко? Шо
Аноним 01/04/18 Вск 16:07:44 #18 №2622514     RRRAGE! 0 
>>2622403
Вы в шараге когда с обычного си на кресты перейдёте, тогда вам про директиву string и расскажут
Аноним 01/04/18 Вск 16:13:56 #19 №2622559     RRRAGE! 2 
>>2622291 (OP)
С хабра скопировал, пидр?
Аноним 01/04/18 Вск 16:26:05 #20 №2622664 
1 апреля, если удалить указатели из C++ то придется уволить 100К бородатых пенсионеров, так как отличить его от PHP станет невозможно.
Аноним 01/04/18 Вск 16:31:30 #21 №2622726 
>>2622664
У С++ пердоликов есть еще тонны легаси кода, которого хватит еще не на одно поколение пердоликов , так и будут пелить на стандарте 2003 года
Аноним 01/04/18 Вск 16:31:48 #22 №2622729 
>>2622291 (OP)
Слишком сложно для /news на 1 апреля! ОП, ты ... ну ты знаешь... stl для пидоров. Давно пора ее похерить, так же как и плюсы. Попытка сделать из СИ javascript не удалась, надо это принять и начать как то жить. Смеритесь!
Аноним 01/04/18 Вск 16:40:23 #23 №2622810     RRRAGE! 0 
>>2622346
память уже выделил, маня?
Аноним 01/04/18 Вск 16:40:43 #24 №2622811 
AYAYA.png
>Нам нужно будет изменить только одну из шести практик использования указателей и мы рады следующему шагу в развитии C++.
>Развитие
>С++
Аноним 01/04/18 Вск 16:40:49 #25 №2622815 
Эх, щас бы велосипед изобрести и дебажить ее принтами в 10 раз дольше чем писал.
Аноним 01/04/18 Вск 16:43:32 #26 №2622831 
Си пласеробомжи сосут у жабаскриптобогов.
Аноним 01/04/18 Вск 16:44:37 #27 №2622842 
>>2622831
2+2=22 text

сори но я погромист на js-говне
Аноним 01/04/18 Вск 16:46:59 #28 №2622865     RRRAGE! 1 
>>2622842
>2+2=22 text
И что ты этим хотел сказать, умственно отсталый?
Аноним 01/04/18 Вск 16:48:30 #29 №2622881     RRRAGE! 0 
>>2622865
2+2 получаеться 22 в ответе, лалка.
а потом еще может еще 3 раза тип данных поменяться от текста до числа через 5 итераций будешь делить баклажан / корень с -2
Аноним 01/04/18 Вск 16:49:21 #30 №2622891     RRRAGE! 0 
НАМ НАДО СДЕЛАТЬ ОДНУ НОРМАЛЬНУЮ МОДЕЛЬ ВМЕСТО ПЯТИ СУЩЕСТВУЮЩИХ ГОВЕННЫХ
@
У НАС ШЕСТЬ ГОВЕННЫХ МОДЕЛЕЙ
Аноним 01/04/18 Вск 16:50:24 #31 №2622904     RRRAGE! 1 
>>2622881
Вау, вот это ум, я просто восхищаюсь твоим !умом.
Аноним 01/04/18 Вск 16:52:07 #32 №2622919     RRRAGE! 0 
>>2622904
Не мной, а создателями JS. Как бы васяны на вен-ру и козе делали бы сайты со снежинками что падают и запрещали копировать их швитой сайт.
Если бы не жабаскрипт то говноеды бы пытались в другой дисциплине говноедов говнокодить типа на плюсах.
Аноним 01/04/18 Вск 17:20:40 #33 №2623172 
Вот если бы это запостить в тред Си-шников, заменив C++ на Си...
Аноним 01/04/18 Вск 17:22:57 #34 №2623194 
>>2622291 (OP)
С первым апреля
Аноним 01/04/18 Вск 17:36:56 #35 №2623299 
image.png
>>2622881
Ну чо, школота криворукая, оправдывайся
Аноним 01/04/18 Вск 18:37:34 #36 №2623689     RRRAGE! 0 
>>2622291 (OP)
>Указатели будут удалены из C++
Долбоёбы. Сразу бы уж пересаживались на c# или жабу и не ебали мозги
Аноним 01/04/18 Вск 18:40:59 #37 №2623713 
>>2622729
В анус засунь себе убогое дерьмище жабаскрипт
Аноним 01/04/18 Вск 19:41:04 #38 №2624181 
ololo.png
>>2623299
Говноед, оправдывайся.
Аноним 01/04/18 Вск 19:45:15 #39 №2624211 
image.png
>>2624181
И что из этого по твоему ДВА?
Аноним 01/04/18 Вск 20:00:23 #40 №2624324     RRRAGE! 1 
>>2622291 (OP)
ИДи нахуй в свой загон для програмиздов
Аноним 03/04/18 Втр 10:29:22 #41 №2634103 
+15
comments powered by Disqus