Я признателен тем, кто даёт обратную связь. За следующий вопрос, спасибо одному из читателей.
Выражение из скольки подряд идущих точек НЕ может быть представлено в C++:
Выражение из скольки подряд идущих точек НЕ может быть представлено в C++:
Anonymous Quiz
11%
1
7%
3
13%
5
6%
4
32%
4 и 5
3%
6
5%
4 и 6
3%
5 и 6
19%
4 и 5 и 6
В ближайшее время я расскажу, почему ответы именно такие, какие они есть. А так же, расскажу о:
- Оптимизационный трюк о котором вы могли не знать:
- Иногда решение всем известных задач, может удивлять. В GCC, кажется, не знают, в boost, тоже. Да и вообще, на простарах сети я ничего подобного не нашёл. Не хочу раскрывать детали и подробности, но поверьте мне, эту задачу, вы наверняка решали и не один раз... Но, скорее всего, не так, как её решил я.
- Тред Пулы или о том, как я JobStealing писал.
- TBB - как много в этом слове... машинных инструкций :) Конечно, любая задача для меня - это challenge, и в данном случае, мне удалось оставить не у дел сам Intel TBB. Хотя... Не в первый раз.
- О переводах чисел с плавающей запятой в строки, и обратно.
- Первые решения этой задачи запросто уходили в десяток тысяч строк кода. У меня есть кое-что получше. Не только у меня, но мне кажется....
- То, что вам могли не рассказать на Лекциях по Аналитической Геометрии.
- Gradients... Gradients...
- Наверное, дорасскажу о JeMalloc, а продолжу - другими Аллокаторами.
- JeMalloc & Co.
- Шейдеры, шейдеры: магия, доступная каждому.
- ...
Наверное, что-то ещё... Уверен :) Нет, знаю!
#coming_soon
- Оптимизационный трюк о котором вы могли не знать:
- Иногда решение всем известных задач, может удивлять. В GCC, кажется, не знают, в boost, тоже. Да и вообще, на простарах сети я ничего подобного не нашёл. Не хочу раскрывать детали и подробности, но поверьте мне, эту задачу, вы наверняка решали и не один раз... Но, скорее всего, не так, как её решил я.
- Тред Пулы или о том, как я JobStealing писал.
- TBB - как много в этом слове... машинных инструкций :) Конечно, любая задача для меня - это challenge, и в данном случае, мне удалось оставить не у дел сам Intel TBB. Хотя... Не в первый раз.
- О переводах чисел с плавающей запятой в строки, и обратно.
- Первые решения этой задачи запросто уходили в десяток тысяч строк кода. У меня есть кое-что получше. Не только у меня, но мне кажется....
- То, что вам могли не рассказать на Лекциях по Аналитической Геометрии.
- Gradients... Gradients...
- Наверное, дорасскажу о JeMalloc, а продолжу - другими Аллокаторами.
- JeMalloc & Co.
- Шейдеры, шейдеры: магия, доступная каждому.
- ...
Наверное, что-то ещё... Уверен :) Нет, знаю!
#coming_soon
🤔1
Ну и говоря о том, куда пропал и почему все вдруг резко встало, замечу:
Честные 100Гбит/Сек с одной сетевой карточки(Mellanox, например) - реальность, даже если papers говорят обратное(да, какие-то части Ядра Linux, можно и переписать...)
#JobНу что, вот и объяснительная:
Понятно, что одна точка, это использование оператора '.' или, оператора '.*', например.
Три точки - VA_ARGS Template Parameter Pack или Функции с неизвестным числом параметров(printf, например).
Шесть точек - объединение VA_ARGS Template Parameter Pack и Функций с неизвестным числом параметров. Такой подход находит свое применение в type_trait-е определения функции is_function:
https://en.cppreference.com/w/cpp/types/is_function
И, наконец, самое интересное, это 4 точки:
Выражения свертки(C++17) + оператор '.*'. Да, использовать обычный '.' запрещено, а вот '.*' - можно.
https://en.cppreference.com/w/cpp/language/fold
#answers #quiz
Понятно, что одна точка, это использование оператора '.' или, оператора '.*', например.
Три точки - VA_ARGS Template Parameter Pack или Функции с неизвестным числом параметров(printf, например).
Шесть точек - объединение VA_ARGS Template Parameter Pack и Функций с неизвестным числом параметров. Такой подход находит свое применение в type_trait-е определения функции is_function:
https://en.cppreference.com/w/cpp/types/is_function
И, наконец, самое интересное, это 4 точки:
Выражения свертки(C++17) + оператор '.*'. Да, использовать обычный '.' запрещено, а вот '.*' - можно.
https://en.cppreference.com/w/cpp/language/fold
#answers #quiz
Магические числа в начале того или иного файла, могут использоваться не только для идентификации используемого формата, но и для определения того, в каком порядке байт(little / big endian) была произведена запись файла, то есть, в каком порядке нам следует его читать. За примером далеко ходить не надо: *.pcap, например.
#magic_numbers
#magic_numbers
Здорово, когда тебя узнают. Всё дело в этой, самой первой моей:
https://m.habr.com/ru/post/312882/
#3d #kd_tree #sah #raytracing
https://m.habr.com/ru/post/312882/
#3d #kd_tree #sah #raytracing
Хабр
Анатомия KD-Деревьев
Эта статья полностью посвящена KD-Деревьям: я описываю тонкости построения KD-Деревьев, тонкости реализации функций поиска 'ближнего' в KD-Дереве, а также возможные 'подводные камни', которые...
В GCC, кстати, можно #include (7 символов, без учёта решётки) заменить на #import (6 символов, без учёта решётки). Краткость сестра таланта, ведь так?
https://wandbox.org/permlink/ieB5oMwoPql0JGkd
#gcc #extension
https://wandbox.org/permlink/ieB5oMwoPql0JGkd
#gcc #extension
wandbox.org
[C++] gcc HEAD 11.0.0 20200529 (experimental) - Wandbox
// This file is a "Hello, world!" in C++ language by GCC for wandbox.
#import
#include
int main()
{
std::cout<<1337;
}
// GCC reference:
// https://gcc.gnu.org/
// C++ la
#import
#include
int main()
{
std::cout<<1337;
}
// GCC reference:
// https://gcc.gnu.org/
// C++ la
Окей, задавать вопросы по С++ можно вечно, а что на счет Интересных Решений из той же серии :?
Дано:
С Флагом C++17 - это будет работать прекрасно!
Дано:
struct barМенять foo и bar - не можем. Как вызвать move, не поломав ничего в программе и не используя C++17 :?
{
bar() { std::cout << "bar deft ctor\n"; };
bar( bar&& ) { std::cout << "bar move ctor\n"; };
bar( const bar& ) = delete;
};
template<class T>
const T foo(); // где-то в другой библиотеке, которую мы менять не можем
bar buz()
{
return foo<bar>();
}
int main()
{
auto a = buz();
return 0;
}
С Флагом C++17 - это будет работать прекрасно!
Окей, томить с решением я не стану. Вообще, не знал как выстроить наше с вами общение по этому вопросу. Предлагаю вот такое вот интересное решение:
#cxx #interesting
struct bar
{
bar() { std::cout << "bar deft ctor\n"; };
bar( bar&& ) { std::cout << "bar move ctor\n"; };
bar( const bar& ) = delete;
};
struct bar_wrapper
{
mutable bar wrapped_bar;
};
template<class T>
const T foo(); // где-то в другой библиотеке, которую мы менять не можем
bar buz()
{
return foo<bar_wrapper>().wrapped_bar;
}
Как мне кажется, получилось весьма интересно и красиво. Это то, ради чего затевался пост выше и никак иначе. Я бы назвал этот промежуточный Wrapper - мутатором.#cxx #interesting
Primer_on_reversing_symbian_s60_applications_by_shub_nigurrath_v14.pdf
4.4 MB
Я люблю Data-Oriented Design, а еще люблю C. ECS и GUI? Почему бы и нет:
https://dl.acm.org/doi/pdf/10.1145/3286689.3286703
#ECS #DOD
https://dl.acm.org/doi/pdf/10.1145/3286689.3286703
#ECS #DOD
Так, и ошибка у нас в ...
struct A
{
unsigned int m_a = 1337u;
};
int main()
{
static_assert( std::is_invocable<decltype( &A::m_a ), A>::value ); // 1
std::invoke( &A::m_a, A() ); // 2
return 0;
}
Bonne nuit! Знаю, что посты стали крайне редкими, а обещанные статьи, все никак не дойдут до публикации. Так происходит потому, что я очень-очень-очень люблю свою работу, о чем не стесняюсь рассказывать публично [https://vk.com/id533333]. Работы сложной, интересной и ответственной очень-очень-очень много, и даже сейчас, на ночь глядя, я работаю в офисе :) Тем не менее, кое-что для вас у меня есть:
Дан такой кусочек C++ кода:
UPD: под implementation defined также можно рассматривать conditionally-supported поведение.
Дан такой кусочек C++ кода:
void call_me()
{}
void* ptr_1 = static_cast <void*>( call_me ); // 1
...
void* ptr_2 = reinterpret_cast<void*>( call_me ); // 2
...
reinterpret_cast<void(*)()>( ptr_2 );
// 3
Определите верное описание происходящего.UPD: под implementation defined также можно рассматривать conditionally-supported поведение.
❤1
Говоря о выше написанном, разберем, о том, почему же последние два случая - implementation defined.
Стандарт разделяет понятия pointer to object и pointer to function. Вот, что известно о void*:
P.S: До C++11 такое приведение было illegal.
#cxx #cxx11
Стандарт разделяет понятия pointer to object и pointer to function. Вот, что известно о void*:
The type of a pointer to void or a pointer to an object type is called an object pointer type.
А вот что известно о reinterpret_cast преобразовании function pointer to an object pointer:Converting a function pointer to an object pointer type or vice versa is conditionally-supported. The meaning of such a conversion is implementation-defined, except that if an implementation supports conversions in both directions, converting a prvalue of one type to the other type and back, possibly with different cv-qualification, shall yield the orignal pointer value.
Интересным здесь является появление поведения, именуемого conditionally-supported
[defns.cond.supp] conditionally-supported - "program construct that an implementation is not required to support"
[defns.impl.defined] implementation-defined behavior - "behavior, for a well-formed program construct and correct data, that depends on the implementation and that each implementation documents"
То есть, если описанное не поддерживается, то обязательно должна быть диагностика этого случая.P.S: До C++11 такое приведение было illegal.
#cxx #cxx11
Мы тут, кстати, решили потестировать 'новый' и 'уникальный', безумно 'умный' сервис от Артемия Лебедева - Николай Иронов aka дизайнер, художник и нейросеть для генерации логотипов. Вот, что вышло(коротко - shit merged):
https://tjournal.ru/internet/215408-nikolay-ironov-okolo-tehnicheskiy-obzor-na-to-kak-ya-vykinul-9900
#interesting
https://tjournal.ru/internet/215408-nikolay-ironov-okolo-tehnicheskiy-obzor-na-to-kak-ya-vykinul-9900
#interesting
TJ
Николай Иронов — около-технический обзор на то как я выкинул 9900 — Интернет на TJ
Напоминание: чукча не писатель, текст написан за час на коленке чтобы не дать мажору украсть ваши 9900 рассказав про нейросеть и уникальные крутые логотипы.
Давно уж обещал написать про забавный трюк, и вот... она перед вами, коробка с карандашами...:
https://habr.com/ru/post/522820/
#interesting #publication #c #cxx #optimization
https://habr.com/ru/post/522820/
#interesting #publication #c #cxx #optimization
Хабр
Приключение чисел в ASCII-ландии. Часть 0x01u. Беззнаковые целые числа
Думаю, с переводом чисел в ASCII строки в своей жизни сталкивался каждый программист. В свое время для меня было удивительно узнать, что перевод десятичной цифры в равнозначный ASCII символ – операция...