commit -m "better"
Q: Антон, уже несколько дней как вышел clang15, а ты ничего про это не написал. Даже на opennet уже новость висит!!! https://www.opennet.ru/opennews/art.shtml?num=57739 A: В гробу я видел этот ваш пятнадцатый clang Я этот ваш clang пытаюсь завести еще с rc1…
Когда рассказывал про новую версию, совсем забыл рассказать вот про такой интересный баг.
У меня на первом "прогоне" падало с ошибкой очень много configure тестов. В config.log я обнаружил красивое:
Зачем я тут вообще переделываю .a файл? Потому что musl не поддерживает сборку со сторонним аллокатором, но мне же очень надо.
Вообще, конечно, странно, что от этого попадало много тестов, потому что, по идее, на семантику линковки это не должно влиять - ну положили в архив лишний файл, ну и ладно.
Предполагаю, что дело в том, что stderr от линкера стал непустой, и это сломало какие-то тесты.
У меня на первом "прогоне" падало с ошибкой очень много configure тестов. В config.log я обнаружил красивое:
ld.lld: warning: .../lib/libc.a:И действительно,
archive member 'alltypes.h'
is neither ET_REL nor LLVM bitcode
ld.lld: warning: .../libc.a:
archive member 'syscall.h' is
neither ET_REL nor LLVM bitcode
ld.lld: warning: .../lib/libc.a:
archive member 'version.h' is
neither ET_REL nor LLVM bitcode
pg-> llvm-ar t libc.a | grep '\.h'TL;DR - я написал кривой сборочный скрипт, который положил в .a файл еще и сгенеренные заголовки. https://github.com/pg83/ix/commit/49660edbfc0514382f45bc3ffcdd7179ac74cf4c#diff-d0dfd80046e1a8679abbcdebbc7ee3984b5b75653d63cc2469ec0ee6427b7c20L22
alltypes.h
syscall.h
version.h
Зачем я тут вообще переделываю .a файл? Потому что musl не поддерживает сборку со сторонним аллокатором, но мне же очень надо.
Вообще, конечно, странно, что от этого попадало много тестов, потому что, по идее, на семантику линковки это не должно влиять - ну положили в архив лишний файл, ну и ладно.
Предполагаю, что дело в том, что stderr от линкера стал непустой, и это сломало какие-то тесты.
GitHub
prepare for clang15 · pg83/ix@49660ed
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
🔥3🤔1
commit -m "better"
https://determinate.systems/posts/introducing-riff #dev_shell #ix_run Вот, пожалуйста, реализация той же идеи, только для Rust и поверх nix. Еще раз повторю, что языковой пакетный менеджер должен жить в соседстве с каким-то мета-языковым пакетным менеджером…
https://www.jetpack.io/devbox/
Идея явно завладела умами масс, на этот раз на Go, тоже поверх Nix, без привязки к Rust.
Тема явно становится хайповой, мы про это все услышим еще много раз.
Идея явно завладела умами масс, на этот раз на Go, тоже поверх Nix, без привязки к Rust.
Тема явно становится хайповой, мы про это все услышим еще много раз.
Jetify
Devbox: Portable, Isolated Dev Environments
Devbox creates isolated, reproducible development environments that can run anywhere without Docker or virtual machines.
🔥6
https://www.phoronix.com/news/Google-Ghost-Linux-Scheduling
Про user space #scheduler от FB я уже как-то писал, но вот то, что и Гугл делает что-то подобное, я не знал.
С точки зрения API это выглядит очень правильно - агент имеет полное состояние CPU в данный момент(инкрементальными апдейтами), и может отдавать команды вида "запусти тред Х на CPU Y".
Звучит это очень разумно, и, возможно, не за горами тот день, когда у меня перестанет тормозить браузер.
Почему я думаю, что справлюсь лучше?
Потому что политика вида "любой тред браузера имеет право растолкать всех остальных, но не больше 5 секунд(после чего он признается зависшим javascript)" - это хак, который никогда не будет реализован в ядре, а я смогу сделать.
Про user space #scheduler от FB я уже как-то писал, но вот то, что и Гугл делает что-то подобное, я не знал.
С точки зрения API это выглядит очень правильно - агент имеет полное состояние CPU в данный момент(инкрементальными апдейтами), и может отдавать команды вида "запусти тред Х на CPU Y".
Звучит это очень разумно, и, возможно, не за горами тот день, когда у меня перестанет тормозить браузер.
Почему я думаю, что справлюсь лучше?
Потому что политика вида "любой тред браузера имеет право растолкать всех остальных, но не больше 5 секунд(после чего он признается зависшим javascript)" - это хак, который никогда не будет реализован в ядре, а я смогу сделать.
Phoronix
Google's Ghost Look Very Appealing For Kernel Scheduling From User-Space & eBPF Programs
Google for quite some time now has been working on 'Ghost' as a means of controlling the Linux kernel scheduler from user-space and/or eBPF programs
👍10
https://www.kommersant.ru/doc/5558844
Тут вот опять завиральные планы в области импортозамещения производства полупроводников.
"Дело в том, что стратегия развития электронной промышленности до 2030 года была разработана еще в начале 2020 года, к работе над профильным нацпроектом, реализация которого обойдется в 3,2 трлн руб"
Норм, 30 миллиардов долларов за 10 лет.
Почему планы завиральные? Потому что окружающие тоже не стоят на месте:
https://quote.rbc.ru/news/article/606586539a79475feb1f8a2c
"TSMC вложит в производство чипов $100 млрд"
За 3 года. И это одна TSMC.
Давайте зайду с другой стороны.
Мировой GDP - 100 триллионов. Из них производство полупроводников - 1 триллион долларов.
Очень грубая прикидка нам говорит, что на полупроводники работает 1% всего мира.
Россия - 2% населения всего мира.
Не может такая маленькая страна построить в замкнутой среде все нужные цепочки для производства современного процессора.
Тут вот опять завиральные планы в области импортозамещения производства полупроводников.
"Дело в том, что стратегия развития электронной промышленности до 2030 года была разработана еще в начале 2020 года, к работе над профильным нацпроектом, реализация которого обойдется в 3,2 трлн руб"
Норм, 30 миллиардов долларов за 10 лет.
Почему планы завиральные? Потому что окружающие тоже не стоят на месте:
https://quote.rbc.ru/news/article/606586539a79475feb1f8a2c
"TSMC вложит в производство чипов $100 млрд"
За 3 года. И это одна TSMC.
Давайте зайду с другой стороны.
Мировой GDP - 100 триллионов. Из них производство полупроводников - 1 триллион долларов.
Очень грубая прикидка нам говорит, что на полупроводники работает 1% всего мира.
Россия - 2% населения всего мира.
Не может такая маленькая страна построить в замкнутой среде все нужные цепочки для производства современного процессора.
Коммерсантъ
Электронику начнут с чистого нуля
Подготовлена стратегия развития отрасли до 2030 года
👍13🐳5❤2🔥1
https://www.supergoodcode.com/spaghetti-recipes/
https://www.phoronix.com/news/RADV-Lower-Draw-CPU-Overhead
#mesa Несколько оптимизаций в radv(драйвер vulkan в mesa), от Майка Блюменкранца(я периодически про него пишу).
Я бы тут хотел отметить, насколько в ПЛОХОЙ форме находится GPU стек под Linux, если один залетный программист, умеющий запускать perf, за пару часов работы может показать такой серьезный профит. Это просто кричит нам о том, что все низковисящие фрукты там далеко не съедены.
Я полагаю, что примерно то же самое происходит и под Винду, и под macOS, просто мы об этом не знаем. В силу того, что этот код появился не так давно, и, очевидно, у индустрии не было достаточно времени, чтобы его как следует вылизать. Возможно, у NVIDIA тут чуть лучше обстоят дела, просто потому, что они в софт вкладывают очень много усилий.
https://www.phoronix.com/news/RADV-Lower-Draw-CPU-Overhead
#mesa Несколько оптимизаций в radv(драйвер vulkan в mesa), от Майка Блюменкранца(я периодически про него пишу).
Я бы тут хотел отметить, насколько в ПЛОХОЙ форме находится GPU стек под Linux, если один залетный программист, умеющий запускать perf, за пару часов работы может показать такой серьезный профит. Это просто кричит нам о том, что все низковисящие фрукты там далеко не съедены.
Я полагаю, что примерно то же самое происходит и под Винду, и под macOS, просто мы об этом не знаем. В силу того, что этот код появился не так давно, и, очевидно, у индустрии не было достаточно времени, чтобы его как следует вылизать. Возможно, у NVIDIA тут чуть лучше обстоят дела, просто потому, что они в софт вкладывают очень много усилий.
Supergoodcode
Spaghetti Recipes
Homemade Spaghetti
👍8🤯3🍌1
https://lwn.net/Articles/907572/
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735 #CVE
"A flaw was found in python. In algorithms with quadratic time complexity using non-binary bases, when using int("text"), a system could take 50ms to parse an int string with 100,000 digits and 5s for 1,000,000 digits (float, decimal, int.from_bytes(), and int() for binary bases 2, 4, 8, 16, and 32 are not affected). The highest threat from this vulnerability is to system availability"
Меня тут, конечно, возмущает, что очередной упырь от безопасности, в стремлении получить лычку "CVE", взял и записал какое-то вполне понятное алгоритмическое поведение питона в CVE.
(тут нельзя не вспомнить цитату Линуса про "security glory hole" - https://lkml.org/lkml/2008/7/15/296)
А какой-то упырь в python взял и закоммитил ограничение на максимальную длину обрабатываемого числа, тем самым, сделав из generic алгоритма непонятное УГ. Ну, и, конечно, сломал каких-то клиентов.
А почему мы не ограничим сортировку? А почему не ограничим любой > O(n), или даже просто > O(1) алгоритм?
Короче.
Индустрия страдает из-за того, что безопасники мотивированы(известность, статус, премии) приписать шильдик CVE к любой хероте.
А разработчики, видимо, тоже мотивированы эти "CVE" потом "фиксить", самым диким образом.
Про тормознутую реализацию bigint из python я вообще молчу, зачем они ее тащат с собой, когда есть более продвинутые и доступные реализации?
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735 #CVE
"A flaw was found in python. In algorithms with quadratic time complexity using non-binary bases, when using int("text"), a system could take 50ms to parse an int string with 100,000 digits and 5s for 1,000,000 digits (float, decimal, int.from_bytes(), and int() for binary bases 2, 4, 8, 16, and 32 are not affected). The highest threat from this vulnerability is to system availability"
Меня тут, конечно, возмущает, что очередной упырь от безопасности, в стремлении получить лычку "CVE", взял и записал какое-то вполне понятное алгоритмическое поведение питона в CVE.
(тут нельзя не вспомнить цитату Линуса про "security glory hole" - https://lkml.org/lkml/2008/7/15/296)
А какой-то упырь в python взял и закоммитил ограничение на максимальную длину обрабатываемого числа, тем самым, сделав из generic алгоритма непонятное УГ. Ну, и, конечно, сломал каких-то клиентов.
А почему мы не ограничим сортировку? А почему не ограничим любой > O(n), или даже просто > O(1) алгоритм?
Короче.
Индустрия страдает из-за того, что безопасники мотивированы(известность, статус, премии) приписать шильдик CVE к любой хероте.
А разработчики, видимо, тоже мотивированы эти "CVE" потом "фиксить", самым диким образом.
Про тормознутую реализацию bigint из python я вообще молчу, зачем они ее тащат с собой, когда есть более продвинутые и доступные реализации?
😁9🐳3❤2👍2
commit -m "better"
У меня тут сегодня замес про Go и разработчиков на нем. Прочтите посты под тегом #школота перед прочтением, это довольно важно. Я там сформулировал следующую мысль - развитие программиста процесс многосторонний, и, что, когда программист вообще научается…
В продолжение темы про #школота
https://www.opennet.ru/opennews/art.shtml?num=57787
В cargo нашли zip bomb(это когда из маленького zip можно получить кучу говна на диске).
Я тут даже особо распинаться не буду, суть вы можете прочитать в сообщениях по тегу.
https://www.opennet.ru/opennews/art.shtml?num=57787
В cargo нашли zip bomb(это когда из маленького zip можно получить кучу говна на диске).
Я тут даже особо распинаться не буду, суть вы можете прочитать в сообщениях по тегу.
www.opennet.ru
Уязвимости в пакетном менеджере Cargo, применяемом для проектов на языке Rust
В пакетном менеджере Cargo, применяемом для управления пакетами и сборки проектов на языке Rust, выявлены две уязвимости, которые могут быть эксплуатированы при загрузке специально оформленных пакетов из сторонних репозиториев (утверждается, что пользователей…
😁5🍌5🥱2👎1🤔1
Сегодня прямо очень много хороших новостей, я буду их по одной вываливать.
https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/
Вот, например, cloudflare запилила свой nginx.
Я когда-то, когда это еще было не очень модно, запилил в яндексе балансировщик нагрузки и прокси, вместо nginx, он широко используется по сей день.
В тексте хорошо рассказано про мою основную причину, почему я когда-то запилил альтернативу nginx(нет, это не мой NIH синдром) - "Some types of functionality are difficult to add".
Под nginx очень сложно писать модули, потому что его API - это или всратая state machine, или ты ждешь, пока у тебя в буфере в памяти образуется все тело запроса, и ты обслуживаешь его целиком.
Писать сложную логику проксирования в такой модели - очень дорого, я бы сказал, запретительно дорого.
По моим оценкам 12 лет назад, у меня код нужных мне модулей проксирования в корутинной реализации на С++(когда весь state хранится привычным образом, на стеке, и у тебя есть простая линейная модель выполнения и обработки ошибок) был примерно в 10 раз короче по коду, и примерно так же понятнее.
Ну и, конечно, они верно пишут, что такую core технологию лучше иметь свою, чтобы не разговаривать с сумасшедшим апстримом.
https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/
Вот, например, cloudflare запилила свой nginx.
Я когда-то, когда это еще было не очень модно, запилил в яндексе балансировщик нагрузки и прокси, вместо nginx, он широко используется по сей день.
В тексте хорошо рассказано про мою основную причину, почему я когда-то запилил альтернативу nginx(нет, это не мой NIH синдром) - "Some types of functionality are difficult to add".
Под nginx очень сложно писать модули, потому что его API - это или всратая state machine, или ты ждешь, пока у тебя в буфере в памяти образуется все тело запроса, и ты обслуживаешь его целиком.
Писать сложную логику проксирования в такой модели - очень дорого, я бы сказал, запретительно дорого.
По моим оценкам 12 лет назад, у меня код нужных мне модулей проксирования в корутинной реализации на С++(когда весь state хранится привычным образом, на стеке, и у тебя есть простая линейная модель выполнения и обработки ошибок) был примерно в 10 раз короче по коду, и примерно так же понятнее.
Ну и, конечно, они верно пишут, что такую core технологию лучше иметь свою, чтобы не разговаривать с сумасшедшим апстримом.
👍30🤔1
commit -m "better"
Q: Антон, уже несколько дней как вышел clang15, а ты ничего про это не написал. Даже на opennet уже новость висит!!! https://www.opennet.ru/opennews/art.shtml?num=57739 A: В гробу я видел этот ваш пятнадцатый clang Я этот ваш clang пытаюсь завести еще с rc1…
Очень бы хотел написать, что перешел на llvm15, но пока обновил только clang, потому что libc++ стала шибко умная:
Вообще, у этого заголовка очень трудная судьба, потому что, по идее, его должен предоставлять компилятор под целевую платформу, в виде intrinsics, но, в принципе, эти же функции и типы, по большей части, могут быть реализованы и через ассемблерные вставки.
Поэтому с этим заголовком полный раздрай - где-то он определен в libc, как в freebsd, где-то его предоставляет компилятор, как, например, gcc и clang, а тут, вот, его решили предоставить в libc++.
Очень странное решение, причем, fallback в какой-то другой stdatomic.h делается не всегда - https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdatomic.h#L223
В моем setup этот файл получается, по сути, пустой, что тоже сломало дофига кода.
(я этот файл стер к херам, чтобы можно было двигаться дальше - https://github.com/pg83/ix/blob/main/pkgs/lib/c++/15/ix.sh)
Поэтому у меня пока такой странный кадавр из clang15 + libc++14.
Ничего особо странного в этом нет, многие люди обновляют libc++ и clang без привязки к их общему релизному циклу.
Если подумать, то у меня прямо сейчас в сборке участвуют три версии llvm - 13, 14, 15. Довольно странно, да?
Я это делаю, потому что хочу поддержать не самые свежие версии gcc для bootstrap.
Поэтому, первым делом, я собираю libc++13 + clang14, это самая новая связка, собираемая gcc 7.
А уже ими собираю libc++14 + clang15.
Феншуй бутстрапа требует, чтобы я этим же компилятором собрал точно такую же связку, и уже ее использовал для сборки всего остального, но меня жаба душит.
/ix/store/ElvSJxEDJTM00ADM-lib-c-plus-plus-15/include/__algorithm/iterator_operations.h:100:5: error: static assertion failed due to requirement 'is_same<JSC::DFG::UnlinkedStructureStubInfo &, const JSC::DFG::UnlinkedStructureStubInfo &>::value': It looks like your iterator's `iterator_traits<It>::reference` does not match the return type of dereferencing the iterator, i.e., calling `*it`. This is undefined behavior according to [input.iterators] and can lead to dangling reference issues at runtime, so we are flagging this.Еще они в этой версии libc++ зачем-то решили подменить заголовок stdatomic.h: https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdatomic.h
static_assert(is_same<__deref_t<_Iter>, typename iterator_traits<__uncvref_t<_Iter> >::reference>::value,
Вообще, у этого заголовка очень трудная судьба, потому что, по идее, его должен предоставлять компилятор под целевую платформу, в виде intrinsics, но, в принципе, эти же функции и типы, по большей части, могут быть реализованы и через ассемблерные вставки.
Поэтому с этим заголовком полный раздрай - где-то он определен в libc, как в freebsd, где-то его предоставляет компилятор, как, например, gcc и clang, а тут, вот, его решили предоставить в libc++.
Очень странное решение, причем, fallback в какой-то другой stdatomic.h делается не всегда - https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdatomic.h#L223
В моем setup этот файл получается, по сути, пустой, что тоже сломало дофига кода.
(я этот файл стер к херам, чтобы можно было двигаться дальше - https://github.com/pg83/ix/blob/main/pkgs/lib/c++/15/ix.sh)
Поэтому у меня пока такой странный кадавр из clang15 + libc++14.
Ничего особо странного в этом нет, многие люди обновляют libc++ и clang без привязки к их общему релизному циклу.
Если подумать, то у меня прямо сейчас в сборке участвуют три версии llvm - 13, 14, 15. Довольно странно, да?
Я это делаю, потому что хочу поддержать не самые свежие версии gcc для bootstrap.
Поэтому, первым делом, я собираю libc++13 + clang14, это самая новая связка, собираемая gcc 7.
А уже ими собираю libc++14 + clang15.
Феншуй бутстрапа требует, чтобы я этим же компилятором собрал точно такую же связку, и уже ее использовал для сборки всего остального, но меня жаба душит.
GitHub
llvm-project/libcxx/include/stdatomic.h at main · llvm/llvm-project
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. - llvm/llvm-project
👍5🍌2
Forwarded from Daniel Lemire's blog
Science and Technology links (September 16 2022)
Attractive female students get better grades. They lose this benefit when courses move online. A research paper is much more likely to be highly ranked if the author is famous. The USA has many more prisoners than police officers (three prisoners for every police officer), while every other developed country has the reverse ratio. Diluting the blood plasma of older human beings rejuvenate them. Saturated fat, as found in meat and dairy products, is not associated with bad cardiovascular health. In other words, eating butter does not harm your heart. An electric car has reportedly about half the carbon footprint as that of a conventional car.
https://lemire.me/blog/2022/09/17/science-and-technology-links-september-16-2022/
Attractive female students get better grades. They lose this benefit when courses move online. A research paper is much more likely to be highly ranked if the author is famous. The USA has many more prisoners than police officers (three prisoners for every police officer), while every other developed country has the reverse ratio. Diluting the blood plasma of older human beings rejuvenate them. Saturated fat, as found in meat and dairy products, is not associated with bad cardiovascular health. In other words, eating butter does not harm your heart. An electric car has reportedly about half the carbon footprint as that of a conventional car.
https://lemire.me/blog/2022/09/17/science-and-technology-links-september-16-2022/
Daniel Lemire's blog
Science and Technology links (September 16 2022)
Attractive female students get better grades. They lose this benefit when courses move online.
A research paper is much more likely to be highly ranked if the author is famous.
The USA has many more prisoners than police officers (three prisoners for…
A research paper is much more likely to be highly ranked if the author is famous.
The USA has many more prisoners than police officers (three prisoners for…
🤯11👍3🤔2🍌1
commit -m "better"
Очень бы хотел написать, что перешел на llvm15, но пока обновил только clang, потому что libc++ стала шибко умная: /ix/store/ElvSJxEDJTM00ADM-lib-c-plus-plus-15/include/__algorithm/iterator_operations.h:100:5: error: static assertion failed due to requirement…
Забавный код в webkit, который перестал собираться в новой версии:
https://github.com/WebKit/WebKit/blob/main/Source/WebKit/Platform/IPC/ArgumentCoders.h#L540
До этого для конкатенации туплов там использовался свой велосипед - https://github.com/WebKit/WebKit/blob/4fb6881d9ccf5c5ee98163978d16d33eb5b57058/Source/WebKit/Platform/IPC/ArgumentCoders.h#L313
fun fact - вот этот вот код на вход получает такие странные типы, что common generic std::tuple_cat не может справиться с конкатенацией(ошибку для желающих разобраться - по запросу), а велосипед - может.
Я запилил патч, который возвращает старый велосипед, с ним компилируется и работает.
Что это за такие хитросооруженные типы, и почему с ними не работает std::tuple_cat - я так и не понял, с ходу, все должно работать. Возможно, баг в libc++.
Иначе, есть два тупла, результат сложения которых определен(его можно получить другим алгоритмом), но std::tuple_cat не справляется с их конкатенацией.
https://github.com/WebKit/WebKit/blob/main/Source/WebKit/Platform/IPC/ArgumentCoders.h#L540
До этого для конкатенации туплов там использовался свой велосипед - https://github.com/WebKit/WebKit/blob/4fb6881d9ccf5c5ee98163978d16d33eb5b57058/Source/WebKit/Platform/IPC/ArgumentCoders.h#L313
fun fact - вот этот вот код на вход получает такие странные типы, что common generic std::tuple_cat не может справиться с конкатенацией(ошибку для желающих разобраться - по запросу), а велосипед - может.
Я запилил патч, который возвращает старый велосипед, с ним компилируется и работает.
Что это за такие хитросооруженные типы, и почему с ними не работает std::tuple_cat - я так и не понял, с ходу, все должно работать. Возможно, баг в libc++.
Иначе, есть два тупла, результат сложения которых определен(его можно получить другим алгоритмом), но std::tuple_cat не справляется с их конкатенацией.
GitHub
WebKit/Source/WebKit/Platform/IPC/ArgumentCoders.h at main · WebKit/WebKit
Home of the WebKit project, the browser engine used by Safari, Mail, App Store and many other applications on macOS, iOS and Linux. - WebKit/WebKit
👍6🍌4🔥1
commit -m "better"
Забавный код в webkit, который перестал собираться в новой версии: https://github.com/WebKit/WebKit/blob/main/Source/WebKit/Platform/IPC/ArgumentCoders.h#L540 До этого для конкатенации туплов там использовался свой велосипед - https://github.com/WebKit/…
А вот еще странность нового clang и libc++, и, заодно, задачка на знание С++(я ответа не знаю, я уже лет 10 не сплю со стандартом под подушкой).
https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L77
В данной строчке кода ScanListData известна, в том смысле, что известен ее layout, но сгенерить конструктор/деструктор по умолчанию невозможно, потому что ScanInfo не определена.
Сборка с новым llvm дает такую ошибку:
Вот скажите мне - когда нужна проверка того, что у нас есть конструктор/деструктор у этого std::optional?
А если мы не вызываем этот конструктор List()? А если вызываем?
Вообще, мне это кажется деталью реализации std::optional, я могу написать код и так, и так. А как регламентирует стандарт?
https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L77
В данной строчке кода ScanListData известна, в том смысле, что известен ее layout, но сгенерить конструктор/деструктор по умолчанию невозможно, потому что ScanInfo не определена.
Сборка с новым llvm дает такую ошибку:
.../passport_panel_edit_scans.h:77:41: note:(полная ошибка будет в комментарии)
in instantiation of member function
'std::optional<Passport::ScanListData>::optional'
requested here
std::optional<ScanListData> &&data = std::nullopt);
Вот скажите мне - когда нужна проверка того, что у нас есть конструктор/деструктор у этого std::optional?
А если мы не вызываем этот конструктор List()? А если вызываем?
Вообще, мне это кажется деталью реализации std::optional, я могу написать код и так, и так. А как регламентирует стандарт?
GitHub
tdesktop/Telegram/SourceFiles/passport/passport_panel_edit_scans.h at dev · telegramdesktop/tdesktop
Telegram Desktop messaging app. Contribute to telegramdesktop/tdesktop development by creating an account on GitHub.
🍌2🔥1
commit -m "better"
https://www.opennet.ru/opennews/art.shtml?num=56086 Epic win - поддержка протокола mongodb over postgresql. Делать key-value over sql, да еще с более худшими, чем у оригинальной mongodb(хотя куда уж хуже?), гарантиями... Кстати, напомню, что jepsen mongodb…
(дисклеймер: мнение автора этого блога никак не соотносится с мнением компании, в которой он работает)
Тут вот вышел классный фильм, https://www.kinopoisk.ru/film/5093991/
Это уже третья моя попытка написать про этот фильм, предыдущие две я решил никому не показывать, они были черезчур эмоциональны.
Поэтому я просто напишу про 2 ошибки, которые, КМК, были допущены при съемках этого фильма:
* Для того, чтобы говорить, что есть проблема гендерного дисбаланса, надо сначала предъявить какую-то (несмещенную) оценку того, сколько женщин вообще должно быть в IT. Это не сделано. Пока это не сделано, это обсуждение имеет мало смысла. Вот 20%, про которые идет речь в фильме - это мало или много? А исходя из чего вы делаете оценку, что мало, а что много? Статья, на которую я ссылаюсь, вроде, имеет наглость утверждать, что меньше 50%. Пускай авторы этого фильма, и его героини, напишут статью про то, что оно > 20%, с удовольствием ее почитаю.
* Вторая очень важная ошибка - в фильме показана очень смещенная выборка тех, у кого спрашивают мнение того, как все должно быть устроено. Это все - успешные IT-леди, а где другие мнения-то? Очевидно, что, если заслушать только такие мнения, то может сложиться ощущение, что женщин в IT мало, но это никак не будет соотноситься с реальной жизнью. Где мнение домохозяек-то?
Поэтому этот фильм эмоциональный, и претендовать на то, что он сколько-нибудь разумным образом описывает окружающую действительность, он не может.
Тут вот вышел классный фильм, https://www.kinopoisk.ru/film/5093991/
Это уже третья моя попытка написать про этот фильм, предыдущие две я решил никому не показывать, они были черезчур эмоциональны.
Поэтому я просто напишу про 2 ошибки, которые, КМК, были допущены при съемках этого фильма:
* Для того, чтобы говорить, что есть проблема гендерного дисбаланса, надо сначала предъявить какую-то (несмещенную) оценку того, сколько женщин вообще должно быть в IT. Это не сделано. Пока это не сделано, это обсуждение имеет мало смысла. Вот 20%, про которые идет речь в фильме - это мало или много? А исходя из чего вы делаете оценку, что мало, а что много? Статья, на которую я ссылаюсь, вроде, имеет наглость утверждать, что меньше 50%. Пускай авторы этого фильма, и его героини, напишут статью про то, что оно > 20%, с удовольствием ее почитаю.
* Вторая очень важная ошибка - в фильме показана очень смещенная выборка тех, у кого спрашивают мнение того, как все должно быть устроено. Это все - успешные IT-леди, а где другие мнения-то? Очевидно, что, если заслушать только такие мнения, то может сложиться ощущение, что женщин в IT мало, но это никак не будет соотноситься с реальной жизнью. Где мнение домохозяек-то?
Поэтому этот фильм эмоциональный, и претендовать на то, что он сколько-нибудь разумным образом описывает окружающую действительность, он не может.
Кинопоиск
Математическое неравенство, 2022
🎬 Кто сказал, что программирование — чисто мужская работа? Специалистки развенчивают стереотипы об IT. Смотрите онлайн фильм Математическое неравенство на Кинопоиске.
👍16💯8🔥3👎2🍓2🤡1🐳1
commit -m "better"
(дисклеймер: мнение автора этого блога никак не соотносится с мнением компании, в которой он работает) Тут вот вышел классный фильм, https://www.kinopoisk.ru/film/5093991/ Это уже третья моя попытка написать про этот фильм, предыдущие две я решил никому…
А все же читают новости, и ссылок давать не надо?
Я так понимаю, что проблема женщин в IT скоро решится сама собой - мужики пойдут на фронт, работать останутся женщины, и нет проблем с гендерным неравенством, ха-ха.
Я так понимаю, что проблема женщин в IT скоро решится сама собой - мужики пойдут на фронт, работать останутся женщины, и нет проблем с гендерным неравенством, ха-ха.
😢15🔥12🍾6👎5😱3👍2💩2🌚1🍌1
commit -m "better"
А вот еще странность нового clang и libc++, и, заодно, задачка на знание С++(я ответа не знаю, я уже лет 10 не сплю со стандартом под подушкой). https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L77…
В clang15 появилось некоторое количество реально полезных ошибок:
Ну, вот так - функцию не объявили, но позвать ее можно.
Особенно много такого в gnu software, я так понимаю, благодаря #gnulib, и тому, как они переопределяют функции. Warning про implicit int мне пришлось целиком отключить, потому что с ним ./configure скрипты не работали от слова совсем.
https://github.com/pg83/ix/blob/main/pkgs/bin/clang/lib/cc/ix.sh#L11
Making all in docЭтот код "работает" по чистой случайности, благодаря implicit int, и implicit function declaration.
CC src/tramp.lo
../src/tramp.c:262:22: error:
call to undeclared function
'open_temp_exec_file';
ISO C99 and later do not support
implicit function declarations
[-Wimplicit-function-declaration]
tramp_globals.fd = open_temp_exec_file ();
^
Ну, вот так - функцию не объявили, но позвать ее можно.
Особенно много такого в gnu software, я так понимаю, благодаря #gnulib, и тому, как они переопределяют функции. Warning про implicit int мне пришлось целиком отключить, потому что с ним ./configure скрипты не работали от слова совсем.
https://github.com/pg83/ix/blob/main/pkgs/bin/clang/lib/cc/ix.sh#L11
GitHub
ix/pkgs/bin/clang/lib/cc/ix.sh at main · pg83/ix
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
👍6👎2🔥2🍌1
commit -m "better"
А все же читают новости, и ссылок давать не надо? Я так понимаю, что проблема женщин в IT скоро решится сама собой - мужики пойдут на фронт, работать останутся женщины, и нет проблем с гендерным неравенством, ха-ха.
Сегодня этот текст звучит совсем по другому, да?
А, тем временем, 22 сентября, каналу ровно год.
Писать про то, что сделано, и будет сделано, совсем не хочется.
Наверное, стоит сказать, что я почти "добил" KPI в 1000 подписчиков, и попробую писать и дальше.
Жизнь (пока) продолжается.
А, тем временем, 22 сентября, каналу ровно год.
Писать про то, что сделано, и будет сделано, совсем не хочется.
Наверное, стоит сказать, что я почти "добил" KPI в 1000 подписчиков, и попробую писать и дальше.
Жизнь (пока) продолжается.
🎉22❤5🐳5❤🔥3👍1