LINUX.ORG.RU

Избранные сообщения hatred

constexpr в C++ на самом деле не const

Форум — Development

Привет, ЛОР!

Нашёл забавную фишку про C++. Если вкратце, можно сделать, чтобы следующий кусок кода не вываливался с ошибкой при сборке.

int main () {
  constexpr int a = f ();
  constexpr int b = f ();

  static_assert (a != b, "fail");
}

Как это сделать? Об этом написано тут: https://b.atch.se/posts/non-constant-constant-expressions/

Если вкратце, то C++ стал настолько монструозен, что разные части стандарта могут прямо друг другу противоречить, и вместе эти фичи языка дают прямо таки неожиданные результаты. В итоге, можно сделать так, чтобы функция, помеченная как constexpr, на самом деле в каждом вызове выдавала рандомное значение в зависимости от фазы луны. Если очень хочется.

P.S. первый пример из ссылки GCC сейчас обрабатывает корректно и вываливает ошибку из static_assert. Но второй ещё работает в GCC 13. Для Ъ код ниже.

namespace detail {
  struct A {
    constexpr A () { }
    friend constexpr int adl_flag (A);
  };

  template<class Tag>
  struct writer {
    friend constexpr int adl_flag (Tag) {
      return 0;
    }
  };
}

template<class Tag, int = adl_flag (Tag {})>
constexpr bool is_flag_usable (int) {
  return true;
}

template<class Tag>
constexpr bool is_flag_usable (...) {
  return false;
}

template<bool B, class Tag = detail::A>
struct dependent_writer : detail::writer<Tag> { };

template<
  class Tag = detail::A,
  bool    B = is_flag_usable<Tag> (0),
  int       = sizeof (dependent_writer<B>)
>
constexpr int f () {
  return B;
}

int main () {
  constexpr int a = f ();
  constexpr int b = f ();

  static_assert (a != b, "fail");
}

 , ,

hateyoufeel
()

FINAL CUT 0.9.0 - библиотека для создания консольных приложений

Новости — Open Source
Группа Open Source

22 мая, после более полутора лет разработки, состоялся выпуск 0.9.0 C++ библиотеки FINAL CUT, предназначенной для создания приложений с текстовым интерфейсом, не зависящей от библиотек ncurses, termbox или подобных, и распространяемой по лицензии LGPL-3.0.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

uni-algo 0.8.0 - библиотека алгоритмов Unicode для C++

Новости — Open Source
Группа Open Source

uni-algo - быстрая C++ (диалект C++17) header-only библиотека алгоритмов Unicode 15.0, лицензированная как MIT/Public Domain.


Изменения:

  • добавлена поддержка scripts и script extensions (UAX #24);
  • в реализацию сегментации текста добавлена поддержка курсора;
  • оптимизировано конвертирование строк ASCII в UTF;
  • в класс una::error добавлен una::error::code;
  • версии в una::version преобразованы в классы;
  • файл uni_algo/version.h больше не используется несколькими файлами;
  • переименование UNI_ALGO_DISABLE_SHRINK_TO_FIT в UNI_ALGO_NO_SHRINK_TO_FIT;
  • переименование UNI_ALGO_DISABLE_BREAK_GRAPHEME в UNI_ALGO_DISABLE_SEGMENT_GRAPHEME;
  • переименование UNI_ALGO_DISABLE_BREAK_WORD в UNI_ALGO_DISABLE_SEGMENT_WORD;
  • переименование функций поиска в find;
  • переименование класса una::search в una::found.

>>> Подробности

 , , ,

dataman
()

RapidFuzz 3.0.0 и rapidfuzz-cpp 1.11.2 - библиотеки для нечёткого сравнения строк

Новости — Open Source
Группа Open Source

rapidfuzz-cpp - быстрая, SIMD-оптимизированная библиотека на языке C++, реализующая несколько алгоритмов нечёткого сравнения строк и вычисления метрик:

RapidFuzz - основанная на rapidfuzz-cpp библиотека для языка Python.

Лицензия: MIT.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

Файлы через NAT - libjingle или libnice или ...?

Форум — Development

Приветствую, нуждаюсь в совете.

Надо файл перекинуть через пару NATов, свой лисапед на С/C++ я уже попробовал с какой то чужой либой, возвращающей мне параметры ната от чужого STUN сервера - вроде все не сложно, обмениваемся получаемыми параметрами от стуна через какой то сигнальный сервер (в моем случае MQTT), создаем маршрут в НАТе посылкой UDP пакета и погнали качать.

НО во всей этой канители напрягает пара моментов, под которые нужно продолжать пилить лисапед

  1. обеспечение корректности полученных данных
  2. шифрование трафика

Последнее важно, но не так как первое.

Посоветуйте НЕБОЛЬШУЮ широко используемую либу под эти цели???

 , ,

wolverin
()

Sevimon — программа видеоконтроля напряжения мышц лица

Новости — Open Source
Группа Open Source

Программа sevimon предназначена для помощи в контроле напряжения мышц лица через видеокамеру.

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

Sevimon работает следующим образом:

  • на изображении с камеры определяется лицо;
  • лицо сопоставляется с каждой из восьми эмоций (злость, презрение, отвращение, страх, радость, отсутствие эмоций, грусть, удивление)
  • для каждой эмоции даётся некая оценка похожести.

Полученные значения сохраняются в журнале в текстовом формате для последующего анализа программой sevistat.

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

При первом запуске скачиваются модели. После этого программа не требует подключения к интернету и работает полностью автономно.

Подготовлены инструкции для запуска в Linux/UNIX и Windows, а также образ docker для Linux.

Программа написана на Python и распространяется на условиях AGPLv3. Для поиска лиц на изображениях используются наработки проекта Centerface. Для определения эмоций используется проект HSEmotion.

>>> Подробности

 , , ,

ioctl
()

Возможно ли сделать .so обертку над .dll через winelib без исходников

Форум — Development

Есть dll библиотека написанная на си, исходников нет. Есть следующие файлы от библиотеки: .dll, .h, .lib. Возможно ли сделать обертку над .dll через winelib?

Уже пробовал что-то подобное сделать, создав новый dll проект, который является оберткой над библиотекой, после чего пытался собрать это всё через winelib, но неудачно.

 , , ,

freaks338
()

Генератор документов на C++

Форум — Development

Доброе время суток

Кто подскажет годную, Open source, библиотеку для генерации документов наподобие FastRepor.

Заранее спасибо

 , , ,

enep
()

Скрутите свою спираль: Spiral Galaxy Renderer

Галерея — Скриншоты

Spiral Galaxy Renderer — приложение, симулирующее вращающиеся спиральные галактики согласно теории волн плотности Линя и Шу.

Исходники

Онлайн-демо

Подробности

 , , , ,

dataman
()

Средства для получения графа вызовов функций Си(++) статически, имея qt creator

Форум — Development

Доброго времени суток. Есть нужда узнать какие функции из каких вызываются в коде на си/си++. Не в рантайме, а в принципе, кто кого вызывает по коду. Из сред разработки моём распоряжении qt creator, и хочется получить граф (дерево) вызовов посредством статического просмотра кода. Знает ли кто, как это можно сделать посредством creator-а, или может существуют отдельные инструменты, которые проанализировав код, смогут выдать мне такую информацию?

 , , ,

normann
()

c++ библиотека для простого логгирования в stdout

Форум — Development

Добрый день! Я в качестве хобби поковыриваю c++ и понадобилась мне очень небольшая библиотека для логгирования - только в stdout, вывод в файлы не нужен. Что хочется видеть в логе - имя файла, имя функции, текущее время (epoch вполне достаточно), идеально какое то имя треда. Из того что пробовал - boost.log монструозен как зависимостями так и функционалом, это лютый оверхед для меня. Писать свои макросы не думаю что надо, не я же первый кому нужна подобная библиотека.

 , ,

matroskin
()

C++

Форум — Development

Маленькая справка я изучаю С++ нашел две ветки книг какая из них ведёт к лучшему варианту изучение

ПЕРВАЯ

1.Принципы программирование 2.Бьерн Страуструп. Язык программирования C++ 3.Герб Саттер. Решение сложных задач на С++ 4.Герб Саттер. Новые сложные задачи на С++ 5.Г. Саттер, А. Александреску. Стандарты программирования на С++ 6.Мартин Фаулер. Рефакторинг. Улучшение существующего кода 7.Э. Гамма, Р. Хелм, Р. Джонсон и др. Приемы объектно-ориентированного проектирования. Паттерны проектирования 8.Эндрю Таненбаум. Современные операционные системы

ВТОРАЯ

Прата, прата и еще раз прата. До прочтения праты дальше не двигаться принципиально, ибо нечего :)

После праты нужно написать 3-4 игрухи типо тетреса и танчегов на цпп, и пореализовывать классических алгоритмов (все классически перечислять лень их не очень много) (тут жгут CLR и алголист.мануал.ру). Сделать это нужно, потому что идиомы цпп ниприживаются в моске, который не пытался сделать хоть что-то более менее недетское.

После этого нужно попытаться почувствовать stl, будущим джедаям для этого рекомендуется бук «Структуры Данных и СБШ (aka stl)» by Уильям Дж. Коллинз. Нескмотря на const гей-код и очепятки для новичков это лучший бук. Обязательно нужно сделать все «программные проекты», потому что уверен, ты не сделаешь их в п.2. Все задачи и алгоритмы классические, – бук очень полезный.

Если ты действительно преодолеешь п 1-3. но ты достигнешь минимального уровня адекватности (МУА).

Т.е. будешь готов нормально понимать следующие буки -

Дедушка Мейерс долго жог, жжот он и сейчас, выпуская различные си(и далее) квелы по цпп - вариации на тему «const int советов штобы было как можно лучшее и удовлетворительнее». Тебе нужно два издания - 55(последнее) и 35. Причем второе, имхо, следует начать двигать раньше.

Паралельно с п.4 можно начать двигать буки Саттера 87(это русский int operator+(int,int)) и 40.

Параллельно с п.5 можно читаль Саттера+Александреску(вариаци на п. 4-5) и книгу «Скользкие места С++» by Стефан К. Дьюхэст. Причем первую я привел совсем без души, это скорее гайд по советам в буржуинской литературе, а вот вторая приятная, да и полегче п. 4-5.

Если ты не жалкий халявщик и статус безглового формошлепа тебе не вставляет, то при попытке овладеть п. 4-6 ты понял, что вообще ничего не знаешь про шаблоны и паттерны. Подумав еще немного, ты понимаешь, что вообще ничего не знаешь, а ведь после п.4 ты думал, что ты крут и даже иногда понимал, о чем говорят на форумах.

Если ты действительно испытаешь это, то ты получишь шанс на достижение уровня большего минимального уровня адекватности (ШНДУ>МУА).

Тебе обязательно нужен будет темплейт гайд, да не простой, а комплит. Клевый гайд, бп. Наши переводчиги назвали его «Шаблоны ЦПП - справочник разработчега», так что ищи этот бук, он редкий, но он тебе очень нужен, ибо на анатоликсах, ослах и иже с ними волк не видел его.

Вместо уголвно прославишихся GoF, на которых сцылаютцо всякие, волк рекомендует тебе для начала кингу Тротта и ШаллоуеЯ «ШП - новый подход к ООА и ООП». Хороший, простой и понятный бук читается на одном дыхании за 3 дня.

Потом нужно двигать ГоФ конечно. Если ты написал хотя бы 10 программ средней сложности, но ты будешь чувствовть, что ты понимаешь паттерны. Это, конечно же не так, но об этом сегодня я не буду писать.

Потому нужно двигать STL - там дедушка, Остерн и стИпанов жгут.

Потихоньку с п 7-12 нужно двигать буст, причем постоянно. Но двигать его надо не для того, чтобы писать в резюме или рассказывать блондинкам, что ты выучил 0.333f оператора из каких-то либ, а когда он тебе будет нужен. Поверь, он будет тебе нужен.

Нужно вкуривать форумы - тут жгут rdsn и gamedev.ru там можно найти почти любой ответ на любой вопрос.

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

Страуступа читать не надо - он справочник =) Справочники не читают, ими пользуются (с)

Если после п.15 ты думаешь, что твой уровень > ШНДУ>МУА то читай п.1 -15.

 

karpasol
()

Как работать с Makefile-проектами в среде CLion

Новости — Документация
Группа Документация

За последние несколько лет мне пришлось столкнуться с множеством вопросов, которые были сформулированы примерно так: «мой проект не открывается в среде CLion». В свою очередь, это приводило к необходимости из раза в раз объяснять разным людям примерно одно и то же. Статья имеет целью сохранить тот опыт, который был накоплен в процессе анализа десятков разных проектов.

( читать дальше... )

 , , , ,

Bass
()

Как вы используете std::error_code?

Форум — Development

Как вы обычно это используете?

Передаете по ссылке?

void foo(..., std::error_code &e)

Или возвращаете значение?

std::error_code foo(...)
// Или так, потому что первый вариант не всегда удобен
std::variant<stuff, std::error_code> foo(...)

 

Meyer
()

Поделистесь ссылкой на цветовые схемы редактора среды QtCreator.

Форум — Development

Может кто-нибудь знает какой-нибудь ресурс, где есть много цветовых схем для редактора в QtCreator, поделитесь пожалуйста. Сам я нашёл очень мало.

 , ,

normann
()

Хозяйке на заметку: кибибайты в плюсах ми-ми-ми

Форум — Development

Пишем так:

constexpr std::size_t operator""_KiB(unsigned long long int x) {return 1024ULL * x;}

А потом можем писать так:

size = 42_KiB

От нижнего подчёркивания избавиться, кажется, не получится. Ми-ми-ми? Да прямо-таки ололо!

Всем пони по морковке!

 ,

Usruser
()

Документация к языкам программирования

Форум — Development

Всевозможные учебники и книги - это хорошо, но обычно их предлагают купить и часто не совсем дёшево, даже если они описывают базовый уровень. Бесплатным решением, очевидно, является официальная документация. Когда я открыл документацию к python, я был приятно удивлён, что она написана практически как учебник. Для Java вроде бы тоже всё относительно неплохо в этом плане, хотя хотелось бы отдельный оффлайновый pdf.

Мне захотелось скачать себе документацию в подобном виде для C и C++. Зашёл на их официальные сайты, там описание стандарта предлагают получить на сайте ISO за немалые суммы денег. Да и само описание стандарта далеко не для обучения. Хорошо, подумал я, попробую тогда посмотреть документацию к одной из реализаций языка - GCC-CPP, и вижу, что описанное там тоже вовсе не подходит для обучения. Даже описания типов и примеров объявления нет (может плохо искал, но в заголовках не заметил).

Нет, это не тред «подскажите книгу по Сям», таких для начинающих я и сам могу гору насоветовать.

Вопрос следующий: существует ли нормальная доступная бесплатная документация по которой можно изучать C, C++? Официальная документация по другим языкам была бы тоже интересна.


Update

C, C++
Online-ресурсы и учебные пособия для начинающих:

Как дополнение: Рабочая версия стандарта C++14 от 19 ноября 2014 г. (с официального сайта стандарта)


Fortran


Python
В дополнение к официальной документациипереводу руководства Python 3.1):


Object Pascal. Lazarus

Перемещено Klymedy из talks

 , , , ,

grem
()

Трудности перехода. Hex редактор

Форум — Desktop

Посоветуйте более-менее мощный hex-редактор для замены 010 Editor’a (Знаю, есть нативный, но цена как-то высоковата).

Нужно чтобы он

а) был графическим, qt|kde|gtk3

б) поиск/замена текста работала во всех открытых вкладках одновременно

в) имел встроенный скриптовый язык для обработки бинарных данных

На поддержку шаблонов данных и совместимость со скриптами 010 я уже даже не рассчитываю…

Все что я нашел - либо слишком примитивные, или консольные.

Может быть, существует какое-то расширение для vscodium которое так умеет?

 , ,

hargard
()

Qucs-S 0.0.23

Новости — Open Source
Группа Open Source

20 февраля, после длительного перерыва состоялся релиз Qucs-S 0.0.23. Проект полностью портирован на Qt 5 и может быть собран на современных дистрибутивах Linux. Подготовлены репозитории для Debian и Ubuntu.

Qucs-S представляет собой универсальный GUI для SPICE-совместимых движков моделирования электронных схем. В качестве движка рекомендуется Ngspice, но также поддерживается XYCE, SpiceOpus и Qucsator.

( читать дальше... )

>>> Подробности

 , , , ,

DarthVadimius
()

Включена ли у вас программная защита от Meltdown, Spectre и т. п.?

Голосования — Голосования

Чтобы увидеть, используется ли программная защита (mitigations), можно выполнить:

find /sys/devices/system/cpu/vulnerabilities/* | while read i; do echo -n "$i: " | cut -z -d"/" -f7; cat "$i" ; done
Выхлоп со включенными mitigations:
itlb_multihit: KVM: Mitigation: Split huge pages
l1tf: Mitigation: PTE Inversion; VMX: conditional cache flushes, SMT disabled
mds: Vulnerable: Clear CPU buffers attempted, no microcode; SMT disabled
meltdown: Mitigation: PTI
spec_store_bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp
spectre_v1: Mitigation: usercopy/swapgs barriers and __user pointer sanitization
spectre_v2: Mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, STIBP: disabled, RSB filling
tsx_async_abort: Not affected

и с выключенными:

itlb_multihit: KVM: Mitigation: VMX disabled
l1tf: Mitigation: PTE Inversion; VMX: vulnerable
mds: Vulnerable; SMT vulnerable
meltdown: Vulnerable
spec_store_bypass: Vulnerable
spectre_v1: Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers
spectre_v2: Vulnerable, IBPB: disabled, STIBP: disabled
srbds: Not affected
tsx_async_abort: Not affected

Для отключения программной защиты нужно добавить параметр загрузки ядра mitigations=off

  1. Не знаю 222 (47%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. Нет, так как не считаю данные уязвимости достаточно опасными 130 (27%)

    *******************************************************************************************************************************************************************************************

  3. Да, уменьшения производительности не замечаю 74 (16%)

    **********************************************************************************************************

  4. Моя система не подвержена таким уязвимостям 32 (7%)

    **********************************************

  5. Да, уменьшение производительности замечаю, но считаю эти уязвимости достаточно опасными 18 (4%)

    *************************

  6. Нет, так как производительности было недостаточно, но опасаюсь за сохранность данных 16 (3%)

    ***********************

Всего голосов: 492, всего проголосовавших: 474

 ,

r0ck3r
()