[00:00:21] <ada_ru> (I_vlxy_I) нравится, наверное даже больше, чем эти новоявленные мув-конструкторы в плюсцах
[00:00:39] <ada_ru> (nitrocerber) Мув-конструкторы? Это как?
[00:00:41] <ada_ru> (I_vlxy_I) йеее! досортировало!
[00:00:47] <ada_ru> (I_vlxy_I) real  7m16.779s
user  7m4.221s
sys  0m10.204s
[00:01:00] <ada_ru> (nitrocerber) Это против 50 секунд?
[00:01:17] <ada_ru> (nitrocerber) Ада - язык галапагосских черепах!
[00:03:37] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <Это против 50 секунд…>
Ага. Но это на расте 50. На плюсах чото около 30 😊
[00:03:49] <ada_ru> (I_vlxy_I) да, у Ады выключены при этом все проверки.
[00:04:43] <ada_ru> (I_vlxy_I) gcc -c -gnat12 -O3 -gnatn -gnatp main.adb
[00:06:31] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <но, конечно, один фи…>
Вангую, что для сортировки строк в плюсах есть специализация
[00:07:06] <ada_ru> (I_vlxy_I) такое ощущение, что тут Swap тупо свапит их по значению. то есть прям сурово копирует всю строку со всеми символами туда-сюда
[00:07:26] <ada_ru> (insert_reference_here) Ужас какой
[00:07:35] <ada_ru> (insert_reference_here) Кстати, строки в Аде владеющие?
[00:07:58] <ada_ru> (I_vlxy_I) но это пока ощущения чисто. у меня пока нет доказательств, кроме того, что я не понимаю откуда такие тормоза тут могут быть.
[00:09:10] <ada_ru> (I_vlxy_I) @insert_reference_here https://t.me/adalang/38444
[00:09:50] <ada_ru> (I_vlxy_I) а теперь за 5 минут... чот разброс сильно суровый
[00:09:52] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <такое ощущение, что …>
да так и есть! А т.к. строки разной длинны, то оно их каждый раз в куче создаёт, я подозреваю
[00:10:17] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <да так и есть! А т.к…>
А можно как-то, ну, через Unbounded_String? или это не поможет?
[00:12:16] <ada_ru> (Максим) Хотя вру! https://github.com/gcc-mirror/gcc/blob/08d3ce5bd945fd631c74d0e3a9dbef49b0f1e364/gcc/ada/libgnat/a-coinve.adb#L3277
[00:13:31] <ada_ru> (I_vlxy_I) а что ж тормоза то такие? есть там профилировщик? 😊
[00:14:27] <ada_ru> (I_vlxy_I) real  4m45.938s
user  4m33.648s
sys  0m10.376s
[00:14:28] <ada_ru> (I_vlxy_I) вот
[00:18:58] <ada_ru> (Максим) Там ещё проверка на "tamper with cursors" а она на atomic-ах
[00:20:12] <ada_ru> (Максим) type Tamper_Counts is record
     Busy : aliased SAC.Atomic_Unsigned := 0;
     Lock : aliased SAC.Atomic_Unsigned := 0;
  end record;
[00:23:42] <ada_ru> (Максим) Eё можно отключить: https://github.com/gcc-mirror/gcc/blob/08d3ce5bd945fd631c74d0e3a9dbef49b0f1e364/gcc/ada/libgnat/a-conhel.ads#L63
[00:24:11] <ada_ru> (I_vlxy_I) А вот это, не создаст копию?       L : constant String := Vector (Left);
[00:24:49] <ada_ru> (Максим) Создаст!
[00:25:20] <ada_ru> (I_vlxy_I) o_O
[00:25:50] <ada_ru> (I_vlxy_I) может тогда как-нибудь пофиксить вот это:
  function Less (Left, Right : Positive) return Boolean is
     L : constant String := Vector (Left);
     R : constant String := Vector (Right);
  begin
     return L < R;
  end Less;
[00:26:29] <ada_ru> (insert_reference_here)  отвечает на <(OCTAGRAM) Unbounded…>
То есть без счётчика ссылок вообще никак? 😕
[00:26:55] <ada_ru> (Максим) я хз как компилятор там оптимизирует, можно сразу написать return Vector (Left) < Vector (Right);
[00:33:42] <ada_ru> (Максим) так, по идее не должно быть копирования
[00:35:25] <ada_ru> (I_vlxy_I) кажись было копирование. стало на минуту быстрее 😊
[00:36:43] <ada_ru> (Максим) А если воткнуть pragma Suppress (Container_Checks); перед package String_Vectors is new
[00:37:14] <ada_ru> (I_vlxy_I) вот тут видно это: https://godbolt.org/z/NfSm_3
[00:37:36] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <А если воткнуть prag…>
а я уже воткнул. это не повлияло никак, кажется.
[00:46:00] <ada_ru> (I_vlxy_I) real  2m20.540s
user  2m9.607s
sys  0m10.146s
[00:56:27] <ada_ru> (I_vlxy_I) не, таки погодите ка:
     declare
        EI : Element_Access renames Container.Elements.EA (I);
        EJ : Element_Access renames Container.Elements.EA (J);

        EI_Copy : constant Element_Access := EI;

     begin
        EI := EJ;
        EJ := EI_Copy;
     end;
[00:56:41] <ada_ru> (I_vlxy_I) каким образом тут свапаются два элемента вектора?
[00:57:00] <ada_ru> (I_vlxy_I) EI и EJ это ведь, по сути, указатели на эти элементы ведь?
[00:57:30] <ada_ru> (I_vlxy_I) Соответственно, логично предположить, что Ei := EJ не копирует указатель, а копирует элемент на который оно указывает?
[01:18:18] <ada_ru> (I_vlxy_I) c Unbounded_String'ами оказалось медленней.
[01:19:53] <ada_ru> (I_vlxy_I) ну и памяти жрет сильно больше
[01:30:19] <ada_ru> (I_vlxy_I) ой. во как можно, оказывается!
  Vector : String_Vectors.Vector;
  procedure Swap(Left, Right : Positive) renames Vector.Swap;
[01:30:51] <ada_ru> (Максим) Ei := EJ копирует указатель, а Ei.all := EJ.all копирует содержимое
[01:31:13] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <ой. во как можно, ок…>
👍
[01:31:15] <ada_ru> (I_vlxy_I) тогда я не понимаю, что этот блок кода вообще делает
[01:31:33] <ada_ru> (I_vlxy_I) покопировали указатели, да и забыли про них
[01:31:42] <ada_ru> (I_vlxy_I) (они же локально в этом блоке объявлены только)
[01:32:02] <ada_ru> (Максим) не, там же renames
[01:32:26] <ada_ru> (I_vlxy_I) Ааааа
[01:32:27] <ada_ru> (Максим) renames вводит имя для выражения
[01:32:29] <ada_ru> (I_vlxy_I) блин
[01:32:33] <ada_ru> (I_vlxy_I) да, я понял.
[01:33:07] <ada_ru> (I_vlxy_I) нечто сродни ссылкам в плюсах и constexpr 😊
[01:56:33] <ada_ru> (I_vlxy_I) такое ощущение складывается, что Put_Line — это не буфферизованный вывод
[01:56:40] <ada_ru> (I_vlxy_I) как и Get_Line
[02:14:08] <ada_ru> (I_vlxy_I) еще у Ады (точнее у GNAT'a) сортировка - барахло. В смысле, не самая лучшая, мягко говоря.
[02:14:10] <ada_ru> (nitrocerber) почаровый пут, да с check_write_stutsом
[02:14:14] <ada_ru> (nitrocerber) ух
[02:15:17] <ada_ru> (nitrocerber) и всё это зовёт fputc сильно потом
[02:16:33] <ada_ru> (I_vlxy_I) брр.
[02:16:41] <ada_ru> (I_vlxy_I) а можно это всё как-то быстрее, а?
[02:24:39] <ada_ru> (I_vlxy_I) судя по реализации стандардной либы — адакоре не хватает олимпиадников в тиме 😊
[02:31:47] <ada_ru> (nitrocerber) а зачем? на досках путлайна нет
[02:32:46] <ada_ru> (nitrocerber) путлайн нинужин!
[02:33:03] <ada_ru> (nitrocerber) надо проиндексировать архивы чата и собрать список всего, что нинужно)
[02:33:45] <ada_ru> (nitrocerber) а олимпиадники - это такие страшные люди, которые пишут тест-дривен одноразовый код?
[02:33:53] <ada_ru> (I_vlxy_I) ну, я про сортировки сейчас говорил, в коньтесте стандартной либы...

а так — ну должен же быть эффективный IO в стандартной либе!
[02:33:54] <ada_ru> (nitrocerber) я на ВМК ток таких видел
[02:34:33] <ada_ru> (nitrocerber) стандартная либа для zfp рантайма выглядит оч своеобразно)
[02:35:15] <ada_ru> (nitrocerber) там надо свой собственный ласт_ченс_хендлер для исключений писать, если оно тебе надоююю а ты про IO)
[02:36:25] <ada_ru> (I_vlxy_I) ну, должны же быть генераль пурпосе штуки. для не досок!
[02:38:20] <ada_ru> (I_vlxy_I) там в реализации сортировки, судя по всему, вообще жесть и содомия - там ПИРАМИДАЛЬНАЯ сортировка!
[02:38:28] <ada_ru> (I_vlxy_I) чо уж сразу не пузырёк...
[02:43:15] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <ну, должны же быть г…>
За що платят, то и есть. А остальное... Ну ты понел. Нинужно.
[02:45:12] <ada_ru> (I_vlxy_I)  отвечает (I_vlxy_I) на <чо уж сразу не пузыр…>
блин. я зря с сарказмом говорил про пузырёк...
package GNAT.Bubble_Sort is
[02:45:21] <ada_ru> (I_vlxy_I) вот КТО за это заплатил? зачем оно тут?
[02:45:41] <ada_ru> (I_vlxy_I) почему, йо-майо, нету банального merge sort'a? зато есть всякий трешак
[02:45:53] <ada_ru> (I_vlxy_I) все виды пузырьков
[03:00:35] <ada_ru> (I_vlxy_I) а вот, кстати, справка у Ады (точнее у GPS) по стандартной либе организована сильно удобней растовой да и много какой ещё.
[03:00:48] <ada_ru> (I_vlxy_I) компактно, удобно, под рукой. в человекочитаемом виде.
[07:34:47] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <компактно, удобно, п…>
Зря, что ли, её целый комитет стандартизировал?
[08:50:12] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <йеее! досортировало!>
Кстати, а насколько полно ты реализовал эту утилиту? Ну там, сортировка по колонке, с удалением дубликатов, в обратном порядке?..
[10:13:25] <ada_ru> (I_vlxy_I) Ни насколько. Просто строк сортировка.
[11:02:10] <ada_ru> (nitrocerber) Сколько ты ни сортируй...
[11:14:58] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <Ни насколько. Просто…>
То есть у тебя прога делает лишь десятую долю гнутой сортировки, и ты радуешься, что побил её по скорости? О_о
[11:24:48] <ada_ru> (I_vlxy_I)  отвечает (Eugene) на <То есть у тебя прога…>
Ещё не радуюсь. На некоторых машинах у меня медленнее.
[11:25:22] <ada_ru> (I_vlxy_I) Но скорость я сравниваю при идентичной работе программ естественно.
[11:27:58] <ada_ru> (I_vlxy_I) Если я правильно понимаю, пирамидальная сортировка может быть хороша только для каких-нибудь реалиайм систем с плоской памятью (то есть без кешей). Для мелкоконтроллеров.
[11:29:49] <ada_ru> (Eugene) В исходниках опенбсд в этой утилите упомянута radix sort
[11:31:24] <ada_ru> (I_vlxy_I)  отвечает (Eugene) на <В исходниках опенбсд…>
Дык, американский флаг
[11:32:45] <ada_ru> (I_vlxy_I) Но bsd реализация довольно тормозная. Так то.
[14:23:17] <OCTAGRAM> I_vlxy_I) может тогда как-нибудь пофиксить вот это … «L : constant String := Vector (Left);» =>«L : String renames Vector (Left);» — тут Ada 2012 references
[14:24:08] <OCTAGRAM> «А если воткнуть pragma Suppress (Container_Checks); перед package String_Vectors is new» — этих проверок не одна, а две, ещё Tampering_Checks
[14:25:54] <ada_ru> (I_vlxy_I)  отвечает на <(OCTAGRAM) I_vlxy_I)…>
а можно подробней?
[14:26:54] <OCTAGRAM> «<I_vlxy_I> а можно это всё как-то быстрее, а?» — Ada.Text_IO.Stream_IO & String'Write
[14:27:22] <ada_ru> (I_vlxy_I) это с буферизацией?
[14:28:01] <ada_ru> (I_vlxy_I) ну, кажется если переписать сортировку с сортировки продвинутым пузырьком на нормальную, и пофиксить вот эту буферизацию, должно стать быстро.
[14:28:23] <OCTAGRAM> libc разве не отвечает за буферизацию?
[14:29:11] <OCTAGRAM> Ada 2012 reference содержит в себе дискриминант доступа на элемент, который автоматически разыменовывается
[14:29:37] <OCTAGRAM> когда так renames делается, Ada 2012 reference остаётся висеть
[14:30:03] <OCTAGRAM> это функции Reference и Constant_Reference возращают такие штуки
[14:30:04] <ada_ru> (I_vlxy_I)  отвечает на <(OCTAGRAM) libc разв…>
я ж не знаю через какое место реализован IO в Аде. вдруг оно дергает write/read а не fwrite
[14:30:55] <OCTAGRAM> мне казалось, в libc уже есть, значит, в Аде повторять незачем
[14:32:01] <ada_ru> (I_vlxy_I) поскольку libc есть не везде, то в стандарде ады что-то должно быть про буферизацию и не буферизацию IO
[14:32:16] <ada_ru> (I_vlxy_I) ну, иначе стандарт Ады должен быть завязан на стандарт Си.
[14:32:19] <OCTAGRAM> кроме Ada 2012 reference, в Ada 2005 был чуть менее удобный способ запросить значение на месте, Query_Element и Update_Element
[14:32:23] <ada_ru> (I_vlxy_I) явным образом.
[14:32:38] <OCTAGRAM> libc он же как kernel32 в Linux
[14:33:03] <OCTAGRAM> дело не в Си, а в Линуксе
[14:33:35] <ada_ru> (I_vlxy_I) стандарт Ады завязан на линукс? o_O
[14:37:29] <ada_ru> (I_vlxy_I) просто например в Си я, в соответствии со стандартом, а не с libc и линуксом, точно знаю какие функции IO буферизируют а какие нет. И исходя из этого, могу писать программу, используя то, что мне нужно.
[14:37:39] <ada_ru> (I_vlxy_I) В расте - вот, как оказалось, тоже.
[14:37:46] <ada_ru> (I_vlxy_I) В Го — тоже.
[14:37:52] <ada_ru> (I_vlxy_I) Хочется и в Аде тоже так.
[14:44:04] <OCTAGRAM> я с сайта pascal.net.ru лет восемь пытаюсь перетаскивать паскалистов, в том числе олимпиадников, на Аду
[14:45:32] <OCTAGRAM> учитывая, что адаистом там я один и был, это было как-то не очень сподручно, а сейчас уже и поток паскалистов иссякает
[14:47:32] <ada_ru> (Максим) Ada.Text_IO в любой момент может сказать текущий номер строки, номер столбца, настал ли  конец страницы(!) и прочую ересь, поэтому он быстрым быть не может 😕
[14:50:30] <OCTAGRAM> даже как адский форум не состоялся
[14:50:52] <OCTAGRAM> не всегда же удобно, что всем прилетает каждый ответ на каждую тему
[14:52:51] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <Ada.Text_IO в любой …>
да я вот посмотрел на спеку Ada.Text_IO и мне таки показалось, что оно слишком умное, да.
[14:53:11] <ada_ru> (I_vlxy_I) почти что ncurses 😊
[14:54:16] <ada_ru> (Максим) Я, когда нужно быстрое чтение из файла, пользуюсь Ada.Streams.Stream_IO
[14:54:22] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <да я вот посмотрел н…>
А попробуй пакет ada.text_io.text_streams
[14:54:46] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <Я, когда нужно быстр…>
А какие у него свойства? В смысле он буферизирует?
[14:55:04] <ada_ru> (I_vlxy_I) Ну и как ему подсунуть stdout / stdin?
[14:55:14] <ada_ru> (I_vlxy_I) я вчера в эту сторону смотрел, но ниасилил.
[14:56:53] <OCTAGRAM> Standard_Input
[14:56:58] <ada_ru> (Максим) о, Ada.Text_IO.Text_Streams хороший вариант, ему можно подсунуть Ada.Text_IO.Standard_Input
[14:57:04] <ada_ru> (I_vlxy_I)  отвечает на <(OCTAGRAM) Standard_…>
оно не совместимо по типам было.
[14:57:23] <ada_ru> (I_vlxy_I)    Stream_IO.Open (Stdout,
     Mode => Stream_IO.Out_File,
     Name => "/dev/stdout");
[14:57:24] <ada_ru> (I_vlxy_I) во
[14:57:40] <ada_ru> (I_vlxy_I) но это как-то не кроссплатформенно :-/
[14:59:46] <ada_ru> (Максим) declare
  Stream : Ada.Text_IO.Text_Streams.Stream_Access :=
    Ada.Text_IO.Text_Streams.Stream (Ada.Text_IO.Standard_Input);
begin
  Stream.Read (Buffer, Last);
[15:02:38] <OCTAGRAM> проще String'Read
[15:03:04] <ada_ru> (I_vlxy_I)  отвечает на <(OCTAGRAM) проще Str…>
а вот этого я вообще чото не понимаю. апострофы какие-то.. да ещё и у строки!
[15:03:05] <OCTAGRAM> хотя для Read, наверное, нет
[15:03:09] <ada_ru> (I_vlxy_I) какое отношение строка к IO?
[15:03:14] <ada_ru> (Максим) я боюсь String'Read будет по байтам читать
[15:03:53] <ada_ru> (I_vlxy_I) а я вообще боюсь такого синтаксиса в принципе!
[15:04:00] <ada_ru> (Максим) T'Read и T'Write это сериализация в Аде
[15:04:41] <ada_ru> (I_vlxy_I) а сериализации вкуда?
[15:05:13] <OCTAGRAM> в потоки
[15:05:24] <ada_ru> (Максим) В поток, который задается аргументом
[15:05:50] <ada_ru> (I_vlxy_I) хыыы
[15:06:04] <ada_ru> (Максим) http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-13-13-2.html
[15:07:17] <ada_ru> (Максим) http://www.ada-ru.org/sssw/chapter_09 см. Потоки ввода-вывода
[15:08:53] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <declare
  Stream : …>
Я правильно понимаю, что Buffer тут — это откуда вывести данные, а Last — это индекс последнего выводимого элемента?
[15:10:23] <ada_ru> (I_vlxy_I) ой. Read это вообще виртуальная функция. стрёмноваато в плане накладных расходов. ну да ладно.
[15:12:27] <OCTAGRAM> только у переменных с формальным типом 'Class
[15:12:34] <ada_ru> (Максим) Buffer - куда читать, а Last какой последний прочитали
[15:13:04] <ada_ru> (I_vlxy_I) а, да. с Write спутал 😊
[15:22:53] <ada_ru> (I_vlxy_I) вот тут есть некая реализация быстрого Line_IO:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/revcomp-gnat-2.html

Со слов package Line_IO is
[15:25:30] <ada_ru> (I_vlxy_I) в общем, чтобы было быстро на Аде в этой задаче, нужно:
1) переделать ввод.
2) переписать сортировку, ибо стандартная реализация сортировки - барахло редкостное
3) переделать вывод

😊 Хотя конечно (1) и (3) это не большие объемы кода, кажется.
[15:26:35] <ada_ru> (I_vlxy_I) А расту сильно повезло, у него дефолтная реализация сортировки это как раз merge sort, что хорошо под эту задачу ложится.
[15:33:14] <ada_ru> (I_vlxy_I) почему народ пробует раст:
Why Rust?

I picked Rust because I've been hearing great things about it and I see it's been getting some traction in the game development space. I have to say at the point which I started this game I had written a few small programs in Rust, just enough to not feel like my hands were tied when I started writing the game.
[15:33:23] <ada_ru> (I_vlxy_I) http://iolivia.me/posts/24-hours-of-rust-game-dev/
[15:34:16] <ada_ru> (Максим) есть альтернативная реализация gnat runtime https://github.com/ytomino/drake/blob/master/source/containers/a-cogeso.adb
[15:34:54] <ada_ru> (I_vlxy_I) Ооо! In_Place_Merge_Sort
[15:40:03] <ada_ru> (I_vlxy_I) на самом деле, была бы в стандардной либе просто вот эта функция, уже было бы сильно легче: https://github.com/ytomino/drake/blob/819aa0966b0291b840b2f9f99804bffc4b5bdb1e/source/containers/a-coarso.adb#L97
[15:41:58] <ada_ru> (I_vlxy_I) Ну и вообще, вот это очень вкусно выглядит: https://github.com/ytomino/drake/blob/master/source/containers/a-coarso.ads
[15:42:52] <ada_ru> (I_vlxy_I) Еще бы сделать их дженериками, чтобы сортировать что угодно...
[17:20:52] <ada_ru> (I_vlxy_I) А в Аде не принято для String'а юзать small string optimization?
[17:21:30] <ada_ru> (I_vlxy_I) Нечто такоэ: https://stackoverflow.com/a/10319672
[17:24:09] <ada_ru> (Максим) В Аде String это массив, а не объект, как С++, он имеет однозначное представление. Там ничего не вымудришь наверное
[17:27:56] <ada_ru> (I_vlxy_I) дык намудришь. там же есть мета, как OCTAGRAM говорил.
[17:31:41] <ada_ru> (I_vlxy_I) https://t.me/adalang/38457
[17:32:34] <ada_ru> (I_vlxy_I) ну и для Unbounded_String то точно можно было оптимизацию сделать.
[19:45:14] <ada_ru> (I_vlxy_I) по реализации стандартной либы Ады прямо ощущается, что либо денег нет либо затачивалось это всё не под сервера/десктопы и вообще не в приоритете была производительность. либо и то и другое одновременно, но в меньшей степени.
[19:59:12] <ada_ru> (Eugene) так фри опен сорс — откуда там деньги-то?
[20:01:27] <ada_ru> (I_vlxy_I) эмм.. дак коммерческая же контора пилит за коммерческие бабосы.
[20:01:48] <ada_ru> (I_vlxy_I) это фри опенсорс коммерческая разработка 😊
[20:13:48] <ada_ru> (coopht)  отвечает (JLB2499) на <>
<прислал наклейку> 😐
[20:14:26] <ada_ru> (JLB2499) Hello. 👋
I'm looking for an Ada group in english or spanish.
[20:15:05] <ada_ru> (JLB2499) By any chance, do you know if there is one?
[20:15:31] <ada_ru> (I_vlxy_I) I know IRC channel only.
[20:15:35] <ada_ru> (FROL256) did you fin Ada group in LinkedIn?
[20:16:14] <ada_ru> (JLB2499)  отвечает (FROL256) на <did you fin Ada grou…>
Nope, searching @adalang through Telegram.
[20:16:33] <ada_ru> (coopht) You are welcome to ask any questions here - we are glad to help.
[20:16:51] <ada_ru> (JLB2499)  отвечает (I_vlxy_I) на <I know IRC channel o…>
👍
[20:17:31] <ada_ru> (coopht) I'm not aware of any Ada groups in english in telegram.
Perhaps we could create one.
[20:18:21] <ada_ru> (I_vlxy_I)  отвечает (coopht) на <I'm not aware of any…>
A good idea!
[20:19:04] <ada_ru> (JLB2499)  отвечает (coopht) на <You are welcome to a…>
Thanks. I am 'playing' with Ada language a little, looking for the  useful projects: Matreshka, gnatcoll, etc. All interesting.
[20:19:37] <ada_ru> (I_vlxy_I) Also there is some activity on the reddit: https://www.reddit.com/r/ada/
[20:19:48] <ada_ru> (Максим) Matreshka is the best! 😊
[20:20:49] <ada_ru> (coopht) Надо Вадима в телеграм затащить
[20:21:24] <ada_ru> (coopht) А есть какой-ниубдь translate bot, который бы сообщения переводил гугл транслейтом?
[20:23:10] <ada_ru> (Максим) вадим не хочет. я ему даже предлагал в slack сделать гейт, он кривиться
[20:23:33] <ada_ru> (JLB2499)  отвечает (Максим) на <Matreshka is the bes…>
It has SQLite and XML. I want to try the AXMPP library for creating a simple XMPP client.
[20:23:58] <ada_ru> (JLB2499) It has a lot of things.
[20:24:17] <ada_ru> (Максим) yeah. I use AXMPP here to gate this channel into Jabber conference
[20:25:32] <ada_ru> (JLB2499)  отвечает (Максим) на <yeah. I use AXMPP he…>
😮 really! There's a bot implemented with AXMPP? Then, there is a library for connecting to Telegram too... I have to find that.
[20:25:42] <ada_ru> (Максим) ada-ru@conference.jabber.ru
[20:26:24] <ada_ru> (Максим) well, not a library actually, it's rather simple peace of code over Matreshka Servlet API
[20:26:44] <ada_ru> (I_vlxy_I)  отвечает (Максим) на <yeah. I use AXMPP he…>
Does it was published in github or in another place?
[20:27:43] <ada_ru> (I_vlxy_I)  отвечает (JLB2499) на <😮 really! There's a …>
btw: yet another XMPP bot in Ada: https://github.com/subjrs/Jaba
[20:28:20] <ada_ru> (Максим) https://github.com/reznikmm/ada_ru/blob/servlet/src/wiki/servlet-telegram.adb
[20:28:28] <ada_ru> (JLB2499) AXMPP is listed in the matreshka home page. It says that there is an SVN repository: http://forge.ada-ru.org/axmpp
[20:28:54] <ada_ru> (JLB2499)  отвечает (I_vlxy_I) на <btw: yet another XMP…>
Great!
[20:28:55] <ada_ru> (Максим) now it's on github
[20:29:25] <ada_ru> (Максим) https://github.com/coopht/axmpp
[20:30:35] <ada_ru> (JLB2499) Great! I have more things to play with 😃
[20:31:06] <ada_ru> (JLB2499) A Telegram bot... XMPP client... 👍
[20:31:24] <ada_ru> (Максим) 😄
[21:38:06] <ada_ru> (I_vlxy_I) @insert_reference_here А есть идеи как ещё раст ускорить? Только Американский флаг попробовать?

Так то там и так уже merge sort юзается. Как и в плюсах.
[21:44:06] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <@insert_reference_he…>
Красной краской покрась)
[21:44:28] <ada_ru> (I_vlxy_I) <прислал наклейку> 😝
[21:45:44] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <Красной краской покр…>
Вообще, раст же и так красный. Ржа!

Думаю такое название ему не даром дали создатели :-)
[21:46:05] <ada_ru> (I_vlxy_I) Так то он тормоз, но в руках правильных может быть быстр!
[21:47:41] <ada_ru> (coopht) заюзать какой-нибудь prefetch для данных
[21:49:33] <ada_ru> (I_vlxy_I) Это который из диска или из памяти в кешь?
[21:49:43] <ada_ru> (coopht) и то и то
[21:50:01] <ada_ru> (coopht) пока сортируешь данные можно линукс попросить подкачать следующую порцию из файла
[21:50:25] <ada_ru> (coopht) насчет из памяти в кэш - там надо смотреть
[21:50:42] <ada_ru> (coopht) а что perf говорит кстати? Где программа больше всего времени проводит?
[21:50:56] <ada_ru> (coopht) сложно оптимизировать абстрактную программу в вакууме
[21:52:00] <ada_ru> (I_vlxy_I) В сортировке :-)
[21:52:20] <ada_ru> (I_vlxy_I) Там же вначале все всасывается, а уже потом сортируется.
[21:53:05] <ada_ru> (I_vlxy_I) А потом мучительно выводится.
[22:01:42] <ada_ru> (nitrocerber) Надо зашить данные в кот! И выводить не надо. Даёшь экзешник в гигабайт с уем
[22:02:21] <ada_ru> (nitrocerber) Интересно, сдюжит скомпилять-то такоэ?)
[22:42:25] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <Надо зашить данные в…>
у кликхауса как раз такой 🙂
[22:42:36] <ada_ru> (I_vlxy_I) в мире С++ это норма!
[22:42:44] <ada_ru> (I_vlxy_I) шаблоны же! генерииик!
[22:43:34] <ada_ru> (nitrocerber) Реально экзешник в гиг?
[22:43:43] <ada_ru> (I_vlxy_I) да
[22:44:00] <ada_ru> (I_vlxy_I) зато работает БЫСТРО
[22:46:10] <ada_ru> (I_vlxy_I) btw: сервер с ТЕРАБАЙТОМ ОЗУ это уже не какая-то там экзотика
[22:46:38] <ada_ru> (I_vlxy_I) а машина со 128 Гб ОЗУ -- это вообще лоуэнд обыденность.
[22:47:19] <ada_ru> (FROL256) WTF
[22:47:31] <ada_ru> (FROL256) даже киношники стандартно используют 32 GB
[22:47:37] <ada_ru> (FROL256) откуда такая дичь?)
[22:47:44] <ada_ru> (FROL256) Я наверное отсатл от жизни ....
[22:47:58] <ada_ru> (I_vlxy_I) сильно отстал 🙂 32 гига -- это просто мой рабочий десктоп
[22:48:01] <ada_ru> (I_vlxy_I) не сервер
[22:48:17] <ada_ru> (FROL256) ну а для чего так много памяти то?
[22:48:38] <ada_ru> (I_vlxy_I) 32 гига на десктопе? ну, иногда проект не собирается с меньшим объемом ОЗУ 🙂
[22:48:49] <ada_ru> (FROL256) тогда понятно
[22:48:50] <ada_ru> (FROL256) )
[22:48:59] <ada_ru> (I_vlxy_I) А на серверах терабайт ОЗУ - для in memory db например.
[22:49:14] <ada_ru> (I_vlxy_I) ну и вообще, для db. Для того же кликхауса
[22:50:34] <ada_ru> (I_vlxy_I) 128 Гб RAM -- это базовый юнит в том же яндексе. вероятно уже устаревший.
[22:50:57] <ada_ru> (I_vlxy_I) то есть это не для баз такое
[22:52:53] <ada_ru> (I_vlxy_I) сервероочки: http://www.deltaserverstore.com/dell-r910.html
[22:53:24] <ada_ru> (FROL256) да уж ....
[22:53:53] <ada_ru> (I_vlxy_I) вот на этом нужно уметь эффективно работать таким языкам как С++.
[22:54:52] <ada_ru> (I_vlxy_I) денег, кстати, стоит совсем не заоблачных.
[23:00:07] <ada_ru> (nitrocerber) А как же 99% компьютеров не имеют мыши, клавы и лежат в кармане брюк?)
[23:00:08] <ada_ru> (nitrocerber) Они таким точно подавятся
[23:01:10] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <сильно отстал 🙂 32 г…>
Ну 32 гига это даже не десктоп, это мой лаптоп, причём предыдущий, ему 4 года уже почти
[23:01:48] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <А как же 99% компьют…>
и эти тоже. а вот то, что на столах стоит -- то вымирает потихоньку. точнее залазит в очень специфиццкую нишу
[23:02:57] <ada_ru> (I_vlxy_I) то есть современный софтвер либо работает на монстрах с 1Тб ОЗУ, либо работает на железе где производительность и жручесть до ОЗУ крайне важна, ибо памяти не много и заряда батарейки тоже.
[23:04:28] <ada_ru> (I_vlxy_I) а для "десктопов" где и батарейки нет и памяти, кажется, довольно прилично, и задачи довольно простые - нет хайлоада, осталась ниша где рулят наиболее быстрые языки с точки зрения РАЗРАБОТКИ программы. чтобы прям хуяк и в дамки
[23:04:40] <ada_ru> (I_vlxy_I) ну и чтобы разработка дешевая
[23:04:50] <ada_ru> (I_vlxy_I) поэтому всё на электроне, а остальное - на питоне
[23:04:55] <ada_ru> (I_vlxy_I) даже GPS 🙂
[23:05:18] <ada_ru> (I_vlxy_I) чую я у Ады скоро будет две IDE - одна на питоне, а другая на электроне.
[23:27:46] <ada_ru> (coopht) А есть в Аде nanosleep ?
[23:27:57] <ada_ru> (coopht) или надо из libc импортировать?
[23:37:48] <ada_ru> (I_vlxy_I) https://www2.adacore.com/gap-static/GNAT_Book/html/rts/s-osprim__ads.htm
[23:37:49] <ada_ru> (I_vlxy_I) Ы?
[23:38:01] <ada_ru> (I_vlxy_I) https://www2.adacore.com/gap-static/GNAT_Book/html/rts/s-osprim__adb.htm#124_14
[23:59:02] <ada_ru> (Максим) delay не катит?