[00:30:43] <ada_ru> (I_vlxy_I) "While Ada is and can be used as a general-purpose language, it will really shine in low-level applications"
[00:31:01] <ada_ru> (I_vlxy_I) ну собственно вот, ниша Ады четко очерчена.
[02:12:40] <OCTAGRAM> really shine /= ниша
[12:31:18] <ada_ru> (I_vlxy_I) в данном случае, кажется, это эквивалентные понятия.

впрочем, это можно проверить. там ведь упомянуты и другие области: Ada can also be used to create applications in a variety of other areas, such as Video game programming, Real-time audio, Kernel modules.

Итого, проверяем: есть какая-нибудь AAA игра которая вышла на движке писанном на Аде? А какое-нибудь топовое решение для Аудио на Аде? Быть может есть какой-то модуль ядра писанный на Аде который уже входит в состав почти каждого дистрибутива?

А вот "AAA" low-level applications на Аде есть. И их назовет каждый.

Это и есть ниша. Ниша которая Аду кормит. Это не значит что для других областей она не годится, но именно в своей нише она успешно конкурирует с другими языками.
[12:33:35] <ada_ru> (no111u3) думаю аду кормит милитари
[12:33:52] <ada_ru> (I_vlxy_I) гражданка тоже кормит
[12:33:55] <ada_ru> (no111u3) так как ещё до кучи систем которые никто не будет переписывать
[12:34:20] <ada_ru> (no111u3) если конечно не появтся инициативные личности по типу тех кто в церне переписали с фортрана на С++
[12:34:32] <ada_ru> (I_vlxy_I) но с точки зрения обывателя эта гражданка, размерами своими, мало отличается от милитари и от государств 🙂
[12:34:41] <ada_ru> (no111u3) ну да
[12:35:22] <ada_ru> (no111u3) ада она как фортран - будет медленно умирать, но на наш век хватит
[12:35:44] <ada_ru> (I_vlxy_I) ну и то, что у Ады ниша определена, не означает, что не могут появиться новые ниши. Просто сейчас их нет. Как факт.
[12:36:01] <ada_ru> (I_vlxy_I) Ой, ну про C++ также говорят 🙂
[12:36:22] <ada_ru> (no111u3) С++ это такой монстр который можно запихнуть куда угодно
[12:36:35] <ada_ru> (no111u3) он как жаба
[12:37:14] <ada_ru> (no111u3) и его смерть будет только в тот момент когда современный софт умрёт
[12:37:29] <ada_ru> (I_vlxy_I) ну эмм.. технически он же от Ады мало отличается всё же.
[12:37:35] <ada_ru> (no111u3) отличается
[12:37:47] <ada_ru> (no111u3) он сложней
[12:38:15] <ada_ru> (no111u3) гибче, но такой ценой что это можно засчитать ему за минус
[12:39:07] <ada_ru> (no111u3) скажем так - я могу написать программу целиком на С++ ни разу не воспользовавшись макросами, ассемблером и прочим для любой архитектуры
[12:39:29] <ada_ru> (no111u3) но будет ли это удобочитаемо для обычного пользователя языка - не факт
[12:39:58] <ada_ru> (I_vlxy_I) нууу.. не каждую задачу можно без асма решить. так то.
[12:40:14] <ada_ru> (no111u3) в современном (modern C++) почти любую
[12:40:17] <ada_ru> (I_vlxy_I) и не каждую можно решить без расширизмов языка
[12:40:36] <ada_ru> (I_vlxy_I) ну, то есть вот как в С++ повесить функцию на вектор прерывания в каком-нибудь msp430?
[12:40:40] <ada_ru> (no111u3) да
[12:40:50] <ada_ru> (no111u3) тебе код для стм32 показать
[12:40:55] <ada_ru> (no111u3) собственно ручный?
[12:41:03] <ada_ru> (I_vlxy_I) давай
[12:41:33] <ada_ru> (no111u3) https://github.com/no111u3/stm32cclib - это на одиннадцатом
[12:41:36] <ada_ru> (I_vlxy_I) а, ну и, до кучи, в мелкоконтроллерах бывает например несколько адресных пространств. как без расширизмов языка с этим работать?
[12:41:37] <ada_ru> (I_vlxy_I) и без асма
[12:41:50] <ada_ru> (no111u3) https://github.com/no111u3/stm32l476_examples
[12:41:57] <ada_ru> (no111u3) это на четырнадцатом
[12:42:10] <ada_ru> (no111u3) к сентябру постараюсь выкатить подобное на семнадцатом
[12:42:30] <ada_ru> (no111u3) тоже можно и в несколько адресных пространств
[12:42:51] <ada_ru> (no111u3) не факт что тебе понравиться этот код, но он будет рабочим
[12:43:16] <ada_ru> (I_vlxy_I) функция обрабатывающая прерывание например должна содержать специальную инструкцию процессора в конце. компилятор таковую не генерирует для обычных функций.
[12:43:18] <ada_ru> (I_vlxy_I) что делать?
[12:43:38] <ada_ru> (I_vlxy_I) также код не может исполняться из ОЗУ.
[12:43:58] <ada_ru> (no111u3) я же говорил что почти всё но не все
[12:44:15] <ada_ru> (no111u3) но кланг могёт
[12:44:20] <ada_ru> (no111u3) точнее ллвм
[12:44:33] <ada_ru> (I_vlxy_I) это просто то, с чем я сталкивался лично 🙂 без расширизмов в embedded тяжко
[12:44:57] <ada_ru> (no111u3) в кортексах там они почти не нужны
[12:45:10] <ada_ru> (I_vlxy_I) ну, может быть. с кортексами не воевал пока
[12:45:12] <ada_ru> (no111u3) даже для переключения тасков можно их не юзать в основном
[12:46:07] <ada_ru> (no111u3) а так недавно видел прикол про С++14 на z80 или что-то из этой эпохи
[12:46:15] <ada_ru> (no111u3) сильно шокирует
[12:46:37] <ada_ru> (I_vlxy_I) 🙂
[12:46:48] <ada_ru> (I_vlxy_I) ну, msp430 более слабенькая железяка нежели z80
[12:47:05] <ada_ru> (I_vlxy_I) у z80 же памяти тонна!
[12:47:08] <ada_ru> (no111u3) под msp тоже нормально можно писать на С++
[12:47:30] <ada_ru> (I_vlxy_I) можно. только нужно несклько расширизмов для всякого вот специфического (см выше)
[12:47:31] <ada_ru> (no111u3) у меня на работе сидит чувак который мейнтейнит 430 в ллвм
[12:47:33] <ada_ru> (I_vlxy_I) я писал
[12:47:37] <ada_ru> (I_vlxy_I) на с++11 с лямбдами 🙂
[12:47:48] <ada_ru> (no111u3) и они там на расте пишут без расширизмов
[12:48:12] <ada_ru> (no111u3) лямбды в 11ом это ещё цветочки
[12:48:22] <ada_ru> (no111u3) в 17ом там уже ягодки
[12:48:55] <ada_ru> (I_vlxy_I) эмм.. а как без расширизмов делать то, что я там выше про прерывания писал?
[12:49:23] <ada_ru> (no111u3) там заводишь отдельный тип функций и на уровне компилятора объясняешь ему приквел и сиквел
[12:49:24] <ada_ru> (I_vlxy_I) пусть даже и на расте
[12:49:47] <ada_ru> (I_vlxy_I) а, не, ну если ты сам расширизм в компайлер вкорячиваешь...
[12:49:54] <ada_ru> (I_vlxy_I) но это получается асм по сути
[12:50:03] <ada_ru> (no111u3) это получается управляемый асм
[12:50:26] <ada_ru> (no111u3) так как компилятор может упразднить приквел для функции
[12:50:28] <ada_ru> (I_vlxy_I) ибо нужно объяснить компайлеру что для вот этой платформы для такого типа функции нужно вот такой приквел и сиквел
[12:50:38] <ada_ru> (no111u3) и это првавильней
[12:50:49] <ada_ru> (no111u3) ибо человек может забыть
[12:51:02] <ada_ru> (no111u3) а с точкни зрения машины это ещё и оптимизируемо
[12:52:23] <ada_ru> (no111u3) поэтому у меня и возникала мысль для ады сделать фронт  к ллвм
[12:52:42] <ada_ru> (no111u3) дабы дать больше свободы и архитектур
[12:52:43] <ada_ru> (I_vlxy_I) а это именно фишка llvm, или особенность раста?
[12:52:53] <ada_ru> (no111u3) скорее ллвм
[12:53:31] <ada_ru> (I_vlxy_I) вообще, я не удивлюсь если в Аде что-то такое на увровне стандарта может быть. Может кто-то знает из знатоков языка о таком?
[12:54:02] <ada_ru> (no111u3) в С++17 просто появились спецификаторы - то есть сказал [[noreturn]] и компилятор знает что из этой функции нет возврата и следовательно не нужно делать сиквел функции
[12:54:20] <ada_ru> (no111u3) точнее они были уже в 11 но в 17 они стали ещё шире
[12:54:45] <ada_ru> (no111u3)  отвечает (I_vlxy_I) на <вообще, я не удивлюс…>
я просто аду не знаю от слова совсем, поэтому я думаю что должно быть
[13:00:27] <ada_ru> (no111u3)  отвечает (I_vlxy_I) на <ну и то, что у Ады н…>
запилить аду нормально на мсп430 и запустить кубсатом (это не дорого, точнее не слишком дорого)
[13:00:43] <ada_ru> (no111u3) будет гражданский спутник на аде
[13:01:21] <ada_ru> (I_vlxy_I) дык запустили же уже, не?
[13:01:30] <ada_ru> (no111u3) не знаю
[13:01:35] <ada_ru> (no111u3) я не слежу
[13:01:53] <ada_ru> (I_vlxy_I) но это все та же ниша 🙂
[13:06:48] <ada_ru> (no111u3) мб
[13:19:44] <ada_ru> (I_vlxy_I) вот если бы на Аде была бы какая-нибудь например СУБД написана и оно хоть как-то виднелось на рынке - это была бы другая ниша.

Или движок браузерный, или какая-нибудь либа для ML. Это все примеры других ниш.
[13:20:20] <ada_ru> (no111u3) а что есть у ады для этого?
[13:21:23] <ada_ru> (I_vlxy_I) а что тут для этого от языка нужно? вроде бы ничего не нужно 🙂 тут и Си хватит. и паскаля хватит
[13:21:46] <ada_ru> (no111u3) язык ничто
[13:21:52] <ada_ru> (no111u3) нужна инфраструктура
[13:21:55] <ada_ru> (no111u3) библиотеки
[13:22:06] <ada_ru> (no111u3) фреймворки, паттерны использования
[13:22:20] <ada_ru> (I_vlxy_I) для СУБД ничего не нужно. то есть суровый СУБД обычно напрямую с осью общается и сам реализует структуры данных необходимые
[13:22:56] <ada_ru> (no111u3) суровый СУБД использует наработанные паттерны и использует не менее суровые библиотеки
[13:23:16] <ada_ru> (no111u3) само ядро СУБД это буквально десятки тысяч строк кода
[13:23:44] <ada_ru> (no111u3) а вот всякие расширения, драйвера баз и прочая гадость вот это дофига весит
[13:24:01] <ada_ru> (I_vlxy_I) да ладно, вон например в кликхаусе даже парсинг запросов руками писан, даже без якков/бизонов всяких. без либ 🙂
[13:25:12] <ada_ru> (no111u3) кликхаус это что?
[13:25:26] <ada_ru> (no111u3) я говорю про нормальные движки субд
[13:25:31] <ada_ru> (no111u3) тот же постгри
[13:26:40] <ada_ru> (no111u3) посмотрел на это чудо - ещё один олап куб
[13:26:42] <ada_ru> (no111u3) скучно
[13:27:09] <ada_ru> (I_vlxy_I) кликхаус - штука весьма крутая и узкоспециализированная
[13:27:34] <ada_ru> (I_vlxy_I) а обычные движки субд мне скучны и вообще не применимы в моей области, увы
[13:28:34] <ada_ru> (no111u3) вот тебе пример монстроватости С++ - ему ничего не нужно из внешней обвязки для любой задачи
[13:28:56] <ada_ru> (no111u3)  отвечает (I_vlxy_I) на <а обычные движки суб…>
а что у тебя за область?
[13:33:01] <ada_ru> (I_vlxy_I) self driving car сейчас.
[13:33:12] <ada_ru> (no111u3) прикольно
[13:33:35] <ada_ru> (no111u3) а это чей проект?
[13:35:30] <ada_ru> (I_vlxy_I) вообще, специфика такова, что валится тонна данных с датчиков. сотни и тысячи измерений в секунду. если это пушить в обычную субд, оно кончится
[13:36:01] <ada_ru> (no111u3) а зачем это пушить сразу в субд
[13:36:03] <ada_ru> (no111u3) ??
[13:36:20] <ada_ru> (I_vlxy_I) а куда это пушить собственно?
[13:36:29] <ada_ru> (no111u3) а зачем это кудато пушить
[13:36:42] <ada_ru> (I_vlxy_I) дык эти данные же должны обрабатываться
[13:36:53] <ada_ru> (I_vlxy_I) проект наш. где работаю, там и проект 🙂
[13:37:02] <ada_ru> (I_vlxy_I) http://cognitivepilot.com/en
[13:37:07] <ada_ru> (no111u3)  отвечает (I_vlxy_I) на <проект наш. где рабо…>
я просто не знаю где ты работаешь
[13:38:04] <ada_ru> (no111u3) из тех систем что я видел сначала делают предвыборку, часть разбирается оперативной моделью, позднее это уходит в бд
[13:38:18] <ada_ru> (I_vlxy_I) а до того был проект с медицинскими датчиками. там тоже валилось по 400 измерений в секунду с каждого пациента а доктор должен иметь возможность просмотреть как текущее (реалтайм) состояние пациента, так и за любой интервал времени в прошлом.
[13:38:30] <ada_ru> (I_vlxy_I) постгресс от такого тоже может немного помрэ
[13:38:41] <ada_ru> (no111u3) ну специфичненько да
[13:39:24] <ada_ru> (no111u3) использовать реляционку там где нужно туда сюда гонять гигагбайты глупо
[13:39:27] <ada_ru> (I_vlxy_I) ну вот кликхаус похоже на то, что может использоваться для такой задачи, но немного все же другое. кликхаус он для аналитиков, которые анализируют выборки по метрикам с сайтов
[13:39:41] <ada_ru> (no111u3) кликхаус пилился для танка
[13:39:53] <ada_ru> (no111u3) и у него решается задача для разрозненных данных
[13:39:59] <ada_ru> (no111u3) но для сцепленных он не очень
[13:40:08] <ada_ru> (I_vlxy_I) для яндекс.метрики пилился в первую очередь
[13:40:18] <ada_ru> (I_vlxy_I) логи анализировать тоже ничего
[13:40:28] <ada_ru> (I_vlxy_I) там по пятисоткам пробежаться еще чего
[13:40:39] <ada_ru> (no111u3) логи да, но если нужно хранить модель то уже не очень
[13:47:57] <ada_ru> (no111u3)  отвечает (I_vlxy_I) на <для яндекс.метрики п…>
там была очень грустная история про то что это очень узкоспецилизированное решение можно использовать только в Я (это мне поведал один из причастных)
[13:48:42] <ada_ru> (no111u3) ладно я афк, потом ещё поболтаем
[13:50:58] <ada_ru> (I_vlxy_I) да не, не только в Я юзают. анализирование логов идет на ура во многих конторах. ну и для метрик с сайтов тоже используется. знаком с людьми которые кликхаус у себя юзали.
[13:51:03] <ada_ru> (I_vlxy_I) (и юзают)
[13:55:45] <ada_ru> (I_vlxy_I) да, и в случае sdc также данные довольно разреженные
[14:45:50] <ada_ru> (no111u3) Мб, я больше ближе к классической ТАУ
[14:47:18] <ada_ru> (no111u3) Там обычно разбивают на мелкие юниты и они как агенты работают в рамках своего круга задач
[18:27:39] <ada_ru> (a) nis q
[18:29:46] <ada_ru> (no111u3) ку
[18:31:53] <ada_ru> (a) таки решил заглянуть?
[18:32:35] <ada_ru> (no111u3) таки я уже недели две тут
[18:32:38] <ada_ru> (no111u3) если не больше
[18:32:43] <ada_ru> (no111u3) чтобы нет
[18:33:08] <ada_ru> (no111u3) надоело в теликах вариться
[18:33:09] <ada_ru> (a) как впечатления?
[18:33:16] <ada_ru> (no111u3) да положительные
[18:33:35] <ada_ru> (a) а я говорил
[18:33:36] <ada_ru> (no111u3) люди тут адекватные
[18:33:46] <ada_ru> (no111u3) в отличие от растовиков
[18:34:21] <ada_ru> (a) ты и там был?
[18:34:29] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <вообще, я не удивлюс…>
На Аде мапятся защищенные процедуры
[18:34:47] <ada_ru> (no111u3) у меня на работе ментейнер языка сидит
[18:34:59] <ada_ru> (no111u3) конечно был
[18:35:45] <ada_ru> (no111u3)  отвечает (Максим) на <На Аде мапятся защищ…>
а вообще есть ли варианты исполнения кода для конкретной специфики?
[18:35:53] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <На Аде мапятся защищ…>
Можно подробней?
[18:37:03] <OCTAGRAM> при помощи Comeau приколов с C++1x может быть много, на каком железе
[18:37:14] <ada_ru> (Максим) Мапинг зависит от платформы. На обычном линуксе можно привязывать сигналы, а на досках — прерывания
[18:37:43] <ada_ru> (no111u3)  отвечает (a) на <ты и там был?>
был показательный случай где они хейтели модель памяти плюсов, говоря что на си лучше, а на вопрос как в расте отвечают что взяли с плюсов, и я такой: а где логика??
[18:38:21] <OCTAGRAM> там, вообще говоря, регистрируется обработчик в RTL, который вызывает защищённую процедуру
[18:41:21] <OCTAGRAM> в серии статей про демонизацию была проблема, что форкнутый демон замораживался, и приходилось exec делать после fork, чтоб работало, это как раз потому что для обработки сигналов запускается отдельная задача, а fork её останавливает
[18:44:03] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <Можно подробней?>
protected type Controller (IRQ : Interrupt_ID;  Port : access Serial_Port) is
...
private
  procedure IRQ_Handler with Attach_Handler => IRQ;
[18:44:25] <ada_ru> (Максим) https://github.com/AdaCore/Ada_Drivers_Library/blob/master/examples/shared/serial_ports/src/serial_io-nonblocking.ads
[18:45:05] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <protected type Contr…>
А как компилятор поймет что нужно в сиквел функции вместо обычного ret другую инструкцию добавить?
[18:45:54] <ada_ru> (I_vlxy_I) Как минимум компилер должен быть в курсе что такая инструкция вообще существует.
[18:45:56] <ada_ru> (Максим) компилятор видит, что подпрограмма привязана к прерыванию
[18:46:52] <ada_ru> (I_vlxy_I) А. То есть нужно немного пропатчить компайлер, если он не в курсе про прерывания еще на этой архитектуре?
[18:46:53] <OCTAGRAM> сдаётся мне, там аспект специальный есть для реального обработчика, который перешлёт в привязанную защищённую
[18:47:19] <ada_ru> (I_vlxy_I) А дальше уже штатные средства ЯП
[18:47:25] <ada_ru> (Максим) компилятор не нужно патчить
[18:47:35] <ada_ru> (I_vlxy_I) В принципе, звучит неплохо.
[18:47:40] <OCTAGRAM> а реальный обработчик использует какой-нибудь аспект типа Machine_Attribute, который проецируется на GCC спецификатор
[18:48:27] <OCTAGRAM> в GCC это по-любому сделано спецификатором, так что Machine_Attribute подходящий написать, и всё
[18:49:13] <ada_ru> (Максим) Implementation Advice

Whenever possible, the implementation should allow interrupt handlers to be called directly by the hardware.
[18:49:39] <ada_ru> (I_vlxy_I) Ага. Понял. Норм реализация компилятора обязана это обеспечить.
[18:49:55] <ada_ru> (Максим) http://www.ada-auth.org/standards/12rm/html/RM-C-3-1.html
[18:50:07] <ada_ru> (I_vlxy_I) Действительно Ада тут shine
[20:13:17] <ada_ru> (a) 1
[20:20:48] <ada_ru> (Максим) @I_vlxy_I Пробовал -gnatv?
[20:21:15] <ada_ru> (Максим) $ gnatmake -gnatv main.adb
gcc -c -gnatv main.adb

GNAT Pro 19.0w (20180711-73)
Copyright 1992-2018, Free Software Foundation, Inc.

Compiling: main.adb
Source file time stamp: 2018-08-04 17:19:33
Compiled at: 2018-08-04 20:19:40

    9.    end Pring;
              |
       >>> misspelling of "Print"

13 lines: 1 error
gnatmake: "main.adb" compilation error
[21:51:30] <ada_ru> (Максим) кто помнит как разрешить исполение команд в стеке? У меня gnat 6.3 делает трамплин в стеке, а ось срубает программу при попытке выполнить его
[21:54:10] <ada_ru> (no111u3) в современных ос это надо ядро перебирать
[21:56:11] <ada_ru> (Максим) о, нашел execstack, вроде помогает
[21:56:41] <ada_ru> (no111u3) ну или да
[21:57:29] <ada_ru> (no111u3)  отвечает (Максим) на <кто помнит как разре…>
а как так получилось и главное зачем оно так?
[21:58:23] <ada_ru> (Максим) старый(?) gnat трамплин делает когда указатель на вложенную функцию
[21:58:47] <OCTAGRAM> новые — тоже
[21:59:01] <OCTAGRAM> это фишка GCC, а GNAT просто пробрасывает её
[21:59:13] <ada_ru> (Максим) трамплин восстанавливает указатель на лексический контекст перед переходом на адрес подпрограммы
[21:59:37] <OCTAGRAM> на Windows для DEP какая-то модификация была, а под Linux — видимо, нет
[21:59:50] <ada_ru> (Максим) OCTAGRAM, помойму новый гнат так не делает уже
[22:00:47] <OCTAGRAM> да вроде бы там просто починили трамплины, и всё
[22:00:52] <ada_ru> (Максим) новый делает младший бит 1 у такого указателя, и при каждом вызове его проверяет. если там 1, то подпрограмма вызывается по другому
[22:37:00] <ada_ru> (t91x0)  отвечает (I_vlxy_I) на <А. То есть нужно нем…>
А сколько всего архитектур (реально используемых) существует на планете?
[22:49:01] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <$ gnatmake -gnatv ma…>
Вот сейчас попробовал. Так реально лучше:
Compiling: main.adb
Source file time stamp: 2018-08-04 19:46:10
Compiled at: 2018-08-04 12:46:12

    8.  a := b;
             |
       >>> expected type "Standard.Integer"
       >>> found type "Standard.Float"

    9.  b := a;
             |
       >>> expected type "Standard.Float"
       >>> found type "Standard.Integer"
[22:49:07] <ada_ru> (I_vlxy_I) спасибо
[22:49:13] <ada_ru> (I_vlxy_I) пойду, issue заведу 🙂
[22:56:50] <OCTAGRAM> сколько пишу на Аде, вроде без -gnatv доходчиво всё было
[23:04:59] <ada_ru> (I_vlxy_I)  отвечает на <(OCTAGRAM) сколько п…>
то же самое могу сказать про С++. Однако опытный программист на этом языке - вообще не показатель и права голоса тут не имеет.