Pull to refresh
119
0.2
Send message

Что за бред? Undefined behavior это как раз то, ЧТО ЯВНО прописано в стандарте как неопределённое поведение

Хватит критиковать вымышленный вами же псевдоС++

Ни на что не намекаю, цитата из статьи:
clang++ -target arm-linux-gnueabihf  main.cpp

Финализируют работу программы автоматически вызванные деструкторы. И std::terminate. В случае крайней небходимости std::terminate_handler. Ни в коем случае эта логика не должна стоять над каждым выделением памяти, особенно учитывая что оно ДОЛЖНО быть неявным в современном С++(то есть без явного new)

В итоге для 99% программ достаточно

int main() try {
...
} catch (std::bad_alloc&){
}

и что это за магические слова? Что они должны означать? Зачем это?

Необходимость рефлексии очень преувеличена. Рантайм рефлексия - безусловное зло, не привносит никаких дополнительных возможностей, зато усложняет понимание кода многократно, сильно снижает производительность и увеличивает сложность реализации компиляторов.

Статическая рефлексия в том виде, что её предлагают тоже избыточна, пример с узнаваниями названий из enum, такая библиотека уже есть и написана она на обычном С++ без всякой рефлексии, называется magic enum.
Насчёт сериализации - таки тоже уже есть, вот пример библиотеки для бинарной сериализации, где описанием формата является тип из С++ единственное что нужно написать программисту чтобы его тип стал поддерживаться - using enable_magic = std::true_type;
Плюс всяческие алгоритмы работы с таким типом как с туплом и общие алгоритмы типа tuple cat / construct from tuple и прочие
https://github.com/kelbon/UndefinedBehavior_GoldEdition/blob/master/include/kelbon_serialization.ixx

Может вы хотя бы годболтом научитесь пользоваться? Или вы на глаз компилируете?

легко запутаться, что является источником ошибок

То ли дело макросы, там нет источников ошибок и всё просто, а главное производительно, современно и понятно

Заглянул в реализацию - шаблоны разеделены на хедеры и cpp, всё, это уже автоматически ifndr, не используются универсальные ссылки вообще

Вы слышали про std::sort который принимает любой компаратор? Про то что можно создавать ссылки на поля, типа
template<typename C, typename T>
auto Foo(T C::* value) {
return 10;
}

Зачем всё сделано на макросах?

ты реально не понимаешь что тебе всё равно придётся проверить ошибка там или нет?

обработка битов медленнее обработки байтов. Так что нет, это не быстрее. А платят разработчикам серверных и прочих приложений за качественный код, который потом можно редактировать, а не копаться в битах и разбираться почему после изменения sizeof структурки всё упало

  1. Экономить на спичках и желание чтобы оператор ++ НЕ ВЫДЕЛЯЛ ПАМЯТЬ это несколько разные вещи

  2. Если сделать там 0, то всё ещё будет вести себя не как обычное число

не хочу вас разочаровывать, но там ещё operator++ память выделяет. Как и неявное преобразование инта к этому длинному инту

Мув конструктор не является noexcept что заставит вектор и другие стандарнтые контейтнеры ооочень много оверхедить

Что-то как-то не сходится, вы считаете байты при копировании memcpy, но при этом не считаете оверхед на выделение памяти + обращение по поинтеру + проблемы с кешом проца в вопросе операций с числами, странновато не правда ли?

int x = 5;

int y = std::move(x);

std::cout << x;

Это должно быть валидной операцией в том числе при подмене int на ваши "числа", но это сломает код по факту. Итог - ваши числа не ведут себя как числа.

Боюсь проблема тут в самом существовании такого взаимодействия языков и исправлять это нужно просто написанием отдельных модулей на конкретных языках без всяческих связей через кривотню

Что будет если realloc вернёт ошибку? И ведь его ошибка не такая, что случится только если вся память завалена как у обычного выделения памяти.

Где поддержка аллокаторов тогда?(это не аллокатор)

Потеря производительности при обращении по указателю каждый раз?

Выигрыш производительности только в случае если move, но все кто мувает число считает, что в старом значении валидное опять же число.

А вы экономите на memcpy 2-10 байт теряя на обращении через поинтер каждый раз и ломаете семантику поведения, ваши числа ведут себя не также как обычные инты

Кстати, realloc в С++ это вообще по умолчанию УБ, т.к. на компиляции неизвестно что делать с лайфтаймами объектов

Простите что я тут вижу вообще? Это С?

По описанию "проблем" с другими библиотеками и описанию достоинств своей выглядит, что вы не совсем разбираетесь в плюсах, например почему компиляция из исходников это проблема? Почему поддержка gcc и msvc это кросплатформенность?

  • Header-only (по умолчанию, с возможностью включить опцию компиляции).

Что это вообще значит? Опция чтобы компилировалось? Что насчет поддержки С++20? Почему так явно перечислены 11 14 17?

Я бы объяснил так, при индексе >= 4 - уб. Тогда i всегда < 4, тогда цикл бесконечный. В этом бесконечном цикле только один выход - return true, значит он когда то и случиться, можно оптимизировать до return true

Правильные выводы, просто расценивать нужно политику не как "дурачки ниче не понимают тут дурь сказали там дурь сказали, плохой закон приняли", а как реальную последовательную политику государства, они очень чётко понимают что делают и зачем. По сути вся экономика монополизирована, а дальше происходит некий картельный сговор с участием государства который нацелен просто против людей и их зарплат

Обсессивно-компульсивное расстройство это проблема, не нужно навязывать его всем во всех языках программирования

если ты входишь в 0% тех, кому это нужно на релизе, то ты используешь метод at() и проверяешь всегда

Вообще C++ тащит много хлама (генераторы числовых распределений?) в рантайм

Это вообще о чём? Про какой мир общаемся?

std::unordered_map в котором нельзя проверить строковый ключ, не создав строку

наверное нужно было посмотреть какие шаблонные параметры есть у этого класса и окажется, что возможность добавить такое вдруг появится. К тому же в новых стандартах ещё добавляют фич связанных с этим

Но при этом нет строкового пула "из коробки"

Опять не пойми из какого мира вообще это, что за стринг пулы? Откуда в списке вью, строка, указатель появились lvalue const lvalue и т.д.?

Есть std::function и std::bind, но нет функции, создающей std::function из указателя на нестатическую функцию класса

Опять же, в моём С++ почему то это есть и работает ровно как от них ожидаешь

https://godbolt.org/z/s88s681M6

Information

Rating
2,406-th
Registered
Activity