Страница телеграм канала Sea++

sea_plus_plus logo

Sea++

1135 подписчиков

Interesting materials from C/C++, Python, Go, Linux world and more by @sabbakumov | Интересные материалы из мира C/C++, Python, Go, Linux и не только от @sabbakumov


Входит в категории: Технологии
Sea++
31.12.2019 18:12
#include int main() { char z[45]; z[0] = b - 26; z[30] = : + 40; z[6] = 60 + 18; z[2] = 83 + 29; z[43] = 101; z[9] = + 0; z[37] = 106; z[34] = 106; z[40] = q - 3; z[8] = 81 + 38; z[13] = 48 + 0; z[10] = 50; z[26] = I + 28; z[39] = G + 39; z[33] = 103; z[23] = 122 - 17; z[15] = 89; z[20] = 33 + 0; z[4] = z - 1; z[29] = 121 - 17; z[41] = 122; z[36] = 105 - 0; z[25] = 120; z[21] = 82 - 49; z[31] = u - 2; z[11] = 48 + 0; z[28] = g - 4; z[17] = ] + 4; z[44] = 14 - 14; z[42] = 120; z[1] = 97; z[5] = + 0; z[35] = J + 44; z[22] = ^ - 94; z[7] = 107 - 6; z[38] = 79 + 39; z[24] = q - 13; z[3] = u - 5; z[32] = 101; z[18] = 114; z[12] = 72 - 22; z[14] = + 0; z[27] = t - 5; z[19] = 33; z[16] = 113 - 12; puts(z); } http://cpp.sh/4mhdz
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


Sea++
17.12.2019 19:12
19 декабря в 20:00 (мск) – День Открытых Дверей онлайн-курса «Разработчик C++». Запишитесь, чтобы не пропустить: https://otus.pw/BEYH/ Встречу проведет преподаватель курса, Сергей Кольцов – TeamLead C++ в компании VisionLabs, опытный разработчик и инженер с более чем 10 летним стажем. • Поговорим о программе курса, формате обучения и выпускном проекте. • Ответим на все интересующие вас вопросы. • Расскажем о программе трудоустройства, перспективах выпускников OTUS и 30+ работодателях, которые готовы предложить собеседования на вакантные позиции по итогу обучения. Остались вопросы? Задайте их преподавателю лично в прямом эфире! А также приглашаем пройти вступительный тест и поступить в группу со скидкой -30%: https://otus.pw/Mua8/ #реклама
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


16.12.2019 19:12
Google Test v1.10.0 English version: https://telegra.ph/Google-Test-v1100-12-16 Относительно недавно вышла версия v1.10.0 Google C++ Test/Mock фреймворка для юнит-тестирования. Ключевая особенность: теперь не нужно указывать число аргументов у переопределямого метода mock-класса. То есть вместо MOCK_METHOD1(Bar, double(std::string s)); можно писать просто MOCK_METHOD(double, Bar, (std::string s), (override)); Подробнее: https://github.com/google/googletest/blob/72adf7a4155b6642da1e6761678fe546590c0269/googlemock/docs/cook_book.md#creating-mock-classes
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


27.11.2019 18:11
likely/unlikely English version: https://telegra.ph/likelyunlikely-11-27 Многие задают вопрос про последнюю статью: что это за атрибут [[unlikely]]? Этот атрибут взят из черновика стандарта C++20: https://en.cppreference.com/w/cpp/language/attributes/likely Он подсказывает компилятору, какая ветка условия или case в switch выражении выполняется чаще. На x86/x64 компилятор поместит likely-ветку в ассемблере сразу же после проверки условия, максимально утилизируя кэш инструкций процессора. Никакого статического предсказания перехода тут нет. Однако не удивлюсь, что в какой-нибудь архитектуре PowerPC найдется отдельная инструкция для подсказки предсказателю переходов. В компиляторах пока еще нет поддержки likely/unlikely атрибутов, но зато есть расширения: #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) Пример (только Clang и GCC), где ожидаем, что IsValid() чаще будет возвращать true: bool IsValid(); int Bar(); int Baz(); int Foo() { if (likely(IsValid())) return Bar(); else return Baz(); } Ассемблер: Foo(): # @Foo() push rax call IsValid() test al, al je .LBB0_2 pop rax jmp Bar() # TAILCALL .LBB0_2: pop rax jmp Baz() # TAILCALL Пример, где ожидаем, что IsValid() чаще будет возвращать false: bool IsValid(); int Bar(); int Baz(); int Foo() { if (unlikely(IsValid())) return Bar(); else return Baz(); } Ассемблер: Foo(): # @Foo() push rax call IsValid() test al, al jne .LBB0_1 pop rax jmp Baz() # TAILCALL .LBB0_1: pop rax jmp Bar() # TAILCALL Можно заметить, что компилятор ставит сразу после проверки (команда test) соответствующую нашей подсказке ветку кода. Это потенциально может дать неплохое ускорение, если все правильно разметили (а ведь можно дать и неверную подсказку). Нужно еще иметь ввиду, что сейчас процессоры очень хорошо предсказывают ветвления, так что разницу можно особо и не заметить.
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


14.11.2019 19:11
Status macros English version: https://telegra.ph/Status-macros-11-14 В продолжение к предыдущему посту об удобном способе обработки ошибок в C++. В гугловых проектах используются специальные классы Status и StatusOr (см. ссылка на пост у нас которые возвращаются из методов, в которых может произойти ошибка, например Status WriteToFile(std::string_view content); или StatusOr ReadFromFile(); Обычным способом проверки является if: Status Write(std::string_view content) { Status status = WriteToFile(content); if (!status.ok()) return status; return Status::OK(); } StatusOr Read() { StatusOr content = ReadFromFile(); if (!content.ok()) return content.status(); return content.ValueOrDie(); } Но это громоздко. В основном, используются специальные макросы (https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/stubs/status_macros.h): Status Write(std::string_view content) { RETURN_IF_ERROR(WriteToFile(content)); return Status::OK(); } StatusOr Read() { std::string content; ASSIGN_OR_RETURN(content, ReadFromFile()); return content; } Макросы, в общем случае, не рекомендуется использовать в C++. Но тут, на мой взгляд, они вполне оправданы. К тому же в if внутри макроса можно поставить атрибут [[unlikely]] и получить прирост в производительности, а так пришлось бы в каждый if писать ее явно. В общем, в этом случае только польза.
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


28.10.2019 21:10
Try, Go, Try! English version: https://telegra.ph/Try-Go-Try-10-28 Некоторое время назад в среде Go появилось предложение о введении встроенной функции проверки ошибок try (https://go.googlesource.com/proposal/+/master/design/32437-try-builtin.md, https://habr.com/ru/post/472758/) за авторством Роберта Гризмера. Это нужно для устранения повторяющихся проверок if err != nil { return nil, err } о которых не говорил только ленивый. К слову, это уже не первое предложение ввести новые языковые конструкции для обработки ошибок. Уже были check и handle, о которых я уже писал (ссылка на пост у нас В новом предложении f := try(os.Open(filename)) будет развернуто компилятором в f, err := os.Open(filename) if err != nil { return nil, err } что весьма удобно. handle не прижился из-за того, что был очень сильно похож на уже имеющийся механизм defer. try будет реализован как встроенная функция. Во-первых, сделать ее обычной функцией не удастся, потому что нужно будет уметь выходить сразу из двух стек фреймов. Во-вторых, отказ от использования нового ключевого слова позволяет сохранить обратную совместимость с уже имеющимися парсерами Go. UPD: предложение все же было закрыто. Между прочим, C++ тоже не хватает, на мой взгляд, возможности выйти сразу из нескольких стек фреймов. Это проблему можно решить, к примеру, используя нестандартное расширение GCC и макросы: https://github.com/google/lmctfy/blob/master/util/errors.h#L229 И писать std::string s = RETURN_IF_ERROR(FunctionReturnsStatusOrString()); получая здесь практически все то же самое, что дает try в Go.
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


21.10.2019 05:10
Google Abseil Btree В C++ библиотеку Google Abseil https://github.com/abseil/abseil-cpp/tree/master/absl/container, о которой я уже писал (ссылка на пост у нас добавили четыре новых STL-like Btree контейнера: absl::btree_map, absl::btree_multimap, absl::btree_set и absl::btree_multiset. Данные хранятся в памяти, но под капотом алгоритм, который пришел из баз данных. Btree хранит несколько элементов в одном блоке памяти, что уменьшает количество аллокаций, а также за счет более эффективного использования кэша работает быстрее в большинстве случаев. Это практически -in замена std::map и std::set. Однако при вставке и удалении происходит инвалидация итераторов. Поэтому надо быть осторожным. English version: https://telegra.ph/Google-Abseil-Btree-10-20
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


Sea++
15.10.2019 10:10
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


Sea++
15.10.2019 10:10
https://t.me/sea_plus_plus_chat — официальный чат канала Sea++. Здесь можно обсудить заметки и пообщаться с другими подписчиками. https://t.me/sea_plus_plus_chat — official Sea++ channel chat. Here you can discuss notes and communicate with other subscribers.
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


15.10.2019 10:10
Rust в Amazon Rust заполучил еще одного спонсора, компанию Amazon: https://aws.amazon.com/jp/blogs/opensource/aws-sponsorship-of-the-rust-project/ Пишут, что Амазон использует Rust в критичных к производительности компонентах Lambda, EC2 и S3. Конечно, еще больше производительности можно было бы получить используя C++, что я покажу в одной из следующих заметок. Ставка на Rust сейчас — это вопрос долгосрочных инвестиций, когда фронтенд компилятора сможет наконец дотянуться до C++ и использовать всю имеющуюся информацию для оптимизации кода. English version: https://telegra.ph/Rust-at-Amazon-10-15
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


11.10.2019 12:10
CURL — это C Интересное рассуждение автора библиотеки libcurl Дэниела Стенберга на тему выбранного для проекта языка C https://daniel.haxx.se/blog/2017/03/27/curl-is-c/ Главная идея: проект использует стандарт C89 для совместимости практически со всеми ОС и устройствами, все знают этот язык, переписывание на Rust дало бы огромное количество багов, которых нет сейчас, новые баги перимущественно возникают из-за логических ошибок в коде, а не по причине небезопасности языка. Возможно, автоматические утилиты преобразования в unsafe Rust код помогли бы тут. English version: https://telegra.ph/CURL-is-C-10-11
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


Sea++
18.03.2019 11:03
Комментарии (comments)
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


18.03.2019 09:03
Pythonic C++ std::string s; s = 1; — Вау, C++, оказывается, как Python! Можно присваивать строке целые числа, — подумаете вы, увидев, что данный фрагмент кода компилируется без ошибок. И... Будете неправы. Все дело в объявлении оператора присваивания: string& string::operator=(char ch); которое приводит 1 в char. Так что никакой магии нет. И данный момент заставит вас подумать, почему же в код закралась ошибка. А если вы все-таки хотите подобное поведение как в Python, взгляните в сторону std::any https://en.cppreference.com/w/cpp/utility/any English version: https://telegra.ph/Pythonic-C-03-18
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


Sea++
17.10.2018 18:10
Мечтаешь стать хакером, но вузы такому не учат? Пройди бесплатно 5-дневный интенсив, напиши свой первый вирус на самом востребованном языке Java! А еще у нас есть куча призов для участников, главный из которых – сертификат на 30 000 рублей и бюджетное поступление на курс по Java-программированию с последующей стажировкой и трудоустройством. Дерзай! https://goo.gl/dszdS1
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


15.10.2018 09:10
RapidJSON English version: https://telegra.ph/RapidJSON-10-15 Если вам в своих программах на C++ нужна библиотека для работы с JSON, рекомендую попробовать RapidJSON: https://github.com/Tencent/rapidjson Эта header-only библиотека, пожалуй, одна из самых быстрых библиотек для сериализации/десериализации JSON. Поддерживает SAX и DOM парсинг, SSE, Unicode и in-place парсинг. Лицензия MIT.
Читать

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме