LINUX.ORG.RU

Сообщения fsb4000

 

C++ UB: vector<bool>

Форум — Development

Забавный С++

#include <vector>

template <typename T>
constexpr auto f(const T &value) {
    std::vector<T> vec(1, value);
    return vec[0];
}

static_assert(f(true));

Видел небольшую дискуссию начавшуюся с сообщения пользователе о баге в компиляторе, что он не может скомпилировать этот код. Но на самом деле в коде UB и компилятор прав.

А вы видите в этом коде UB?

 ,

fsb4000
()

Рекламщики не любят Java разработчиков?

Форум — Talks

https://imgur.com/a/1D1b2gy

Как думаете под чем были создатели такой рекламы?

 

fsb4000
()

2022 ACCU доклады с конференции

Форум — Development

доступны видео с конференции ACCU 2022: https://www.youtube.com/c/ACCUConf/videos

 ,

fsb4000
()

В Rust-репозитории crates.io выявлен вредоносный пакет rustdecimal

Форум — Talks

https://www.opennet.ru/opennews/art.shtml?num=57169

Разработчики языка Rust предупредили о выявлении в репозитории crates.io пакета rustdecimal, содержащего вредоносный код. Пакет был основан на легитимном пакете rust_decimal и пользовался для распространения сходством в имени (тайпсквоттинг) с расчётом на то, что пользователь не обратит внимание на отсутствие символа подчёркивания, осуществляя поиск или выбирая модуль из списка.

Примечательно, что указанная стратегия оказалась успешной и по числу загрузок фиктивный пакет лишь немного отстал от оригинала (~111 тысяч загрузок rustdecimal 1.23.1 и 113 тысяч оригинального rust_decimal 1.23.1). При этом большинство загрузок пришлось на безобидный клон, не содержащий вредоносного кода. Вредоносные изменения были добавлены 25 марта в версии rustdecimal 1.23.5, которая до выявления проблемы и блокирования пакета была загружена около 500 раз (предполагается что большая часть загрузок вредоносной версии совершена ботами) и не была использована в зависимостях у других пакетов, присутствующих в репозитории (не исключено, что вредоносный пакет был в зависимостях у конечных приложений).

 

fsb4000
()

Релиз набора компиляторов GCC 12

Форум — Talks

На Opennet новость появилась:

https://www.opennet.ru/opennews/art.shtml?num=57145

На что стоит обратить внимание при портировании на gcc 12: https://gcc.gnu.org/gcc-12/porting_to.html

Header dependency changes

Some C++ Standard Library headers have been changed to no longer include other headers that were being used internally by the library. As such, C++ programs that used standard library components without including the right headers will no longer compile.

The following headers are used less widely in libstdc++ and may need to be included explicitly when compiled with GCC 12:

    <memory> (for std::shared_ptr, std::unique_ptr etc.)
    <iterator> (for std::begin, std::end, std::size, std::istream_iterator, std::istreambuf_iterator)
    <algorithm> (for std::for_each, std::copy etc.)
    <utility> (for std::pair)
    <array> (for std::array)
    <atomic> (for std::atomic)

Интересно многие ли проекты не включали все необходимые заголовочные файлы?

 

fsb4000
()

Firefox умирает?

Форум — Talks

Доля рынка уже почти в 3 раза меньше чем у Edge:

Chrome  74.04%
Edge    12.87%
Firefox 4.68%

источник

Я всё ещё пользуюсь firefox, так что надеюсь авторы его не забросят.

 ,

fsb4000
()

новости про C23

Форум — Development

Как-то я пропустил эту статью от 28 февраля: https://thephd.dev/ever-closer-c23-improvements

Кратко о том что приняли нового в С23, и какие предложения отвергли. (в статье расписано более подробно)

Приняли:

  • N2935 Make false and true first-class language features
  • N2927 typeof
  • N2653 N2828 char8_t and Unicode Improvements!
  • N2900 Consistent, Warningless, and Intuitive Initialization with = {}
  • N2826 unreachable()
  • N2829 Make assert() macro user friendly for C and C++
  • N2432 N2841 K&R Function Declaration AND Definitions are 🪦
  • N2808 allow 16-bit ptrdiff_t again
  • N2778 Separating Variably-Modified Types from Variable Length Arrays
  • N2775 Literal Suffixes for _BitInt(N) types
  • N2701 @, $, and backtick are added to the source character set
  • N2764 [[_Noreturn]]
  • N2840 Make call_once mandatory

К сожалению часть предложений была отклонена от включения в С23:

  • N2896 #once and #once YOUR_GUARD_ID_HERE, to reduce include guard spam
  • N2895 N2892 defer, Lambdas
  • N2859 break break;, break continue;, break break continue;
  • N2917 constexpr

Также хочу скопировать из статьи пояснения по поводу defer и constexpr

defer, Lambdas, and similar were voted down, but still have consensus to proceed for a timeline beyond/after C23. I’ve personally volunteered to direct and maybe even steer the effort for Lambdas. defer might come along for the ride since it’s basically in the same vein when it comes to what variables are available for defer. Spoiler: we’re going to be pursuing barebones, simple defer that is block-scoped (to the nearest braces, or conditional/etc. if the braces are omitted). This is mostly to save us from making the same design mistake Go did, where they have a defer that may dynamically allocate (?! Jesus Christ!) or other complete nonsense.

other complete nonsense - ссылка на твит с таким текстом:

And this blocks

  for i := 0; i < 100000; i++ {
    mutex.Lock()
    defer mutex.Unlock()
    *counter += 1
  }

Is there anything in Go that is not broken?

constexpr - an extremely watered down version compared to C++ that is super simple and deliberately intended not to be much more than updated ways of handling constants in C - did not die. There is strong support to work on it, albeit it might not make C23. Which is perfectly okay, as long as it stays alive!

 ,

fsb4000
()

В ожидании GCC 12.1

Новости — Разработка
Группа Разработка

GCC - это набор компиляторов языков программирования от GNU.

Релиз GCC 12.1 ожидается в апреле 2022.

GCC 12 уже является системным компилятором Fedora 36. Также GCC 12 доступен в Red Hat Enterprise Linux в Red Hat Developer Toolset (версии 7) или Red Hat GCC Toolset (версии 8 и 9).

В GCC 12

  • улучшили поддержку OpenMP 5.0

  • реализовали поддержку ADA 2022 (флаг -gnat2022)

  • реализовали некоторые возможности следующего стандарта С: C2X (флаг -std=c2x или -std=gnu2x)

  • реализовали часть возможностей С++23.

Более подробное описание реализованного только про новые возможности компилятора С++ без учёта стандартной библиотеки.

В GCC 12 реализовали часть возможностей C++23. Без указания флага стандарта в g++-12 используется -std=gnu++17, чтобы использовать возможности описываемые далее нужно компилировать с флагами -std=c++23 или -std=gnu++23.

Реализованные возможности C++23:

  1. if consteval

Хотя уже в C++20 появились consteval функции, которые могут выполнятся только во время компиляции и был std::is_constant_evaluated (), но была проблема их совместного использования

#include <type_traits>

int slow (int);
consteval int fast (int n) { return n << 1; }

constexpr int fn (int n)
{
  if (std::is_constant_evaluated ())
    return fast (n); // 'n' is not a constant expression
  else
    return slow (n);
}
constexpr int i = fn (10);

https://godbolt.org/z/Yhbqq6K36

P1938R3 представил if consteval который позволяет использовать consteval функции внутри constexpr:

#include <type_traits>

int slow (int);
consteval int fast (int n) { return n << 1; }

constexpr int fn (int n)
{
  if consteval {
    return fast (n); // OK
  } else {
    return slow (n);
  }
}

constexpr int i = fn (10);

https://godbolt.org/z/Kxs6Wjfq6

Заметьте что if consteval требует {} в отличие от обычного if, и что if consteval может быть в обычной не constexpr функции.

  1. auto(x) GCC 12 реализовал P0849 который позволяет auto каст в prvalue
struct A {};
void f(A&);  // #1
void f(A&&); // #2
A& g();

void h()
{
  f(g()); // calls #1
  f(auto(g())); // calls #2 with a temporary object
}

https://godbolt.org/z/x7hn5GKEx

Заметьте что и auto(x) и auto{x} допустимы, хотя decltype(auto)(x) остаётся неверным.

  1. Non-literal переменные в constexpr функциях GCC 12 реализовал P2242R3, который позволяет non-literal переменным, goto, и меткам быть в constexpr функциях если выполнение во время компиляции не доходит до этих мест.
#include <type_traits>

template<typename T> constexpr bool f() {
  if (std::is_constant_evaluated()) {
    return true;
  } else {
    T t; // OK when T=nonliteral in C++23
    return true;
  }
}
struct nonliteral { nonliteral(); };
static_assert(f<nonliteral>());

https://godbolt.org/z/6xnzM46Ej

constexpr int
foo (int i)
{
  if (i == 0)
    return 42;
  static int a;
  thread_local int t;
  goto label;
label:
  return 0;
}

static_assert(foo(0) == 42);

https://godbolt.org/z/PGsErnE4n

  1. Multidimensional subscript operator GCC 12 реализовал P2128R6
struct S {
  int a[64];
  constexpr S () : a {} {};
  constexpr S (int x, int y, int z) : a {x, y, z} {};
  constexpr int &operator[] () { return a[0]; }
  constexpr int &operator[] (int x) { return a[x]; }
  constexpr int &operator[] (int x, long y) { return a[x + y * 8]; }
};

void g ()
{
  S s;
  s[] = 42;
  s[5] = 36;
  s[3, 4] = 72;
}

https://godbolt.org/z/nnGead631

Заметьте что operator[] сейчас не поддерживает аргументов по умолчанию. Рабочая группа рассматривает CWG2507 , и если она примет предложенное решение проблемы, то в будущем такой код будет валиден:

struct X {
  int a[64];
  constexpr int& operator[](int i = 0) { return a[i]; }
};
  1. elifdef и elifndef В С и С++ #ifdef и #ifndef это синтаксический сахар для #if defined(something) и #if !defined(something). Для вариантов с else не было такого синтаксического сахара. Так что его добавили в С++23(и в С2X) и GCC 12: P2334R1
#ifdef __STDC__
/* ... */
#elifndef __cplusplus
#warning "not ISO C"
#else
/* ... */
#endif

https://godbolt.org/z/z4hbj6M7q

  1. Extended init-statement GCC 12 реализовал P2360R0 где расширяются возможности init-statement (в if, for, switch) позволяя им содержать объявление псевдонимов. На практике это означает что теперь валиден подобный код:
for (using T = int; T e : v)
{
    // use e
}

Также можете ознакомиться с описанием исправлений и новыми предупреждениями в GCC 12 в оригинальной статье

>>> Все изменения GCC 12

 ,

fsb4000
()

Небольшой обзор С++ 20/23 на примере Visual C++

Форум — Talks

Обзор Stephan T. Lavavej: https://youtu.be/DAl37n2XOwk

Если нет получаса для просмотра видео, то вот примеры части новых возможностей С++ которые рассмотрены в видео:

C++20 P0734R0 requires Expressions https://godbolt.org/z/jY1bETG7E

C++23 P0847R7 Deducing this https://godbolt.org/z/Tx8j4eeEr

C++23 P1679R3 contains() For string[_view] https://godbolt.org/z/eGKf6ns5r

C++23 P2166R1 Prohibiting string[_view] Construction From nullptr https://godbolt.org/z/KvocPWf33

C++23 P1072R10 basic_string::resize_and_overwrite https://godbolt.org/z/eWs57W36E

C++23 P0288R9 move_only_function https://godbolt.org/z/qorYY9va9

C++23 P0798R8 Monadic Operations For optional https://godbolt.org/z/dsnzxro9a

Мне больше всего понравились новая возможность C++23 P0847R7 Deducing this :

struct Cat {
    string m_name;
template <typename Self>
    decltype(auto) name(this Self&& self) {
        return forward<Self>(self).m_name;
    }
};

😺

Также 26 апреля 2022 с 18:00 до 21:00 по Москве пройдёт бесплатная однодневная виртуальная конференция для сообщества C++: https://aka.ms/pure-virtual-cpp

 ,

fsb4000
()

cmake 3.23

Форум — Talks

cmake 3.23 вышел.

Вот увидел такое новшество, решил поделиться:

The MCST LCC compiler is now supported with compiler id "LCC". 

https://www.kitware.com/cmake-3-23-0-is-available-for-download/

 ,

fsb4000
()

Microsoft собирается купить Activision Blizzard

Форум — Talks

 ,

fsb4000
()

Кому делать нечего на выходных и кто хочет попрограммировать

Форум — Talks

Нашёл сайт https://sberfight.geecko.com/game

Кто-нибудь из лоровцев уже решал там задачи? Или лоровцы опасаются что сбер им будет спам рассылать?

Вот мой результат: https://imgur.com/a/nIWRlcm

Но у меня нет аккаунта на leetcode и я не программирую на время, так что человек опытный в соревновательном программировании легко превзойдёт мой результат.

Вот полные правила для любителей почитать: https://geecko.notion.site/SberFight-983cc8ff50c946ad89125f74f13f8e26

 

fsb4000
()

Проект LLVM переходит со списков рассылки на платформу Discourse

Форум — Talks

https://www.opennet.ru/opennews/art.shtml?num=56505

https://llvm.discourse.group/

До 20 января все архивы прошлых обсуждений будут перенесены на новую площадку.

Очередная хорошая новость. Как и предыдущая когда закрыли багзиллу и перешли на github issues.

Ещё одна победа Web 2.0. Луддитов становится всё меньше…

 

fsb4000
()

Разработчик внёс деструктивные изменения в NPM-пакеты colors и faker, применяемые в 20 тысячах проектах

Форум — Talks

https://www.opennet.ru/opennews/art.shtml?num=56479

Что касается мотивов внесения в пакеты деструктивных изменений, то вероятно Марак пытается дать урок корпорациям, пользующихся трудами сообщества разработчиков свободного ПО, но ничего не возвращающих взамен, или привлечь внимание к переосмыслению обстоятельств смерти Аарона Шварца. Аарон покончил жизнь самоубийством после возбуждённого против него уголовного дела, связанного с копированием научных статей из платной базы данных JSTOR, отстаивая идею предоставления свободного доступа к научным публикациям. Аарону были предъявлены обвинения в компьютерном мошенничестве и незаконном получении информации с защищённого компьютера, максимальный срок наказания по которым составлял 50 лет лишения свободы и штраф в миллион долларов (в случае заключения судебного соглашения и признания обвинений Аарону предстояло отсидеть в тюрьме 6 месяцев).

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

 

fsb4000
()

Lazarus 2.2

Новости — Разработка
Группа Разработка

Команда разработчиков Lazarus рада сообщить о выпуске Lazarus 2.2 — интегрированной среды разработки для Free Pascal. Этот релиз был собран компилятором FPC 3.2.2.

Список изменений:
http://wiki.lazarus.freepascal.org/Lazarus_2.2.0_release_notes
http://wiki.lazarus.freepascal.org/User_Changes_3.2.2

Эту версию можно скачать на SourceForge:
http://sourceforge.net/projects/lazarus/files/
ftp://ftp.freepascal.org/pub/lazarus/releases/ (для тех, у кого заблокирован sourceforge)

Контрольные суммы: https://www.lazarus-ide.org/index.php?page=checksums#2_2_0

Минимальные требования:

  • FreeBSD/Linux: gtk 2.8 для gtk2, qt4.5 для qt, qt5.6 для qt5, 32 или 64bit;
  • Windows: 2k, XP, Vista, 7, 8, 8.1 и 10, 32 или 64bit;
  • macOS/OS X: Cocoa (64bit) 10.12 - 11.4, Carbon (32bit) 10.5 - 10.14, qt и qt5 (32 или 64bit).

Страница на gitlab: https://gitlab.com/freepascal.org/lazarus/lazarus/-/tree/lazarus_2_2_0.

Если будете самостоятельно собирать x86_64 версию Lazarus из исходников, то рекомендуется собирать IDE с флагами оптимизации:

-O1 или -O2 -OoNoPeepHole, – и не собирать просто с -O2 или -O3, так как найден баг в компиляторе FPC 3.2.2, планируется, что он будет устранён в версии FPC 3.2.4.

Коммит с исправлением: https://gitlab.com/freepascal.org/fpc/source/-/commit/e9d318e7e2f772bf455a92461cd5c229e69858d8

>>> Оригинальная новость

 ,

fsb4000
()

Github Copilot пытается создать окно в С++/OpenGL

Форум — Talks

Была уже тема по Copilot когда анонсировали, сейчас в youtube увидел как это в реальности работает, поэтому решил обсудить:

2 минуты 26 секунд: https://www.youtube.com/watch?v=V0tqbEFHP6U

Ну как вам искусственный интеллект?

Вроде что-то пытался дописывать, но если бы чел сам не знал как создавать окно, то думаю его идея закончилась бы провалом…

Несколько комментариев:

You tell the computer what to do and it does it? That's a great idea. Maybe we can even make special languages designed to talk to the computer so we can give more detailed descriptions. Oh wait... 
Copilot is the purest example of over engineering 

 

fsb4000
()

Zig 0.9

Новости — Разработка
Группа Разработка

Спустя 6 месяцев и 2023 коммита от 177 независимых участников вышла новая версия Zig.

Zig – это (кросс)компилятор языков программирования Zig, С++, С, Objective-C, Objective-C++, а также сборочная система для них. Проект разрабатывается под лицензией MIT. Недавно в Zig Core Team вошёл ещё один разработчик на зарплате: Isaac Freund.

В новой версии:

  • Появилась поддержка Objective-C, Objective-C++.

  • Улучшилась поддержка WebAssembly, RISC-V, Haiku.

  • Добавлены платформы ARM64 Windows и Solaris/Illumos.

  • Различные фиксы для уже поддерживаемых платформ.

  • В CI добавлены тесты скорости работы компилятора (подробнее). Теперь после каждого коммита видно, как меняется время парсинга, компиляции, анализа, а также сколько используется памяти. Это помогает оперативно находить регрессии и устранять их. Как пример, в Pull Request, который добавил Allocgate, забыли сделать free. Все тесты проходили, но на графике было видно увеличение потребления памяти, что помогло найти и исправить эту ошибку.

  • Одним из самых важных изменений языка является введение понятия Address Spaces. Теперь отдельным переменным можно указывать, где им создаваться (за счёт генерации компилятором специализированных инструкций эта функциональность полезна для встраиваемого оборудования и графических процессоров):

    pub const will_be_placed_in_flash: i32 addrspace(.flash) = 123;
    
    pub fn readFlash(ptr: *addrspace(.flash) i32) i32 {
       return ptr.*;
    }
    
  • Реализация компилятора Zig на Zig (self-hosted) готова на 44%.

  • Обновлены сторонние компоненты:

    • LLVM 13;
    • musl 1.2.2;
    • glibc 2.34;
    • mingw-w64 9.0.0.
  • Множество изменений в стандартной библиотеке (подробнее).

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

 

fsb4000
()

производительность Gnome/KDE/XFCE в играх

Форум — Talks

Тестирование на Phoronix:

https://www.phoronix.com/scan.php?page=article&item=kde-gnome-wayland21&num=1

Across all the games tested both native and titles via Steam Play (Proton + DXVK), the GNOME Wayland session most often was showing the best performance and across the wide range of tests carried out came to about 4% better performance than the GNOME X.Org session. The KDE Plasma Wayland session tended to perform slightly in front of its X.Org session as well for these Linux gaming tests but there were a few games still running into problems with the KDE Wayland session.

P.S. Gnome Wayland убедительно выиграл.

Вот вам и ответ, зачем нужен Gnome и Wayland. Может и в Valve эту статью увидят или сами затестят, и переведут Steam Deck на Gnome.

 , ,

fsb4000
()

CPPCon 2021

Форум — Development

Если кто-то хотел посмотреть, то вот есть полный список выступлений.

https://www.youtube.com/playlist?list=PLHTh1InhhwT6vjwMy3RG5Tnahw0G9qIx6

 ,

fsb4000
()

А вы знаете стандарт С?

Форум — Talks

https://wordsandbuttons.online/so_you_think_you_know_c.html

You scored 5 points, congratulations!

я рад, что я помнил стандарт насчёт этих 5 вопросов :)

 

fsb4000
()

RSS подписка на новые темы