[00:44:19] <OCTAGRAM> теперь понятно, почему так называемый защищённый режим Эльбруса пытаются продать авиаторам
[00:44:31] <OCTAGRAM> там уже Си
[00:46:08] <OCTAGRAM> довольно дофига людей помешались на этом защищённом режиме, точнее, им не кажется сумасшествием, чтоб безопасно и Си было в одном предложении
[00:48:03] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <на перфолентах и маш…>
на мышиных котах
[00:48:33] <ada_ru> (I_vlxy_I) отвечает на <(OCTAGRAM) довольно …>
дык Си = быстро, а Эльбрус = безопасно. Win-Win же!
[00:57:37] <ada_ru> (nitrocerber) быстропасно получается
[00:57:49] <OCTAGRAM> в таком защищённом режиме уже нифига не быстро
[00:58:28] <OCTAGRAM> и как может быть безопасно, если у разработчиков не было синтаксиса, чтобы сообщать, что хорошо, что плохо
[01:00:40] <OCTAGRAM> у железа Эльбруса представления о том, что хорошо и что плохо, могут быть только самые рудиментарные, как можно от такого фанатеть
[01:04:52] <OCTAGRAM> хотим писать безопасно, окей, возьмём язык программирования, в котором нет ни constraints, ни private, ни contracts, ни predicates, ни invariants, да такой язык программирования как раз подходит для безопасного программирования
[01:05:25] <OCTAGRAM> нет constraints, нет и constraint_error, а нет error, то и можно думать, что безопасно
[01:11:50] <ada_ru> (I_vlxy_I) отвечает на <(OCTAGRAM) хотим пис…>
Да ваще. Взяли бы C++, и бед бы не знали! Ведь там все это есть!
[01:12:56] <ada_ru> (coopht) <прислал наклейку> 🐝
[01:13:03] <ada_ru> (coopht) Так и делают
[01:13:34] <ada_ru> (coopht) берут С и С++ и вкорячивают его, потом когда нифига неработает, делают всякие статические анализаторы, валгринды и прочее
[01:13:50] <ada_ru> (coopht) и обмазываются ими с ног до головы
[01:14:02] <ada_ru> (I_vlxy_I) да ладно, коньтракты уже в с++ есть!
[01:14:08] <ada_ru> (I_vlxy_I) буквально за углом!
[01:14:20] <ada_ru> (coopht) бессрочные или каждый год продлять надо?
[01:15:31] <ada_ru> (I_vlxy_I) У меня который день такое вот настроение.
[01:15:34] <ada_ru> (I_vlxy_I) цитирует (I_vlxy_I)
картинка https://www.ada-ru.org/files/bot/2019-02-25-x6.jpg
[01:19:37] <OCTAGRAM> кажется, верификатор есть только для Си, и чтоб он мог работать, вкорячивается много нестандартного синтаксиса (о котором, есть такое подозрение, lcc ни сном, ни духом, чтоб железу нашептать), но не для C++, а вот SPARK-то с generic и ООП
[01:20:08] <ada_ru> (I_vlxy_I) в С++ теперь есть контракты же.
[01:20:22] <ada_ru> (I_vlxy_I) и много чего ещё 🙂
[01:20:32] <OCTAGRAM> кстати, какое там исключение бросается?
[01:21:41] <OCTAGRAM> а то я помню, даже assert там было не сделать, потому что assert не исключение бросает, как в нормальных Ada и Delphi, а аварийное завершение
[01:23:28] <ada_ru> (I_vlxy_I) там дергатся хэндлер с сигнатурой void (const std::contract_violation &) если он кидает исключение, то будет std::terminate
[01:24:18] <OCTAGRAM> welcome to turbo pascal, короче
[01:24:23] <ada_ru> (I_vlxy_I) а ассерты - говно
[01:24:32] <OCTAGRAM> а как без них?
[01:24:41] <ada_ru> (I_vlxy_I) легко!
[01:24:54] <OCTAGRAM> ну вот на Аде я напишу Position : in Positive
[01:25:19] <OCTAGRAM> а на C++: Sane_Assert (Position > 0);
[01:25:39] <OCTAGRAM> где Sane_Assert кидает исключение, а не аварийное завершение
[01:28:34] <ada_ru> (I_vlxy_I) в половине случаев плюсовый код собирается без исключений вовсе. поэтому завязывать коньтракты ТОЛЬКО на исключения -- было бы серьезной архитектурной ошибкой
[01:29:00] <OCTAGRAM> welcome to turbo pascal, короче
[01:30:41] <OCTAGRAM> На Ариане пять вот уже доигрались с аварийным завершением
[01:31:48] <OCTAGRAM> как они запарили делать апокалипсис по каждому чиху, боженька дай им мозгов познакомиться с Адой
[01:32:13] <OCTAGRAM> Эрганговский let it fail тоже сойдёт
[01:33:38] <ada_ru> (I_vlxy_I) отвечает на <(OCTAGRAM) как они з…>
тем кто Ариан-5 прогал? 😄
[01:34:11] <ada_ru> (I_vlxy_I) а где ты, кстати, аварийное завершение увидел в случае контрактов в плюсах?
[01:34:19] <ada_ru> (I_vlxy_I) вроде обработал эту ситуацию и иди себе дальше
[01:34:20] <OCTAGRAM> std::terminate?
[01:34:46] <ada_ru> (I_vlxy_I) а то, что я до того писал?
[01:34:54] <ada_ru> (I_vlxy_I) вот прямо в этой же мессаге
[01:35:13] <OCTAGRAM> так бросание и есть обработка
[01:35:29] <ada_ru> (I_vlxy_I) нет
[01:35:42] <ada_ru> (I_vlxy_I) цитирует (I_vlxy_I)
там дергатся хэндлер с сигнатурой void (const std::contract_violation &) если он кидает исключение, то будет std::terminate
[01:35:48] <ada_ru> (I_vlxy_I) вот повтор
[01:35:48] <OCTAGRAM> надо снять с дистанции код, дать ему упасть до уровня, с которого известно, как поднимать
[01:36:50] <OCTAGRAM> у этого хэндлера есть способ сообщить, что надо бросить исключение?
[01:37:05] <OCTAGRAM> и Ариан-5 тоже
[01:37:43] <OCTAGRAM> там же отключили адский механизм исключений, а если не исключение, то апокалипсис
[01:38:58] <ada_ru> (I_vlxy_I) там было, кажется, все сложнее
[01:39:44] <OCTAGRAM> да, много факторов
[01:39:46] <ada_ru> (I_vlxy_I) отвечает на <(OCTAGRAM) у этого х…>
фиг знает. надо глянуть точнее.
но еще раз - часто в плюсах обработка ошибок делается не через исключения. по разным причинам.
[01:42:05] <ada_ru> (I_vlxy_I) да, твой собственный violation handler может что угодно сделать. в том числе записку оставить на тему - а давайте кинем исключение или еще какое непотребство совершим!
[01:42:08] <OCTAGRAM> но если развести руками и всё бросить, то проблемы чуть менее, чем гарантированы
[01:43:41] <OCTAGRAM> железо развело руками и всё бросило, а те, кто программировал Ариан пять, именно так с железом и работали
[01:45:06] <OCTAGRAM> зная о том, какая неадекватно суровая кара ждёт за неисполнение assert или contract, разработчик лишний раз его не напишет, а надо, наоборот, чтоб вбухивал, пока не успел забыть
[01:51:12] <OCTAGRAM> кто-то спрашивал про variadic в generic, что-то такое можно на formal packages сделать
[01:52:13] <OCTAGRAM> generic может быть параметризован package, но только generic
[01:53:00] <OCTAGRAM> делают специально generic, экспортирующий всё то же, что импортировал
[01:54:01] <OCTAGRAM> потом делают экземпляр generic package, назовём его терминатор
[01:54:10] <OCTAGRAM> или nil
[01:56:05] <OCTAGRAM> потом делают такой generic package, который на вход принимает экземпляр formal generic package и на выход даёт другой экземпляр, назовём его cons
[01:56:28] <OCTAGRAM> так появляется возможность строить цепочки
[01:58:34] <OCTAGRAM> Oleg, а что с AdaMagic, почему бы его не попробовать
[02:00:14] <OCTAGRAM> я поэкспериментировал, мне в первую очередь счётчиков ссылок не хватило, я написал адские привязки к сишным макросам, повторяющие API GNAT System.Atomic_Counters
[02:01:12] <OCTAGRAM> рабочий компилятор, только -2005 лучше не пытаться использовать
[02:03:14] <OCTAGRAM> абсолютно переносимый backtrace включается ключом -trace, там процедуры просто начинают явно стучать о том, что в них вошли или вышли
[02:05:28] <OCTAGRAM> какой бы ни был убогий компилятор Си, поверх него можно развернуть Аду и сделать красиво
[03:19:19] <ada_ru> (Oleg) Да спасибо , погляжу
[03:19:27] <ada_ru> (Oleg) Может и интересно будет
[10:21:37] <ada_ru> (insert_reference_here) отвечает на <(OCTAGRAM) какой бы …>
> Аду
> Красиво
[10:28:06] <ada_ru> (nitrocerber) Ccg всем этим господам
[10:28:20] <ada_ru> (nitrocerber) Ах да, его ж плебеям не дают(
[10:48:38] <OCTAGRAM> в CCG сначала Controlled бы завезли
[10:49:34] <OCTAGRAM> ах да, RAII на Аде не работает без ООП, а в CCG нет ООП, а значит, и Controlled тоже нет, упс
[10:49:46] <OCTAGRAM> и исключений в CCG нет
[10:51:27] <OCTAGRAM> для супертупых железяк CCG ещё сгодится, но на остальных с AdaMagic пока что не сравнится
[10:53:47] <OCTAGRAM> в AdaMagic можно подключить предтечу адских контейнеров, Charles, или, может быть, и сами адские контейнеры, если почикать Ada 2005+ фичи
[10:56:22] <ada_ru> (nitrocerber) отвечает на <(OCTAGRAM) и исключе…>
а они там и не нужны же. какие нафиг исключения в спаркофагии
[10:59:40] <OCTAGRAM> ну только если там
[11:02:26] <OCTAGRAM> в моей деятельности каждая библиотека для NAT-PMP, UPnP и WebRTC посмеётся над попытками чего-то там верифицировать
[11:02:49] <OCTAGRAM> а без них в сеть только на свой сервер сходить
[11:03:56] <OCTAGRAM> да даже TLS адского нет, Componolit только грозятся сделать таковой
[11:06:46] <ada_ru> (Oleg) Код коммерческого ПО был оптимизирован (вместо GCC. используется Intel C)
[11:06:57] <ada_ru> (Oleg) Вот так пишут
[11:06:59] <ada_ru> (Oleg) 😊
[11:07:36] <OCTAGRAM> про что пишут?
[11:10:58] <ada_ru> (Oleg) Да это сказ о том чем одни яйца круче других 😊 это про ПО для защиты от атак
[11:11:23] <ada_ru> (Oleg) Но сама позиция - мы заменили GCC на Intel C и теперь все летает - как то странно выглядит
[11:12:56] <ada_ru> (I_vlxy_I) оптимизировали ПО (поменяли флаг компиляции с -O1 на -O2)
[11:16:09] <OCTAGRAM> Intel C в чём-то помогает ценой vendor lock
[11:16:30] <OCTAGRAM> там библиотеки так искусно сделаны, чтоб тормозить на AMD
[11:16:46] <OCTAGRAM> интересно, отвечает ли AMD взаимностью
[11:18:16] <ada_ru> (I_vlxy_I) а у АМД есть свой компилятор?
[11:19:13] <OCTAGRAM> то ли свой, то ли не совсем, для Solaris и Linux
[11:20:43] <OCTAGRAM> https://developer.amd.com/amd-aocc/
[11:24:26] <OCTAGRAM> нет, я всё же другой помню, https://docs.oracle.com/cd/E18659_01/html/821-2763/gkofr.html
[11:24:43] <OCTAGRAM> мне запомнилось, что там каким-то боком был AMD
[11:25:59] <ada_ru> (Oleg) AMD мне лично запомнился только одним
[11:26:09] <OCTAGRAM> Back when the first versions of Solaris and the Studio compilers were made available for 64bit PCs, Sun and AMD were close friends.
[11:26:20] <ada_ru> (Oleg) то что чтоб на K6-2 работал WIndows 95 надо было патч ставитьИначе синий экран
[11:26:45] <OCTAGRAM> на K5 полёт нормальный
[11:27:16] <ada_ru> (Oleg) Вот тогда я их неполюбил и так до сих пор нелюблю 😊
[11:27:31] <ada_ru> (Oleg) Tot gjvy. ght[zlthyst ghjwtccjhs
[11:28:45] <OCTAGRAM> Windows 95 не хотела ставиться, потому что драйверов для EGA не было, однако 32битные драйвера были в Win32s, так что ставим Windows 3.1 (для 3.1.1 нужен VGA), ставим Win32s, из Win32s запускаем установку Windows 95, и она подхватывает 32битные драйвера для EGA
[11:29:02] <OCTAGRAM> такие проблемы помню, а вот с процессором нет
[11:29:28] <landgraf> конфа превратилась в очередную телеграм-флудилку, пичаль
[11:30:33] <ada_ru> (Oleg) https://www.mapusoft.com/ada-to-c-changer/
[11:30:40] <ada_ru> (Oleg) Вот это вот оно?
[11:30:47] <OCTAGRAM> оно самое
[11:30:56] <ada_ru> (Oleg) Чето оно коммерческое
[11:31:03] <ada_ru> (Oleg) Ну да ладно
[11:31:09] <OCTAGRAM> есть ключики
[11:31:09] <ada_ru> (Oleg) Запросил демку
[11:31:22] <ada_ru> (Oleg) Поглядим во что оно превратит мой код
[11:31:35] <ada_ru> (Oleg) Потом буду компилить IARом
[11:31:58] <OCTAGRAM> исключительные права после слияния принадлежат AdaCore, а MapuSoft получатель лицензии
[11:31:59] <ada_ru> (Oleg) А кто нибудь у нас использует его?
[11:33:58] <OCTAGRAM> я пока пытаюсь делать некоторый свой код совместимым с AdaMagic, в первую очередь для WebAssembly, во вторую для Эльбруса, но ни то, ни другое я на коммерческой основе не внедряю
[11:34:55] <ada_ru> (Oleg) Я то под тухлые MCU делаю
[11:35:05] <OCTAGRAM> ну круто
[11:35:07] <ada_ru> (Oleg) Там нет ни TLB ни вобще кэша
[11:35:34] <ada_ru> (Oleg) Потом отпишусь как дела
[11:35:43] <ada_ru> (Oleg) Вдруг как попрет 😊
[11:36:00] <OCTAGRAM> я с веб-бекэнда пытаюсь вырваться в веб-фронтенд, пока не получается
[11:36:49] <OCTAGRAM> если не считать стартующей полторы минуты комбинации JGNAT + CherpJ
[11:40:02] <OCTAGRAM> хочется вебтопы на Аде прогать с быстрым WebGL, чтоб мышой Drag'n'Drop делать, и всё отзывчиво и красиво реагировало, как на макОСе
[11:42:32] <OCTAGRAM> и чтоб сеть прогалась в синхронном стиле, и чтоб ресурсы управлялись RAII
[11:48:52] <OCTAGRAM> для AdaMagic пригодится этот файлик: http://forum.pascal.net.ru/index.php?act=Attach&type=post&id=16190
[11:51:35] <ada_ru> (Oleg) Спасибо
[11:55:38] <OCTAGRAM> под Linux обязательно настроить переменную среды ADA_MAGIC, под Windows нет, но тоже желательно, и пути в SITE прописать правильные, они в автосоздаваемые ADA.LIB прописываются, если уже неправильно создано, надо там тоже или менять, или удалять и давать заново создаться
[11:59:08] <OCTAGRAM> пишут, что в версии AppCOE для Windows x64 нет AdaMagic, но тот AdaMagic, что в 32битной, приспособить для 64битного кода можно
[12:18:29] <ada_ru> (I_vlxy_I) Да, фигово писать на языке, который не first-class citizen в индустрии...
[12:21:28] <OCTAGRAM> либо кожей об наждачку до крови тереться, либо в экзоскелете ходить, но тогда и обслуживать экзоскелет уметь
[12:22:57] <ada_ru> (I_vlxy_I) Ага. Только надо не ходить, а плавать. Но экзоскелет умеет только ходить. Поэтому на каждый шаг под ногу приходится спасательный круг подкладывать.
[12:25:30] <OCTAGRAM> плавать в кислотах голышом тоже не очень
[12:28:27] <ada_ru> (I_vlxy_I) отвечает на <(OCTAGRAM) плавать в…>
Это смотря какая у тебя кожа и вообще, физиология :-)
[12:29:20] <OCTAGRAM> среди сишников много мнящих себя суперменами, да
[12:30:47] <ada_ru> (I_vlxy_I) Дык вон, сушки летают и ничего. Много критических сбоев ПО там было, а?
[12:31:15] <ada_ru> (I_vlxy_I) Это вам не американские истребители пятого поколения и не европейский Ариан-5
[12:32:58] <OCTAGRAM> да этих сушек-то раз-два и обчёлся
[12:34:14] <OCTAGRAM> маловато для сопоставимой статистики
[12:34:25] <ada_ru> (I_vlxy_I) Дык и всяких F-22 столько же, или меньше
[12:34:48] <OCTAGRAM> F-22 во сколько стран продано
[12:35:01] <ada_ru> (I_vlxy_I) А сушек? :-)
[12:35:02] <OCTAGRAM> и в СССР их, скорее всего, на Си не прогали
[12:35:14] <ada_ru> (I_vlxy_I) Кетай, Индия
[12:36:20] <ada_ru> (I_vlxy_I) А F-22 на экспорт ниочень. Экспортный у них F-35 шоле
[12:36:46] <OCTAGRAM> сойдут только те, что новые, типа многострадального SuperJet, с которым постоянно что-то не ладится
[12:38:10] <ada_ru> (I_vlxy_I) Су-35, Су-37
[12:38:19] <ada_ru> (I_vlxy_I) Вот эти - на си
[12:38:29] <ada_ru> (I_vlxy_I) 27 вроде тоже
[12:41:39] <OCTAGRAM> на Reddit-то живенько в /r/ada
[13:21:56] <ada_ru> (I_vlxy_I) ага
[13:53:03] <ada_ru> (I_vlxy_I) https://tomekw.com/ada-programmers-patrick-kelly/
[13:54:08] <ada_ru> (I_vlxy_I) "How do you see the future of Ada?"
"I see it as horrible. Most of the community is blindly full of themselves and it means while things develop nicely for existing Ada developers, very little is actually done to attract new developers to the language. Clearly there is an interest with the explosion of Rust. One of the most important things learned in sales is, obviously, how to sell, and I can safely say Ada isn't being "sold" well at all, mostly because of a complete lack of understanding or misunderstanding of why people aren't adopting the language."
[13:59:17] <ada_ru> (Максим) Патрик сказал что мой lsp можно юзать 😀
[14:00:49] <ada_ru> (Oleg) Отлично
[14:01:42] <ada_ru> (Максим) Это тот чувак что видео пилить на Ютубе
[14:07:03] <ada_ru> (I_vlxy_I) ага. он нанёс весьма немало пользы
[15:17:49] <OCTAGRAM> в то время, как шла гонка Java Applets -> FlasCC -> NaCl -> Asm.js -> WebAssembly и, кажется, на последнем начинает устаканиваться, производители адских компиляторов проигнорировали, а Rust, наоборот, въезжает на переписывании с JS
[15:18:45] <OCTAGRAM> где взять транслятор в Си, было долбаным ноу-хау, да и сейчас не сильно лучше
[15:19:01] <OCTAGRAM> кажется, я один и тащу его
[15:19:23] <OCTAGRAM> хватает былинных фейлов
[15:19:56] <ada_ru> (Максим) Да, сколько трансляторов мы могли бы написать и выкинут!
[15:22:00] <ada_ru> (I_vlxy_I) да ладно, gnat частенько во всякую экзотику умел компилировать
[15:22:14] <ada_ru> (I_vlxy_I) например в .net или в байткот jvm
[15:22:39] <ada_ru> (I_vlxy_I) и, кажется, так ничего и не прижилось из этого
[15:25:34] <ada_ru> (Максим) Интересно, почему? Ну я понимаю, что "не нужно", но почему 😊
[15:32:20] <ada_ru> (Oleg) Эх опять надо побыстрому
[15:32:27] <ada_ru> (Oleg) х...к х...к и в продакшен
[15:32:32] <ada_ru> (Oleg) Аду чтоль взять
[15:32:44] <ada_ru> (Oleg) Надо запилить работу с VMWare через API
[15:32:57] <ada_ru> (Oleg) Рука тянеться к Go но я сопротивляюсь 😊))
[15:35:04] <ada_ru> (Максим) кто-то кажется делал биндинг к libvirt
[15:45:15] <OCTAGRAM> берём типичный адский проект
[15:46:24] <OCTAGRAM> там часть не то сишная, не то плюсовая, но кто-то умный уже завернул всё в Controlled как надо, чтоб ресурсы не текли, и коды ошибок в исключения преобразовал
[15:46:39] <OCTAGRAM> теперь же пытаемся перенести это на Java
[15:47:39] <OCTAGRAM> для си там какой-то компилятор на основе массива байтов есть
[15:48:11] <OCTAGRAM> а AppletMagic и JGNAT предпочитают объекты Java
[15:48:39] <ada_ru> (I_vlxy_I) отвечает (Максим) на <Интересно, почему? Н…>
область вне Адской ниши же. Ну и не сказать чтобы кодогенераторы те были идеальны.
Чтобы на новую нишу выйти (которая давно и прочно занята) не достаточно просто один раз кодогенератор соответствующий к гнату прикрутить.
[15:48:53] <OCTAGRAM> Finalize работает не сразу, как привыкли все адаисты
[15:51:11] <OCTAGRAM> Delphi.NET, напротив, в своей .NET версии использует .NET объекты ещё больше, чем GNAT для .NET
[15:52:05] <OCTAGRAM> в GNAT String был и есть мутабельный, фиксированного и из октетов, а в Delphi немутабельный и юникодный
[15:52:41] <OCTAGRAM> сшить проекты с интеропом и на Windows+Linux бывает непросто, а в native+managed вообще кошманый раздрай
[15:53:35] <OCTAGRAM> совсем другое дело, если портировать Аду на Си-подобную среду исполнения, или через массивы слов принудительно воссоздавать таковую
[15:54:05] <OCTAGRAM> тогда Ada/C/C++ всё вместе единообразно перетаскивается
[15:54:11] <OCTAGRAM> но так не делали
[15:54:55] <OCTAGRAM> FlasCC, NaCl, Asm.js, WebAsembly, все располагали к этому, но, пропустив Flash, уже перестали пытаться
[15:55:12] <OCTAGRAM> и транслятор в Си держали за семью печатями
[15:57:45] <OCTAGRAM> не дай Бог же какой-нибудь энтузиаст в веб портирует, сделает ништяк и тем самым Аду продвинет заоблачно
[16:02:14] <OCTAGRAM> даже документации на сайте нет
[16:05:37] <OCTAGRAM> по исходным кодам RTL выяснил, что pragma Import для type позволяет встроить #include в сишный вывод, а соглашение о вызове Intrinsic позволяет заставить транслятор использовать идентификатор как процедуру или функцию, но не делая extern объявления, а вот по-человечески прочитать никак
[16:07:44] <OCTAGRAM> ещё б найти, как заставить транслятор добавлять произвольную строку до/после типа процедуры, и можно даже с оригинальным CPC попробовать
[16:08:56] <OCTAGRAM> там нужно помечать асинхронные функции cps_def или чем-то таким, а по умолчанию всё синхронно
[16:25:55] <ada_ru> (I_vlxy_I) продвижение чего-либо в вёб через транслятор в Си — это почти как анекдот таки звучит.
[16:30:11] <OCTAGRAM> деталь реализации
[16:30:49] <OCTAGRAM> такой же анекдот, как gzip в javascript
[17:21:39] <OCTAGRAM> в операционках не хватает EwoK, Muen.SK, CubedOS
[17:21:53] <OCTAGRAM> а то типа ничего живого нет
[17:21:58] <OCTAGRAM> на ada-ru
[18:09:17] <ada_ru> (Eugene) отвечает (I_vlxy_I) на <Вот эти - на си>
Откуда инфа?
[18:09:52] <ada_ru> (I_vlxy_I) отвечает (Eugene) на <Откуда инфа?>
Из первых рук
[18:12:03] <ada_ru> (Oleg) отвечает (I_vlxy_I) на <Из первых рук>
За тобой уже вылетел чОрный вертолет
[18:49:23] <OCTAGRAM> security by obscurity, ну-ну
[23:01:30] <ada_ru> (Oleg) https://www.autosar.org/fileadmin/user_upload/standards/adaptive/17-03/AUTOSAR_RS_CPP14Guidelines.pdf
[23:35:21] <ada_ru> (insert_reference_here) отвечает на <(OCTAGRAM) ах да, RA…>
> RAII на Аде не работает без ООП
Что, правда?
[23:35:44] <ada_ru> (I_vlxy_I) дык это обсуждалось же уже
[23:35:55] <ada_ru> (I_vlxy_I) я уже ныл тут по этому поводу, что оно только для тэгированых типов
[23:36:05] <ada_ru> (I_vlxy_I) и что для плюсиста это всё дико странно
[23:36:46] <ada_ru> (I_vlxy_I) деструкторы бывают в Аде ТОЛЬКО ВИРТУАЛЬНЫМИ
[23:37:02] <ada_ru> (I_vlxy_I) точнее -- это просто виртуальная функция которую ты override и всё
[23:38:16] <ada_ru> (I_vlxy_I) и сразу половины радости от RAII нету
[23:38:39] <ada_ru> (insert_reference_here) отвечает (I_vlxy_I) на <я уже ныл тут по это…>
Но это действительно странно. RAII — вещь полезная сама по себе, зачем её гвоздями к обхектам прибивать?
[23:38:57] <ada_ru> (Максим) отвечает (I_vlxy_I) на <и сразу половины рад…>
Например?
[23:39:13] <ada_ru> (I_vlxy_I) отвечает (Максим) на <Например?>
например RAII становится сразу сильно дороже
[23:39:23] <ada_ru> (I_vlxy_I) например умные указатели уже не столь дешевы
[23:39:51] <ada_ru> (I_vlxy_I) на каждый чих бегать в таблицу виртуальных функций и не иметь возможности заинлайнить всё и вся -- это такое
[23:40:09] <ada_ru> (I_vlxy_I) при массированном raii у тебя десяток деструкторов вызывается на каждый вызов функции
[23:40:17] <ada_ru> (I_vlxy_I) не набегаешься в таблицу виртуальных функций
[23:40:49] <ada_ru> (Максим) Что мешает заинлайнить, если тип известен?
[23:41:36] <ada_ru> (I_vlxy_I) ну и у тебя переменная же тяжелее становится
[23:41:42] <ada_ru> (I_vlxy_I) на целый указатель
[23:41:53] <ada_ru> (insert_reference_here) отвечает (Максим) на <Что мешает заинлайни…>
П О Д Т И П Ы
[23:41:56] <ada_ru> (I_vlxy_I) анивей нужно смотреть на кот сгенеренный
[23:42:15] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <П О Д Т И П Ы>
ну, подтипы то обычно для raii не юзаются же.
[23:42:24] <ada_ru> (I_vlxy_I) то есть Максим тут кое в чем прав таки
[23:42:38] <ada_ru> (I_vlxy_I) нужно в золотом болтяре посмотреть что там накодогенерит гнат
[23:42:55] <ada_ru> (Максим) Как подтип мешают инлайну?
[23:43:49] <ada_ru> (insert_reference_here) отвечает (I_vlxy_I) на <ну, подтипы то обычн…>
Я о том, что если RAII в Ada невозможно без ООП, то в большинстве случаев у тебя переменная может по факту иметь не тип класса, а тип какого-нибудь из его наследников, потому и деструктор заинлайнить нельзя
[23:44:21] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <Я о том, что если RA…>
но в классическом случае, если raii юзать как в плюсах - этого же не будет
[23:44:32] <ada_ru> (I_vlxy_I) у тебя везде будет конечный тип
[23:44:59] <ada_ru> (I_vlxy_I) но вот лишние 8 байт -- это может быть сурово.
[23:45:01] <ada_ru> (Максим) Мне кажется "надклассовые"
[23:45:04] <ada_ru> (I_vlxy_I) двойной расход памяти
[23:45:10] <ada_ru> (insert_reference_here) отвечает (I_vlxy_I) на <у тебя везде будет к…>
В который ничего не мешает записать наследника класса, если ты специально не позаботишься об обратном
[23:45:31] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <В который ничего не …>
ты же не по указателю его держать будешь и не по ссылке
[23:45:33] <ada_ru> (Максим) переменные довольно редки
[23:46:05] <ada_ru> (I_vlxy_I) отвечает (Максим) на <переменные довольно …>
массив умных указателей например -- нормальная тема.
[23:46:07] <ada_ru> (insert_reference_here) отвечает (I_vlxy_I) на <ты же не по указател…>
Эм, а как ты будешь не по ссылке экземпляр класса хранить?
[23:46:38] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <Эм, а как ты будешь …>
А какие проблемы? В плюсах например как обычно B b; // вот, пожалуйста.
[23:46:57] <ada_ru> (I_vlxy_I) в Аде tagged типы они что, ref only types?
[23:47:05] <ada_ru> (insert_reference_here) отвечает (I_vlxy_I) на <А какие проблемы? В …>
Там же всё равно по факту указатель хранится
[23:47:12] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <Там же всё равно по …>
нет
[23:47:35] <ada_ru> (I_vlxy_I) это полноценная переменная на стеке или где ты там объявил эту переменную. это ж не java
[23:48:27] <ada_ru> (Максим) В Аде можно писать X : Shape'Class := Get_My_Figure; и компилятор не будет знать в момент компиляции что за объект у тебя и сколько он на стеке занимает
[23:49:01] <ada_ru> (I_vlxy_I) но при этом оно будет на стеке?
[23:49:32] <ada_ru> (Максим) да.
[23:49:39] <ada_ru> (I_vlxy_I) Чудны дела, твои...
[23:50:06] <ada_ru> (Максим) Shape может быть limited тогда даже копирования не будет
[23:50:12] <ada_ru> (I_vlxy_I) А можно X : Circle := GetCircle, где Circle это тэгированный тип?
[23:50:25] <ada_ru> (I_vlxy_I) и чтобы компилятор разместил X на стеке
[23:50:41] <ada_ru> (I_vlxy_I) и чтобы он смог провести с ним все оптимизации какие может
[23:50:53] <ada_ru> (I_vlxy_I) в том числе - заинлайнить Finally или как его там.
[23:51:13] <ada_ru> (Максим) можно
[23:51:37] <ada_ru> (I_vlxy_I) гут! то есть из всех минусов, только на 8 байт больше места занимает в массивах и в полях.
[23:52:38] <ada_ru> (Максим) еще в Ада 83 можно было делать X : String := Get_String;
[23:52:42] <ada_ru> (insert_reference_here) отвечает (I_vlxy_I) на <это полноценная пере…>
Хм
[23:52:45] <ada_ru> (Максим) Не зная размера строки
[23:54:55] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <Хм>
ну здорово, ты создал переменную на куче 😄 а зачем? Почему не написать B b; просто
[23:55:14] <ada_ru> (I_vlxy_I) более того, у тебя тут даже таблицы виртуальных функций нет
[23:55:20] <ada_ru> (I_vlxy_I) это один фиг будет POD
[23:55:43] <ada_ru> (I_vlxy_I) отвечает (Максим) на <Не зная размера стро…>
это я знал, поэтому сейчас просто удивился а не конкретно офигел 🙂
[23:57:10] <ada_ru> (I_vlxy_I) отвечает (insert_reference_here) на <Хм>
https://godbolt.org/z/dkYZu2
[23:57:42] <ada_ru> (I_vlxy_I) struct или class значения в плюсах не имеет. это одно и то же