[16:24:52] <ada_ru> (Vinpuh) https://www.whitesourcesoftware.com/most-secure-programming-languages/
[16:26:52] <ada_ru> (I_vlxy_I)  цитирует (Bojan)
I attended this OOPSLA presentation a couple of  weeks ago: https://www.youtube.com/watch?v=8tG4LawDYI8

It deals with methodology of a 2014 paper, which was trying to correlate the frequency of bugs with the programming language. The conclusion of the 2014 paper was very roughly - C/C++/weak bad, functional/strong good.

This team tried to analyze and reproduce those findings. The presentation was really funny, and it was difficult to restrain from doing a facepalm after facepalm:). The 2014 paper seems to contain pretty bad science - bad statistics, treating v8 as a JS project, treating translation (.ts) xml files as Typescript files, etc.
[16:29:39] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <Спасибо, а то не пой…>
Получилось продраться сквозь кресты в статье?
[16:31:23] <ada_ru> (Максим) ну я так, поглядел по диагонали. Чего не понял, так это, как они сделали драйвер постгресса? Ладно там HTTP написать с нуля, это наверное не так сложно. Но как переписать постгрес :(
[16:33:16] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <ну я так, поглядел п…>
Скорее пропатчили существующий
[16:33:45] <ada_ru> (I_vlxy_I) Перевели его на астнхронно-корутинно засыпающие сокеты
[16:34:35] <ada_ru> (Максим) типа перехватить вызов к системному read ?
[16:34:40] <ada_ru> (I_vlxy_I) Как и http
[16:35:12] <ada_ru> (I_vlxy_I) Stackfull корутины обычно это позволяют безболезненно сделать
[16:35:27] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <типа перехватить выз…>
Просто поправили исходники
[16:36:13] <ada_ru> (I_vlxy_I) Зачем перехватывать, если можно просто пропатчить? :-) оно же ровно через обычные сокеты работает
[16:36:40] <ada_ru> (I_vlxy_I) Это же всего лишь протокол общения с постгрессом, его клиентская реализация
[16:36:53] <ada_ru> (Максим) А бывают корутины, которые делают Yield только чтобы дать другим поработать?
[16:37:37] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <А бывают корутины, к…>
Обычно такая возможность есть во всех корутинах. То есть дернуть yield без всякого IO
[16:38:25] <ada_ru> (Максим) Т.е. у Yield должен быть какой-то параметр? Чтобы отличать "yield без всякого IO"
[16:40:47] <ada_ru> (I_vlxy_I) Не. Я имею в виду, что можно yield в произвольном месте кода воткнуть.
[16:44:04] <ada_ru> (Максим) как программа узнает, ждет эта корутина что-то или просто жертвует поток исполнения. т.е. в какой момент ее будить
[16:48:49] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <как программа узнает…>
Через ручной шедулер видимо. Тогда кроме голого yield видимо да, появляются более сложные.
[16:49:05] <ada_ru> (I_vlxy_I) Простейший вариант - таймер
[16:56:19] <ada_ru> (Gourytch)  отвечает (Максим) на <как программа узнает…>
полагаю как её следующий черёд в списке выполнения подойдёт - так и передаст бразды правления. в питоне, например, ежли
yield from / await чегототам делается, то вернётся тогда, когда это самое чегототам выдаст результат на-гора. ну а если чегототама нет - то шедулер дастпоработать как только посчитает нужным согласно его внутренней логике.
(это на мой дилетантский взгляд)
[16:57:55] <ada_ru> (I_vlxy_I) Штука в том, что шедулер нам ещё только предстоит создать :-)
[17:01:23] <ada_ru> (Gourytch)  отвечает (I_vlxy_I) на <Штука в том, что шед…>
Охъ... это надо Jan-а всего выслушать?
[17:03:31] <ada_ru> (Gourytch) (а чего там ады нет?)
[17:04:13] <ada_ru> (I_vlxy_I)  отвечает (Gourytch) на <Охъ... это надо Jan-…>
Э?
[17:07:06] <ada_ru> (Gourytch) ну я пошёл смотреть Он зе импэкт оф программинг лэнгвиджэс он коуд ква-квалити и там из гита жабаскрипты и жабы и плюплюсы, а ады нет.
[17:16:42] <ada_ru> (Максим) А если, к примеру, нужно ждать следующих данных из сокета, но не более 10 секунд. Как это делается? Надо ставить два события и ждать какое раньше сработает?
[17:17:52] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <А если, к примеру, н…>
Давай я лучше гляну как это в Го делается? Как до домашнего компа доберусь. Ну или сам глянь :-)
[17:18:47] <ada_ru> (I_vlxy_I) Не хочу фантазировать, когда можно просто ответ найти
[17:20:32] <ada_ru> (I_vlxy_I)  отвечает (Gourytch) на <ну я пошёл смотреть …>
А при чем тут то мое сообщение, которое ты процитировал? (Про корутины и их шедулер)
[17:20:56] <ada_ru> (I_vlxy_I) А так - там всего 20 минут спича. Довольно легкий материал.
[17:22:04] <ada_ru> (Gourytch)  отвечает (I_vlxy_I) на <А при чем тут то мое…>
я не знаю. у меня скорее всего случилась какая-то коллизия в мозгах. но... я вроде не цитировал ничего... ты про await/yield from ?
[17:23:11] <ada_ru> (Gourytch)  отвечает (I_vlxy_I) на <А так - там всего 20…>
он классно рассказывает. слушать хорошо и понятно. одна беда - меня параллельно дёргают чтобы я рассказал как сделать EXPLAIN на SELECT к docs-ам =)
[17:24:09] <ada_ru> (Gourytch) (поэтому у меня контексты переключаются с потерями информации = =)
[17:28:25] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <Давай я лучше гляну …>
Глянь, если не сложно. Я просто надеялся, что кто-то работал с корутинами и может меня направить в правильном направлении 😄
[17:51:59] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <Глянь, если не сложн…>
Я работал на уровне юзера :-)
[17:52:17] <ada_ru> (I_vlxy_I) То есть прикладному программисту обычно это все уже знать не надо
[17:52:33] <ada_ru> (I_vlxy_I) И про это Антон пишет как раз в статье :-)
[17:52:41] <ada_ru> (I_vlxy_I) Я гляну
[18:40:04] <ada_ru> (Максим) Кто шарит в typescript? Что значит &?
colorProvider?: boolean | ColorProviderOptions | (ColorProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions);
[18:48:29] <ada_ru> (I_vlxy_I) nullable небось
[18:48:50] <ada_ru> (I_vlxy_I) А, не
[18:49:16] <ada_ru> (I_vlxy_I) Побитовое И может быть?
[18:49:57] <ada_ru> (Максим) Нашел, это у них называется Intersection Types
[18:50:30] <ada_ru> (Максим) типа берем все поля всех типов и засовываем вместе. кажется
[18:52:35] <ada_ru> (I_vlxy_I) Жесть какая. А там работает и | и &    ?
[18:52:55] <ada_ru> (I_vlxy_I) Одно даёт пересечение, другое - объединение
[18:53:09] <ada_ru> (I_vlxy_I) Эдакие std::map для бедных :-)
[18:54:20] <ada_ru> (Максим) Ну | я раньше освоил, это аналог union
[18:54:48] <ada_ru> (Максим) А как мне в Аду эмулировать & я пока теряюсь
[18:58:20] <ada_ru> (I_vlxy_I) А, ну в плюсах это просто множественное наследование
[18:59:24] <ada_ru> (I_vlxy_I) Можно было бы набросать шаблон вида Intersection<First, Second> (число аргументов произвольное)
[19:00:14] <ada_ru> (I_vlxy_I) Не понятно что там будет в случае конфликтов. В ts то есть
[19:01:38] <ada_ru> (I_vlxy_I) Множественного наследования в Аде нет?

А дженериков с переменным числом аргументов?
[21:12:58] <ada_ru> (Лекс) Помогите плиз, пытаюсь присвоить строковой переменной рускоязычный литерал, выходит вот что... https://www.ada-ru.org/files/bot/2019-11-11-x1.jpg
[21:13:15] <ada_ru> (Лекс) нихрена не понял что делать >_<
[21:16:32] <ada_ru> (Andry Ogorodnik) Нет ни того ни другого
[23:36:55] <ada_ru> (I_vlxy_I) значит можно сделать так, как делали во времена с++98 🙂
[23:37:12] <ada_ru> (I_vlxy_I) вариант для двух типов, вариант для трех типов, вариант для четырех типов...
[23:37:16] <ada_ru> (I_vlxy_I) 😄
[23:38:20] <ada_ru> (Andry Ogorodnik) А теговый тип никак?
[23:39:12] <ada_ru> (I_vlxy_I) а толку с него? нет же множественного наследования.
[23:42:53] <ada_ru> (I_vlxy_I) да, а поскольку множественного наследования нет, то всё становится довольно печально. кажется в Аде, в общем случае, эта задача не решается вообще никак
[23:43:23] <ada_ru> (I_vlxy_I) так что нужно смотреть в конкретный код и переписывать его по Адски, отходя от TS-стиля