[01:20:10] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Для начала попробуй …>
это с точностью до погрешности ничего не изменило.
[01:25:04] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Ещё вот без UTF-8 ва…>
А вот это круто ускорило. Было 50 секунд, стало 37. Но нужно еще проверить на валидность результата.
real    0m37.056s
user    0m34.988s
sys     0m1.884s
[02:29:30] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Ещё вот без UTF-8 ва…>
ответ корректный
[02:54:12] <ada_ru> (I_vlxy_I) Просьба: у кого gnat есть, попробуйте собрать и запустить вот эту прогу: https://godbolt.org/z/FJIXWA
[02:54:31] <ada_ru> (I_vlxy_I) запустить её под strace: strace ./main
[02:56:09] <ada_ru> (I_vlxy_I) у меня оно выдает вот такое:
write(1, "Hello World\\0", 13Hello World\0)          = 13
write(1, "?", 1?)                        = 1
write(1, "??Hello World!!!", 16??Hello World!!!)        = 16
[04:35:45] <ada_ru> (coopht) fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 2), ...}) = 0
brk(NULL)                               = 0x24ff000
brk(0x2520000)                          = 0x2520000
write(1, "Hello World\\0???Hello World!!!", 30Hello World\0???Hello World!!!) = 30
exit_group(0)                           = ?
+++ exited with 0 +++
[04:35:48] <ada_ru> (coopht) 1 write
[04:40:18] <ada_ru> (coopht) Вот такой код
procedure Main Is
begin
  Put_Line("Hello World\0");
  Put_Line("???Hello World!!!");
end Main;

делает так:
write(1, "Hello World\\0\n", 14Hello World\0
)        = 14
write(1, "???Hello World!!!\n", 18???Hello World!!!
)     = 18
[04:41:23] <ada_ru> (coopht) Ты кстати уверен что у тебя setvbuf отрабатывает?
может он возвращает не 0,
[04:43:26] <ada_ru> (coopht) Кстати прикольная штука
если в код добавить with Ada.Text_IO;
то тогда она работает как у тебя
write(1, "Hello World\\0", 13Hello World\0)          = 13
write(1, "?", 1?)                        = 1
write(1, "??Hello World!!!", 16??Hello World!!!)        = 16
[04:44:22] <ada_ru> (coopht) with Interfaces.C_Streams;
use Interfaces.C_Streams;
with System.CRTL; use System.CRTL;
+with Ada.Text_IO;

procedure Main is
   procedure PutFFF_Line(Item : String) is
[10:17:25] <ada_ru> (Максим) В man пишут, что setvbuf надо вызывать первым. Наверное text_io что-то успевает сделать
[10:38:14] <ada_ru> (I_vlxy_I)  отвечает (coopht) на <Ты кстати уверен что…>
Да. Я выводил - там 0.
[10:39:50] <ada_ru> (I_vlxy_I) Причём без setvbuf работает адекватней :-)
[10:40:51] <ada_ru> (I_vlxy_I)  отвечает (coopht) на <Кстати прикольная шт…>
Странно. Я убрал Ada.Text_IO, но эффект сохраняется.
[11:05:29] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <Просьба: у кого gnat…>
Hello World\0???Hello World!!!
[11:06:00] <ada_ru> (I_vlxy_I)  отвечает (Eugene) на <Hello World\0???Hell…>
Это strace говорит?
[11:06:28] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <запустить её под str…>
Что-за strace? На венде есть?
[11:10:46] <ada_ru> (I_vlxy_I) нету
[11:11:46] <ada_ru> (I_vlxy_I)  отвечает (coopht) на <Кстати прикольная шт…>
О! Реально. Я ошибся - Ada.Text_IO забыл убрать импорт.
[11:12:36] <ada_ru> (I_vlxy_I) надо же, Put_Line гадит даже если им не пользоваться, а просто его пакет в суе упомянуть.
[11:12:51] <ada_ru> (nitrocerber) Элаборации какие-нибудь небось
[11:13:59] <ada_ru> (nitrocerber) И вообще, надо юзать gnat.io, он на досках работает! Замутить кастомный рантайм, переопределить путчар и вперёд)
[11:17:52] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <нету>
Hello World\0???Hello World!!!--- Process 8648 created
--- Process 8648 loaded C:\Windows\System32\ntdll.dll at 00007ffb536b0000
--- Process 8648 loaded C:\Windows\System32\kernel32.dll at 00007ffb51bc0000
--- Process 8648 loaded C:\Windows\System32\KernelBase.dll at 00007ffb4fed0000
--- Process 8648 loaded C:\Windows\System32\advapi32.dll at 00007ffb508e0000
--- Process 8648 loaded C:\Windows\System32\msvcrt.dll at 00007ffb51620000
--- Process 8648 thread 6672 created
--- Process 8648 loaded C:\Windows\System32\sechost.dll at 00007ffb50990000
--- Process 8648 loaded C:\Windows\System32\rpcrt4.dll at 00007ffb514f0000
--- Process 8648 loaded C:\Windows\System32\shell32.dll at 00007ffb520c0000
--- Process 8648 thread 5952 created
--- Process 8648 loaded C:\Windows\System32\cfgmgr32.dll at 00007ffb50590000
--- Process 8648 loaded C:\Windows\System32\ucrtbase.dll at 00007ffb50470000
--- Process 8648 loaded C:\Windows\System32\SHCore.dll at 00007ffb50a30000
--- Process 8648 loaded C:\Windows\System32\combase.dll at 00007ffb51c80000
--- Process 8648 loaded C:\Windows\System32\bcryptprimitives.dll at 00007ffb50780000
--- Process 8648 loaded C:\Windows\System32\windows.storage.dll at 00007ffb4f780000
--- Process 8648 loaded C:\Windows\System32\msvcp_win.dll at 00007ffb501f0000
--- Process 8648 loaded C:\Windows\System32\profapi.dll at 00007ffb4f750000
--- Process 8648 loaded C:\Windows\System32\powrprof.dll at 00007ffb4f6b0000
--- Process 8648 loaded C:\Windows\System32\shlwapi.dll at 00007ffb51950000
--- Process 8648 loaded C:\Windows\System32\gdi32.dll at 00007ffb51fb0000
--- Process 8648 loaded C:\Windows\System32\gdi32full.dll at 00007ffb505e0000
--- Process 8648 loaded C:\Windows\System32\user32.dll at 00007ffb50ae0000
--- Process 8648 loaded C:\Windows\System32\win32u.dll at 00007ffb50170000
--- Process 8648 loaded C:\Windows\System32\kernel.appcore.dll at 00007ffb4f710000
--- Process 8648 loaded C:\Windows\System32\cryptsp.dll at 00007ffb50570000
--- Process 8648 loaded C:\Windows\System32\imm32.dll at 00007ffb51430000
--- Process 8648 thread 5952 exited with status 0x0
--- Process 8648 thread 6672 exited with status 0x0
--- Process 8648 exited with status 0x0

Это strace из  cygwin
[11:18:38] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <Элаборации какие-ниб…>
кстати, в плюсцах воспроизвести пока не получается.
[11:19:01] <ada_ru> (I_vlxy_I)  отвечает (Eugene) на <Hello World\0???Hell…>
ну, тут вывод не информативен. они пытались, но не смогли 😊
[11:21:24] <ada_ru> (I_vlxy_I) О! Воспроизвелось!
[11:22:06] <ada_ru> (I_vlxy_I) #include <stdio.h>

int main() {
       setvbuf(stdout, nullptr, _IONBF, 0);
       setvbuf(stdout, nullptr, _IOFBF, 4096);
       fwrite("hello",5,1,stdout);
       fwrite("world",5,1,stdout);
       return 0;
}
[11:41:20] <ada_ru> (I_vlxy_I) "This function may only be used after stream has been associated with an open file, but before any other operation (other than a failed call to setbuf/setvbuf)."
[11:41:58] <ada_ru> (I_vlxy_I) вот поэтому базировать стандартную либу Ады на таких высокоуровневых возможностях libc - плохо.
[12:01:07] <ada_ru> (I_vlxy_I) Я из них из всех, по сути, только оберон и видел 🙂
[12:01:26] <ada_ru> (I_vlxy_I) всё остальное -- очень мельком.
[12:18:22] <ada_ru> (Eugene)  отвечает (I_vlxy_I) на <всё остальное -- оче…>
Ты не кодил на паскале? 😗
[12:18:53] <ada_ru> (I_vlxy_I)  отвечает (Eugene) на <Ты не кодил на паска…>
Нет. Где и когда со мной могло такое случиться?
[12:19:45] <ada_ru> (Eugene) Ты с нами сейчас общаещься из какой-то параллельной вселенной?
[12:20:59] <ada_ru> (I_vlxy_I)  отвечает (Eugene) на <Ты с нами сейчас общ…>
Я всегда в ней обитал :-)
[12:21:59] <ada_ru> (I_vlxy_I) Я программировать начал сразу на C++ под DirectX 1. COM-объекты, интерфейсы — вот это всё.
[12:23:19] <ada_ru> (I_vlxy_I) До того видел спектрумовский Бейсик, но осознанно ничего не писал.
[12:23:32] <ada_ru> (I_vlxy_I) С Паскалем не пересекался.
[13:08:42] <ada_ru> (I_vlxy_I) Вообще, в последнее время Паскаль в среде программистов, это не язык, а архитектура GPU от нвидии :-)
[13:09:33] <ada_ru> (I_vlxy_I) «Собрать mxnet под паскаль» Примерно так это звучит.
[16:09:04] <ada_ru> (I_vlxy_I) но вообще, из всего созданного именно Виртом, я бы мог на регулярной основе для всего подряд, пользоваться именно что Модулой-2.
[16:09:32] <ada_ru> (I_vlxy_I) то есть чтобы прям работать и коммерческий софтвер писать. в том числе опенсорсный.
[16:11:56] <ada_ru> (I_vlxy_I) btw: всё же есть в стандартной адской либе возможность рулить буферизацией ввода/вывода?
[16:12:35] <ada_ru> (I_vlxy_I) я аж в с плюсовыми буферами разобрался (редкостная шляпа увязшая корнями в сишном дремучем стандарте и ничего не гарантирующая вообще)
[16:14:35] <ada_ru> (I_vlxy_I) и как написан сам glibc это вообще пестня - это чисто сишный код (со всеми выкрутасами, уровня — а давайте создадим псевдоним для этой функции на уровне линкера, нет, давайте создадим НЕСКОЛЬКО псевдонимов, чтобы никто не догадался) но с виртуальными функциями, наследованием и прочей ересью. На си.

Насколько я вижу, на дизайн glibc сильно повлиял стандарт плюсовый.
[16:32:12] <ada_ru> (coopht)  отвечает (I_vlxy_I) на <btw: всё же есть в с…>
А что, вариант с setvbuf после удаления Text_IO не работает?
[16:35:47] <ada_ru> (I_vlxy_I)  отвечает (coopht) на <А что, вариант с set…>
Хочется Ada вей :-) через стандартную или гнатовую либу. Без прямого юзания libc
[18:33:12] <ada_ru> (I_vlxy_I)  цитирует (milovidov_an)
Появилась вакансия C++ разработчика ClickHouse: https://yandex.ru/jobs/vacancies/dev/dev_clickhouse/
[19:00:41] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <А вот это круто уско…>
Здорово. Пара вопросов:
1) Какие тестовые данные? Если я правильно понял, случайные строки?
2) Как под C++ выглядит вариант?
3) Можно ли c strace прогнать оба варианта?
[19:01:41] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <надо же, Put_Line га…>
Модули с неявными эффектами при импорте — зло
[19:02:20] <ada_ru> (insert_reference_here)  отвечает (Eugene) на <>
Все говно.
[19:02:24] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Здорово. Пара вопрос…>
прямо сейчас это 2 гигабайта текстовик рандомный. еще у меня есть тестовик не рандомный, но он мельче (чото около гига).
[19:02:30] <ada_ru> (I_vlxy_I) есть еще совсем зубодробильный на 8 гиг.
[19:03:12] <ada_ru> (I_vlxy_I) > 2) Как под C++ выглядит вариант?

мне надо добраться опять до того компа чтобы выложить 😊
[19:03:28] <ada_ru> (I_vlxy_I) > 3) Можно ли c strace прогнать оба варианта?

можно. но ты и сам можешь погонять, так то.
[19:03:31] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <прямо сейчас это 2 г…>
> 2 гига текста
> жалуется на время обработки меньше минуты
[19:04:03] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <> 2 гига текста
> жа…>
дык оно ж в озу помещается целиком +  дисковый кэш тоже. чобы и не пожаловаться? 😊
[19:04:11] <ada_ru> (insert_reference_here) Ах да, там ещё от порядка запуска может замерянная производительность зависеть. Дисковый кэш же
[19:04:25] <ada_ru> (I_vlxy_I) ну и вопрос в том, кто быстрее. и можно ли, и какой ценою сделать язык XXX столь же быстрым как плюсцы
[19:04:48] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Ах да, там ещё от по…>
я запускаю несколько раз подряд. дискового кеша достаточно для файла целиком.
[19:06:23] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <ну и вопрос в том, к…>
Вот ещё вариант вывод ускорить на плюсах: https://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
[19:06:25] <ada_ru> (I_vlxy_I) но возникает ощущение, что да, раст может быть быстрым.
[19:06:42] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Вот ещё вариант выво…>
это я пробовал. говно эти стримы. на плюсах я тупо fwrite юзаю.
[19:07:49] <ada_ru> (I_vlxy_I) но для плюсов есть отмазка — fwrite входит в стандартную либу плюсов 😊
[19:07:59] <ada_ru> (I_vlxy_I) У Ады отмазки такой нет!
[19:08:31] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <это я пробовал. говн…>
Да блин
[19:10:09] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Да блин>
чтобы оценить насколько стримы в плюсах говно, достаточно прочитать Notes вот на этой странице: https://en.cppreference.com/w/cpp/io/basic_filebuf/setbuf
[19:10:26] <ada_ru> (I_vlxy_I) ну и слава БГ в новых плюсах будет libfmt
[19:17:12] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <это я пробовал. говн…>
Стримы тормозят в частности потому, что синхронизированы с сишными printf. Если эту синхронизацию вырубить, то стримы резко становятся быстрее имогут обогнать сишные аналоги
[19:17:29] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Стримы тормозят в ча…>
я пробовал. у меня не обогнало. но могу попробовать еще раз.
[19:19:16] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <Это гибко и удобно. …>
В Go не так, там io.Reader и io.Writer — интерфейсы, поэтому всегда вызов виртуальных методов (если не соптимизировано, но с оптимизациями в Go довольно плохо)
[19:19:54] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <В Go не так, там io.…>
я же написал про это. точнее — написал, что в расте и плюсах без накладных, и, потенциально. в Аде тоже.
[19:22:43] <ada_ru> (I_vlxy_I) да, если синхронизацию вырубить, то стектрейс у плюсов становится более другим и более интересным.
[19:22:47] <ada_ru> (I_vlxy_I) надо будет потестить.
[19:27:23] <ada_ru> (I_vlxy_I) оу. плюсы юзают некий writev когда синхронизация выключена
[19:29:55] <ada_ru> (I_vlxy_I) А Ада, похоже, всегда жестко синхронизирована с сишным stdio.
[19:58:41] <ada_ru> (FROL256) Это же хорошо, иначе бы отладка смешанной программы превратилась бы в Ад )
[20:23:30] <ada_ru> (I_vlxy_I)  отвечает (FROL256) на <Это же хорошо, иначе…>
и принудительное отключение буферизации для stdout (а не только stderr, как у нормальных) — это тоже хорошо? 😊
[20:23:57] <ada_ru> (I_vlxy_I) и невозможность расцепить сишный stdio и адский, когда сцепленность не нужна?
[20:24:15] <ada_ru> (I_vlxy_I) алсо когда они не синхронизированы, не происходит особой жести. и на отладку это не влияет вообще никак.
[21:02:02] <ada_ru> (I_vlxy_I) https://www.module.ru/catalog/cifrovaya_obrabotka/neural_networks/
[21:02:18] <ada_ru> (I_vlxy_I) Importozameschenie!
[21:03:31] <ada_ru> (Максим) 👍
[21:04:47] <ada_ru> (FROL256) » алсо когда они не синхронизированы, не происходит особой жести.

Ок, главное чтобы в консольку выводилось а не хрен знает куда )))
[21:04:58] <ada_ru> (FROL256) как это иногда бывает
[21:07:25] <ada_ru> (FROL256) в принципе действительно что они поверх друг друга будут писать не так страшно наверное
[21:18:45] <ada_ru> (I_vlxy_I) Если я правильно понимаю, fwrite ещё и мьютексом постоянно щёлкает.
[21:20:15] <ada_ru> (I_vlxy_I) В общем, хорошо бы адской либе больше самостоятельности. Хотя бы на уровне плюсовой либы
[21:20:34] <ada_ru> (I_vlxy_I) А лучше - гошной или растовой.
[21:21:07] <ada_ru> (FROL256) А куда делось сообщенеи про NMC4?)
[21:21:17] <ada_ru> (FROL256) а, всё, вижу )
[21:21:44] <ada_ru> (FROL256) я как-то читал про него, выглядит забавно но судя по всему это крайней трудно программировать — хуже чем Cell
[21:21:51] <ada_ru> (FROL256) кто-нибдуь пробовал?)
[21:23:15] <ada_ru> (I_vlxy_I) Кому нужна железка без Ады?
[21:25:07] <ada_ru> (FROL256) да я так понял что там не то что ады, а даже и си то по нормальному нет
[21:25:14] <ada_ru> (FROL256) если хочется использовать эти ядра
[21:25:29] <ada_ru> (FROL256) вперёд на ассэмблере
[22:06:00] <ada_ru> (I_vlxy_I) вау. а у телеги что-то с сообщениями стало. сплиты у телеги?
[22:06:45] <ada_ru> (I_vlxy_I) у одного клиента одна история, у другого - другая
[22:07:45] <ada_ru> (FROL256) так это же наверное кому что пришло раньше не?
[22:08:01] <ada_ru> (FROL256) история локально хранится?
[22:09:26] <ada_ru> (I_vlxy_I) картинка https://www.ada-ru.org/files/bot/2019-03-07-x4.jpg
[22:09:29] <ada_ru> (I_vlxy_I) оцени историю
[22:13:30] <ada_ru> (FROL256) хм, у меня нету  про модула 2 вообще сообщений ...
[22:13:34] <ada_ru> (FROL256) интересно
[22:14:29] <ada_ru> (I_vlxy_I) цензура онлайен?
[22:15:26] <ada_ru> (I_vlxy_I) а вот логи что бот ведёт: http://oberspace.dyndns.org/log/ada-ru@conference.jabber.ru/2019/03/07.html
[22:15:34] <ada_ru> (I_vlxy_I) через джаббер конфу
[22:15:44] <ada_ru> (FROL256) картинка https://www.ada-ru.org/files/bot/2019-03-07-x5.jpg
[22:15:53] <ada_ru> (FROL256) ну правильно это же каналд про Аду
[22:16:17] <ada_ru> (FROL256) вот модулу и порезали ... одно непонятно почему про раст не вырезается )
[22:16:49] <ada_ru> (I_vlxy_I) lang rust renames ada;
[22:17:04] <ada_ru> (FROL256) понятно )))
[22:17:22] <ada_ru> (insert_reference_here) J[ e; 'njn cbynfrcbc Fls
[22:18:03] <ada_ru> (I_vlxy_I) да к синтаксису как раз ноль вопросов. ничем особо не выделяется
[22:18:13] <ada_ru> (I_vlxy_I) больше вопросов к РЕАЛИЗАЦИИ стандартной либы у меня.
[22:18:57] <ada_ru> (I_vlxy_I) ну и в спеке стандартной либы тоже явно кой-чаво не хватает для нормальной жизни в современном мире, где чем дальше, тем больше требуется производительность. ибо мощности железа перестали расти так как прежде.
[22:19:22] <ada_ru> (I_vlxy_I) это раньше можно было на старте разработки закладывать требования в 2 раза бОльшие чем железо может вывезти. теперь уже нет.
[22:19:53] <ada_ru> (insert_reference_here)  отвечает (I_vlxy_I) на <это раньше можно был…>
Ну на питоне же люди пишут
[22:20:17] <ada_ru> (I_vlxy_I)  отвечает (insert_reference_here) на <Ну на питоне же люди…>
на питоне люди в основном теребонькают ML, который на C++ писан, и на CUDA.
[22:20:46] <ada_ru> (I_vlxy_I) питон - это удобная интерактивная запускалка ну и такой жирный парсер комманд лайн аргументов да конфигов. всё
[23:04:02] <ada_ru> (nitrocerber)  отвечает (I_vlxy_I) на <это раньше можно был…>
На аде пишут на железяки, которые уже есть и лет дцать ближайшие не поменяются)
[23:04:04] <ada_ru> (nitrocerber) И пут-лайн там точно последним приоритетом)))
[23:19:43] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <И пут-лайн там точно…>
я подозреваю, что там вообще не эту реализацию стандартной либы юзают 😉 уж точно не с libc под капотом.
[23:19:56] <ada_ru> (I_vlxy_I) и, тем более, не с glibc и лялихом
[23:25:00] <ada_ru> (nitrocerber) Да половина народу вообще с ней не линкуют намеренно.
[23:27:25] <ada_ru> (I_vlxy_I) а как же оно будет работать? там же fwrite по всей либе стандартной
[23:27:32] <ada_ru> (I_vlxy_I) я своими глазищами видел!
[23:40:48] <ada_ru> (nitrocerber) Да не пишет оно ничего. Дёргает сенсоры всякие, форсунками там управляет, впрыском топлива, закрылками)
[23:41:37] <ada_ru> (nitrocerber) Это вы тут фигнёй маетесь и строки сравнтваете, а у него срок жизни - примерно как время сортировки того файла на аде)
[23:52:05] <ada_ru> (I_vlxy_I)  отвечает (nitrocerber) на <Это вы тут фигнёй ма…>
o_O
[23:52:20] <ada_ru> (I_vlxy_I) блин. не полечу больше на боинге!
[23:52:25] <ada_ru> (nitrocerber) А у некоторых и как время сортировки на плюсах...
[23:52:52] <ada_ru> (nitrocerber) Та не) это скорее к локхид мартинам там... Хотя b-2 тоже такое возит
[23:53:23] <ada_ru> (I_vlxy_I) /me не хочет иметь срок жизни как время сортировки того файла на Аде или плюсах!