[10:38:16] <ada_ru> (anisimkov) соревнование между аппаратной производительностью и софтверной функциональностью.
[11:01:32] <ada_ru> (I_vlxy_I) отвечает (anisimkov) на <соревнование между а…>
И производительностью программиста
[11:12:16] <ada_ru> (anisimkov) производительность аппаратная растет несоизмеримо выше физических возможностей программиста, как мне кажется.
[11:27:25] <ada_ru> (I_vlxy_I) отвечает (anisimkov) на <производительность а…>
А при чем тут физические возможности?
Факт, что ради производительности программиста часто жертвуют производительностью
[11:33:53] <ada_ru> (anisimkov) это да
[11:34:42] <ada_ru> (anisimkov) оптимизировать экономически не выгодно. поэтому аппаратная производительность благополучно съедается полностью.
[11:40:29] <ada_ru> (I_vlxy_I) И да и нет
[11:41:57] <ada_ru> (I_vlxy_I) Везде разные требования к скорости. И в них надо всегда укладываться. Но и преждевременной оптимизацией не заниматься
[12:06:30] <ada_ru> (Oleg) отвечает (I_vlxy_I) на <Везде разные требова…>
Преждевременная оптимизация - мой конёк :-)
[12:07:20] <ada_ru> (I_vlxy_I) Кстати, часто вижу когда народ грешит преждевременной оптимизацией не по скорости, а по архитектуре
[12:09:12] <ada_ru> (Oleg) Ох ты ж , gprs !
[12:09:20] <ada_ru> (Oleg) Даже не edge
[12:09:29] <ada_ru> (Oleg) Питер!
[12:09:46] <ada_ru> (I_vlxy_I) Я такое и а Москве наблюдаю иногда :-)
[12:09:52] <ada_ru> (Oleg) Все , уже LTE :-)
[14:53:33] <OCTAGRAM> вроде нормально в Питере с 4G
[19:05:47] <ada_ru> (a) У мну 2 сим. На одной 3ж, на другой 4
[19:25:52] <ada_ru> (I_vlxy_I) На третьей 5ж!
[19:27:17] <ada_ru> (a) Угу. Только 2ж ;)
[22:52:59] <ada_ru> (FROL256) Коллеги, подскажите пж.
[22:53:05] <ada_ru> (FROL256) что именно значит такая конструкция
[22:53:07] <ada_ru> (FROL256) with function ">" (L, R : T) return Boolean is <>
[22:53:15] <ada_ru> (FROL256) когда она в generic-е
[22:53:27] <ada_ru> (FROL256) generic
type T is private;
[22:53:28] <ada_ru> (FROL256) и дальше
[22:53:35] <ada_ru> (FROL256) with function ">" (L, R : T) return Boolean is <>;
[22:53:49] <ada_ru> (FROL256) инетресует ирменно <>
[22:59:47] <ada_ru> (Denis) Под рукой только Барнс бумажный https://www.ada-ru.org/files/bot/2019-10-21-x2.jpg
[23:00:13] <ada_ru> (Denis) картинка https://www.ada-ru.org/files/bot/2019-10-21-x3.jpg
[23:02:09] <ada_ru> (FROL256) ого, спасибо!
[23:04:31] <OCTAGRAM> это значит по возможности взять одноимённую функцию из контекста и не просить явно указать её
[23:05:47] <ada_ru> (FROL256) ага ... теперь даже стало понятнее спс!
[23:09:49] <OCTAGRAM> новые прибамбасы типа [] и перечисления for-of вмонтируются в тип, к сожалению, предавая концепции из Ады 83, с ними так не получится
[23:10:55] <ada_ru> (FROL256) эээ а можно пояснить?) Я вообще слегка намучался с дженериками в Аде
[23:11:24] <ada_ru> (FROL256) Много таких ситуаций когда он говорит нельзя и всё
[23:11:26] <ada_ru> (FROL256) компилятор
[23:11:33] <ada_ru> (FROL256) а как можно, непонятно ))))
[23:11:57] <ada_ru> (FROL256) есть какие-нибудь примеры для с жденериками нубов? )
[23:13:22] <OCTAGRAM> ну вот если хочется, можно пакет с чужим типом подключить как with, но не как use, тогда операции из него, в том числе сравнения, не прилетают в контекст, и можно вместо них написать что-то другое и использовать, и так по всему пакету, а если дженерик так объявленный инстанциировать, то и он прозрачно подхватит другие операции
[23:13:53] <OCTAGRAM> в Delphi и C++, для сравнения, операции вмонтированы в тип, так что там с Comparer приходится более явно заморачиваться
[23:14:36] <OCTAGRAM> новые прибамбасы типа [] и for-of в языке Ада сделаны не как в Ada 83, так что их уже переделать получается, как операции
[23:14:51] <OCTAGRAM> не переделать
[23:15:01] <OCTAGRAM> а что с дженериками? кажется, они довольно дубовые
[23:15:07] <OCTAGRAM> и сообщения понятные
[23:22:12] <ada_ru> (FROL256) Ну вот например беру ada.containers.ordered_sets
[23:22:19] <ada_ru> (FROL256) я могу засунуть туда Integer
[23:22:23] <ada_ru> (FROL256) могу FLoat
[23:22:31] <ada_ru> (FROL256) Могу Unbounded_String
[23:22:36] <ada_ru> (FROL256) но просто String не могу
[23:22:46] <ada_ru> (FROL256) Я приблизительно понимаю почему ....
[23:22:52] <OCTAGRAM> так String недоопределённый
[23:23:06] <OCTAGRAM> для него в 2012 Indefinite_ версии контейнеров были сделаны
[23:23:12] <ada_ru> (FROL256) аааа
[23:23:16] <ada_ru> (FROL256) то есть сними работает?
[23:23:38] <OCTAGRAM> ну да, String не годится в роли type Element is private
[23:23:51] <OCTAGRAM> String будет type Element (<>) is private
[23:24:05] <OCTAGRAM> работает
[23:24:06] <ada_ru> (FROL256) блин
[23:24:11] <ada_ru> (FROL256) вот это и непонятно
[23:24:14] <ada_ru> (FROL256) что это такое
[23:24:26] <ada_ru> (FROL256) type Element (<>) is private
[23:24:41] <ada_ru> (FROL256) и что тогда значит недоопределённый тип ... ну хорошо — размер неизвестен
[23:24:44] <ada_ru> (FROL256) это я понимаю ...
[23:24:56] <OCTAGRAM> в основном, всё про размер
[23:26:15] <ada_ru> (FROL256) а что значит конструкция (<>) ?
[23:26:55] <OCTAGRAM> недоопределённость можно устроить через массив недоопределённого размера, запись/задачный/мониторный тип с дискриминантами без значения по умолчанию, и, наконец, дописав к имени тегированного типа 'Class, что значит не только этот конкретный тип, но и любой потомок, это тоже неопределённость в размещении получится
[23:27:07] <OCTAGRAM> это значит не указанные дискриминанты
[23:27:36] <ada_ru> (I_vlxy_I) синтаксис Ады прост и очевиден - из него прямо интуитивно следует понимание семантики которая за ним скрывается!
[23:27:45] <OCTAGRAM> кстати, их может не быть, но если они есть, в generic они должны быть предусмотрены
[23:28:33] <OCTAGRAM> type Discriminanted_Record (Parameter : Boolean) is record … end record;
[23:29:10] <OCTAGRAM> вот тут дискриминант сидит как бы не внутри record, а после имени типа, вот так оно и в формальный синтаксис generic перетекло
[23:29:56] <OCTAGRAM> можно конкретно расписать список дискриминантов в generic, тогда только в точности такие недоопределённые типы и подойдут, но, казалось бы, зачем
[23:30:45] <OCTAGRAM> у недоопределённого массива и класса синтаксис не такой, но они в generic все идут под одну гребёнку
[23:35:16] <ada_ru> (FROL256) Ох, ладно) Чувствую мне надо попрактиковаться просто, спасибо!
[23:36:06] <ada_ru> (FROL256) Алексей явно злорадствует но в С++ всё запутанее. Просто там мы уже очень много времени провели поэтому кажется что проще, но на самом деле нет
[23:37:57] <ada_ru> (I_vlxy_I) да в крестах всё хуже безусловно
[23:38:16] <ada_ru> (I_vlxy_I) я просто к тому, что за любым синтаксисом семантики не видно пока язык не выучишь.
[23:38:49] <OCTAGRAM> а я в Delphi классовые конструкторы обобщённых классов пишу на работе
[23:38:57] <ada_ru> (I_vlxy_I) за каждой комбинацией ключевых слов (именно комбинацией!) неплохой такой талмуд из стандарта прячется.
[23:40:11] <OCTAGRAM> компилятор собирает по всем сусекам, в каких комбинациях параметрических типов будет использоваться класс, и вставляет для каждой используемой специализации вызов классовых конструкторов и классовых деструкторов, соответственно
[23:41:08] <ada_ru> (FROL256) мда ... ну что есть то есть )
[23:44:11] <ada_ru> (I_vlxy_I) я не питаю иллюзий, что Ада будет проще скажем раста - объем изучения примерно одинаков. и заковырок в конструкциях тоже плюс-минус одинаково. и всё равно как выглядят лексемы
[23:44:15] <OCTAGRAM> эти штуки, они как-то привинчены сбоку. обычно же когда ИмяКласса.Create пишешь, не классовые конструктор вызовется, а у нового экземпляра обычный, и вот эти классовые конструкторы имеют синтаксис методов, но они всё же не методы, и это наиболее точно проявилось, когда я через inherited попытался позвать классовый метод унаследованной реализации, мне прям компилятор так и сказал, что inherited можно только в методах; а вот вызвал из классового конструктора классовый метод, и из метода inherited сработало
[23:45:40] <OCTAGRAM> всё же Ада до сих пор достаточно стройна и последовательна
[23:47:27] <ada_ru> (I_vlxy_I) я ничего не понял 🙂 терминология сильно чуждая
[23:48:34] <OCTAGRAM> да и понятия, наверное, тоже
[23:48:52] <OCTAGRAM> где ещё могли встречаться метаклассы хотя бы неявные, как в Delphi?
[23:50:06] <ada_ru> (I_vlxy_I) в ObjC?
[23:50:19] <OCTAGRAM> да, верно
[23:50:23] <ada_ru> (I_vlxy_I) смотря что под метаклассами понимать
[23:50:42] <OCTAGRAM> но там lightweight generics, с ними такой дичи не натворишь
[23:50:58] <ada_ru> (I_vlxy_I) нечто под названием "метакласс" и в с++ скоро будет. но, думаю, это будет не тот метакласс о котором ты говоришь
[23:51:18] <OCTAGRAM> скорее, это к лучшему, мне там нравится, а тот код, который я пишу, он и пытается к ObjC привести поведение
[23:51:44] <OCTAGRAM> в C++ Builder по понятным причинам и так есть
[23:52:37] <ada_ru> (I_vlxy_I) это не то 🙂 то есть название одинаковое - сущности сильно разные
[23:53:44] <OCTAGRAM> для Linux есть Delphi, но не C++ Builder пока, к сожалению
[23:59:08] <ada_ru> (I_vlxy_I) Я, по возможности, стараюсь с проприентарщиной не связываться. И, особенно, с одновендорной