[00:00:49] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <ПАДАЗРИТЕЛЬНА!>
картинка https://www.ada-ru.org/files/bot/2020-05-21-x9.jpg
[00:45:00] <ada_ru> (geniepro) #prog #rust #article

Обстоятельное эмпирическое изучение ошибок в реальных программах на Rust. Деление на safe/unsafe код действительно помогает, но все баги с излишней блокировкой были найдены в safe коде. Особенности Rust делают некоторые паттерны ошибок более вероятными, чем в других языках. Изучение этих паттернов позволило создать статические анализаторы, которые вскрыли ранее незамеченные ошибки.

Читайте, когда найдётся свободное время, статья объёмная.

cseweb.ucsd.edu/~yiying/RustStudy-PLDI20.pdf
[02:30:40] <ada_ru> (insert_reference_here)  отвечает (geniepro) на <#prog #rust #article…>
Спасибо
[10:30:26] <ada_ru> (I_vlxy_I) Microsoft открыл код GW-BASIC под лицензией MIT https://opennet.ru/53007/
[11:26:13] <ada_ru> (a) Праздник духа!
[11:27:01] <ada_ru> (a) Позавчера вытащил флоппик, новая видеокарта не влазила
[11:28:02] <ada_ru> (a) И тут снова пора доставать дискеты.
[11:57:32] <ada_ru> (Oleg) Он на ASM? круто
[13:14:23] <ada_ru> (Vinpuh) GNAT Studio стала няшной, молодцы. Дизайн стал аккуратнее чтоли 👍
[13:17:03] <ada_ru> (Vinpuh) Но libncurses5 надобы с собой таскать, в Бунте 20.04 по умолчанию 6 стоит, из каробки не щапустится студиа.
[14:31:26] <ada_ru> (I_vlxy_I) А вот новшества в Си: https://habr.com/en/company/badoo/blog/503140/
[14:31:54] <ada_ru> (I_vlxy_I) @nitrocerber https://www.ada-ru.org/files/bot/2020-05-22-x10.jpg
[14:34:50] <ada_ru> (nitrocerber) предлагаешь импортить это сишное... конструкциё, кем бы оно ни было, и потом как-то распознавать на даской стороне?)
[14:35:03] <ada_ru> (I_vlxy_I) НАПРИМЕР
[14:35:07] <ada_ru> (I_vlxy_I) вполне варик, чо
[14:35:11] <ada_ru> (I_vlxy_I) по моему,
[14:35:30] <ada_ru> (I_vlxy_I) другое дело, что это дело еще в стандарт Си не приняли
[14:35:36] <ada_ru> (nitrocerber) пффф
[14:35:39] <ada_ru> (I_vlxy_I) но может gcc уже могёт
[14:35:55] <ada_ru> (nitrocerber) которая?
[14:36:13] <ada_ru> (Oleg) Ура!
[14:36:26] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <которая?>
м?
[14:36:50] <ada_ru> (nitrocerber) которая гцц? version
[14:37:11] <ada_ru> (I_vlxy_I) не знаю. я еще не гуглил на тему, где такое реализовано. а стандарт - C20
[14:37:38] <ada_ru> (nitrocerber) ну стандарт-то мне ни о чём не говорит, я человек тёмный
[14:40:00] <ada_ru> (I_vlxy_I) можно заюзать вот это: https://github.com/graphitemaster/incbin
[14:41:03] <ada_ru> (nitrocerber) чесгря я вообще не представляю, как у нас с использованием чего-либо стороннего
[14:41:08] <ada_ru> (nitrocerber) и мне лень узнавать
[14:41:16] <ada_ru> (I_vlxy_I) хе
[14:45:10] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <А вот новшества в Си…>
Вы смотрели, какие там костыли для обработки ошибок?
[14:45:44] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Вы смотрели, какие т…>
да. но это просто сахарок для простой котогенерации по сути. хуже от этого не стало
[14:49:58] <ada_ru> (I_vlxy_I) это ж Си
[14:50:01] <ada_ru> (I_vlxy_I) не С++
[14:58:17] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <да. но это просто са…>
Вообще-то стало, люди будут по умолчанию использовать вариант с UB
[14:58:37] <ada_ru> (I_vlxy_I) м? откуда там UB?
[15:05:22] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <м? откуда там UB?>
> Обратите внимание на атрибут oob_return_errno. Он означает, что из этой функции-шаблона будут сгенерированы следующие функции:

  1. Возвращающая структуру с флагом ошибки и результатом работы функции (struct {T return_value; int exception_code}).
  2. Возвращающая результат работы функции и игнорирующая возможные ошибки в аргументах, приводя к неопределённому поведению.
  3. Завершающая выполнение в случае ошибки в аргументах.
  4.
Заменяющая errno, то есть обладающая привычным поведением.
[15:06:36] <ada_ru> (I_vlxy_I) неопределенное поведение это не то, что понимают под UB в стандарте
[15:07:00] <ada_ru> (insert_reference_here) Почему это?
[15:07:02] <ada_ru> (I_vlxy_I) если что, таким UB полон safe-код в расте
[15:07:10] <ada_ru> (I_vlxy_I) потому, что это user defined UB 🙂
[15:07:35] <ada_ru> (I_vlxy_I) типа ты открыл файл, он не открылся, ты проигнорировал это и пошел дальше работать
[15:07:38] <ada_ru> (insert_reference_here) > defined undefined behaviour

Чивоблять
[15:07:41] <ada_ru> (I_vlxy_I) что тут? тут UB твоей программы
[15:07:44] <ada_ru> (I_vlxy_I) но программа валидна
[15:08:06] <ada_ru> (I_vlxy_I) короче, хреново термин тут подобрали
[15:08:14] <ada_ru> (insert_reference_here) Паника на unwrap или expect, если что — это вполне себе определённое поведение
[15:08:57] <ada_ru> (I_vlxy_I) паника из за чего? всё нормально же. это просто логическая ошибка в программе.
[15:09:08] <ada_ru> (I_vlxy_I) всё хорошо
[15:09:56] <ada_ru> (I_vlxy_I) это типа как ассертов рассыпать по приложению. в дебаге ассерт может стрельнуть и UB не будет. в релизе будет user defined UB. Потому, что в программе нарушился инвариант, а мы этого не увидели
[15:10:15] <ada_ru> (I_vlxy_I) но при этом с точки зрения языка - программа валидна. в ней нет UB. весь код - safe
[15:20:21] <ada_ru> (I_vlxy_I) У тебя такое UB случается каждый раз когда ты вызываешь printf
[15:38:32] <ada_ru> (geniepro) В нормальном языке printf полностью типизирован и компилятор доказывает, что проблем с его вызовом нет...
[15:39:27] <ada_ru> (insert_reference_here)  отвечает (geniepro) на <В нормальном языке p…>
Проблемы могут быть с доступом к Joycasino стандартному выводу
[15:43:01] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <В нормальном языке p…>
Я не про его аргументы
[15:44:20] <ada_ru> (geniepro)  отвечает (I_vlxy_I) на <Я не про его аргумен…>
А какие проблемы могут быть у printf кроме аргументов?
[15:44:52] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <А какие проблемы мог…>
Ты когда последний раз видел, чтобы кто-то проверял значение которое он возвращает?
[15:45:42] <ada_ru> (geniepro)  отвечает (I_vlxy_I) на <Ты когда последний р…>
А чего на него смотреть? Там должно быть IO()
[15:45:58] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <А чего на него смотр…>
Нет
[15:46:08] <ada_ru> (I_vlxy_I) man printf
[15:47:04] <ada_ru> (I_vlxy_I) С чего ты взял, что напечаталось все что ты сказал? Сколько аргументов тебе нужно допечатать при следующей попытке?
[15:50:27] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <но может gcc уже мог…>
error: invalid preprocessing directive #embed
[15:50:33] <ada_ru> (nitrocerber) so much for that
[15:50:38] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <error: invalid prepr…>
я ж говорю - С20
[15:53:49] <ada_ru> (I_vlxy_I) в gcc ещё не завезли 🙁
[15:54:19] <ada_ru> (geniepro) никогда не видел, что бы кто-то анализировал результат сишного printf'а
[15:56:38] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <никогда не видел, чт…>
о чем и речь. так что в каждой проге такое вот defined undefined behaviour 🙂
[15:57:01] <ada_ru> (geniepro)  отвечает (I_vlxy_I) на <о чем и речь. так чт…>
да кому сейчас в 21 веке нужны программы с консольным выводом? о_О
[15:57:45] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <да кому сейчас в 21 …>
бОльшая часть программ - именно такая.
[15:57:57] <ada_ru> (I_vlxy_I) и больше всех именно таких программ пишется сейчас
[15:58:03] <ada_ru> (Oleg)  отвечает (geniepro) на <да кому сейчас в 21 …>
Да я только такие и пейшу 😊
[15:58:04] <ada_ru> (I_vlxy_I) а вот гуйня - редко когда нужна
[15:58:09] <ada_ru> (geniepro) да даже если и произошла какая-то ошибка при выводе получившегося текста куда-то в кончоль — работа программы при этом никак не пострадает, ну кто-то что-то не увидел — их проблемы...
[15:58:40] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <да даже если и произ…>
у тебя другая прога из за этого например распарсить твой выхлоп не сможет. это нарушение грамматики будет и протокола
[15:58:57] <ada_ru> (geniepro)  отвечает (I_vlxy_I) на <и больше всех именно…>
уже не помню, когда я последний раз консольную программу писал, вывод лога в файл — да, но там нет никакого принтфа
[15:59:11] <ada_ru> (I_vlxy_I) а что там? fprintf? 😄
[15:59:32] <ada_ru> (geniepro)  отвечает (I_vlxy_I) на <у тебя другая прога …>
дался тебе этот юниксвей из конвейеров программ с текстом между ними
[15:59:37] <ada_ru> (I_vlxy_I) но printf от этого ничем не отличается. более того, удобно printf для записи в лог юзать
[15:59:49] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <дался тебе этот юник…>
дык оно всё так работает же!
[16:00:04] <ada_ru> (I_vlxy_I) ну и юниксоподобные системы вокруг. за редким исключением
[16:07:21] <ada_ru> (geniepro)  отвечает (I_vlxy_I) на <а что там? fprintf? …>
готовишь нужную строку и её через fputs или как оно там называлось...
[16:07:23] <ada_ru> (I_vlxy_I) и? fputs также возвращает результат, который надо проверять.
[16:07:30] <ada_ru> (t91x0) Это фатальная ошибка
[16:07:35] <ada_ru> (nitrocerber) бот порвался
[16:07:37] <ada_ru> (I_vlxy_I)  отвечает (t91x0) на <Ну в два приёма писа…>
в цикле писать. пока всё не выведется, что нужно.
[16:07:46] <ada_ru> (t91x0)  отвечает (nitrocerber) на <бот порвался>
Бумага закончилась, ага
[16:07:55] <ada_ru> (nitrocerber) 😂
[16:08:08] <ada_ru> (I_vlxy_I) кажется наоборот - ему бумагу вставили
[16:08:18] <ada_ru> (I_vlxy_I) и он вывалил всё, что у него накопилось
[16:08:36] <ada_ru> (t91x0) Такой большой рулон термобумаги в 40см диаметром.
[16:13:22] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <посмотрел свой прошл…>
ну, кто бы сомневался
[16:13:50] <ada_ru> (I_vlxy_I) @insert_reference_here как видишь, менее безопасными программы на Си от этого не станут. и так все забивали на возвращаемое значение 🙂
[16:20:53] <ada_ru> (geniepro) ну, проблемы если и бывали с тем, что в файлах неверные данные, то это из-за выключения питания только
[16:26:30] <ada_ru> (I_vlxy_I)  отвечает (geniepro) на <ну, проблемы если и …>
Хреновая попытка оправдать ненадежный код, рассчитанный только на happy path
[16:53:08] <ada_ru> (Oleg) Ну вы опять в контексте x86 рассуждаете
[16:53:41] <ada_ru> (Oleg) Может у вас вывод на дисплей 7 сегментный на 4 символа
[17:24:38] <ada_ru> (I_vlxy_I)  отвечает (Oleg) на <Может у вас вывод на…>
И возможно при этом у вас даже x86 :-)
[17:24:56] <ada_ru> (Oleg) Ну может конечно и так
[17:25:59] <ada_ru> (I_vlxy_I) x86 же активно применяется в embedded и микроконтроллеры есть с x86 ядром
[17:35:13] <ada_ru> (t91x0)  отвечает (Oleg) на <Может у вас вывод на…>
Сама семантика стандартного ввода-вывода подразумевает единственный путь обработки такого не полностью выведенного сообщения: повтор с нового места. Это может быть сделано автоматически на уровне библиотеки, которая предоставляет printf. А если это может быть сделано, то почему не сделано?
[17:43:47] <ada_ru> (shiz01)  отвечает (Vinpuh) на <Но libncurses5 надоб…>
Хм, на гентаче из коробки завелась.
[17:45:46] <ada_ru> (shiz01)  отвечает (nitrocerber) на <error: invalid prepr…>
А какая версия gcc?
Впрочем, дойду до ноута на gcc-11_master гляну.
[17:46:16] <ada_ru> (nitrocerber) гнатовская) старая как испражнения мохнатых слонов
[17:46:20] <ada_ru> (nitrocerber) 9.3.1 чтоли там
[17:46:39] <ada_ru> (shiz01)  отвечает (nitrocerber) на <9.3.1 чтоли там>
Он самый, если gnat 2020.
[19:15:48] <ada_ru> (shiz01)  отвечает (nitrocerber) на <error: invalid prepr…>
На gcc-11_master, с -std=c2x тоже самое.
[19:16:09] <ada_ru> (nitrocerber) Ну понятно, на уровне влажных мечт
[19:16:15] <ada_ru> (nitrocerber) такое и у нас есть)
[19:21:11] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <такое и у нас есть)>
:-(
[19:21:43] <ada_ru> (insert_reference_here) Когда в плюсы или в C завезут анализ времён жизни?
[19:22:52] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Когда в плюсы или в …>
Лет через 6-9 думаю. В С++
[19:22:58] <ada_ru> (I_vlxy_I) В Си - никогда
[19:23:31] <ada_ru> (insert_reference_here) Как категорично. А на чём в послед
нем случае такая уверенность основана?
[19:24:12] <ada_ru> (t91x0)  отвечает (insert_reference_here) на <Как категорично. А н…>
Там в комитете сидят люди, которые не верят в электричество
[19:24:20] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Как категорично. А н…>
Слишком возрастёт сложность компилятора. У Си намного больше компиляторов чем у плюсов. И это одно из основных преимуществ
[19:24:29] <ada_ru> (t91x0) Как там бабка с антресолей из Золотого телёнка
[19:25:06] <ada_ru> (I_vlxy_I) То есть имплементировать в большой тройке - не достаточно
[19:25:36] <ada_ru> (nitrocerber)  отвечает (t91x0) на <Там в комитете сидят…>
чот орнул в голос
[19:26:41] <ada_ru> (geniepro)  отвечает (insert_reference_here) на <Как категорично. А н…>
сишечке-то зачем это? там всё вручную, никакой автоматики не надо...
[19:27:18] <ada_ru> (insert_reference_here)  отвечает (geniepro) на <сишечке-то зачем это…>
Сегфолты сами себя не вызовут!
[19:28:46] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Сегфолты сами себя н…>
Сегфолт это хорошо. Это лучшее что может случиться при промахе мимо памяти
[21:12:55] <ada_ru> (reznikmm) /me 5 раз запускает апгрейд ubuntu до 20.04 ☹️
[22:15:41] <ada_ru> (reznikmm) Обновился наконец, всё настройки потёр, как жить? Генту обновлялся, ничего не менял, а тут снова все хоткеи настраивать и пр 😕
[22:18:38] <ada_ru> (shiz01) Вот за это гентач и люблю.
В Gentoo Fondution не считают себя умнее конечных пользователей. Что хочешь - то и будет.
А вот на бубенте - как написали через одно место скрипт-апдейтилку, так оно и работает.
[23:01:07] <ada_ru> (a) Бэкап для слабаков?
[23:05:48] <ada_ru> (I_vlxy_I) конченные пользователи...
[23:09:58] <ada_ru> (insert_reference_here) Что-то в чате по Аде подозрительно мало собственно Ады
[23:11:20] <ada_ru> (I_vlxy_I) https://habr.com/en/company/jugru/blog/503250/
[23:32:43] <ada_ru> (nitrocerber)  отвечает (insert_reference_here) на <Что-то в чате по Аде…>
те, кто на ней пишут - на ней пишут, им некогда)
[23:33:09] <ada_ru> (nitrocerber) да и потом чо про неё говорить. это ж не раст, где 5 новых версий в год
[23:34:15] <ada_ru> (I_vlxy_I) даже в джаве 2 версии языка в год!
[23:36:03] <ada_ru> (reznikmm)  отвечает (a) на <Бэкап для слабаков?>
Так со snapshot-а и восстанавливался 5 раз, пока нормально встало. Толку только 0 в плане настроек.
[23:36:28] <ada_ru> (nitrocerber) бубунта - для хомяков
[23:36:36] <ada_ru> (nitrocerber) им не положено кастомные настройки
[23:36:41] <ada_ru> (nitrocerber) поставил искаропки и сиди
[23:36:57] <ada_ru> (Oleg) Дайте мне пример как в Wasm вывести табличку из бд на аде и я на ней клянусь буду 100500 приложений лепить
[23:45:45] <ada_ru> (I_vlxy_I)  отвечает (Oleg) на <Дайте мне пример как…>
А ключи от квартиры? :-)