std::string_view data;
std::string buffer;

if (some_condition)
{
    buffer = some_call();
    data = buffer;
}
else
{
    data = "default";
}

some_action(data);

Якщо цей простий код показати статичним аналізаторам, то багато з них, якщо не всі, скажуть, що цей код смердить.

Чому? Звісно тому, що у buffer занадто outer scope, it can be moved to the inner one.
Ну а потім, звичайно, join declaration and assignment.
І add const, щоб все по фен-шую було.

Про наслідки такого покращення здогадайтеся самі.

Rust

Dec. 3rd, 2021 11:45 pm
Я с сабжем не знаком от слова совсем, кроме разве что "там есть borrow checker", что бы это ни значило.

Но попалась ссылка на туториал:



Стал смотреть, и, внезапно, даже все понятно.
Весьма толково освещены основные проблемы C++ (lifetime & aliasing) и показано, как раст их решает.
Все по делу, кто сталкивался, тот поймет.

Досмотрел видео, проникся, пошел читать про раст.
И что я вижу?
В языке нет исключений.

В ЯЗЫКЕ НЕТ ИСКЛЮЧЕНИЙ.
.
.
.
KURWA.

Я не понимаю, кем надо быть, чтобы после 70 или скольки там лет развития индустрии продолжать сочинять языки без исключений.

И вообще, почему каждый очередной "убийца C++" с самого рождения себе что-то отстреливает?

On C++17

Oct. 7th, 2016 07:34 pm
Ну чо. Модулей нет. Рефлексии нет. UCS нет. Дистанционно управляемых унитазов нет (после 13 лет разработки). Даже дефолтных, censored, операторов сравнения нет. Последнее добивает особенно и показывает всю гнилую сущность design by committee: казалось бы, вот есть хороший пропозал: генерить всё по умолчанию, сравнивать все мемберы, не устраивает - делай =delete или пиши реализацию. Идеально сочетается с операцией присваивания, принимайте же уже, censored. Но нет, обязательно на свет вылезет мудак с альтернативным складом мышления, предложит сначала opt in, потом игнорировать указатели, потом mutable, потом floating point, переманит на свою сторону слабых духом и всё, комитет разосрался и не может принять решение.

Эпичнее был только std::thread, где эти клоуны тоже не пришли к конценсусу, что же именно надо делать в деструкторе - detach или join, и в результате засунули свою импотенцию в стандарт, сделав terminate - ипитесь сами, господа.

std::string_view. Лучше бы ranges допилили, чем это чудо, которым некоторые особо одарённые уже предлагают заменять std::string чуть ли не на автомате. Я понимаю, что эти люди живут в своём уютном, абстрактном мире с юникорнами и радугой, но у нас здесь язык, как правило, опирается на всякий platform-specific API, в котором строки с \0 всегда (\0 сам по себе отдельный, чорный, волосатый censored. Спасибо тебе за него, D. R. Мы будем поминать тебя незлым тихим словом после каждого strlen). А вот в string_view, внезапно, не всегда. Ждём новых забавных багов.

Или вот int std::uncaught_exceptions(), Знаковый тип, да-да. Наверное, бывают и отрицательные результаты, я правильно понимаю?

Bunch of trolls, constantly bitching about the cost of a fuction call or moving a pointer and whatnot, instead of coming up with something useful and slightly not ugly.
Дано:
const char* foobar = "foobar";
std::string temp(foobar, 3);
assert(temp == "foo");


Теперь лёгким движением руки модернизируем код:
std::string foobar = "foobar";
std::string temp(foobar, 3);
assert(temp == "foo");

И... Ай, что это?

Будь осторожен, юный падаван. Не всегда "компилится" == "работает".
Поищи в своих исходниках string\s*?\w+\s*?\(\s*?\w+?\s*?,\s*?\w+?\s*?\) и проверь, что оно везде делает то, что задумано - возможно, ты уже накосячил.

P.S. Добрые дяди из комитета не сидят, сложа руки: в C++14 аналогичные свиньи подложены в string::assign и string::append.

June 2025

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 9th, 2025 04:11 am
Powered by Dreamwidth Studios