LINUX.ORG.RU

Сообщения utf8nowhere

 

Кто там корутины хотел?

Форум — Development

 

utf8nowhere ()

О размере стандарта C++

Форум — Development

Часто приходится слышать критику типа «ко-ко-ко, C++ сложный язык, стандарт распух более чем на полторы тыщи страниц, это нивазможна выучить!!!11».

Как известно, стандарт условно делится на Core («сам язык C++») и Library-части (стандартная библиотека). Это не на 100% строгое разделение, «сам язык» знает кое-что о стандартной библиотеке (std::size_t, std::ptrdiff_t, std::initializer_list и т.д.), поэтому я говорю «условно делится».

Стандарт начинается с Core-части, после идёт описание библиотеки. Вот табличка страниц, с которых начинается Library-часть («Library introduction») в разных версиях стандарта:

  • C++98 — стр. 311
  • C++03 — стр. 317
  • С++11 — стр. 424
  • C++14 — стр. 414
  • C++17 — стр. 445

итого, за почти 20 лет «сам» C++ распух чуть более чем на 100 страниц, на треть от C++98.

Всё остальное распухание с 776 до 1618 страниц приходится на стандартную библиотеку.

В чём сложность осилить 100 страниц за 20 лет? Ладно, там не только добавляли, но и меняли уже имеющееся. Страниц на 200-250 новшеств может набралось.

Или кто-то всерьёз под изучением языка понимает зубрёжку списка функций и их аргументов из его стандартной библиотеки?

 , ,

utf8nowhere ()

В C++20 представление знаковых будет только в two's complement

Форум — Development

Странно, что никто не запостил новость. Ещё 24 ноября смёржили соответствующие изменения в текущий драфт стандарта.

Нет, signed overflow defined не сделали.

 , ,

utf8nowhere ()

Какую универсальность добавила systemd

Форум — Admin

если наличие/поведение юнитов всё так же зависит от опакечивателей?

Дисклеймер: этот тред не против systemd, а против маркетоидного бреда вместо перечисления реальных преимуществ/недостатков.

В общем, есть docker. В Debian/Ubuntu он ставится вместе с docker.socket-юнитом, так что даже при не запущенном докере он будет автоматически запущен при обращении к его сокету.

В centos никакого docker.socket нет, docker.service нужно стартовать руками.

Ну и как тут systemd помог условному админу чувствовать себя одинаково в любом дистрибутиве?

 ,

utf8nowhere ()

В C++20 появятся виртуальные функции!

Форум — Development

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

 

utf8nowhere ()

clang перенимает наклонности оффтопика

Форум — Development

Помнится, в Windows были (есть) селективные хаки, чтобы отдельные багнутые приложения, неправильно использующие WinAPI, могли работать. Например, SimСity.

Держу в курсе, что в clang тоже такое есть.

https://github.com/llvm-mirror/clang/blob/f4426c04a24f3f37369101f3a92898dd2e2...

// HACK: We've got an exception-specification
//   noexcept(noexcept(swap(...)))
// or
//   noexcept(noexcept(swap(...)) && noexcept(swap(...)))
// on a 'swap' member function. This is a libstdc++ bug; the lookup
// for 'swap' will only find the function we're currently declaring,
// whereas it expects to find a non-member swap through ADL. Turn off
// delayed parsing to give it a chance to find what it expects.

 ,

utf8nowhere ()

Как работает графический дисплейный менеджер для X?

Форум — General

Проще оказалось проверить самому. Да, по X-серверу на пользователя.

Я так понимаю, он сам работает в иксах.

Что происходит при логине/переключении пользователя? Стартует другой X-сервер, которому отдаётся контроль над VT? Каждому пользователю запускается по X-серверу?

 , ,

utf8nowhere ()

В C++20 могут появиться макросы, как в Rust

Форум — Development

...если комитет примет предложение представленное в этом пропозале.

Предлагается добавить «нативные» C++-макросы.

Из пропозала

So what would one of these native C++ macro functions look like?

 // Macro functions look just like a free function except for the # at the
 // end of the function name. Note that the # counts as part of the identifier,
 // so return# does not collide with the return keyword.
 template<class T>
 inline int return#(T v)
 {
	 if(v > 0)
		return -> v; // control flow keyword + ’->’ means it affects the
	 // calling function, not this macro function
	 if(v < 0)
		break ->;
	 // Also this break is executed in the calling function
	 // If break isn’t valid at the point of use
	 // in the calling function, it will not compile
	 // We can inject variable declarations into the calling function
	 // with typename + ’->’. This is useful for RAII triggered cleanup
	 // i.e. these get destructed when the scope of the call point exits.
	 // Note that the actual name of the variable injected will
	 // be some very unique identifier which cannot collide with any
	 // other variable, including those injected by other macro functions
	 int -> a = 5;
	 // Otherwise this function macro has a local scope, and code
	 // executed here remains here
	 size_t n = 0;
	 for(; n < 5; n++)
	 {
		 // We can also refer to variables previously injected into the
		 // caller’s scope by this macro function like this.
		 // This lets one keep state across invocations of the macro function
		 (-> a) ++;
	 }
	 // This returns a value from this function macro to the caller
	 // If you wrote return -> a, that would be a compile error
	 // as there is no variable called a in this scope.
	 return (-> a);
}

Такие макросы могут быть полезны для реализации некоторых фич, требующих вставки кучи служебного кода, например, корутин или оператора try, без внесения модификаций в Core Language, чисто на уровне библиотек.

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

 , ,

utf8nowhere ()

TCP SYN/ACK/RST-туннель

Форум — General

Пробовал ICMP-туннелирование для обхода учёта трафика — не прокатило.

Другой метод, который может быть использован для тех же целей — это передача данных в payload TCP SYN/ACK-пакетов. Не нашёл только готовых реализаций такого туннеля. Может кто знает?

(хотя если учитывается любой payload IP-пакетов, то учёт трафика не обойти никак).

 , ,

utf8nowhere ()

Выгрузить nouveau и восстановить текстовый VGA-режим

Форум — General

С драйвером nouveau GPU лочится при перезагрузке и вешает ядро.

Можно передать параметр ядру nouveau.modeset=0, но тогда nouveau вообще не загрузится и иксы будут работать с VESA-драйвером.

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

Попробовал делать как описано в https://nouveau.freedesktop.org/wiki/KernelModeSetting/, а именно:

echo 0 > /sys/class/vtconsole/vtcon1/bind
rmmod nouveau

Драйвер, конечно, выгружается и при этом изображение с монитора пропадает (вообще пропадает сигнал с кабеля и монитор засыпает). Хотелось бы вернуться в текстовый VGA-режим. На echo 1 > /sys/class/vtconsole/vtcon0/bind — 0 реакции. Монитор не видит сигнала на кабеле.

Пробовал делать как описано в https://www.kernel.org/doc/Documentation/fb/fbcon.txt, а именно сохранить состояние VGA (vbetool vbestate save) и восстановить его:

vbetool vbestate restore < <vga state file> 
echo 0 > /sys/class/vtconsole/vtcon1/bind
rmmod nouveau

После выполнения первой команды режим меняется, но, похоже, не на текстовый VGA, т.к. я вижу какой-то мусор из пикселей в верхней части экрана и всё. rmmod nouveau вообще уходит в D-state.

 ,

utf8nowhere ()

systemd mask unit in a container

Форум — Admin

Как сделать так, чтобы определённый юнит не запускался в контейнере? (в systemd-nspawn, например)

Возможно ли сделать так, чтобы в контейнере был активен другой таргет? (multiuser вместо graphical)

 ,

utf8nowhere ()

Read-only root on NFS

Форум — Admin

Попробовал обеспечить загрузку системы с read-only /, смонтированному по NFS.

Исходные данные:

  • Ubuntu 18.04 Mate, установлена в виртуалку, rootfs перенесен с виртуального диска на NFS-сервер
  • Изменён конфиг initramfs для загрузки с NFS, изменён fstab, initramfs и ядро закинуты в каталог tfpt-сервера

Система типа грузится по NFS, но ожидаемо обламывается куча юнитов (Failed to start Create Volatile Files and Directories, Failed to start Load/Save Random Seed, Failed to start Network Time Synchronization и т.д.), т.к. им нужен / в rw. Логин не работает, даже автологин.

Нашёл такую штуку, как overlayroot: https://spin.atomicobject.com/2015/03/10/protecting-ubuntu-root-filesystem/ Монтирует / как overlayfs с нижним ro-слоем и верхним rw. Я использовал описанный по ссылке вариант с rw-слоем в tmpfs.

Поставил, настроил. Судя по логам загрузки, скрипты overlayroot отрабатывают на стадии initramfs. Но дальше лог загрузки тот же: те же юниты не стартуют, залогиниться не получается. Есть подозрение, что systemd обнуляет все усилия скриптов overlayroot по созданию rw-корня с помощью overlayfs перемонтируя / (Starting Remount Root and Kernel File Systems...)

Какие идеи?

 , , , ,

utf8nowhere ()

Is it intentional что Клаб можно смотреть через Комментарии пользователей?

Форум — Linux-org-ru

Если ты не залогинен, то получаешь 403 при попытке доступа к Клабу. Однако, через профиль любого пользователя видно, что он писал в Клаб.

 

utf8nowhere ()

Оптимизатор НАКАЗАЛ разработчика Clang за UB в коде

Форум — Talks

Изложение https://qinsb.blogspot.ru/2018/03/ub-will-delete-your-null-checks.html

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

Вот код, который моделирует поведение кода из коммита (Код покоцан движком блога, вырезаны аргументы шаблонов. Я не буду пытаться их восстановить, т.к. аргумент-тип у llvm::SmallVector может быть понят из контекста, где надо, а аргумент-число — не особо важен):

struct Foo {
  llvm::SmallVector Vals;
};
struct Bar {
  Foo *getLastFoo() { return Foos.empty() ? nullptr : Foos.back(); }
  llvm::SmallVector Foos;
  void *Pad;
  void doUB();
};
void __attribute__((noinline)) Bar::doUB() {
  if (getLastFoo()->Vals.empty())
    puts("Vals empty");
  else
    puts("Vals non-empty");
}
int main() {
  Bar b;
  b.doUB();
}

В SmallVector::back стоит assert на не-пустоту вектора (!empty()). Т.к. код этих методов инлайнится (в getLastFoo) и компилятор видит, что проверка на пустоту в assert-е находится в false-ветке тернарного оператора, в условии которого та же самая проверка уже сделана, то в assert подставляется константа true и, в общем, можно считать, что assert выкинут.

Далее. Компилятор видит, что результат вызова getLastFoo в Bar::doUB() всегда разыменовывается, поэтому он не может быть нулевым указателем. Следовательно, условие тернарного оператора в getLastFoo не может быть истинным и при инлайнинге оператор безусловно заменяется на свою false-ветку (Foos.back() (в котором уже нет проверки на empty, т.к. assert был выкинут ранее)).

SmallVector устроен так, что в пустом векторе back() указывает внутрь самого SmallVector, и, короче говоря, код интерпретирует кусок памяти объекта Bar b как объект типа struct Foo и выполняет проверку Vals.empty() с непредсказуемым результатом.

Автор заканчивает тем, что радуется новому юз-кейсу для опции -fno-delete-null-checks, но по-прежнему не считает, что эту опцию стоит использовать для решения проблем ядра linux.

(видимо, имеется в виду типичный говнокод ядра

struct foo* p = bar->p;

if (!bar) {
...
}
который ядрописатели не считают багом, а винят в своих кривых руках компиляторы)

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

 , ,

utf8nowhere ()

Откуда такой восторг от ThinkPad?

Форум — Talks

В Ноутбук за 35-40 тысяч рублей настойчиво рекомендуют refurbished ThinkPad.

Ну у меня ThinkPad TXXXs. Не стал бы его особо рекомендовать кому-то. (И сам не буду брать больше.) Ноут как ноут. Дрянной пластиковый корпус: потрескался, стоило мне чуть-чуть переборщить с затягиванием винтика при сборке.

Полно ноутов с хорошим экраном и металлическим корпусом и не дороже ThinkPad-ов.

Откуда такой восторг от ThinkPad?

 ,

utf8nowhere ()

В каком месте XCB «асинхронный»?

Форум — Development

Вместо ответов на запрос он возвращает так называемые cookies, по которым можно получить ответ. И ждать ответа с использованием cookies надо — та-дам! — синхронно, блокируясь. Это вместо действительно асихронных колбэков.

Конечно, вы можете сказать, что cookies это Futures, а Futures это более лучший, более высокоуровневый механизм, чем колбэки. Но Futures хороши когда они и правда высокоуровневые и предоставляют, например, возможность их композиции. А куцые Futures, типа XCB cookies, хуже колбэков. IMO.

 ,

utf8nowhere ()

linux, Intel GPU, битые шрифты

Форум — Desktop

www.linux.org.ru/images/17858/original.gif

Не видел подобного года с 2012-го.

В Ubuntu 17.10 опять вернулось.

Thinkpad T410s, i5-520M со встроенным видео, ядро 4.13.0-21-generic.

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

Возможно, самого подключения/отключения внешнего монитора недостаточно, ещё нужно отключить ноутбук от блока питания. Драйвера переходят/переводят железо в режим уменьшения производительности и потом из него не выводят? От тормозов иксов помогает только релогин или перезагрузка.

Теперь увидел «фирменную» фишку интеловских драйверов — битые шрифты, про которую уже почти успел забыть со времён Арча на EEE PC.

UPD: что касается тормозов иксов:

[ 40510.329] (II) intel(0): EDID vendor "LEN", prod id 16438
[ 40510.329] (II) intel(0): Printing DDC gathered Modelines:
[ 40510.329] (II) intel(0): Modeline "1440x900"x0.0  106.89  1440 1488 1520 1924  900 903 909 926 -hsync -vsync (55.6 kHz eP)
[ 40510.329] (II) intel(0): Modeline "1440x900"x0.0   89.26  1440 1488 1520 1740  900 903 909 1026 -hsync -vsync (51.3 kHz e)
[ 40515.096] (II) intel(0): resizing framebuffer to 1920x1080
[ 40515.162] (II) intel(0): switch to mode 1920x1080@60.0 on VGA1 using pipe 0, position (0, 0), rotation normal, reflection none
[ 42566.284] (EE) intel(0): Failed to submit rendering commands (No such file or directory), disabling acceleration.
Есть такой багрепорт https://bugs.freedesktop.org/show_bug.cgi?id=103509
И такой https://bugs.freedesktop.org/show_bug.cgi?id=103025

 

utf8nowhere ()

Return при автологине в терминале выдаёт код 0x0d вместо 0x0a

Форум — General

Настраиваю автологин при использовании machinectl login, через /etc/systemd/system/container-getty@.service.d/override.conf:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --noclear -a user --keep-baud pts/%I "115200 38400 9600" $TERM

Автологин работает, но при этом enter работает «криво». Если запустить xxd и понажимать enter, то xxd печатает 0d.

Если из опций agetty убрать -a user, т.е. автологин, и залогиниться с вводом пароля, то xxd печатает 0a, как и должно быть.

bash переваривает кривое поведение enter-а при автологине, а многий другой софт — нет, приходится жать Ctrl-J, что неудобно.

stty -a при автологине

speed 38400 baud; rows 44; columns 142; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl echoke
при обычном логине
speed 38400 baud; rows 44; columns 142; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl echoke
diff -u noauto auto
--ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff
+-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff

Нашёл такое https://lists.freedesktop.org/archives/systemd-devel/2015-July/033533.html

Как чинить?

 , ,

utf8nowhere ()

Общие /var /etc для нескольких boot environments

Форум — General

(для нескольких экземпляров / на одной ЭВМ: от снепшотов одной системы (как минимум) до разных неродственных дистрибутивов (как максимум))

Я так понимаю, в debian/ubuntu это не реально, т.к. systemd там собирается с отключённым systemd-sysusers.service, и sysusers.d для создания системных пользователей не используется. Поэтому несколько систем передерутся за /etc/passwd: если в двух системах есть пакет с демоном, которому нужен пользователь и этот пакет удаляется в одной из систем, то из /etc/passwd выпилится запись о пользователе и при перезагрузке во вторую систему выйдет лажа.

Насколько реально это в RHEL/её производных?

 , ,

utf8nowhere ()

Поеттеринг сознался в диктаторстве

Форум — Talks

В http://0pointer.de/blog/projects/on-etc-sysinit.html Поеттеринг называет избавление от дистрибутиво-специфичных конфигов «дебалканизацией»:

Configuration stored in these files works against de-balkanization of the Linux platform.

«балканизация» — это дробление балканских государств на более мелкие, например, распад Югославии. Дебалканизация — типа обратный процесс. Т.е. Поеттеринг считает себя кем-то типа Милошевича и отрицает право дистрибутивов на самоопределение.

Не пора ли созвать Международный трибунал по systemd?

 , ,

utf8nowhere ()

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