Home
Обсуждение программирования на любых платформах
codingteam@conference.jabber.ru
Суббота, 23 февраля 2019< ^ >
m4n71k0r установил(а) тему: C, C#, C++, Clojure, Cobol, Common Lisp, D, Erlang, F#, Go, Groovy, Haskell, Java, JavaScript, Kotlin, MATLAB, OCaml, PowerShell, Python, R, Racket, Refal, Ruby, Rust, Scala, Scheme, TypeScript
Telegram channel: https://t.me/codingteam
HQ, логи: https://codingteam.org.ru/
Код постить сюда: http://lpaste.net/
Юным погромцам сюда: http://e-maxx.ru/algo/ , а ещё читать Кнутца, Корменца, Седжвикца и др.
Let's Dev (когда Капитан на мостике): http://www.youtube.com/playlist?list=PLK6mcZkmN4QTusFvp_0GVtscQbCiIg81Y
Tsoding: https://tsoding.github.io/schedule.html
http://i.imgur.com/slnyI6a.jpg
Упоминания о Flash, PHP, Pascal/Delphi/Borland, Basic, 1С караются съедением поциента.
Конфигурация комнаты
Участники комнаты

GMT+3
[00:00:13] <j123123> А я например читал исходники HotSpot
[00:00:17] <j123123> Не советую их читать
[00:00:21] <j123123> крепче спать будете
[00:00:25] <tg> <@AlexFails> Кекд
[00:00:31] <tg> <@ttldtor> не хуже гцц
[00:00:42] <j123123> А как по мне - хуже
[00:00:42] <tg> <@AlexFails> Фу, гцц
[00:00:55] <tg> <@AlexFails> У шланга норм кстать
[00:01:03] <tg> <@ttldtor> шланг просто читать
[00:01:08] <tg> <@AlexFails> Да
[00:01:13] <tg> <@ttldtor> даже с их забавным кодстайлом
[00:01:14] <j123123> Нет, тоже не норм. Мне сильно не понравился код в LLVM
[00:01:22] <j123123> который что-то там делает с флоатами
[00:01:37] <j123123> там кстати UB был, который я так и не зарепортил
[00:01:37] <tg> <@AlexFails> >> <ttldtor> даже с их забавным кодстайлом
Замазан ругался на конст-корректность
[00:01:50] <Minoru> вы крутые, исходники компиляторов читаете, а я не могу понять, как канонично преобразовать libc::c_char в char в Rust ._.
[00:01:56] <tg> <@AlexFails> >> <j123123> там кстати UB был, который я так и не зарепортил
Надо б д убсаном прогнать
[00:02:16] <tg> <@AlexFails> >> <Minoru> вы крутые, исходники компиляторов читаете, а я не могу понять, как канонично преобразовать libc::c_char в char в Rust ._.
unsafe { каст в чар}
[00:02:32] <j123123> Не, тебе ubsan такое не словит, там особое
[00:02:34] <tg> <@ttldtor> >> <Minoru> вы крутые, исходники компиляторов читаете, а я не могу понять, как канонично преобразовать libc::c_char в char в Rust ._.
посмотри в ди таблички конвертации
[00:02:39] <j123123> Особая ситуация с UB
[00:03:19] <tg> <@AlexFails> >> <j123123> Не, тебе ubsan такое не словит, там особое
Во! Тогда надо добавить в него, чтобы он находил😊
[00:03:21] <Minoru> @AlexFails: я подозреваю, что даже без unsafe можно, потому что c_char это i8, т.е. там ASCII, которая подмножество UTF-32 которая в char
[00:04:11] <tg> <@ttldtor> >> <AlexFails> unsafe { каст в чар}
крутой, умеешь в раст
[00:04:31] <tg> <@AlexFails> Я даже бота написал!
[00:04:41] <tg> <@AlexFails> @RustFailsBot
[00:05:29] <tg> <@AlexFails> >> <AlexFails> юзает трейты (type_traits) и пакеты (conan)
[00:06:54] <Minoru> 123i8 as u8 as char
[00:07:00] <Minoru> но пахнет как-то неправильно
[00:08:12] <j123123> https://llvm.org/doxygen/AArch64AddressingModes_8h_source.html#l00343
[00:08:18] <j123123> вот собственно код такой
[00:08:23] <tg> <@ttldtor> что-то эффект от третьего кофе быстро прошёл, пойду-ка я спать %)
[00:08:30] <j123123> @AlexFails попробуй найти тут баг
[00:08:43] <j123123> static inline float getFPImmFloat(unsigned Imm)
[00:09:04] <j123123> и есть ли он тут вообще
[00:09:11] <j123123> это тоже интересный вопрос
[00:11:10] m4n71k0r вышел(а) из комнаты
[00:13:38] <j123123> Хотя это наверно не совсем правильно называть UB...
[00:14:22] Minoru вышел(а) из комнаты
[00:14:24] <j123123> Скажем так, стандартом Си и C++ не закреплено, где у нас экспонента, где у нас мантисса и где знаковый бит в float
[00:14:56] <j123123> https://www.appinf.com/download/FPIssues.pdf
[00:15:47] <j123123> Abstract. The C++ standard does not specify a binary representation for thefloating-point types float, double and long double.
[00:17:16] <j123123> Стандарт плюсов даже не требует соответствия IEE 754
[00:17:26] <j123123> IEEE 754
[00:19:32] <tg> <@Devel29A> А требовал разве?
[00:19:43] <tg> <@Devel29A> Вроде как была отсылка к 754 только
[00:20:10] <tg> <@Devel29A> Ну, то есть всегда так было же
[00:20:22] <j123123> Да, но писателям компилятора пофиг
[00:20:30] <j123123> точнее, писателям LLVM
[00:20:35] <tg> <@Devel29A> Хм
[00:20:47] <tg> <@Devel29A> А мы как раз на него переходим
[00:21:03] <tg> <@Devel29A> Спрошу-ка, кстати, у наших девов об этом
[00:22:52] <j123123> В LLVM вообще много нехороших мест
[00:22:56] <j123123> зря вы его нахваливаете
[00:23:04] <j123123> я б не сказал, что это сильно лучше кода GCC
[00:24:24] <tg> <@Devel29A> Мы переходим на него с целью унификации
[00:24:43] <tg> <@Devel29A> Чтобы было больше совместимости
[00:24:58] <j123123> Совместимости с чем?
[00:25:06] <j123123> GCC поддерживает больше архитектур
[00:27:25] <tg> <@AlexFails> >> <j123123> Скажем так, стандартом Си и C++ не закреплено, где у нас экспонента, где у нас мантисса и где знаковый бит в float
Тогда это "грязный хак"
[00:28:02] <tg> <@AlexFails> >> <j123123> Стандарт плюсов даже не требует соответствия IEE 754
Там есть емнип какой-то компилер макро
[00:30:12] <j123123> @AlexFails прикол в том, что при определенном размере float ты получишь UB
[00:30:22] <tg> <@AlexFails> Ну так-то д
[00:30:36] <j123123> ну т.е. если окажется вдруг, что float у нас на какой-то платформе занимает 64 бита
[00:30:55] <tg> <@AlexFails> В иеее их емнип 4 штуки вообще определено: half, float, double, long double
[00:31:01] <j123123> то bit_cast<float>(I) ... он прочитает 64 бита из uint32_t
[00:31:14] <j123123> и кирдык
[00:31:15] <tg> <@AlexFails> >> <j123123> ну т.е. если окажется вдруг, что float у нас на какой-то платформе занимает 64 бита
Надо б обмазать статик-ассертом то место, думаю
[00:31:47] <j123123> Как обмазать ассертом на то, что флоат имеет такое-то представление?
[00:32:18] <j123123> ну т.е. там он может быть 32-битный, но мантисса там будет с другим endian, а экспонента с обычным endian
[00:32:40] <j123123> IEEE 754 вроде как не запрещает это
[00:33:03] <tg> <@AlexFails> +
[00:36:22] <j123123> а еще есть в glibc такой хедер ieee754.h
[00:36:25] <j123123> можете поискать его
[00:37:23] <j123123> Только вот там используется type punning через юнионы, а по стандарту C++ это UB
[00:38:13] <j123123> https://github.com/bminor/glibc/blob/master/sysdeps/ieee754/ieee754.h
[01:18:21] <tg> <@a1batross> >> <ttldtor> The GNU Compiler Collection version 8.3 has been released.
>>
>> GCC 8.3 is a bug-fix release from the GCC 8 branch
>> containing important fixes for regressions and serious bugs in
>> GCC 8.2 with more than 153 bugs fixed since the previous release.
Шикардос.
[01:18:45] <tg> <@a1batross> Там пофиксили баг, который мешал собраться Xash3D на 8.х ветке. :)
[01:19:20] <tg> <@a1batross> Ну я его и зарепортил, да.
Ну. Просто нам приходят ишшуи, мол чото не собирается.
[01:23:27] <j123123> @a1batross ссылку на баг можно?
[01:24:33] <tg> <@a1batross> j123123, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88635
[01:25:57] <tg> <@a1batross> В 8.2, сорян. Но там написано в кауо
[01:26:13] <tg> <@a1batross> *в какой ревизии появилось
[01:49:40] <j123123>    do
     if (++*b++ == 0)
       break;
[01:49:41] <j123123> лол
[02:25:03] <tg> <@Devel29A> >> <j123123> Совместимости с чем?
Кросс и вообще
[02:25:41] <tg> <@Devel29A> В гоцацэ контрибьютит беспонт - GPL же
[02:26:04] <tg> <@Devel29A> А у нас бизнес модель не как у редхата
[02:53:44] uggur вышел(а) из комнаты: Replaced by new connection
[02:53:45] uggur вошёл(а) в комнату
[05:37:53] uıʃɐɟ∀ вышел(а) из комнаты: Replaced by new connection
[05:37:56] uıʃɐɟ∀ вошёл(а) в комнату
[06:28:52] uggur вышел(а) из комнаты: Replaced by new connection
[06:28:53] uggur вошёл(а) в комнату
[08:28:58] ma1uta вышел(а) из комнаты: Replaced by new connection
[08:28:59] ma1uta вошёл(а) в комнату
[08:58:35] portnov вошёл(а) в комнату
[09:31:15] <j123123> @Devel29A у LLVM с совместимостью вроде похуже
[09:37:24] portnov вышел(а) из комнаты
[09:58:22] <j123123> По крайней мере ядро Linux им так и не собрать
[09:58:45] <j123123> хоть clang и активно мимикрирует под GCC
[09:59:02] <j123123> поддерживая кучу всяких его экстеншенов
[10:01:06] <j123123> какие-то патченные версии ядра только собираются
[10:07:44] portnov вошёл(а) в комнату
[10:24:49] m4n71k0r вошёл(а) в комнату
[10:30:33] <tg> <@Devel29A> >> <j123123> @Devel29A у LLVM с совместимостью вроде похуже
Это пока, но перспектива лучше. Оно имеет потенциал и можно туда контрибьютить для своих бизнес целей
[10:31:08] <j123123> @Devel29a а какие такие бизнес цели?
[10:31:16] <j123123> Сделать свой уникальный компилятор и продавать его?
[10:31:25] <j123123> Встраивать сам LLVM в свой проприетарный код?
[10:31:35] <tg> <@Devel29A> Он уже есть. Intel Compiler
[10:31:47] <tg> <@Devel29A> Теперь будет поверх LLVM
[10:31:58] <j123123> Ну и пусть, я не против
[10:32:40] <j123123> Я не вижу у Clang/LLVM существенного преимущества в плане качества сгенерированного кода, в сравнении с GCC
[10:32:59] <j123123> И качество кода тоже сопоставимое
[10:34:18] <j123123> Ну т.е. если посмотреть на историю развития Clang/LLVM и сопоставить с GCC, то поначалу (из-за молодости) этот самый Clang/LLVM серьезно проигрывал, как в плане поддержки стандарта, так и в плане оптимизациий
[10:34:43] <j123123> Потом очень быстро стал вровень с GCC, но дальше я не вижу прогресса
[10:35:02] <j123123> Clang/LLVM в итоге не стал более качественным компилятором, чем GCC
[10:35:17] <j123123> Где-то лучше, где-то хуже оптимизирует
[10:35:23] <j123123> Явного лидера нет
[10:36:05] <j123123> Можно еще сравнивать всякие диагностики, но это не основная цель компилятора.
[10:36:15] <j123123> Статические анализаторы это умеют лучше
[10:39:25] <tg> <@Devel29A> >> <j123123> Clang/LLVM в итоге не стал более качественным компилятором, чем GCC
И тем не менее, андроид перевели на clang
[10:39:46] <j123123> Ядро андроида все еще компилируется GCC
[10:40:04] <j123123> И что значит "андроид перевели"?
[10:40:17] <tg> <@Devel29A> Ядро андроида это же Линукс ядро по сути. Потому, да
[10:40:29] <j123123> Это стоит понимать как "теперь собрать андроид из исходников можно только через clang"?
[10:40:38] <j123123> Или в чем смысл?
[10:41:03] <tg> <@Devel29A> >> <j123123> И что значит "андроид перевели"?
Если собирать AOSP то gcc либо дипрекейтед либо уже даже выпилен
[10:41:42] <j123123> Т.е. он через GCC не соберется?
[10:41:46] <j123123> Или что имеется ввиду?
[10:42:15] <j123123> Вот есть некие исходники на Си и C++. Есть скрипт для сборки этих исходников
[10:42:17] <tg> <@Devel29A> Имеется ввиду, что Гугл сместил фокус в пользу clang
[10:42:33] <tg> <@Devel29A> И вполне вероятно, что в итоге не соберется
[10:42:42] <j123123> Ну так это плохо
[10:42:51] <j123123> значит они подстраиваются под конкретный компилятор
[10:43:11] <j123123> Не вижу тут причин для радости
[10:43:13] <tg> <@Devel29A> У них нет цели не делать так
[10:43:27] <tg> <@Devel29A> Во-вторых дело в другом
[10:43:31] <j123123> В чем же?
[10:43:34] <tg> <@Devel29A> Что-то их побудило перейти
[10:43:49] <j123123> И что же?
[10:43:53] <tg> <@Devel29A> Преследуется какая-то цель, очевидно
[10:44:05] <tg> <@Devel29A> Я не знаю, к сожалению
[10:44:09] <j123123> Лол.... это не всегда так
[10:44:15] <tg> <@Devel29A> Но очень хотелось бы узнать
[10:44:26] <j123123> это может быть просто желание правой пятки какого-то там эффективного менеджера
[10:44:39] <j123123> типа "x - модно, давайте переходить на x"
[10:44:40] <tg> <@Devel29A> Ну, я не соглашусь. Андроид огромный проект и переход это риск
[10:44:57] <tg> <@Devel29A> Риск без причины и выгоды это тупо
[10:47:06] <j123123> https://github.com/android-ndk/ndk/issues/26#issuecomment-198067100
[10:49:26] <j123123> > All the comparisons we did showed that Clang and GCC were pretty much  equivalent quality when it came to the code they produced. Yes,  sometimes we find cases where GCC is faster, but we also find cases  where Clang is faster.
[10:50:10] <tg> <@the_RAMZAY> Оптимизации компилятотор С++? Это те которые кроме дефолтных детских кейсов, которых в реальном коде почти не встречается, по сути не оптимизируют?
Был я недавно на конфе по перформансу в дотнет коре и показывали как «оптимизирует» clang, ржал весь зал. Шаг влево, шаг вправо - не оптимизированный код.
[10:50:56] <j123123> Именно так
[10:50:56] <tg> <@Devel29A> И?
[10:51:08] <j123123> в компиляторах там особые паттерны встроены для детекта
[10:51:30] <tg> <@Devel29A> Может ещё кривой код заворачивать в SIMD?
[10:51:33] <j123123> которые только так обнаруживаются и тогда вот они оптимизируются
[10:51:39] <tg> <@the_RAMZAY> Но там паттерны очень примитивные. Такой код очень редко пишут.
[10:53:08] <tg> <@the_RAMZAY> Проекты на С++ собираются очень долго. Лучше бы эту проблему решали.
[10:53:18] <j123123> https://godbolt.org/z/dPxQg6 вот вам примерчик
[10:53:54] <j123123> saturation_add компилируется ВСЕМИ компиляторами плохо, а saturation_add_2 компилируется ВСЕМИ компиляторам хорошо
[10:55:07] <j123123> @the_RAMZAY эта проблема не может быть программно решета
[10:55:12] <j123123> *решена
[10:55:30] <tg> <@the_RAMZAY> https://lucasmeijer.com/posts/cpp_unity/
[10:55:44] <j123123> ну т.е. там остается только JIT для интерпретации темплейтно-констэкспрного метапрограммирования запиливать
[10:55:55] <j123123> других методов программного решения я не вижу
[10:56:23] <tg> <@the_RAMZAY> Народ уже уходит на сабсет с# потому что их задолбало ждать пока компилится с++
[10:56:23] <j123123> Или будут компиляторы в FPGA делать, или сразу ASIC
[10:56:35] <j123123> А я ухожу на Си
[10:56:45] <j123123> Хотя я не ухожу, я и так на Си
[10:56:54] <j123123> Я просто не прихожу в эти ваши плюсы
[10:57:33] <tg> <@Devel29A> >> <the_RAMZAY> Проекты на С++ собираются очень долго. Лучше бы эту проблему решали.
Пиздеж
[10:58:01] <tg> <@the_RAMZAY> >> <Devel29A> Пиздеж
А ты шутник.
[10:58:05] <j123123> Я помню как-то прикалывался, сортировку пузырьком через constexpr-ы делал
[10:58:10] <j123123> в плюсах
[10:58:23] <j123123> и сравнивал по пирфомансу с той же самой сортировкой для рантайма
[10:58:27] <j123123> разница была существенная
[10:58:29] <tg> <@Devel29A> >> <the_RAMZAY> А ты шутник.
Зато не выбрасываю хуйню
[10:58:57] <tg> <@ttldtor> >> <the_RAMZAY> Народ уже уходит на сабсет с# потому что их задолбало ждать пока компилится с++
не надо так толсто троллить. Не это проблема плюсов
[10:58:58] <tg> <@the_RAMZAY> Проект на С++ и на С# одинаковых размеров пробовал собирать?
[10:59:10] <j123123> компилятор работает с этими constexpr-ами на уровне какого-то скриптоязыка примитивного
[10:59:37] <tg> <@Devel29A> >> <the_RAMZAY> Проект на С++ и на С# одинаковых размеров пробовал собирать?
Вот хуй с пальцем не надо тут сравнивать. Это разнородные штуки совсем
[10:59:47] <j123123> Эммм.... @the_RAMZAY видишь ли, компилятор C# компилирует в байткод
[10:59:47] <tg> <@Devel29A> Ещё питон впиши хули
[10:59:58] <j123123> и на том этапе он ничего особо не оптимизирует
[11:00:09] <tg> <@the_RAMZAY> Люди в Unity3D заколебались ждать.
[11:00:20] <j123123> оттого-то оно так легко декомпилится всякими дуднет-рефлекторами
[11:00:23] <tg> <@ttldtor> они грэдлом собирают
[11:00:26] <tg> <@ttldtor> в юнити
[11:00:34] <tg> <@ttldtor> если говорить о разрабах юнити
[11:00:37] <tg> <@Devel29A> У меня больше томозов от билдсистем
[11:00:43] <tg> <@Devel29A> Чем от компайлера
[11:00:58] <j123123> А как можно затормозить билдсистему?
[11:01:06] <tg> <@ttldtor> взять sbt
[11:01:12] <tg> <@ttldtor> или gradle
[11:01:19] <j123123> жабки всякие... ясно
[11:01:20] <tg> <@Devel29A> Ебаное ничего на питон системе типа сконза может жевать пару минут на крутой тачке
[11:02:57] <j123123> моя любимая билдсистема
#!/bin/sh
gcc -O2 *.c -o MyProgram
[11:03:52] <tg> <@the_RAMZAY> Кстати, а как на С++ проекты пакеты устанавливать?
[11:04:13] <tg> <@Devel29A> Какие ещё пакеты
[11:04:15] <j123123> Эмм, что? Какие пакеты?
[11:04:26] <tg> <@the_RAMZAY> Ну, как во всех языках.
[11:04:31] <j123123> В каких?
[11:04:37] <j123123> У меня вот в сишке никаких пакетов нет
[11:04:45] <tg> <@the_RAMZAY> Да в с# банально.
[11:04:49] <tg> <@the_RAMZAY> В Java
[11:04:53] <tg> <@the_RAMZAY> Python
[11:04:57] <j123123> Ну так это, были какие-то потуги
[11:05:06] <tg> <@the_RAMZAY> JS
[11:05:16] <tg> <@the_RAMZAY> Ruby
[11:05:53] <j123123> Их много раз пытались родить, conan.io был
[11:05:55] <j123123> еще какие-то
[11:05:58] <j123123> можешь погуглить
[11:06:00] <tg> <@Devel29A> Что такое эти твои пакеты объясни
[11:06:03] <tg> <@Devel29A> Я не понял
[11:06:19] <tg> <@the_RAMZAY> >> <j123123> Их много раз пытались родить, conan.io был
Вот что-то про него слышал.
[11:06:24] <tg> <@Devel29A> И причем тут языки программирования
[11:06:42] <tg> <@the_RAMZAY> >> <Devel29A> И причем тут языки программирования
При том что это дефолтный тулинг?
[11:07:29] <j123123> Нет, я б это тулингом не назвал. Ну или у нас разные представления по поводу тулинга
[11:07:42] <j123123> Для меня тулинг это отладчики, трассировщики, санитайзеры
[11:07:52] <j123123> код коверадж
[11:07:54] <tg> <@the_RAMZAY> .net & nuget, node & npm, python & pip. И так далее
[11:08:13] <tg> <@winged_pegasus> А C# уже научился в массивы крупного размера?
[11:08:22] <tg> <@winged_pegasus> Или всё так же чанки вручную писать?
[11:08:27] <j123123> https://buckaroo.pm/ еще какой-то
[11:08:39] <tg> <@winged_pegasus> Рамазай опять троллит?
[11:09:08] <tg> <@the_RAMZAY> >> <winged_pegasus> А C# уже научился в массивы крупного размера?
За 3 года Энтерпрайз продакшена не разу не пользовался месивами. Зачем они нужны, когда есть листы?
[11:09:26] <j123123> лол
[11:09:39] <j123123> месивами
[11:10:00] <tg> <@the_RAMZAY> Автокоррект сработал.
[11:10:28] <tg> <@Devel29A> >> <the_RAMZAY> При том что это дефолтный тулинг?
Што
[11:10:35] <j123123> https://www.reddit.com/r/cpp/comments/3d1vjq/is_there_a_c_package_manager_if_not_how_do_you/
[11:10:40] <tg> <@the_RAMZAY> Btw, как на плюсах пакеты устанавливать?
[11:10:54] <j123123> На какой платформе и какие пакеты?
[11:11:18] <j123123> В линуксах есть libtool например
[11:11:19] <tg> <@winged_pegasus> Берёшь пакетный менеджер системы и юзаешь его.
[11:11:21] <tg> <@Devel29A> Какие блять пакеты
[11:11:26] <j123123> в общем это долгий и сложный разговор
[11:11:34] <tg> <@Devel29A> Что это такое кто то объяснит?
[11:11:39] <tg> <@the_RAMZAY> >> <j123123> https://www.reddit.com/r/cpp/comments/3d1vjq/is_there_a_c_package_manager_if_not_how_do_you/
О господи...
[11:11:44] <j123123> @Devel29A он под пакетами имеет ввиду либы
[11:12:01] <j123123> типа зависимости к хрени всякой
[11:12:35] <tg> <@Devel29A> Ну, мейнтейнеры под дистр делают ебыдлы рамы етц
[11:12:44] <tg> <@the_RAMZAY> Не, я никогда не осилю С++, если там до сих пор нет стандартизированного пакетного менеджера.
[11:12:45] <tg> <@Devel29A> Плюсы тут не причем
[11:12:45] <j123123> типа вот понадобился ему парсер XML для плюсов, он набрал типа в консоли что-то типа cpp_package_manager install XMLParser
[11:13:07] <tg> <@Devel29A> Это что-то в тренде про модули было
[11:13:16] <j123123> И потом какой-то софт, который этот XMLParser требует - он может с ним залинковаться
[11:13:41] <j123123> Ну что-то такое есть в Gentoo
[11:13:46] <tg> <@Devel29A> Так можно только под конечное число систем делать
[11:13:54] <tg> <@Devel29A> Иначе охуеешь поддерживать
[11:14:12] <j123123> emerge называется
[11:14:22] <j123123> но оно не только для плюсов
[11:14:58] <j123123> А своего внутриязыкового (типа как pip в питон) там нет
[11:15:36] <tg> <@the_RAMZAY> Ээээм, и как писать софт размером чуть больше чем хеллоу ворлд?
[11:15:40] <j123123> К тому же бывают всякие ебанутые зависимости, когда софт на плюсах требует либу на фортране которая матрицы перемножает
[11:16:08] <tg> <@Devel29A> >> <the_RAMZAY> Ээээм, и как писать софт размером чуть больше чем хеллоу ворлд?
Писать изи
[11:16:19] <j123123> Ну а в чем проблема? Устанавливаешь, компилируешь либы, прописываешь правила линковки всякие
[11:16:26] <j123123> флаги там
[11:16:32] <tg> <@the_RAMZAY> >> <Devel29A> Писать изи
Ну вот мне понадобился тот же json serializer
[11:17:09] <j123123> И?
[11:17:21] <tg> <@the_RAMZAY> В c# я сделаю:
Nuget install my_fav_ser
[11:17:24] <tg> <@the_RAMZAY> И готово
[11:17:26] <j123123> Ну смотришь какие есть либы для json serializer
[11:17:31] <j123123> скачиваешь, читаешь доки
[11:17:38] <j123123> компилируешь потом
[11:17:58] <j123123> потом прописываешь чтоб твоя прога с той либой линковалась, потом пишешь код с использованием этой либы
[11:18:02] <j123123> эхххх
[11:18:08] <tg> <@the_RAMZAY> Как мне установить пакет такой в с++ проект.
[11:18:16] <j123123> проект?
[11:18:29] <tg> <@the_RAMZAY> Да, проект.
[11:18:41] <j123123> Нет там такого. Точнее, что-то такое есть, но в очень сильно ограниченном варианте
[11:19:05] <tg> <@a1batross> ж123123 -- няшен. :3
[11:19:07] <tg> <@winged_pegasus> Берёшь conan и всё работает.
[11:19:21] <tg> <@the_RAMZAY> >> <winged_pegasus> Берёшь conan и всё работает.
А, во, так бы и сказали )
[11:19:45] <j123123> если б всё работало, не было б кучи разных пакетных менеджеров
[11:20:07] <tg> <@winged_pegasus> Этот ж прям инженерная писька не стоит — не мочь без пакетника что-то заюзать.
[11:20:17] <tg> <@a1batross> emerge ${вашпакет}
pkgconfig ${вашпакет-с-чутка-другим-названием}
:3
[11:22:04] <tg> <@the_RAMZAY> >> <winged_pegasus> Этот ж прям инженерная писька не стоит — не мочь без пакетника что-то заюзать.
А зачем мне тратить своё время на ерунду?
[11:22:39] <tg> <@the_RAMZAY> Я решаю проблемы бизнеса, а не борюсь с ветром.
[11:23:03] <tg> <@the_RAMZAY> Я должен 8 часов писать код и на этом всё.
[11:23:33] <j123123> Иногда решение проблем бизнеса требуют и этого
[11:23:33] <tg> <@the_RAMZAY> А не какие-то там либы искать, скачивать, собирать, линковать.
[11:23:57] <j123123> ну да, искать и скачивать какие-то либы, а потом их собирать-линковать - тоже вполне себе проблемы бизнеса
[11:24:04] <j123123> почему б и нет?
[11:24:42] <tg> <@the_RAMZAY> Скажем так - издержки бизнеса построенного на с++
[11:25:15] <tg> <@a1batross> Если бизнесу так надо
[11:25:17] <j123123> Почитай лучше мой баттхерт-пост на govnokod.ru по этим вашим пакетным менеджерам
[11:25:23] <tg> <@a1batross> Пусть возьмёт мартышек на жопном скрипте.
[11:25:47] <j123123> https://govnokod.ru/20044
[11:25:58] <tg> <@the_RAMZAY> >> <a1batross> Пусть возьмёт мартышек с жопным скриптом
Крайне сильное заблуждение по поводу мартышек.
[11:26:27] <tg> <@fvnever> >> <folexeyy> те лампочки были просто охуенные. Вы представляете? Ноутбук ЗАКРЫТ, но сбоку есть кноповка, ты её ЖАМК, и 7 светодиодов показывают уровень зарядки
У меня тоже такие есть, но я не понял, что они делают. Нажимаешь кнопку и они горят несколько секунд, а потом тухнут. Это они уровень заряда показывают?
[11:26:29] <tg> <@the_RAMZAY> Текущий фронтенд очень сложный и интересный.
[11:26:40] <tg> <@a1batross> >> <the_RAMZAY> Крайне сильное заблуждение по поводу мартышек.
почему? Мартышки дешёвые.
[11:26:50] <tg> <@the_RAMZAY> TypeScript, React, Redux, Saga
[11:27:30] <j123123> Как много языков. То ли дело эмбеддед. Си, с редкими вкраплениями ассемблера
[11:27:58] <tg> <@the_RAMZAY> Проблема pip в том, что эта параша устанавливает пакеты на уровне ОС. Цэ породило такой софт как Anaconda.
[11:28:18] <tg> <@fvnever> >> <folexeyy> Как вообще можно посметь на расте такие ошибки кидать? В расте же божественно сделана работа с ошибками
По-моему, ты просто пишешь что-то типа some_func().expect("zomgwtf"), а дальше оно само падает, не?
[11:29:35] <tg> <@a1batross> Я тут по поводу pip и двух версий питона бомбил недавно.
[11:29:42] <tg> <@a1batross> Вру, не тут, но ладно.
[11:29:59] <tg> <@the_RAMZAY> У питона наркомания во многом.
[11:30:34] <tg> <@fvnever> >> <j123123> А я например читал исходники HotSpot
И я читал, нормально там всё.
[11:30:40] <tg> <@fvnever> Намного лучше GCC.
[11:30:59] <tg> <@a1batross> Сделал pip install, оно скачало всё для питона 2. Ну ладно, делаю pip3 install. Говорит, что ничего не будет делать, пока не обновлю pip. Обновляю. Оно не может обновить само себя!
[11:31:05] <tg> <@fvnever> А в LLVM там вообще прекрасный код.
[11:31:12] <tg> <@the_RAMZAY> Юзаю питон 3 для решения личных задач которые требуют нейронных сетей. Это пара десятков строчек кода и усё. Но в питоне всё грустно, да.
[11:31:28] <tg> <@a1batross> вылетая с несовсем однозначным трейсом
[11:31:50] <tg> <@ingvarjackal> опять бомбите от безделья
[11:32:00] <tg> <@ingvarjackal> каждые выходные такое (:
[11:32:04] <tg> <@the_RAMZAY> Да, по этому юзаю анаконду.
[11:32:18] <tg> <@the_RAMZAY> Питон цэ писец.
[11:32:21] <tg> <@ttldtor> >> <the_RAMZAY> Кстати, а как на С++ проекты пакеты устанавливать?
юзай Conan, ну
[11:32:56] <tg> <@the_RAMZAY> Каждый раз, когда нужно что-то сделать на питоне, так сразу настроение портится.
[11:33:11] <j123123> У меня с этим питоном тоже проблемы были
[11:33:20] <tg> <@ttldtor> у меня нет проблем с питоном
[11:33:25] <j123123> что какая-то фигня работает с одной версией питона, какая-то другая с другой версией
[11:33:25] <tg> <@ttldtor> и не будет
[11:33:27] <j123123> данунафиг
[11:33:46] <tg> <@the_RAMZAY> Да у них там ад.
[11:33:48] <tg> <@a1batross> Лучше бы Гвидо язык переименовал.
[11:33:51] <tg> <@a1batross> Чем версию бампал.
[11:34:01] <tg> <@the_RAMZAY> Угу
[11:34:11] <tg> <@ttldtor> >> <ingvarjackal> опять бомбите от безделья
го бояры за создание красной армии хряпнем
[11:34:29] <tg> <@ttldtor> ой,
[11:34:33] <tg> <@fvnever> >> <the_RAMZAY> Кстати, а как на С++ проекты пакеты устанавливать?
Считаю до трёх. Раз.
[11:35:03] <tg> <@fvnever> >> <winged_pegasus> А C# уже научился в массивы крупного размера?
Нет, больше 2 гигов до сих пор нельзя. А нужно?
[11:35:06] <tg> <@winged_pegasus> >> <ttldtor> го бояры за создание красной армии хряпнем
Есть же нормальные настойки, н чо ты.
[11:35:13] <tg> <@winged_pegasus> >> <fvnever> Нет, больше 2 гигов до сих пор нельзя. А нужно?
Ну а мало ли?
[11:35:22] <tg> <@fvnever> >> <the_RAMZAY> Btw, как на плюсах пакеты устанавливать?
Два.
[11:35:24] <tg> <@winged_pegasus> Мне пригождалось в продакшоне пару раз.
[11:35:40] <j123123> @fvnever, нет, в целом исходники JVM неочень. https://github.com/openjdk-mirror/jdk7u-hotspot/blob/50bdefc3afe944ca74c3093e7448d6b889cd20d1/src/share/vm/memory/defNewGeneration.cpp например это какой-то код, связанный с поколениями. Ну, поколения для GC применяются
[11:36:03] <tg> <@ttldtor> >> <winged_pegasus> Мне пригождалось в продакшоне пару раз.
а ты умеешь во внешнюю сортировку?)
[11:36:23] <j123123> т.е. там есть некий сложный механизм (эвристика), что объекты, которые живут достаточно долго, они реже удаляются через GC
[11:36:48] <j123123> А те, которые свежесозданные, они с наибольшей вероятностью этим самым GC выпиливаются
[11:36:56] <tg> <@fvnever> >> <j123123> @fvnever, нет, в целом исходники JVM неочень. https://github.com/openjdk-mirror/jdk7u-hotspot/blob/50bdefc3afe944ca74c3093e7448d6b889cd20d1/src/share/vm/memory/defNewGeneration.cpp например это какой-то код, связанный с поколениями. Ну, поколения для GC применяются
И что не нравится?
[11:37:06] <tg> <@winged_pegasus> >> <ttldtor> а ты умеешь во внешнюю сортировку?)
Да, в принципе. Хотя на тех массивах она мне и не была нужна.
[11:37:26] <tg> <@fvnever> Вроде бы вполне хороший, годный код.
[11:38:32] <j123123> https://github.com/openjdk-mirror/jdk7u-hotspot/blob/50bdefc3afe944ca74c3093e7448d6b889cd20d1/src/share/vm/memory/defNewGeneration.cpp#L792 мне например не нравится этот макрос
[11:38:56] <tg> <@fvnever> А мне не нравится никакой макрос, и что теперь?
[11:39:26] <j123123> Ну вот, я показал то, что мне не нравится
[11:39:27] <tg> <@fvnever> Хотя этот особенно смешной, конечно :)
[11:42:08] <tg> <@fvnever> >> <winged_pegasus> Мне пригождалось в продакшоне пару раз.
О, интересно. А для каких целей?
[11:42:48] <tg> <@winged_pegasus> >> <fvnever> О, интересно. А для каких целей?
Да там здоровенные массивы текстов. Запускается раз в квартал)
[11:43:03] <tg> <@fvnever> Я лично себе могу представить только mmap'инг каких-нибудь файлов больших. Но для этого массивы не нужны.
[11:44:16] Птичка:D вошёл(а) в комнату
[11:44:25] <j123123> А что, в C# есть какие-то проблемы с массивами?
[11:44:28] <j123123> Удивительно
[11:45:28] <tg> <@the_RAMZAY> Ну массивы это наверное про геймдев.
[11:45:39] <tg> <@fvnever> Лол, ну и ржака :)
[11:45:43] <tg> <@the_RAMZAY> Вроде парни из Unity3D не жаловались
[11:45:58] <tg> <@the_RAMZAY> но это хз, не сильно слежу.
[11:47:07] <tg> <@the_RAMZAY> У меня зачастую всё сводится к IEnumerable<T>
[11:47:26] <tg> <@the_RAMZAY> либо к List<T>
[11:47:42] <tg> <@the_RAMZAY> если в «это» нужно еще что-то добалять по ходу логики.
[11:47:51] <tg> <@fvnever> >> <the_RAMZAY> У меня зачастую всё сводится к IEnumerable<T>
Это очень сильно отсасывает в hi-perf сценариях, потому что там энумератор боксится.
[11:48:10] <tg> <@fvnever> List<T> не отсасывает.
[11:48:28] <tg> <@the_RAMZAY> >> <fvnever> Это очень сильно отсасывает в hi-perf сценариях, потому что там энумератор боксится.
У нас больше отсасывают IO операции с базой и SharePoint, чем какой-то там боксинг )
[11:48:40] <tg> <@fvnever> Но он просто не всегда эффективен. Когда хочется чуть-чуть побольше выжать, и ты заранее знаешь объём коллекции, то лучше делать массив.
[11:49:10] <tg> <@the_RAMZAY> >> <fvnever> Но он просто не всегда эффективен. Когда хочется чуть-чуть побольше выжать, и ты заранее знаешь объём коллекции, то лучше делать массив.
так листу можно указать капасити 🤷🏻‍♂️
[11:49:26] <tg> <@fvnever> >> <the_RAMZAY> так листу можно указать капасити 🤷🏻‍♂️
И всё равно ты поимеешь не менее двух аллокаций там, где можно обойтись одной.
[11:49:51] <tg> <@fvnever> У нас для небольших листов даже есть специальная структурка, которая первые несколько элементов хранит в стеке.
[11:49:57] <tg> <@the_RAMZAY> Но ты ведь понимаешь, что весь этот «перфоманс» в конечном счете сожрёт реквест к БД
[11:50:12] <tg> <@fvnever> Специально чтобы аллок фри можно было работать с небольшими коллекциями.
[11:50:21] <tg> <@fvnever> А то иначе они начнут сильно гадить в куче и будет писос.
[11:50:28] <tg> <@fvnever> >> <the_RAMZAY> Но ты ведь понимаешь, что весь этот «перфоманс» в конечном счете сожрёт реквест к БД
Нет, не понимаю, и это не так.
[11:50:31] <tg> <@the_RAMZAY> ну это у вас специфик задача такая )
[11:50:52] <tg> <@fvnever> Сильно зависит от соотношения кода, который работает с БД, и бизнес-кода.
[11:51:10] <tg> <@fvnever> Я не видел ни одного проекта, где обращение к БД бы прям сильно доминировало над бизнес-кодом.
[11:51:45] <tg> <@fvnever> Да, были проекты, где на БД тратилась львиная доля времени (я прям месяцами из DAL не вылезал), но при этом там и бизнесовая часть была очень большая и ресурсоёмкая.
[11:52:09] <tg> <@the_RAMZAY> у нас обычно задача идет через:
asp.net -> business logic -> entity framework -> SharePoint -> Azure AD -> business logic -> end user view
[11:52:19] <tg> <@fvnever> Ну это ты какой-то CRUD описываешь.
[11:52:26] <tg> <@the_RAMZAY> угу
[11:52:34] <tg> <@fvnever> В совсем-совсем тупом круде, да, DAL будет самой наиважнейшей частью.
[11:52:53] <tg> <@fvnever> Но настолько тупого круда я никогда в жизни не видел. Либо его не бывает, либо меня не звали на такие проекты.
[11:52:55] <tg> <@the_RAMZAY> ну увеличу я перфоманс на стороне кода на несколько аллокаций
[11:53:35] <tg> <@the_RAMZAY> конечному пользователю эти милисекунды до фени, если Sharepoint AD пермишены 5 секунд проверяет
[11:53:51] <j123123> Поэтому надо шарепоинт переписывать
[11:53:52] <tg> <@fvnever> Ну это архитектурно решается
[11:54:09] <tg> <@fvnever> Даже если вдруг ты не можешь этот свой АД выпилить, переписать или заменить.
[11:54:45] <tg> <@the_RAMZAY> Мы пишем бизнес логику так, что бы она была максимально легко читаема и занимало минимальное время на ее написание.
[11:54:53] <tg> <@fvnever> Делаешь там асинков побольше, кэши, префетч какой-нибудь, на худой конец. И юзер эти 5 секунд в итоге и не заметит, а в ряде случаев может даже начать нормально работать с системой.
[11:55:01] <tg> <@the_RAMZAY> Оптимизациями занимаемся по запросу кастомера, точечно.
[11:55:18] <tg> <@fvnever> >> <the_RAMZAY> Оптимизациями занимаемся по запросу кастомера, точечно.
Ну а теперь представь, как у нас это происходит %)
[11:55:24] <tg> <@the_RAMZAY> У нас был запрос «Ой, чот эта страничка подпедаливает, посмотрите пожалуйста»
[11:55:38] <tg> <@fvnever> Каждый кастомер, каждый жалуется, что «у вас абсолютно всё тормозит».
[11:55:54] <j123123> Поздняя оптимизация тоже плохо
[11:56:01] <tg> <@fvnever> Ну то есть постоянно есть запрос кастомеров на оптимизацию абсолютно всего :)
[11:56:22] <tg> <@the_RAMZAY> тогда мы пошли листы и линку переписали максимально на массивы и форы, подтюнили кешик, и еще пару тройку штук - увеличили перфоманс на пару секунд.
[11:56:36] <tg> <@the_RAMZAY> >> <fvnever> Ну а теперь представь, как у нас это происходит %)
у вас другая специфика приложения )))
[11:56:45] <tg> <@fvnever> Потому что очень многие кастомеры работают с узко специфичными данными, на которых внезапно что-нибудь начинает отсасывать, если ты сразу не пишешь с учётом перформанса
[11:57:18] <tg> <@fvnever> Написал модуль, который на загрузке проекта кушает 1 мс времени, и думаешь такой «ничего страшного». А тут приходит пользователь, у которого миллион проектов, и ему эта 1 мс как кость в горле.
[11:57:48] <tg> <@fvnever> >> <the_RAMZAY> тогда мы пошли листы и линку переписали максимально на массивы и форы, подтюнили кешик, и еще пару тройку штук - увеличили перфоманс на пару секунд.
Ну вот, видишь? Уже очень серьёзный прирост за счёт мелочей.
[11:57:51] <tg> <@the_RAMZAY> >> <j123123> Поздняя оптимизация тоже плохо
бизнес клиентам в самый раз. Им нужно надежно в первую очередь. Ты не видел полотна пермишен матриц для шарепоинта )
[11:58:06] <tg> <@the_RAMZAY> >> <fvnever> Ну вот, видишь? Уже очень серьёзный прирост за счёт мелочей.
прирост был на самом деле, когда мы локи убрали на кешах )
[11:58:11] <tg> <@fvnever> А я свои пермишен матрицы писал для проектов.
[11:58:14] <j123123> А эти пермишн матрицы хоть компилируются?
[11:58:18] <tg> <@fvnever> И, да, это большой ад
[11:58:36] <tg> <@the_RAMZAY> по 600мс за каждую операции с кешем приростало из за эксклюзивных локов
[11:58:54] <tg> <@the_RAMZAY> >> <fvnever> А я свои пермишен матрицы писал для проектов.
нам кастомер их предоставляет
[11:59:10] <tg> <@the_RAMZAY> мы эти матрицы провиженим на сайт минуты 3 )
[11:59:13] <tg> <@fvnever> Ну без локов не вполне понятно, как это всё будет работать. Как же консистентность кэша?
[11:59:36] <tg> <@the_RAMZAY> >> <fvnever> Ну без локов не вполне понятно, как это всё будет работать. Как же консистентность кэша?
мы оставили лок только там где он должен был быть
[11:59:50] <tg> <@the_RAMZAY> мы когда писали кеш, что бы защитить свою жопу напихали кучу локов
[12:00:01] <tg> <@the_RAMZAY> что бы «НУ НАВЕРНЯКА НИЧЕГО НЕ СЛОМАЛОСЬ!»
[12:00:18] <tg> <@the_RAMZAY> через год выяснилось, шо чу-чуть переборщили.
[12:00:41] <tg> <@Devel29A> >> <the_RAMZAY> Я должен 8 часов писать код и на этом всё.
Это делается один раз на старте проекта. Плюс такого подхода - гибкость выбора либо и переход с одного на другое, если не нравится или решето
[12:00:51] <tg> <@the_RAMZAY> >> <Devel29A> Это делается один раз на старте проекта. Плюс такого подхода - гибкость выбора либо и переход с одного на другое, если не нравится или решето
на старте? 0_о
[12:01:10] <tg> <@the_RAMZAY> Мы пару раз в месяц точно что-то ставим.
[12:01:21] <tg> <@the_RAMZAY> У заказчика хотелки растут со скоростью пули.
[12:01:43] <tg> <@Devel29A> Что вы ставите?
[12:01:48] <tg> <@the_RAMZAY> Я относительно недавно GraphQL клиент ставил. Потому что мы интегрировались с инвоис системой бельгии
[12:02:16] <tg> <@the_RAMZAY> у них там GraphQL юзается для работы с инвоисами.
[12:02:28] <tg> <@fvnever> >> <Devel29A> Что вы ставите?
Ну я тоже почти каждый день новые либы ставлю :)
[12:02:39] <tg> <@fvnever> Надо шото новое запилить — берёшь либу
[12:02:41] <tg> <@the_RAMZAY> >> <fvnever> Ну я тоже почти каждый день новые либы ставлю :)
угу
[12:02:49] <tg> <@fvnever> Ну если только ты не разрабатываешь при этом либу
[12:02:51] <tg> <@Devel29A> Я пишу без установки новых. Все как-то в системе сборке учтено
[12:03:00] <tg> <@matwey_kornilov> @fvnever а почему до сих пор не придумали мессенджер который работает через SCTP/IP ?
[12:03:04] <tg> <@fvnever> >> <Devel29A> Я пишу без установки новых. Все как-то в системе сборке учтено
Ну у тебя своя специфика.
[12:03:09] <tg> <@fvnever> >> <matwey_kornilov> @fvnever а почему до сих пор не придумали мессенджер который работает через SCTP/IP ?
А что такое SCTP?
[12:03:13] <tg> <@Devel29A> >> <matwey_kornilov> @fvnever а почему до сих пор не придумали мессенджер который работает через SCTP/IP ?
Нахуй он
[12:03:33] <tg> <@the_RAMZAY> >> <fvnever> А что такое SCTP?
+1
[12:03:35] <tg> <@the_RAMZAY> шо это такое
[12:03:47] <tg> <@matwey_kornilov> >> <fvnever> А что такое SCTP?
Протокол транспортного уровня
[12:03:49] <tg> <@fvnever> Наверное, специальный протокол для разработки мессенжеров?
[12:03:55] <tg> <@matwey_kornilov> С мультихоменгом и шлюхками
[12:04:13] <tg> <@fvnever> >> <matwey_kornilov> С мультихоменгом и шлюхками
Я не вижу, как это может пригодиться для мессенжера.
[12:04:44] <tg> <@matwey_kornilov> >> <fvnever> Я не вижу, как это может пригодиться для мессенжера.
Ну на мобильном телефоне у тебя каждые 5 минут другой IP адрес
[12:04:51] <tg> <@Devel29A> Это что-то из стека SS7 же
[12:04:54] <tg> <@fvnever> >> <matwey_kornilov> Ну на мобильном телефоне у тебя каждые 5 минут другой IP адрес
Допустим, это так.
[12:04:59] <tg> <@fvnever> Почему это проблема?
[12:05:04] <j123123> Ну это еще гугл что-то такое продвигал
[12:05:15] <tg> <@fvnever> >> <matwey_kornilov> Ну на мобильном телефоне у тебя каждые 5 минут другой IP адрес
Ну и, кстати, в IPv6, кажется, это уже не так?
[12:05:24] <tg> <@matwey_kornilov> >> <fvnever> Ну и, кстати, в IPv6, кажется, это уже не так?
Нет, это по прежнему так
[12:05:27] <tg> <@matwey_kornilov> Даже с IPv6
[12:05:36] <tg> <@matwey_kornilov> Потому-что подключился ты к WiFi дома, и у тебя новый адрес
[12:05:42] <tg> <@matwey_kornilov> Подключился к 4G опять новый
[12:05:53] <tg> <@fvnever> Не, погодь, там же столько адресов, что можно каждый атом адресовать
[12:06:00] <tg> <@fvnever> Почему не взять и не адресовать атом в моём телефоне?
[12:06:07] <tg> <@fvnever> Или даже каждый кварк?
[12:06:10] <tg> <@matwey_kornilov> >> <fvnever> Почему не взять и не адресовать атом в моём телефоне?
Потому-что неизвестно как роутить
[12:06:26] <tg> <@Devel29A> Что же там сложного
[12:06:28] <tg> <@matwey_kornilov> Адресовать можно тебя только адресом из заданного префикса
[12:06:39] <j123123> Это все можно решить самописным протоколом поверх UDP
[12:06:46] <tg> <@matwey_kornilov> >> <j123123> Это все можно решить самописным протоколом поверх UDP
Воот.
[12:07:01] <tg> <@matwey_kornilov> Вот в этом и проблема. Что мессенджеры всё решают самописными протоколами поверх UDP
[12:07:02] <tg> <@Devel29A> Не, пагадите
[12:07:06] <tg> <@the_RAMZAY> @matwey_kornilov давай так: какую бизнес проблему решает этот протокол?
[12:07:15] <tg> <@Devel29A> Там же ворох всяких служебных протоколов
[12:07:24] <tg> <@fvnever> >> <j123123> Это все можно решить самописным протоколом поверх UDP
SCTP — это такой протокол и есть.
[12:07:29] <tg> <@fvnever> >> <the_RAMZAY> @matwey_kornilov давай так: какую бизнес проблему решает этот протокол?
Дак он тебе рассказывает же.
[12:07:31] <tg> <@Devel29A> Всякие арпы хуярпы и прочее
[12:07:48] <tg> <@matwey_kornilov> При чем тут арпы вообще?
[12:08:08] <tg> <@matwey_kornilov> IPv6 никак принцемы маршрутизации не поменял
[12:08:22] <tg> <@matwey_kornilov> Автономные системы роутятся через BGP, а внутри они автономные!
[12:08:30] <tg> <@Devel29A> Я про то, что есть ворох служебных протоколов
[12:08:34] <tg> <@matwey_kornilov> Поэтому ты не можешь забрать свой домашний IP адрес и ходить с ним через 4G
[12:08:41] <tg> <@matwey_kornilov> Тебе просто не придет ответ
[12:08:44] <tg> <@the_RAMZAY> В общем, я думаю Дуров не дурак и если бы это стоило того, так бы и сделали бы телеграм.
[12:08:52] <tg> <@Devel29A> Как раз чтобы роутеры работали
[12:08:54] <tg> <@matwey_kornilov> Никогда не узнает куда тебе его слат
[12:08:56] <j123123> @the_RAMZAY "...какую бизнес проблему решает"... что-то у тебя сильная зацикленность на каких-то бизнес проблемах
[12:09:09] <tg> <@fvnever> >> <matwey_kornilov> Поэтому ты не можешь забрать свой домашний IP адрес и ходить с ним через 4G
Так а в SCTP я могу взять свой домашний адрес и с ним ходить?
[12:09:17] <tg> <@fvnever> И как это всё будет роутиться?
[12:09:23] <tg> <@Devel29A> Также
[12:09:28] <tg> <@Devel29A> Просто в другом месте
[12:09:32] <tg> <@matwey_kornilov> >> <fvnever> Так а в SCTP я могу взять свой домашний адрес и с ним ходить?
Нет. Но ты можешь держать сессию с нескольикими конечными адресами
[12:09:38] <tg> <@the_RAMZAY> локоть*
[12:09:41] <tg> <@fvnever> >> <matwey_kornilov> Нет. Но ты можешь держать сессию с нескольикими конечными адресами
Окей, это интересно.
[12:09:53] <j123123> Ну будет сессия перекидываться на другой айпишник
[12:09:54] <tg> <@fvnever> А это безопасно? Кто-то другой с этими же адресами не сможет похитить мою сессию?
[12:09:57] <j123123> видимо в этом вся идея
[12:10:05] <tg> <@Devel29A> >> <fvnever> Окей, это интересно.
Не. Там все хитрее
[12:10:08] <tg> <@matwey_kornilov> Я вообще думал, что вы тут разбираетесь. И ответите что-нибудь очевидное, типа "в Android это не поддерживается".
[12:10:12] <tg> <@the_RAMZAY> >> <matwey_kornilov> Нет. Но ты можешь держать сессию с нескольикими конечными адресами
это круто
[12:10:18] <tg> <@Devel29A> Снизу все равно все на транспортные айптшники посажено
[12:10:27] <tg> <@fvnever> >> <matwey_kornilov> Я вообще думал, что вы тут разбираетесь. И ответите что-нибудь очевидное, типа "в Android это не поддерживается".
Ну, кажется, оно и не поддерживается, но можно накостылять везде поверх UDP?
[12:10:43] <j123123> Всё можно накостылять поверх UDP, было бы желание
[12:10:43] <tg> <@matwey_kornilov> >> <fvnever> Ну, кажется, оно и не поддерживается, но можно накостылять везде поверх UDP?
Но зачем? Это и так накостылено в каждом мессенджере
[12:10:50] <tg> <@matwey_kornilov> Можно накостылить WireGuard поверх UDP
[12:10:55] <tg> <@the_RAMZAY> >> <matwey_kornilov> Я вообще думал, что вы тут разбираетесь. И ответите что-нибудь очевидное, типа "в Android это не поддерживается".
а в iOS ?
[12:11:08] <tg> <@matwey_kornilov> >> <the_RAMZAY> а в iOS ?
А хз. Я как раз и пришел спросить
[12:11:42] <tg> <@matwey_kornilov> В WireGuard есть типа роуминг, когда у тебя сессия находу меняет свои конечные адреса
[12:11:46] <tg> <@matwey_kornilov> С обоих сторон причем
[12:12:00] <tg> <@fvnever> >> <matwey_kornilov> Но зачем? Это и так накостылено в каждом мессенджере
Затем, что ты предлагаешь использовать этот протокол, а основное решение для него накостылено поверх UDP :)
[12:12:28] <tg> <@matwey_kornilov> >> <fvnever> Затем, что ты предлагаешь использовать этот протокол, а основное решение для него накостылено поверх UDP :)
Почему поверх UDP? Поверх IP же
[12:12:57] <tg> <@fvnever> >> <matwey_kornilov> Почему поверх UDP? Поверх IP же
Педовикий говорит, что можно поверх UDP чото там туннелировать.
[12:13:27] <tg> <@matwey_kornilov> Ну можно наверное, но вообще не предполагается
[12:13:29] <j123123> Ну можно хоть поверх icmp
[12:13:37] <j123123> пингами перекидываться
[12:18:07] <j123123> поверх пингов свой протокол реализовывать лол
[12:18:20] <tg> <@matwey_kornilov> Для телеграма
[12:18:27] <tg> <@matwey_kornilov> А потом РКН все пинги порежет на своем DPI
[12:18:32] <tg> <@matwey_kornilov> Вот будет мухаха
[12:18:46] <tg> <@matwey_kornilov> Бугага я б даже сказал
[12:19:16] <j123123> Там даже вроде было предложение запретить UDP когда-то
[12:19:36] <tg> <@Devel29A> Там это где?
[12:19:39] <j123123> https://www.securitylab.ru/news/476073.php
[12:19:43] <j123123> например вот
[12:19:44] <tg> <@Devel29A> И почему UDP
[12:19:55] <j123123> хз
[12:19:59] <j123123> наркоманы потому что
[12:20:34] <j123123> какие-то тупые чиновники, нихрена не шарящие в предметной области, предлагают что-то там запретить
[12:20:50] <j123123> обычное явление
[12:21:32] <tg> <@Devel29A> Ясно
[12:38:48] <tg> <@folexeyy> >> <fvnever> У меня тоже такие есть, но я не понял, что они делают. Нажимаешь кнопку и они горят несколько секунд, а потом тухнут. Это они уровень заряда показывают?
На макбуке? Какого он у тебя года? 13го что ли?
[12:39:59] <tg> <@fvnever> >> <folexeyy> На макбуке? Какого он у тебя года? 13го что ли?
Нет, на другом буке.
[12:41:43] <tg> <@folexeyy> Ну, может быть :)
[12:41:49] <tg> <@folexeyy> А чо за ноутбук?
[13:08:07] <tg> <@AlexFails> >> <j123123> Только вот там используется type punning через юнионы, а по стандарту C++ это UB
Ух, да, это ядреное уб
[13:18:13] <j123123> макпуки
[13:20:14] <tg> <@fvnever> >> <folexeyy> А чо за ноутбук?
Dell какой-то, хз.
[13:21:06] O01eg вышел(а) из комнаты
[13:22:58] <j123123> Интересно, что оказывается SMT решатели могут доказывать отсутствие "циклов" определенной длины при проверке гипотезы Коллатца
[13:23:32] <j123123> жаль что нельзя вывести более общий закон
[13:43:51] <j123123> https://rise4fun.com/Z3/anqJ во
[14:08:46] Птичка:D вышел(а) из комнаты
[14:38:24] unclechu вошёл(а) в комнату
[14:39:32] Птичка:D вошёл(а) в комнату
[14:39:56] Птичка:D вышел(а) из комнаты
[15:20:51] <j123123> > А я  люблю загружать по указателю на указатель на указатель на подпрограмму  указатель на указатель на подпрограмму, которая декрементит указатель на  указатель на указатель на указатель на подпрограмму, и помещает по  этому адресу первый указатель на указатель на указатель на подпрограмму,  потом устанавливает этот указатель на указатель на указатель на  подпрограмму адресом другой цепочки указателей на указатель на  подпрограмму, а потом разбираться, где я ошибся.
[15:43:30] <tg> <@ttldtor> >> <j123123> > А я  люблю загружать по указателю на указатель на указатель на подпрограмму  указатель на указатель на подпрограмму, которая декрементит указатель на  указатель на указатель на указатель на подпрограмму, и помещает по  этому адресу первый указатель на указатель на указатель на подпрограмму,  потом устанавливает этот указатель на указатель на указатель на  подпрограмму адресом другой цепочки указателей на указатель на  подпрограмму, а потом разбираться, где я ошибся.
так же все разрабы на си делают. Им приходится, я могу их понять. Иначе как они построят социа^WOOP?
[15:57:44] <tg> <@the_RAMZAY> >> <j123123> > А я  люблю загружать по указателю на указатель на указатель на подпрограмму  указатель на указатель на подпрограмму, которая декрементит указатель на  указатель на указатель на указатель на подпрограмму, и помещает по  этому адресу первый указатель на указатель на указатель на подпрограмму,  потом устанавливает этот указатель на указатель на указатель на  подпрограмму адресом другой цепочки указателей на указатель на  подпрограмму, а потом разбираться, где я ошибся.
мой мозг сделал «бум»
[15:58:13] <tg> <@fvnever> Meanwhile…
[15:58:28] <tg> <@fvnever> У нас был лист листов стрингбилдеров, а теперь у нас лист листов туплей стрингбилдеров и интов.
[15:58:41] <tg> <@fvnever> https://github.com/ForNeVeR/wpf-math/pull/155/commits/cb5aaafc47855b60dcc091cea1998d85c991407d#diff-92bf62a1a54cc88b285d4108265db79fR601
[15:59:12] <tg> <@the_RAMZAY> >> <fvnever> У нас был лист листов стрингбилдеров, а теперь у нас лист листов туплей стрингбилдеров и интов.
ЗОЧЕМ.жпг
[15:59:27] <tg> <@fvnever> >> <the_RAMZAY> ЗОЧЕМ.жпг
Контрибьютор принёс, а я пытаюсь для начала починить.
[15:59:41] <tg> <@fvnever> Вроде починил, так что теперь надо будет покрыть тестами и переписать.
[15:59:49] <tg> <@the_RAMZAY> Веселые у вас однако контрибьютеры
[16:00:18] <tg> <@fvnever> >> <the_RAMZAY> Веселые у вас однако контрибьютеры
Я его примерно к третьему пул-реквесту научил хотя бы компилировать код, прежде чем присылать PR.
[16:00:35] <tg> <@the_RAMZAY> потробности стали еще веселее
[16:01:10] <tg> <@ttldtor> >> <fvnever> У нас был лист листов стрингбилдеров, а теперь у нас лист листов туплей стрингбилдеров и интов.
а меня ничего такого нет. Только вот разные вариации boost::multi_index_container
[16:01:19] <tg> <@ttldtor> Извините
[16:03:17] <tg> <@ttldtor> А не, нашёл!
std::unordered_map<std::size_t, std::map<Int, std::vector<lexemes::AnchorLexemeGroup<>>>> patternsHashToLineIndexToAnchorLexemeGroups;
[16:05:14] <tg> <@ttldtor> надо будет переписать это бл-унство
[16:10:06] <tg> <@fvnever> Неплохо.
[16:11:50] <tg> <@ttldtor> самое неприятное, что это всё промежуточные данные. Если бы были норм рейнжи или стримы в плюсах, то ябы просто не заводил бы энту дрянь.
[16:12:55] <tg> <@fvnever> >> <ttldtor> А не, нашёл!
>> std::unordered_map<std::size_t, std::map<Int, std::vector<lexemes::AnchorLexemeGroup<>>>> patternsHashToLineIndexToAnchorLexemeGroups;
Знаешь, что тут странно? Неловкое соседство size_t и Int.
[16:15:45] <tg> <@ttldtor> Int - это алиас std::int32_t, но да... какого чёрта у  меня номера строк документа могут быть отрицательными? Надо будет взять на ретроспективное ревью и спросить у себя
[16:16:03] <tg> <@ttldtor> странный контракт
[16:17:06] <tg> <@ttldtor> блин, ревью самого себя... я сразу подумал про минорыча
[16:17:27] <tg> <@ttldtor> ведь он тоже, на работке, по крайней мере, себя ревьюит
[16:27:09] <tg> <@fvnever> А я всегда себя ревьюю, что тут странного?
[16:32:49] <j123123> отрицательные номера строк? А комплексные номера строк могут быть?
[16:33:07] <j123123> Или квантерионы чтоб
[16:36:24] <tg> <@ttldtor> квакватернионы, да
[16:37:16] <tg> <@ttldtor> ты же итерируешь интом по своим буферам данных, которые ты называешь массивом?
[16:39:04] <tg> <@ttldtor> в общем, инт - это просочился апи (DTO) внутрь реализации
[16:39:09] <tg> <@ttldtor> не хорошо
[16:39:17] <tg> <@ttldtor> возмутительно
[16:39:45] <tg> <@m4n71k0r> >> <ttldtor> возмутительно
блин, чувак, как ты мог?
[16:39:47] <tg> <@fvnever> Почините.
[16:39:55] <tg> <@ttldtor> >> <m4n71k0r> блин, чувак, как ты мог?
я всё починю
[16:40:04] <tg> <@m4n71k0r> >> <ttldtor> я всё починю
а проверю!
[17:33:24] Minoru вошёл(а) в комнату
[17:37:07] <Minoru> > <@ttldtor> ведь он тоже, на работке, по крайней мере, себя ревьюит
[17:38:12] <Minoru> вобщем-то чаще не ревьювлю вообще, чем ревьювлю :(
[18:47:27] <Minoru> https://blog.acolyer.org/2019/01/25/programming-paradigms-for-dummies-what-every-programmer-should-know/
[18:47:44] <Minoru> классный обзор парадигм в программировании. Оказывается, их больше трёх!
[18:48:04] <Minoru> ну и ещё там хорошо объяснено, что такое вообще парадигмы, и из каких «кубиков» (концепций) они состоят
[20:20:07] uıʃɐɟ∀ вышел(а) из комнаты: Replaced by new connection
[20:20:10] uıʃɐɟ∀ вошёл(а) в комнату
[20:49:48] <tg> <@ttldtor> блин, жаль, что на conio https://www.youtube.com/watch?v=TfSLsT4fkCE Зато я теперь немного знаю, как произносить цифры по-японски
[20:50:09] <tg> <@no111u3> >> <ttldtor> блин, жаль, что на conio https://www.youtube.com/watch?v=TfSLsT4fkCE Зато я теперь немного знаю, как произносить цифры по-японски
хех, так ничего же сложно
[20:51:54] <tg> <@ttldtor> >> <no111u3> хех, так ничего же сложно
в японском-то?) Ну хз
[20:52:19] <tg> <@no111u3> ичи, ни, сан.. и пошёл
[20:52:55] <Minoru> хотел написать проперти-тестов на Rust, поискал на crates.io крейты — а их несколько. Прочитал про QuickCheck и Proptest, пошёл почитал про хаскелевые QuickCheck и SmallCheck, потерял интерес и сижу смотрю КВН. Надо было тупо код писать на первом попавшемся крейте :(
[21:43:26] <tg> <@ttldtor> арррр, делаю Ctrl+F6, говорю: "Clion, поменяй в сигнатуре Int на std::size_t". Меняет на size_t. ОЧИНЬ РАЗДРАЖАИТ!
[21:44:02] <tg> <@ttldtor> это разные тайпдефы
[21:44:40] <Minoru> да-а?! O_O
[21:44:49] <Minoru> @#$%, ну что за язык такой…
[21:45:00] <tg> <@ttldtor> ну в мингве точно разные
[21:45:24] <tg> <@ttldtor> есть
#ifndef _SIZE_T_DEFINED
#define _SIZE_T_DEFINED
#undef size_t
#ifdef _WIN64
__MINGW_EXTENSION typedef unsigned __int64 size_t;
#else
typedef unsigned int size_t;
#endif /* _WIN64 */
#endif /* _SIZE_T_DEFINED */
[21:45:46] <tg> <@ttldtor> и есть
namespace std
{
  typedef __SIZE_TYPE__   size_t;
  typedef __PTRDIFF_TYPE__  ptrdiff_t;
#if __cplusplus >= 201103L
  typedef decltype(nullptr)  nullptr_t;
#endif
}
[21:46:49] <Minoru> а __SIZE_TYPE__ — это что?
[21:47:11] <tg> <@ttldtor> это что-то внутрекомпиляторное
[21:47:23] <tg> <@ttldtor> подставляется
[21:48:18] <tg> <@ttldtor> ну, тоесть, энтот список дефайнов компилятор может вывести
[21:48:21] <tg> <@ttldtor> то есть
[21:48:28] <tg> <@ttldtor> был вроде флажок
[21:51:36] <j123123> @tlldor, ты можешь сказать чтоб менял в сигнатуре Int на nkjndiufvneiunb"
[21:51:40] <j123123> а потом автозаменой уже
[21:51:57] <j123123> заменить nkjndiufvneiunb на std::size_t
[21:53:12] <j123123> Тупая автозамена надежней всяких там изменений сигнатур в IDE
[21:53:39] <tg> <@ttldtor> не, я должен тикет завести, чтобы исправили
[21:53:57] <tg> <@ttldtor> а то смысл за IDE платить
[21:54:04] <j123123> ну а пока не исправили, можно сделать как я посоветовал
[21:54:11] <tg> <@ttldtor> да это понятно
[21:55:04] <tg> <@ttldtor> я и size_t на std::size_t могу заменить (с учётом слов и регистра, норм найдёт)
[21:55:33] <j123123> а если где-то уже есть size_t, можно получить std::std::size_t
[21:55:39] <j123123> что не есть хорошо
[21:55:43] <tg> <@ttldtor> нет
[21:55:47] <tg> <@ttldtor> с учётом слов - нет
[21:56:00] <tg> <@ttldtor> :: не посчитает за разделители, хотя стоит проверить
[21:56:59] <tg> <@ttldtor> посчитала, гы)
[21:57:01] <tg> <@ttldtor> зараза
[21:57:15] <j123123> поєтому надо использовать мои мудрые советы
[21:57:20] <j123123> бгг
[21:59:40] Птичка:D вышел(а) из комнаты
[22:01:31] Птичка:D вошёл(а) в комнату
[22:04:57] <tg> <@ttldtor> да не, я просто поиском посмотрел
[22:20:35] <j123123> Кстати вот вопрос вам по плюсам
[22:22:22] <j123123> допустим, есть у меня функция, которая принимает некоторую переменную в качестве аргумента по ссылке, и возвращает в переданную по ссылке переменную некое значение, и которая вполне себе чистая, т.е. может быть сonstexpr
[22:22:48] <j123123> могу ли я инициализировать такой функцией какую-нибудь constexpr переменную, и если да - как?
[22:24:22] <j123123> И может ли вообще constexpr-функция что-то проинициализировать, кроме как return "какое-то-значение"?
[22:36:22] <j123123> Лучше б сделали что-то вроде write-only переменных
[22:36:39] <j123123> которые в ходе выполнения могут присваиваться только единожды
[22:38:25] <Minoru> в рантайме ты это и сам сделать можешь
[22:38:45] <Minoru> в компайл-тайме это требовало бы анализа всех возможных последовательностей выполнения программы (насколько я понимаю)
[22:39:21] <Minoru> про constexpr: сомневаюсь, потому что ссылка на constexpr-переменную это const, в неё нельзя писать, даже из constexpr-функции
[22:52:05] <j123123> Minoru: https://godbolt.org/z/pZyTkU да не, работает
[22:52:09] <j123123> только надо через лямбду костылить
[22:52:11] <j123123> хмм...
[22:53:05] <j123123> чтоб лямбда return делала
[22:53:21] <Minoru> воистину, «any problem can be solved with another level of indirection»
[22:57:59] <j123123> на говнокоде у меня эта фраза тоже кое-где перефразирована, применительно к плюсам
[22:58:47] <j123123> Цензурная версия звучит так: "Любая проблема с C++ решается через добавление в C++ стандарт новой фигни. Кроме проблемы слишком большого количества фигни в стандарте"
[22:58:49] <tg> <@noktoborus> Ппц
[23:08:27] portnov вышел(а) из комнаты
Powered by ejabberd - robust, scalable and extensible XMPP server Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!