[00:45:20] <ada_ru> (Vinpuh) Дело не в ужасности, дело в том, что все идут по одним и тем же граблям. А потом все говорят, ой а давайте на аде надежно напишем, ой а разрабов нет и скорее всего через 30 лет не будет, тогда давайте на С++ напишем, а давайте.
[00:46:16] <ada_ru> (I_vlxy_I) ну вот в плюсах контракты появились. так что конкуренты Ады не зевают.
[01:02:28] <OCTAGRAM> а те, разрабы, которые есть, необучаемые? за что у них зарплата?
[01:03:58] <ada_ru> (I_vlxy_I) я не уверен, что команда плюсистов например напишет на Аде лучше и надежней нежели на плюсах.
[01:34:30] <OCTAGRAM> будет несколько лучше
[01:34:52] <OCTAGRAM> в плюсах у них не было галочек, а на аде — появились
[01:46:47] <ada_ru> (I_vlxy_I) которых?
[02:09:35] <OCTAGRAM> http://pascal.net.ru/Range_Checking и т.п.
[02:11:00] <OCTAGRAM> у них же вместо галочек Valgrind и Purify
[02:14:02] <ada_ru> (I_vlxy_I) неа
[02:14:32] <ada_ru> (I_vlxy_I) санитайзеры же. включил -fsanitize=address и всё
[02:15:23] <ada_ru> (I_vlxy_I) ну и -fsanitize=undefined
[02:17:12] <ada_ru> (I_vlxy_I) команда плюсистов (ну или других проф. программеров на языке Х) на родном языке, где у каждого инструмента и у самого языка каждый уголок знаком, и все уже знают по каким дорогам да тропам надо ходить, явно на этом языке напишет нечто лучше и быстрее, чем на другом, схожем языке.
[02:18:15] <ada_ru> (I_vlxy_I) Понятно, что вместо js брать плюсы для почти всех задач будет глупо например, или вместо SQL какого. Да даже вместо java, если там уже жабный стек.
[02:18:40] <ada_ru> (I_vlxy_I) но уж для железяки то плюсы или, на крайняк, си, взять можно всегда.
[02:20:34] <ada_ru> (I_vlxy_I) да ну блин, опять про плюсы. лучше про Аду 🙂
[02:22:58] <OCTAGRAM> так в Паскалях галочки можно включёнными в продакшн оставлять, а все эти валгринды-санитайзеры убероверхед привносят, им такое непривычно, но если заставить их в этой парадигме работать, привыкнут
[02:24:03] <ada_ru> (I_vlxy_I) процента 3-5 максимум санитайзеры привносят
[02:24:10] <ada_ru> (I_vlxy_I) у нас на продакшине включены, если что
[02:24:24] <OCTAGRAM> то есть, их можно оставить включенными?
[02:24:53] <OCTAGRAM> но, я так понимаю, без штук вроде CCured, как на Аде, не будет
[02:25:18] <OCTAGRAM> а CCured — это уже типичный оверхед по сравнению с Адой
[02:26:42] <OCTAGRAM> то есть, на Аде метаданные могут протягиваться по каналам, отдельным от указателей на данные, а в Си, если их добавлять, то приходится в каждый указатель
[02:27:56] <OCTAGRAM> соответственно, каждая библиотека меняет ABI, то есть, так просто тот инструментарий, который нужно, не включить, но хорошо, что хоть что-то начало появляться
[02:28:30] <ada_ru> (I_vlxy_I) да, их можно оставить включенными. в этом цимес именно санитайзеров относительно того же валгринда
[02:33:18] <OCTAGRAM> учитывая, что в плюсах просто нет подходящего синтаксиса для многих вещей на тему что есть дичь, а что не есть дичь, то и проверить то, не знаю, что, санитайзеры не смогут
[02:33:38] <OCTAGRAM> но что-то похожее есть, да
[02:34:13] <OCTAGRAM> как минимум, можно писать не хуже, чем раньше, а по мере освоения синтаксиса — всё лучше и лучше
[02:34:46] <OCTAGRAM> Киркорова книжечка, может быть, кому-то в помощь будет
[02:36:56] <ada_ru> (I_vlxy_I) переходя с языка на язык писать первое время начинаешь сильно хуже. особенно когда переходишь на такой большой язык, как Ада или С++. Предстоит пройтись по всем возможным граблям, и пострадать от хреновой выразительности нового языка, ибо выражаться то на нем принято иначе, а ты пытаешься выражаться как привык.
[02:38:49] <OCTAGRAM> тем временем я тут импорт из Инстаграм в сайт доделываю
[02:39:17] <OCTAGRAM> чтоб из ВКонтакте сайт сделать, такое у юКоза видел, а из Инстаграма я, наверное, первый
[02:41:55] <OCTAGRAM> движок вообще в теории может автоматизировать импорт/экспорт/перепост и т.п. из/в соцсети по произвольно настраиваемому ориентированному графу с циклами, но сейчас, конечно, на месте реального кода там много заглушек
[02:43:07] <OCTAGRAM> тем не менее, из Инстаграм динамически подгружается, картинки качаются и в базу данных сайта переливаются, трансформируясь по дороге
[02:44:12] <OCTAGRAM> может быть, в open source выложу, если доведу до состояния
[02:46:07] <OCTAGRAM> http://xn--d1ab0acgf0aa0d.xn--p1ai/%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/%D0%94%D1%80%D1%83%D0%B7%D1%8C%D1%8F — отображение одиночных статей сделал, сейчас общий список пилю
[02:48:58] <ada_ru> (I_vlxy_I) "Ошибка: Возникла непредвиденная ошибка. Попробуйте обновить страницу"
[02:49:01] <ada_ru> (I_vlxy_I) это норм?
[02:50:25] <OCTAGRAM> а, да
[02:51:01] <OCTAGRAM> это я в постгресе столбец поменял
[02:51:56] <OCTAGRAM> вот, сейчас
[02:53:13] <OCTAGRAM> ОШИБКА: в кешированном плане не должен изменяться тип результата — это если старыми подготовленными запросами пытаться ходить в изменённые столбцы
[02:54:12] <ada_ru> (I_vlxy_I) ага, что-то работает
[02:58:02] <OCTAGRAM> http://xn--d1ab0acgf0aa0d.xn--p1ai/%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/%D0%92%20%D1%81%D0%B2%D1%8F%D0%B7%D0%B8+%D1%81+%D0%BD%D0%B0%D1%87%D0%B0%D0%B2%D1%88%D0%B8%D0%BC%D1%81%D1%8F+%D0%B1%D1%83%D0%BD%D1%82%D0%BE%D0%BC+%D0%BD%D0%B0+%D0%B3%D1%80%D0%B0%D0%BD%D0%BE%D0%BB%D1%83 — пример корректно отпиленных с конца хештегов, превращённых в теги
[03:01:18] <OCTAGRAM> на X-Wiki у меня пути с кириллицей были, хотел как в википедии и сделал как в википедии, при том, что домены (свои) — в латинице

учитывая, насколько сложнее было сделать домены в кириллице по сравнению с путями в кириллице, как же у меня бомбило, когда я видел на кириллических доменах латинизированные пути
[03:20:40] <OCTAGRAM> может, на Ада-Ру какой-нибудь шаблончик не такой унылый завезти?
[03:21:45] <OCTAGRAM> качнуть от вордпресса какой-нибудь вариант, Ctrl+C Ctrl+V шапку, Ctrl+C Ctrl+V подвал
[03:56:53] <OCTAGRAM> кстати, прикольная штука http://www.jsonml.org/
[03:58:22] <OCTAGRAM> я решил в базе статьи в таком формате хранить
[04:03:12] <OCTAGRAM> хотя, возможно, её прикольность состоит в том, как обычно библиотеки работают с XML и, соответственно, как они обычно работают с JSON
[04:03:47] <OCTAGRAM> в XMLAda я манал вручную память от неиспользуемых нод освобождать
[08:52:43] <ada_ru> (Максим)  отвечает на <(OCTAGRAM) может, на…>
Знать бы чего хотеть :(
[09:54:41] <ada_ru> (Sergei)  отвечает (Vinpuh) на <Да только сообществу…>
Можно написать им и узнать, на каких условиях они могут предоставить компилятор для простого смертного. Если есть хоть какая-то конкуренция, они могут быть заинтересованы, чтобы очередной проект в публичном пространстве был сделан на их компиляторе. Вот, например, люди, которые делают обзоры техники  умудряются договорится с производителями и получить вещи бесплатно, правда они обещают потом написать положительный отзыв и т.д. Но не всех легко заинтересовать, конечно.
[10:03:03] <ada_ru> (Sergei) Сравнение Ады с C++ утратило смысл. Если человек захочет писать на Аде, он будет писать на Аде, если на С++ - на С++. Потом он будет пытаться обосновать почему, не замечая сам, что всё идёт от его "левой пятки".
Если С++-сник устраивается в компанию, где пишут на PL/SQL он будет писать на PL/SQL как, например, я сейчас, как бы сильно он не был уверен в преимуществах Ады для задачи.
Это же здорово, что есть не один язык на свете.
[10:05:15] <ada_ru> (Sergei) Обосновывать применение Ады range checking или строгим синтаксисом - это прокатывало для рассказов студентам лет 15 назад, сейчас на это уже никто не поведётся.
[10:07:14] <ada_ru> (Sergei) Ада настолько же самодостаточный язык, как и С++, потому нет необходимости доказывать что он лучше или что он хуже. Достаточно, что он другой, независимый.
[10:19:24] <ada_ru> (Sergei) Это примерно так же, как обосновывать выбор марки автомобиля. У каждого производителя есть модели с разными техническими данными. Но пользователь выбирает "свою". Мир был бы уныл, если бы все автомобили делала только одна компания, или все компании - только одну модель. Хотя, в 90% случаев, её бы, конечно, хватало.
Программирование - не только ремесло, но и искусство, а у художников есть разные кисти.
[10:36:38] <ada_ru> (Sergei) Возможность делать выбор - вот что самое главное. Для этого всё и существует.
[12:12:42] <ada_ru> (drblez) А вот Уэзрелл, считает, что программирование это ремесло ))))
[12:13:42] <ada_ru> (drblez) Программирование — это ремесло, и каждый программист должен достичь нужного профессионального уровня...
Классическое обучение ремеслу состояло в том, что ученик в течение многих лет выполнял простейшие вспомогательные операции, перенимая основные приемы у более опытных работников... В наши дни начинающему программисту уже не нужно семь лет вытряхивать отходы от пробивки перфокарт, скапливающиеся в перфорирующих устройствах — необходимые технические знания ему проще получить, посещая лекции и изучая литературу...
[12:16:28] <ada_ru> (I_vlxy_I) Этюдов у ремесленников не бывает 🙂
[12:16:30] <ada_ru> (drblez) А он знает о чем говорит )) Ибо:
[12:17:00] <ada_ru> (drblez) Из интервью: Why didn’t you publish any other books after “Etudes”? Why wasn’t “Etudes” republished?

I left UC Davis to go work at Bell Labs. While I was there, I ran a project that built one of the first Ada compilers.
[12:49:48] <ada_ru> (Sergei) Сложности перевода. Craft переводится как "ремесло" и как "искусство". Это для нас разное, а для них - одно.
[12:53:25] <ada_ru> (Sergei) Есть книга "Craft of Prolog". В предисловии автор говорит, что хотел назвать "Art of Prolog", но ему показалось это название "авторитарным", и потому он назвал "Craft". Просто оттенок смысла.
[12:55:08] <ada_ru> (Sergei) Но в то же время "craft" - это ещё хитрость, умение, ловкость, обман, сноровка.
[12:56:40] <ada_ru> (I_vlxy_I)  отвечает (Sergei) на <Сложности перевода. …>
А разве искусство это не art?

Хотя... В русском тоже ведь. "он был искусным мастером".
[12:59:02] <ada_ru> (Sergei) Ну, по-умолчанию - craft, а у кого выходит очень-очень хорошо - это уже "art" . Потому O'Keefe и пишет, что "art - авторитарно". Типа сам себя хвалит.
[12:59:24] <ada_ru> (Sergei) Плох тот craft который не мечтает стать art/
[13:01:22] <ada_ru> (I_vlxy_I) Интересно. У нам искусство и ремесло это два качественно разных понятия. А в англ они просто количественно отличаются.
[13:01:43] <ada_ru> (Sergei) Да. Я тоже это заметил.
[13:03:52] <ada_ru> (I_vlxy_I) В общем у них - надо много работать, тогда можно достичь уровня art, а у нас - либо дано, либо не дано, либо жди откровения и вдохновения :-)
[13:04:37] <ada_ru> (Sergei) :)
[13:05:18] <ada_ru> (Sergei) И в то же время, что бы ты ни делал, на это можно смотреть как на маленькое искусство.
[13:08:38] <ada_ru> (I_vlxy_I) Я просто наблюдал неоднократно холиворы на тему - программинг это искусство или же ремесло.
[13:10:26] <ada_ru> (Sergei) Всё зависит от планки. Вероятно, есть много людей, которые считают своим долгом определять планку. Для себя и обязательно других.
[13:14:05] <ada_ru> (I_vlxy_I) Ну, этим еще пытаются обосновать выбор инструмента (языка) :-)
[13:16:29] <ada_ru> (Sergei) Нет наверное такого явления, которым не пытаются обосновать выбор языка. Перефразируя "не мы говорим языком, а язык говорит нами" можно парадоксально-так ответить "не программист выбирает язык, а язык программиста" :)
[13:17:46] <ada_ru> (Sergei) Собственно что и наблюдается в нашем сообществе . Ведь мало кто на Аде кодит прями сейчас :)))
[13:31:26] <ada_ru> (I_vlxy_I) Да, некогда адой заниматься! Надо ускорять сборку с++ проекта!
[13:49:06] <ada_ru> (I_vlxy_I) кстати, а как GNAT делает with (в смысле импортов)? он ведь не инклюдит текстово, как плюсы, спеки указанного импортируемого модуля? он ведь более эффективно действует?
[14:50:08] <ada_ru> (Максим) Наверное, как обычно, синтаксический анализ строит дерево, таблицы символов, все дела. Большой разницы наверное нет. Только С обрабатывает результат препроцессора как единый поток лексем, а Ада каждый модуль отдельно.
[14:51:42] <ada_ru> (Sergei) Я знаю только, что GNAT заново делает полный разбор включаемого ads при каждой компиляции.
По поводу выбора языка программирования. Вот отличный текст, отражающий, на мой взгляд, всю суть.
[14:51:54] <ada_ru> (I_vlxy_I) я к тому, оно где-то кеширует, или в кажом модуле, что делает with mypack; будет заново парсить спеку пакета mypack
[14:58:51] <ada_ru> (Максим) Заново.
[15:03:16] <ada_ru> (Sergei) По поводу выбора языка программирования. Вот отличный текст, отражающий, на мой взгляд, всю суть:
http://ru.harrypotter.wikia.com/wiki/%D0%92%D0%BE%D0%BB%D1%88%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BB%D0%BE%D1%87%D0%BA%D0%B0
Можно использовать без ограничений, просто заменяя слова "ВП на ЯП, wizard -> programmer", "хвост единорога" -> "рефлексия кода". Но суть остаётся та же.
[15:09:27] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <Заново.>
то есть при первом обращении к спеке оно никуда не записывает бинарное представление уже распарсенной спеки, чтобы в следующий раз уже врямя на парсинг не тратить?
[15:15:19] <ada_ru> (Sergei) Самое печальное, что и generic определение будет парсится каждый раз, не извлекая пользы из знания классов типов.
[15:16:34] <ada_ru> (Sergei) Кто-то говорил, что почти все Ада компиляторы так построены. Когда мы затрагивали эту тему old timers помнили только один компилятор, который хранил промежуточное представление. Древний какой-то.
[15:20:32] <ada_ru> (I_vlxy_I) гм-хм. значит ада-компайлеры тормозят примерно по тем же причинам, почему и плюсатые?
[15:20:52] <ada_ru> (I_vlxy_I) при том, что во всех современных яп с этим проблем уже и нету.
[15:23:41] <ada_ru> (Sergei) Ну, я по этой причине долго и не принимал GNAT за "настоящий" компилер. По сути-то он транслирует Аду в C++. Да, не в текст, в синтаксическое дерево. Но новых концепций он в С++ не добавляет.
[15:25:36] <ada_ru> (Максим) GNAT не тормозит! По крайней мере не на столько, чтобы нашелся клиент, желающий заплатить за добавление кэширования :)
[15:25:47] <ada_ru> (Sergei) Это потом уже в GCC ввели концепцию "бакэнд для разных языков", но яйцо, то бишь попытка спрятать С++ за Адой, была раньше курицы.
[15:30:31] <ada_ru> (Sergei) Я думаю, где-то у кого-то должна быть приблуда, которая показывает результат "Ада компиляции" как такую-себе С++ программу
[15:31:27] <ada_ru> (Максим) Нет там C++, там свое промежуточное представление, на сколько я знаю.
[15:31:37] <ada_ru> (I_vlxy_I) если говорить про gcc, то вот у gccgo (у gcc шной реализации компилятора Go) нет этой проблемы, что у С++ и у Ады.
[15:31:51] <ada_ru> (Sergei) Откуда в GCC своё промежуточное представление для Ады?
[15:32:47] <ada_ru> (I_vlxy_I) насколько я понимаю, заказчики у Ады довольно специфичные 😊
[15:32:51] <ada_ru> (Максим) @I_vlxy_I А кто сказал, что у Ады эта проблема есть?
[15:32:55] <ada_ru> (Sergei) Когда я последний раз туда смотрел, там было просто синтаксическое дерево С++, аннотированное ада-конструкциями, которые следующим этапом разворачивалось в стандартное С++
[15:33:28] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <@I_vlxy_I А кто сказ…>
ну, судя по описанию, она должна быть. судя по тому, как оно текстово инклюдит спеки прямо в единицу трансляции.
[15:34:58] <ada_ru> (I_vlxy_I) ну и вообще, у меня сложилось впечатление, что адские исходники компиляются не сказать чтобы быстрее плюсатых.
[15:35:07] <ada_ru> (Sergei) Когда делали GNAT GCC , по-моему, кроме фортрана (который, вероятно, конвертировал в C) никого больше, помнится, не поддерживал
[15:35:31] <ada_ru> (Sergei) не могло быть универсального представления на тот момент
[15:35:44] <ada_ru> (I_vlxy_I) с тех пор gcc же серьезно переработали.
[15:35:50] <ada_ru> (Sergei) и GNAT?
[15:36:14] <ada_ru> (Sergei) Нашёлся клиент, который заплатил большие деньги, чтобы сделать по-новому?
[15:36:30] <ada_ru> (Sergei) Так его на основе GNAT в том числе и переработали
[15:36:44] <ada_ru> (Sergei) Это был первый язык после фортрана в семействе GCC
[15:38:18] <ada_ru> (Максим) Когда меняется GCC, ничего не остается, как допиливать GNAT.
[15:40:31] <ada_ru> (Sergei) Хорошо. Я не знаю. Я давно смотрел. Вероятно ещё на 3.15p разбирался с исходниками.
[15:41:21] <ada_ru> (Sergei) Помню был несколько разочарован, увидев 95% GCC и 5% GNAT в компиляторе
[15:42:25] <ada_ru> (I_vlxy_I) "Как будут решать задачу "Вскипятить чайник?" физики и математики - налить воду, зажечь огонь, поставить чайник на огонь и подогреть до 100С. А теперь новая задача "Вскипятить наполненный водой чайник?" физики: зажечь огонь, поставить, нагреть. математики: выльем воду из чайника, чем сведем задачу к предыдущей. "
[15:45:13] <ada_ru> (Sergei) В принципе, это не так сложно туда заглянуть. Там прокомментировано. Уверен, будет много открытий.
[15:46:47] <ada_ru> (Максим) Меньше знаешь, лучше спишь :)
[15:48:50] <ada_ru> (Sergei) Ну, главное GNAT подаётся как такое-себе самостоятельное здание, а ведь это больше на штукатурку похоже. И вот эти вот ali , которые хранят дополнительную инфу, которую gcc не собирается хранить.
[15:49:21] <ada_ru> (Sergei) OK, у меня нет другой альтернативы GNAT, я доволен и этим.
[15:49:39] <ada_ru> (I_vlxy_I) я вообще думал, что ali это как раз уже распарсенные спецификации пакетов, бинарные. чтобы второй раз не парсить каждый раз.
[15:50:01] <ada_ru> (Sergei) Да они текстовые вроде всегда были
[15:50:28] <ada_ru> (Sergei) или я путаю что-то (давно не собирал ничего на GNAT)
[15:51:20] <ada_ru> (Максим) Да, они текстовые, там информация о зависимостях, кросрефы, контрольные суммы кода
[15:51:54] <ada_ru> (Sergei) Там то, что не умещается в "представлении Ады на GCC"
[15:53:23] <ada_ru> (Sergei) Я помню, когда у меня были проблемы с линковкой на Windows, кто-то из отцов GNAT (два или тре человека там были изначально) присылал мне доморощенный скрипт для парсинга ali, который делал почти то, что нужно. С комментарием "ну вы понимаете, это грязный хак, но работает"
[15:53:51] <ada_ru> (I_vlxy_I) а дампить то зачем? это больше похоже на артефакты системы сборки, а gcc не может в систумы сборки, поэтому там make/cmake, который генерит уже и зависимости и прочее.
[15:58:21] <ada_ru> (Sergei) В Аде сборка (элаборация етц) это часть спецификации языка, в С++ - это  процедура ОС. Потому наверное так.
[15:58:44] <ada_ru> (I_vlxy_I) в плюсах да, в языке ПОКА нет ничего про библиотеки :-/
[15:58:51] <ada_ru> (I_vlxy_I) но это обещают пофиксить.
[15:59:02] <ada_ru> (Sergei) зачем это фиксить
[15:59:09] <ada_ru> (Sergei) это же эссенсия С++
[15:59:13] <ada_ru> (Sergei) ничего лишнего
[15:59:18] <ada_ru> (Sergei) в язык, всё во вне
[15:59:25] <ada_ru> (I_vlxy_I) затем, что возникают забавные ошибки, которые нифига не забавные.
[15:59:35] <ada_ru> (Sergei) Ну, так всегда было
[15:59:47] <ada_ru> (Максим) 😄
[15:59:55] <ada_ru> (Sergei) Эффект Божоле
[16:00:17] <ada_ru> (I_vlxy_I) например - нужно тебе зарегистрировать типы в фабрике, ну создаешь ты глобальные переменные, у которых единственное что есть - это сайдэффекты в конструкторе (где собственно регистрация то и дёргается).
[16:00:47] <ada_ru> (Sergei) ну и
[16:00:49] <ada_ru> (I_vlxy_I) и все у тебя хорошо и всё работает, пока ты не вынесешь код с этими глобальными переменными (объектами) в отдельную СТАТИЧЕСКУЮ либу.
[16:01:12] <ada_ru> (I_vlxy_I) линкер, видит что эти символы никто не юзает в головной программе явным образом, и радостно их выкидывает.
[16:01:14] <ada_ru> (Sergei) А, ну это классика. К ней уже все привыкли и показывают как достопримечательность.
[16:01:19] <ada_ru> (Sergei) Кошмар, ничего святого
[16:01:54] <ada_ru> (I_vlxy_I) а всё почему? потому, что внизу сидит СИ, в котором таких проблем НЕТ.
[16:01:58] <ada_ru> (I_vlxy_I) На уровне оси у нас СИ.
[16:02:17] <ada_ru> (I_vlxy_I) Короче, тут я дальше могу долго плакаться в том же духе, как выше про gcc и Аду 😊
[16:02:37] <ada_ru> (Sergei) Я понимаю, что для newbies это дико. Но мы то знаем, что грабли в С++ расставлены повсюду, и, собственно, если их собрать ничего больше не останется
[16:04:17] <ada_ru> (Sergei) Я могу в таком стиле порассказывать много историй. Эта несуразность - в локальных static (тайный mutex), в динамической линковке, exceptions, static destructors. Это же такая забавная коллекция уродцев. Как можно.
[16:05:08] <ada_ru> (I_vlxy_I) предлагаешь сохранить, как сохраняют в историческом центре города старые здания?
[16:05:41] <ada_ru> (Sergei) Ну, я вырос с этим . И вот тут так просто - убрать!
[16:08:01] <ada_ru> (Sergei) Это всё-равно, как когда выпустили новый клон БЗ-34 без ЕГГОГ-ов.
[16:08:07] <ada_ru> (I_vlxy_I) у плюсов появился компилятор zapcc - он на базе clang, и вот он - кеширует всё, до чего дотянется. т.е. все хедеры (то есть он их в итоге не парсит дважды), все инстанцирования шаблонов (то есть если в одном модуле кто-то инстанцировал шаблон, и во втором пытается инстанцировать, то будет использован результат первого).

В общем, он ускорил сборку рабочего проекта в 2-2.5 раз. Сейчас вот проверил.
[16:08:52] <ada_ru> (I_vlxy_I) если бы был проект который более сурово использует шаблоны (ака дженерики, ага), то ускорение могло бы быть и в 10 раз.
[16:10:01] <ada_ru> (Sergei) Всё, ушёл программить под БЗ-34.
[16:15:22] <ada_ru> (Sergei) http://4pda.ru/2012/08/01/67720/
[16:19:52] <ada_ru> (I_vlxy_I) а они случаем не были клоном чего-то там западного?
[16:20:55] <ada_ru> (Sergei) По-моему, это единственное вычислительное устройство полностью отечественного производства.
[16:21:04] <ada_ru> (Sergei) https://ru.wikipedia.org/wiki/%D0%95%D0%B3%D0%B3%D0%BE%D0%B3%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F
[16:22:48] <ada_ru> (Максим) Меня сейчас задушит ностальгия :)
[16:23:05] <ada_ru> (Sergei) Я бы много отдал за эту статью ТОГДА
[16:29:59] <ada_ru> (Sergei) Клавишная ЭВМ «Электроника МК-152» продолжает серию советских программируемых микрокалькуляторов .К ЭКВМ могут быть подключены и другие устройства, например, внешний электронный диск, принтер, тестеры и т.д.Индикатор — графический ЖКИ, имеет разрешение 128x64 точки и подсветку. С появлением ЭКВМ типа «Электроника МК» расчёты по этим программам выполняются в сотни раз быстрее (различные тесты показывает увеличение быстродействия от 100 до 1000 раз). Программы, написанные специально для «Электроники МК-152», помогут решать ещё более сложные задачи, с повышенной точностью (12 и 14 десятичных разрядов против 8 у старых ПМК) и намного большим объёмом входных данных (1000 десятичных регистров вместо 15) — при этом можно повторно использовать код или фрагменты кода, разработанного для ПМК.

А чего добился GNAT за это время?
[16:31:26] <ada_ru> (Sergei) «Электроника МК-161» имеет массу менее 350 грамм и хорошо сбалансирована. Центр тяжести ЭКВМ находится в районе группы клавиш "Выбор"  (!!!)
[16:31:55] <ada_ru> (I_vlxy_I) Э - эргономика!
[16:33:01] <ada_ru> (Sergei) "Программирование для МК-152 из среды на компьютере по сути превращается в ___хорошо знакомый процесс написания ассемблерных программ___."
А вы говорите "Go".
[16:33:09] <ada_ru> (Максим) Не прошло и пол года и вот он! Официальный релиз gnat community 2018 https://blog.adacore.com/gnat-community-2018
[16:33:38] <ada_ru> (I_vlxy_I) ой, а мне казалось что оно зарелизилось уже несколько недель назад...
[16:37:36] <ada_ru> (I_vlxy_I) "In this release we also add the support for ARM bare-metal hosted on MacOS (previously only Windows and Linux)."
[16:37:57] <ada_ru> (I_vlxy_I) Ееее! Пойду выпью смузи по этому поводу!
[16:39:03] <ada_ru> (Максим) А можно запостить новость на opennet? :)
[16:39:32] <ada_ru> (I_vlxy_I) только в анонсе macOS не правильно написали. Оно ж теперь macOS, ранее была OS X. А вот MacOS - это название классической макоси. Которая кооперативная многозадачность.
[16:39:41] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <А можно запостить но…>
Можно. Запости 😊
[16:40:19] <ada_ru> (Максим) спасибо! Но этож там регистрироваться надо :(
[16:40:20] <ada_ru> (I_vlxy_I) http://www.opennet.ru/add.shtml
[16:40:27] <ada_ru> (I_vlxy_I) Неа, не надо.
[16:40:34] <ada_ru> (I_vlxy_I) http://www.opennet.ru/announce_news.shtml?cache=off
[16:44:30] <ada_ru> (I_vlxy_I) очень прикольно. что микробит гнатом поддерживается.
[16:46:02] <ada_ru> (I_vlxy_I) Что-то в новости я не вижу, что нового собственно в компиляторе то и либах.
[16:46:57] <ada_ru> (I_vlxy_I) Где прочитать что там нового, чтобы я сразу прям побежал скачивать новую версию? 😊
[16:47:53] <ada_ru> (Максим) ну я на ada-ru вымучал какой-то список фич
[16:48:14] <ada_ru> (I_vlxy_I) странно что в анонсе нет нифига про это.
[16:49:02] <ada_ru> (I_vlxy_I) "автоматическое сортировка полей записи для улучшения производительности" — ой, а это разрешено языком?
[16:49:35] <ada_ru> (I_vlxy_I) в плюсах вроде запрещено например. в каком порядке объявил, в таком порядке оно и будет лежать. компилятору разрешено лишь паддинг да выравнивания делать.
[16:50:32] <ada_ru> (Sergei) Наверное, если не aliased то никак и не узнаешь порядок в Аде
[16:52:39] <ada_ru> (I_vlxy_I) про opennet - они не любят когда им в новости копипасту с другого сайта/новостной ленты кидают.
[16:52:48] <ada_ru> (I_vlxy_I) то есть нужен более-менее оригинальный коньтент.
[16:52:55] <ada_ru> (I_vlxy_I) "своими словами"
[16:56:07] <ada_ru> (Максим) компилятор конечно может сам менять всё, как ему хочется, пока ты не укажешь, что ты хочешь "именно так"
[16:56:27] <ada_ru> (I_vlxy_I) хы. разный таки подход.
[17:19:10] <ada_ru> (I_vlxy_I) погодите, а что если у меня допустим функция, принимающая на вход вот такую вот запись. я собрал эту функцию в составе либы каким-то компилятором.

а потом я эту функцию дергаю из другой проги, которая собирается своим компилятором, и у которой компилятор имеет свои соображения как должно быть упорядочены поля в этой записи.

у меня же всё сломается?
[17:19:17] <ada_ru> (I_vlxy_I) как эта проблема в Аде решается/
[17:20:00] <ada_ru> (Sergei) Другой Ада-компилятор не поймёт ali,
[17:20:08] <ada_ru> (Sergei) а для остальных foreign
[17:21:37] <ada_ru> (I_vlxy_I) другой gnat же 😊
[17:21:48] <ada_ru> (I_vlxy_I) вот старый гнат не сортирует. новый - сортирует.
[17:21:55] <ada_ru> (I_vlxy_I) где информация о том что там они насортировали?
[17:22:26] <ada_ru> (Максим) Ты должен поставить как минимум pragma Export (My_Var, Ada)
[17:23:02] <ada_ru> (I_vlxy_I) а почему My_Var? в либе я всего лишь экспортирую функции и типы.
[17:23:21] <ada_ru> (Максим) ну тогда для типа.
[17:23:31] <ada_ru> (I_vlxy_I) и тогда оно не будет сортировать?
[17:23:40] <ada_ru> (Максим) да
[17:24:00] <ada_ru> (Максим) это как с mangling имен
[17:24:25] <ada_ru> (Максим) у одного компилятора один, у другого другой, хочешь совмещать, нужно делать export
[17:24:36] <ada_ru> (I_vlxy_I) да, я понял. а можно как-то так экспортнуть/импортнуть, чтобы и профиты от сортировки поиметь, и чтобы все всё поняли что оно сортированное?
[17:25:40] <ada_ru> (Максим) нет, но можно руками указать как упаковывается запись, если надо.
[17:35:10] <ada_ru> (I_vlxy_I) и тогда это будет в спеке и все поймут как формировать запись?
[17:42:28] <ada_ru> (Максим) да
[17:52:04] <ada_ru> (I_vlxy_I) интересно, большой ли выигрыш от сортировки этой?
[17:53:11] <ada_ru> (Максим) я думаю это сделано для записей с дискриминантами, когда длинна полей переменаая
[17:56:48] <ada_ru> (I_vlxy_I) не, ну и когда поля разного размера, то можно же переупорядочиванием достичь того, что запись будет и компактная и с выравниванием будет всё норм.
[17:57:16] <ada_ru> (I_vlxy_I) тогда кеш процессора будет эффективней использоваться.
[17:57:35] <ada_ru> (drblez) О! Так я правильно понимаю, что теперь для разработки под СТМ32 не надо линух ставить, а можно все в макоси делать?
[17:57:47] <ada_ru> (I_vlxy_I) ДА!
[17:58:00] <ada_ru> (I_vlxy_I)  отвечает (drblez) на <О! Так я правильно п…>
Стаканчик смузи? 😉
[17:58:08] <ada_ru> (drblez) Два!
[17:58:26] <ada_ru> (drblez) И посещу барбершоп, пожалуй ))
[17:58:33] <ada_ru> (drblez) И биенале ))
[17:59:22] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <тогда кеш процессора…>
Ту даже без кеша можно выигрыш значительный получить, если сначала расположить поля фиксированного размера, а потом переменного. Тогда не нужно в рантайме вычислять, где у тебя поля фиксированного размера лежат.
[17:59:25] <ada_ru> (I_vlxy_I) Если во всей программе все записи будут эффективно представлены, то в совокупности это может дать неплохой прирост производительности относительно неоптимизированной руками плюсатой проги.
[18:00:10] <ada_ru> (I_vlxy_I) ну, в плюсах в этом плане проще было - переменный размер всегда был в хвосте. то есть если struct может быть разного размера, то переменный размер в хвосте всегда был.
[18:00:14] <ada_ru> (I_vlxy_I) сколь я помню.
[18:00:24] <ada_ru> (I_vlxy_I) но это прямо сишная штука. сишно-сишная.
[18:01:31] <ada_ru> (drblez) Старался всегда избавляться от знания внутренней организаций структур... По возможности, конечно... И, в этой связи,  хорошо, что компилятор может отсортировать записи в годном порядке...
[18:02:23] <ada_ru> (drblez) По мне так, знание внутренней сущности можно избежать почти на 100%
[18:02:25] <ada_ru> (I_vlxy_I) а можно пример когда будет запись плавающего размера в Аде?
[18:03:10] <ada_ru> (drblez)  отвечает (I_vlxy_I) на <а можно пример когда…>
По мне, так только с дискриминантом...
[18:03:55] <ada_ru> (I_vlxy_I) а дискриминант это разве не аналог union + type field в сях? в сях это будет не плавающий, а вполне себе фиксированный размер. размер будет максимальный из того, что в этом юнионе может лежать.
[18:04:29] <ada_ru> (drblez) ну да, и я о том же...
[18:04:51] <ada_ru> (I_vlxy_I) то есть в аде как тогда массив из структур переменной длины лепить?
[18:05:37] <ada_ru> (drblez) ммм... а зачем? ...сериализовать в байты? )))
[18:06:12] <ada_ru> (drblez) неизвестный размер -- зло и проблема в проектировании... я так думаю
[18:07:10] <ada_ru> (I_vlxy_I) в смысле? ну есть же у тебя какой-то тип. тебе хочется иметь массив этих вот штук. в плюсах всё просто - если ты не сишный извращенец, то размер любого типа известен на этапе компиляции (даже если там union какой унутре).

А в Аде вот выше писали, что бывают записи с неизвестной длиной.
[18:07:26] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <а дискриминант это р…>
Дискриминант интегер, поле стринга от 1 до дискриминанта. Габздец максимальный размер хранить
[18:08:56] <ada_ru> (I_vlxy_I) погодите. string в Аде - это нечто, что лежит всегда одним непрерывным куском в памяти, и что имеет размер неизвестный на этапе компиляции?
[18:10:18] <ada_ru> (I_vlxy_I) и при этом это библиотечный тип, а не нечто вшитое в компилятор и язык?
[18:10:30] <ada_ru> (Максим) type Data (X, Y : Natural) is record
 Matrix : Matrix_Type (1 .. X, 1 .. Y);
 Vector : Vector_Type (1 .. X);
end record;
[18:11:28] <ada_ru> (I_vlxy_I) а X, Y — это нечто известное на этапе компиляции, или это то, что может пользователь с клавиатуры в консоли ввести во время работы программы?
[18:12:00] <ada_ru> (Максим) X, Y могут задаваться в run time
[18:12:07] <ada_ru> (I_vlxy_I) вау!
[18:12:27] <ada_ru> (Максим) Каждый объект можут/будет иметь свои X, Y
[18:13:23] <ada_ru> (I_vlxy_I) а можно сделать
array 0...100500 of Data ?
[18:13:42] <ada_ru> (I_vlxy_I) и чтобы вот у каждого объекта в этом массиве были свои X и Y?
[18:14:28] <ada_ru> (nitrocerber) Врядли. Будет неблсь ругаться про анконстрейнд чтототам
[18:14:45] <ada_ru> (Максим) нет. только если x, y известны и равны
[18:15:07] <ada_ru> (I_vlxy_I) фух. я то уж испугался, что тут особая, какая-то Адская магия.
[18:15:11] <ada_ru> (I_vlxy_I) Но и так магии достаточно, да.
[18:15:31] <ada_ru> (I_vlxy_I) А строки тоже в виде дискриминирующих типов реализованы?
[18:16:05] <ada_ru> (I_vlxy_I) то есть, если у меня в записи есть поле - строка, то всё, мой тип уже тоже в массив не сложить?
[18:18:12] <ada_ru> (Максим) Сюда ещё можно накинуть case чтобы поля стали не обязательными. Довольно мощная штука была, а потом появилось ООП и смысла в этом стало много меньше
[18:18:55] <ada_ru> (I_vlxy_I) а потом стало модно ФП, и штука стала вновь всеми востребованой! Это ж практически Алгебраические Типы Данных!
[18:19:26] <ada_ru> (I_vlxy_I) Которыми так кичатся всякие новые языки типа раста и которые с таким скрипом через фиксы языка вводят в стандартную библиотеку плюсов
[18:21:00] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <то есть, если у меня…>
Что значит поле строка? Анконстрейнд строку полем не сделаешь)
[18:21:17] <ada_ru> (Максим) Строки, да, в массив не сложить. Поэтому и сделали Unbounded-String
[18:21:18] <ada_ru> (nitrocerber) Или давай рейндж, или велком ту стринг_аксесс
[18:21:27] <ada_ru> (nitrocerber) Ну или да, анбаунд
[18:21:48] <ada_ru> (nitrocerber) Строка - это магия)
[18:21:54] <ada_ru> (I_vlxy_I) едрить таво-навлево! ну у вас тут и строк!
[18:22:57] <ada_ru> (Максим) * Wide Wide_Wide варианты каждой :(
[18:23:29] <ada_ru> (I_vlxy_I) вай_вай_стринг
[18:23:58] <ada_ru> (nitrocerber) А ешё есть хстрока)))
[18:24:05] <ada_ru> (nitrocerber) Но мы про неё не говорим
[18:24:28] <ada_ru> (Максим) Она не в стандарте слава богам
[18:26:35] <ada_ru> (I_vlxy_I) ну ладно, допустим я в свою запись хочу полем иметь выше приведенную Data - тогда тоже всё, мою запись тоже в массив не сложить?
[18:27:45] <ada_ru> (nitrocerber) Нет. Делай new my_data со значентями дискриминантлв
[18:27:52] <ada_ru> (nitrocerber) И из неё уже массив
[18:28:13] <ada_ru> (I_vlxy_I) массив указателей, ага.
[18:28:57] <ada_ru> (Максим) Или, твоя запись тоже будет иметь эти дискриминанты и в массив ее не сложить.никакой мистики
[18:31:24] <ada_ru> (nitrocerber) Не, не в том ссысле нью, не указатели
[18:32:19] <ada_ru> (nitrocerber) Я не помню как там правильно по синтаксису. Подтип там или как это определяется. Ноут далече, а живьём я сто лет этим не пользовался
[18:32:41] <ada_ru> (I_vlxy_I) а, я понял, да.
[18:33:07] <ada_ru> (I_vlxy_I) гвоздями дискриминант прибить 😊
[18:33:25] <ada_ru> (I_vlxy_I) и этот гробик будет новым типом, частным случаем того типа.
[18:33:59] <ada_ru> (nitrocerber) Да, вроде того
[18:34:13] <ada_ru> (nitrocerber) Типов в аде тащемта и нет почти
[18:34:17] <ada_ru> (nitrocerber) Сплошные subtype
[18:34:31] <ada_ru> (nitrocerber) И есть first subtype
[18:34:33] <ada_ru> (nitrocerber) Но это уже такоэ
[18:39:20] <ada_ru> (I_vlxy_I) ага. если мой рекорд сам без дискриминанта, то у поля тип должен быть уже конечным.
[18:39:50] <ada_ru> (I_vlxy_I)     type MyRec is record
       d : Data; -- error: unconstrained subtype in component declaration
   end record;
[18:40:04] <ada_ru> (I_vlxy_I)     type MyRec is record
       d : Data(10); -- ok
   end record;
[18:40:17] <ada_ru> (nitrocerber) Вооо я ж говорил, анконстрейнд
[18:40:33] <ada_ru> (nitrocerber) Если бы это работало, назрена бы были нужны контейнеры?)
[18:40:51] <ada_ru> (I_vlxy_I) 😊
[19:10:16] <ada_ru> (drblez) Ну и все равно размер типа известен... Пусть и после создания
[19:10:32] <ada_ru> (drblez) Я же не могу поменять после создания ту матрицу?
[19:11:25] <ada_ru> (Максим) Размер ее нельзя поменять. Только значения не-дискриминантов.
[19:13:03] <ada_ru> (Максим) Тут есть конечно тонкости, Для дискриминантов можно задать значения по умолчанию. Тогда можно создать unconstrained объект. Такому объекту можно присваивать новые значения (с новыми значениями дискриминантов)
[19:13:37] <ada_ru> (drblez) Но это же все равно будет новый фиксированного размера объект?
[19:13:54] <ada_ru> (Максим) В памяти он займет область максимального размера
[19:16:33] <ada_ru> (Максим) type Dimension is range 1 .. 10;
type Float_Array is array (Dimension range <>) of Float;
type Vector (Length : Dimension := 1) is record
  Data : Float_Array (1 .. Length);
end record;

A : Vector;
A := (Length => 5, Data => (1 .. 5 => 2.0));
[19:17:05] <ada_ru> (drblez) Но в памяти будет 10?
[19:17:42] <ada_ru> (Максим) Да, в памяти места всегда будет на 10 элементов
[19:18:13] <ada_ru> (Максим) Зато элементы таких типов можно складывать в массив/структуру.
[19:18:29] <ada_ru> (drblez) Т.е. пусть себе компилятор сортирует поля в записи... Будет только польза от этого
[19:19:41] <ada_ru> (drblez) Для пущей эффективности...
[19:21:29] <ada_ru> (drblez) Ведь известное расположение требуется, фактически, только для внешних либ и ввода/вывода. А это можно решить другим способом
[19:23:11] <ada_ru> (drblez) А старую версию гната надобно удалять перед установкой новой?
[19:25:27] <ada_ru> (Максим) да, или ставить в соседний каталог
[19:50:52] <ada_ru> (drblez) не запустился gps на маке ((( бидапичаль
[19:51:11] <ada_ru> (I_vlxy_I) как так то? 2017 отлично запускался!
[19:51:26] <ada_ru> (drblez) от тож...
[19:51:50] <ada_ru> (drblez) не находит символ какой-то в дайлибе
[19:52:06] <ada_ru> (drblez) придется колдовать... не люблю колдовать
[19:52:30] <ada_ru> (drblez) или это намек, что надо обновить макось...
[19:52:47] <ada_ru> (I_vlxy_I) а что же, у тебя не хай сиера?
[19:53:06] <ada_ru> (drblez) ЕльКапитан
[19:53:36] <ada_ru> (I_vlxy_I) ууу...
[19:58:38] <ada_ru> (drblez) да уж, каждый может поиздеваться над елькапитаном... так не хочется сьерру ставить ((
[20:00:11] <ada_ru> (Максим) Ты что?! Будет же Сири у тебя! Можно будет погоду спрашивать 😊
[20:00:40] <ada_ru> (drblez) <прислал наклейку> ✝
[20:01:05] <ada_ru> (drblez) на емаксе кто-то на аде пишет? есть там годные штуки?
[20:01:55] <ada_ru> (Максим) вроде живой ada-mode, я давно не пользовался. Вроде даже gnatinspect используется в нем для кросс-рефов
[20:02:58] <ada_ru> (Максим) Можно оставить GPS от старого GNAT GPL 2017 а компилятор новый поставить
[20:03:07] <ada_ru> (drblez) сьеера или емакс... вот в чем вопрос. Достойно ль. Смиряться под ударами судьбы, Иль надо оказать сопротивленье.
[20:03:50] <ada_ru> (I_vlxy_I) я бы советовал на 10.12 перейти (просто сиера) а потом сразу на 10.14, ближе к новому году.
[20:04:07] <ada_ru> (I_vlxy_I) хотя я еще не смотрел, gps 2018 могёт на 10.12 запускаться. или же нет.
[20:05:27] <ada_ru> (drblez)  отвечает (I_vlxy_I) на <хотя я еще не смотре…>
А слабо посмотреть? ))) Порты же переставлять надо будет... неохота ))
[20:05:51] <ada_ru> (I_vlxy_I) ну, сегодня-завтра гляну 😊
[20:05:58] <ada_ru> (drblez) Вот спасибо ))
[20:56:02] <ada_ru> (drblez) Ну и варнинги при сборке…
[20:56:23] <ada_ru> (I_vlxy_I) кого собираешь?
[20:56:37] <ada_ru> (drblez) проект тестовый
[20:56:42] <ada_ru> (drblez) ld: warning: object file (/users/drblez/opt/gnat/2018/lib/gcc/x86_64-apple-darwin16.7.0/7.3.1/adalib/libgnat.a(s-valuti.o)) was built for newer OSX version (10.12) than being li\
nked (10.11.6)
[20:57:01] <ada_ru> (drblez) придется, таки, обновлять ))
[20:57:04] <ada_ru> (I_vlxy_I) о! а это 2018 гнатина?
[20:57:12] <ada_ru> (I_vlxy_I) вот просто до сиеры норм значит будет!
[20:57:19] <ada_ru> (I_vlxy_I) 10.12 как раз
[20:57:39] <ada_ru> (drblez) ага))
[21:01:59] <ada_ru> (drblez) а вот и ответ от адакоры: Hi,

The version of OS X you’re using is too old for GNAT Community 2018. It has been tested on Sierra and High Sierra.
[21:02:35] <ada_ru> (I_vlxy_I) ну вот и всё. привет-апгрейд.
[21:04:24] <ada_ru> (I_vlxy_I) но с xcode бывает еще жосче. там частенько требуется самая-самая новая версия оси, иначе новый xcode не поставится, а под новую iOS можно отлаживаться только на новом xcode. И привет. нужно обновлять всё синхронно.
[21:04:40] <ada_ru> (I_vlxy_I) Обновил оську на телефоне - обнови и на десктопе оську и xcode тоже.
[21:06:37] <ada_ru> (drblez) <прислал фото>
[21:07:19] <ada_ru> (I_vlxy_I) 😊