[01:48:17] <ada_ru> (avkvlru) Добрый день. Подскажите pls, Ada с Java - нормально стыкуется, или всё как обычно: работает только в теории?
[02:09:08] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Добрый день. Подскаж…>
смотря какая Ада - скомпиленная в бинарь, или же скомпиленная в jvm-байткот
[02:09:25] <ada_ru> (I_vlxy_I) если в нативный бинарь, то, думаю, как обычно всё - через jni
[02:11:15] <ada_ru> (I_vlxy_I) хотя, у жабы сейчас есть более современные методы наяривать нативные либы. более простые и мощные
[02:11:19] <ada_ru> (I_vlxy_I) но я в них еще не вникал
[02:11:30] <ada_ru> (I_vlxy_I) но в любом случае для жабы Ада - это Си
[02:13:07] <ada_ru> (I_vlxy_I) о! у Адакоры что-то есть https://www.adacore.com/gnatpro/toolsuite/ada-java
[02:13:16] <ada_ru> (I_vlxy_I) но не уверен, что оно есть для простых смертных
[02:14:23] <ada_ru> (I_vlxy_I) вот про jni: http://docs.adacore.com/gnat-ajis-docs/html/Using_JNI_Directly.html
[02:14:42] <ada_ru> (avkvlru) Ада в байткод с действцющими биьлиотеками компилируется?
[02:16:28] <ada_ru> (I_vlxy_I) насколько я понимаю, там не на 100 процентов полный язык был
[02:16:34] <ada_ru> (I_vlxy_I) но попробовать можно
[02:17:27] <ada_ru> (I_vlxy_I) https://www.adacore.com/download/more
[02:17:32] <ada_ru> (I_vlxy_I) Java Virtual Machine on Windows
[02:17:35] <ada_ru> (I_vlxy_I) это 2013
[02:31:41] <ada_ru> (avkvlru) ясно, попробую. Но вообще чем дальше, тем больше кажется, что в числе разработчиков ады были советские агенты, пытающиеся саботировать американский ВПК... В 83-й стандарт вообще, куда не ткнёшься, обязательно есть какие-то ограничения, делающие практически невозможной нормальную разработку. А сейчас, они походу работают по инерции)))
[02:53:28] <ada_ru> (avkvlru) Попробовал. Всё как обычно(((
[03:04:57] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Попробовал. Всё как …>
что получилось?
[03:05:30] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <ясно, попробую. Но …>
в плане языка, или стандартной либы?
[03:06:01] <ada_ru> (I_vlxy_I) стандартна либа то в Аде вполне себе богатая относительно других языков того времени.
[07:29:07] <ada_ru> (geniepro) ну, вполне возможно, что 40 лет назад были немного другие представления о правильном языке программирования, чем сейчас...
[07:29:35] <ada_ru> (geniepro) хотя уже тогда было семеqство ML
[08:17:55] <ada_ru> (avkvlru) Дело не в представлениях. В 83 году уже 10 лет как существовал Си, была отработана современная техника работы с потоками/файлами, были вполне очевидны потребности промышленного программирования, включая строки. В конце концов, были модула и модула-2.
[08:19:08] <ada_ru> (avkvlru) В это время выпускать язык, с абсолютно анахроничными системами ввода-вывода, убогими даже на фоне паскаля, было мягко говоря странно. Более того, прошло 40 лет... а нормального-ввода вывода в аде как не было, так и нет.
[08:25:07] <ada_ru> (t91x0) отвечает (avkvlru) на <В это время выпускат…>
Я недавно на одной имиджборде в торе попытался написать сообщение с кириллицей. В ответ получил сообщение об ошибке на английском матерном.
Зачем им там utf8? У них глобус Америки есть.
[08:26:57] <ada_ru> (avkvlru) Надо было на китайском ;)
[08:29:10] <ada_ru> (t91x0) Да, ещё забыл. На том глобусе имеется большая надпись "am/pm".
[08:30:01] <ada_ru> (geniepro) отвечает (avkvlru) на <В это время выпускат…>
ну, это же язык по заказу военных, им эти файлы не особо нужны были, видимо, не бухгалтерия же какая-то, обработка строк во встраиваемых устройствах тоже редко когда нужны...
[08:30:33] <ada_ru> (avkvlru) Ну так вообще не делали бы... То что сделано, оно просто плохо. Это тот случай, когда ничего, лучше чем так как есть.
[08:31:32] <ada_ru> (t91x0) Наверное истоки такого подхода стоит искать в предыдущих работах Ишбиа, и заодно посмотреть, что было предложено в других языках-кандидатах.
[08:31:55] <ada_ru> (geniepro) отвечает (avkvlru) на <Ну так вообще не дел…>
я в аде особо со строками не работал, но там, по-моему, не сильно отличается от сишечки — массивы символов, хотя бы длина массива известна — уже плюс
[08:32:21] <ada_ru> (avkvlru) Евгений- Вы сильно заблуждаетесь. В оригинальной аде- длина строки неизвестна, и механизмов для её указания нет...
[08:32:38] <ada_ru> (avkvlru) Подразумевалось, что лишнее место надо забивать проблеами
[08:32:49] <ada_ru> (avkvlru) Или использовать дискриминанты, несовместимые с системой ввода вывода...
[08:33:56] <ada_ru> (t91x0) отвечает (avkvlru) на <Подразумевалось, что…>
О как. То есть просто строка 80 символов общей длины, а что в ней лежит сейчас, и какой оно длины - неизвестно.
[08:34:10] <ada_ru> (avkvlru) Да. Именно.
[08:35:16] <ada_ru> (avkvlru) А в 95м/2005 , когда по миру уже вовсю шагал CGI, раздельный доступ к файлам предложили реализовать через ... создание файлов семафором, на уровне Create... Я не шучу, - lockfile доступна и по сей день.
[08:35:42] <ada_ru> (avkvlru) Странно, что ада не прижилась в CGI с таким подходом... Но при этом делают поддержку регулярных выражений))))
[08:36:20] <ada_ru> (t91x0) отвечает (avkvlru) на <А в 95м/2005 , когда…>
Что значит раздельный?
[08:36:33] <ada_ru> (avkvlru) Совместный.
[08:37:00] <ada_ru> (avkvlru) Ну то есть надо тебе работать с базой данных- создай в папке файлик, и пусть другие смотрят, есть ли он)))
[08:37:29] <ada_ru> (t91x0) Вы имеете в виду отсутствие флагов вроде share_read, share_none?
[08:37:37] <ada_ru> (t91x0) отвечает (avkvlru) на <Ну то есть надо тебе…>
Юниксвейно
[08:37:52] <ada_ru> (avkvlru) Не... в юниксе уже давно существовал flock в разных вариациях
[08:38:21] <ada_ru> (t91x0) отвечает (avkvlru) на <Не... в юниксе уже д…>
Блокировка участка файла? Но это же задача операционной системы
[08:38:29] <ada_ru> (avkvlru) В виндоусе к тому времени уже можно было блокировать файлы фрагментарно причём на расстоянии 64 бит-ной длины.
[08:39:01] <ada_ru> (geniepro) отвечает (avkvlru) на <Евгений- Вы сильно з…>
всё там можно, в чём проблема?
http://archive.adaic.com/standards/83lrm/html/lrm-03-06.html#3.6.3
The values of the predefined type STRING are one-dimensional arrays of the predefined type CHARACTER, indexed by values of the predefined subtype POSITIVE:
subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST;
type STRING is array(POSITIVE range <>) of CHARACTER;
Examples:
STARS : STRING(1 .. 120) := (1 .. 120 => '*' );
QUESTION : constant STRING := "HOW MANY CHARACTERS?";
-- QUESTION'FIRST = 1, QUESTION'LAST = 20 (the number of characters)
ASK_TWICE : constant STRING := QUESTION & QUESTION;
NINETY_SIX : constant ROMAN := "XCVI"; -- see 3.6
http://archive.adaic.com/standards/83lrm/html/lrm-03-06.html#3.6.2
A'FIRST Yields the lower bound of the first index range. The value of this attribute has the same type as this lower bound.
A'FIRST(N) Yields the lower bound of the N-th index range. The value of this attribute has the same type as this lower bound.
A'LAST Yields the upper bound of the first index range. The value of this attribute has the same type as this upper bound.
A'LAST(N) Yields the upper bound of the N-th index range. The value of this attribute has the same type as this upper bound.
A'RANGE Yields the first index range, that is, the range A'FIRST .. A'LAST.
A'RANGE(N) Yields the N-th index range, that is, the range A'FIRST(N) .. A'LAST(N).
A'LENGTH Yields the number of values of the first index range (zero for a null range). The value of this attribute is of the type universal_integer.
A'LENGTH(N) Yields the number of values of the N-th index range (zero for a null range). The value of this attribute is of the type universal_integer.
[08:39:09] <ada_ru> (t91x0) отвечает (avkvlru) на <В виндоусе к тому вр…>
По-моему, сетевые блокировки в самбе по сей день работают странновато
[08:39:33] <ada_ru> (avkvlru) Не знаю, по-моему в виндоусе всё идеально, если пользоваться стандартными средствами. Абсолютно внятная стратегия.
[08:40:15] <ada_ru> (avkvlru) Слава... теги работают только с длиной объявленного массива. К тому, что в нём лежит, они не имеют отношения. Нет никакой единой стратегии и внятной позиции по этому вопросу
[08:40:30] <ada_ru> (t91x0) отвечает (avkvlru) на <Слава... теги работа…>
Это не писал
[08:41:37] <ada_ru> (geniepro) отвечает (avkvlru) на <Дело не в представле…>
насколько я помню модулу-2 и оберон, там никаких улучшений в этом плане по сравнению с адой-83 нет
[08:48:17] <ada_ru> (avkvlru) Насколько я помню в модуле было несколько способов работы со строками, но повторюсь, даже в Си, подход был намного удачнее, чем то, что в Аде, где по сути, не было сделано ничего.
[08:48:53] <ada_ru> (avkvlru) Есть много решений, в том числе подход а-ля перл, а-ля питон и т.п. Но в аде то вообще ничего не сделали...
[08:50:40] <ada_ru> (avkvlru) Зачем-то разработчики ады пошли своим путём, причём абсолютно анахроничным для того времени. Ну и простите, я всё равно не представляю в 83м году программ без нормальных подсистем ввода вывода. Хотя -бы для отладки.
[08:51:56] <ada_ru> (avkvlru) И тем более не представляю их в 95м, когда наконец-то смирились с реальностью и начали делать нормально. Но именно начали. ХЗ почему, но Text_IO.Stream сделали, а Direct_IO.Stream- нет и по сей день :(
[08:59:18] <ada_ru> (avkvlru) отвечает (t91x0) на <По-моему, сетевые бл…>
А что именно странного в самбе? Отрываешь файл, и можешь его блокировать. Целиком или полностью. Адрес и длина блокируемой зонны указываются 64 битными целыми. В Win32s - был один тип блокировки (эксклюзив). Начиная с WinXP- сделали новую функцию поддерживающую два вида блокировки (блокировка записи и полная блокировка), сохранив обратную совместимость. По-моему, всё очень грамотно...
[09:00:24] <ada_ru> (t91x0) отвечает (avkvlru) на <А что именно странно…>
Я про самбу линуксовую, на которую есть жалобы, что дескать "не работает"
[09:01:05] <ada_ru> (avkvlru) ну это уже к реализации наверное вопросы... В линуксе через fcntl в принципе тоже неплохо сделано, если не считать траблов с длиной блокируемой зоны, почему-то ограниченной 32 битами
[09:03:08] <ada_ru> (avkvlru) Я тут по мере свободного времени пытаюсь продраться через огород билиотек ввода -вывода ады, но там просто звездец творится... Куча накрученных друг-на друга интерфейсов, причем откровенно колхозно сделанных. Если кому интересно, сравните скорость работы стандартного direct_io или stream_io, хотя бы с питоном... Примерно на порядок медленее...
[09:04:55] <ada_ru> (avkvlru) Хотел одно время встроить flock в стандартные библиотеки, через дочерние пакеты, но быстро понял, насколько это бесмысленный труд, по крайней мере в реализации гната. Проще собственную адекватную библиотеку ввода вывода написать с нуля, напрямую через системные средства. Всё будет намного быстрее и надёжнее.
[09:14:49] <ada_ru> (Oleg) Вобщем Ада для Embedded самое то :-) все как я люблю - длины строки нет - я в C для экономии строки нулем не терменирую :-) когда можно разумеется
[09:31:30] <ada_ru> (avkvlru) отвечает (Oleg) на <Вобщем Ада для Embed…>
А как понять, что лежит строка меньшего размера?
[09:34:07] <ada_ru> (avkvlru) отвечает (geniepro) на <ну, это же язык по з…>
Ну то есть выпускается язык заведомо без нормальных средств ввода-вывода, каналов, сокетов, графических интерфейсов и многих других прелестей цифрового мира, но при этом... (фанфары) в нём не предусмотрены средства работы с другими языками кроме фортрана... Блин, ну что же должно быть в голове у таких разработчиков???
[09:49:26] <ada_ru> (geniepro) отвечает (avkvlru) на <Ну то есть выпускает…>
Какие требования к языку дали заказчики, такие и реализовали в языке..
[10:01:41] <ada_ru> (avkvlru) Сомневаюсь, что заказчики требовали убогий ввод вывод)
[10:02:11] <ada_ru> (avkvlru) Тем более, что сейчас как я понимаю никаких заказчиков нет, а utf и нормального ввода вывода тоже))
[10:03:55] <ada_ru> (avkvlru) Да, кстати, подскажите пожалуйста, а как в аде сформировать -shared библиотеку? Чтобы можно было обращаться к ней из других языков, не используя для сборки gnatlink?
В Си это делается командой cpp -shared -fPIC code.c
[10:04:03] <ada_ru> (avkvlru) В аде есть что-нибудь аналогичное?
[10:23:48] <ada_ru> (avkvlru) или только через gpr?
[10:25:02] <ada_ru> (t91x0) отвечает (avkvlru) на <или только через gpr…>
Всё там есть. Подождите, пока проснётся Максим.
[10:34:26] <ada_ru> (geniepro) отвечает (avkvlru) на <Сомневаюсь, что зака…>
чего зря гадать?
есть требования, они удовлетворены, минобороны сша довольно...
https://dwheeler.com/steelman/steelman.htm
https://dwheeler.com/steelman/steeltab.htm
[10:34:54] <ada_ru> (avkvlru) согласен... Единственное что удивляет, что прошло 40 лет, а воз всё там жде
[10:36:29] <ada_ru> (geniepro) отвечает (avkvlru) на <согласен... Единстве…>
значит пользователей языка в целом всё устраивает, а те, кого не устраивает — пользуются хаскелем :))
[10:37:33] <ada_ru> (avkvlru) учитывая, что новых разработок на аде особо не появляется, я не сказал бы, что пользователей всё устраивает. Вот я пользователь, и меня не устраивает. Но мне надо поддерживать проект, и переписывать его себе дороже.
[10:38:23] <ada_ru> (t91x0) отвечает (avkvlru) на <согласен... Единстве…>
Скажите, а вам случаем не известен какой-нибудь стандарт на идентификаторы писем в email? Например, Вася послал Пете письмо, Петя переслал Андрею, Андрей мне, а я потом должен сказать Пете способ, как найти это письмо.
Казалось бы, при каждой отправке можно добавлять к письму один например uuid, и тогда я мог бы увидеть uuid от Васи, или от Пети, и сказать Пете.
А не могу! Нет такого стандарта, или есть, да его не знает никто.
[10:38:50] <ada_ru> (t91x0) И прошло больше 40 лет
[10:39:27] <ada_ru> (Victor) отвечает (avkvlru) на <Подразумевалось, что…>
Забавно: вчера вспомнилось:
==
Есть такой ЯП Clarion.
В нём PSTRING и CSTRING, скорее, для совместимости.
А основная ( родная) строка просто массив символов. Заранее известной длины. "Хвост" заполнен пробелами.
И это всё ещё и работает.
==
[10:39:51] <ada_ru> (t91x0) отвечает (Victor) на <Забавно: вчера вспом…>
Так это во всех базах так.
[10:39:54] <ada_ru> (Victor) отвечает (t91x0) на <Скажите, а вам случа…>
Там есть MSGID
[10:39:58] <ada_ru> (t91x0) Всех базах тех времён.
[10:40:19] <ada_ru> (avkvlru) Не совсем. В базах тех времён есть и мемо-поля (строки неограниченной длины).
[10:40:40] <ada_ru> (t91x0) Ну типичный char(50) это именно что данные и пробелы в конце.
[10:40:46] <ada_ru> (t91x0) Не varchar
[10:40:49] <ada_ru> (t91x0) И не memo
[10:41:23] <ada_ru> (Victor) отвечает (t91x0) на <Всех базах тех времё…>
Наверное: я курс сдал на Clarion.
На dBase не тратил время.
[10:41:36] <ada_ru> (avkvlru) dBase были мемо
[10:42:06] <ada_ru> (Victor) отвечает (avkvlru) на <Не совсем. В базах т…>
Да, MEMO было в Clarion.
В DOS эру был потолок 64kb
[10:42:14] <ada_ru> (t91x0) отвечает (Victor) на <Наверное: я курс сда…>
Я застал только FoxPro, ну там конечно внутри dBase. И это было уже в начале нулевых.
[10:42:17] <ada_ru> (avkvlru) Ну и BDB- их к кому отнести? А он по сути тех же времён
[10:42:29] <ada_ru> (t91x0) отвечает (avkvlru) на <Ну и BDB- их к кому …>
Так она вроде key-value
[10:42:43] <ada_ru> (avkvlru) Ну тоже же база...
[10:43:13] <ada_ru> (avkvlru) Причём в эпоху веба на bdb и всяких mldbm написано не меньше чем на реляционных. Для простых задач они на порядок удобнее.
[10:43:28] <ada_ru> (Victor) отвечает (t91x0) на <Я застал только FoxP…>
С FoxPro работала вторая половина подразделения -)
[10:43:48] <ada_ru> (avkvlru) Кстати помните померший проект abase? Который предусматривал базу с переменным числом полей?
[10:44:04] <ada_ru> (reznikmm) отвечает (avkvlru) на <Да, кстати, подскажи…>
В Аде аналигично C/C++
[10:44:17] <ada_ru> (t91x0) отвечает (avkvlru) на <Кстати помните помер…>
Я не помню, не застал, но это та же монга и прочее DynamoDb, если вы об этом.
[10:44:26] <ada_ru> (Victor) отвечает (avkvlru) на <Ну и BDB- их к кому …>
Btrieve в плане классификации интереснее: и сетевой, и SQL просто надстройка
[10:44:33] <ada_ru> (avkvlru) Максим, я пробовал у меня почему-то не срабатывает.
[10:44:50] <ada_ru> (avkvlru) gnatmake -shared не прокатывает
[10:44:52] <ada_ru> (reznikmm) отвечает (avkvlru) на <или только через gpr…>
А чем не устраивает gprbuild? Зачем закат солнца вручную?
[10:45:06] <ada_ru> (avkvlru) ну... или ключик добавить или спецификацию писать)
[10:45:44] <ada_ru> (reznikmm) gnatmake более не поддерживается, вместо него 1) gprbuild и файлы проекта 2) либо делать ручками как в Си вызывая gcc
[10:46:34] <ada_ru> (avkvlru) Сорри опечатался. Gcc- shared не прокатывает
[10:47:21] <ada_ru> (avkvlru) Насчёт gnatmake- почему не поддерживается? Для компиляции отдельных файлов прекрасно работает, по крайней мере в G2017, выше пока не лазил)
[10:47:43] <ada_ru> (avkvlru) Кстати подскажите- G2020 -она уже поддерживает обещанные плюшки нового стандарта, типа неограниченной арифметики? Или ещё пока нет?
[10:48:31] <ada_ru> (reznikmm) max@untu:/tmp/shared$ gcc -c -fPIC aaa.adb
max@untu:/tmp/shared$ gcc -shared -o aaa.so aaa.o
max@untu:/tmp/shared$
[10:48:38] <ada_ru> (reznikmm) у меня не ругается
[10:49:33] <ada_ru> (avkvlru) Спасибо, проверю на других версиях и в маке.
[10:49:38] <ada_ru> (reznikmm) отвечает (avkvlru) на <Кстати подскажите- G…>
Да, там очень много плюшек из 202х, хотя и не все. неограниченной арифметика есть, кажется
[10:50:24] <ada_ru> (avkvlru) кстати можно тупой вопрос- я везде вижу ключ -fPIС и соответственно как попугай его юзаю)) А что он означает?
[10:50:53] <ada_ru> (reznikmm) Кстати, про мак 😊 Вот, нашелся бета тестер на ALS https://github.com/AdaCore/ada_language_server/issues/498
Юзера оттестируют! 😂
[10:51:34] <ada_ru> (avkvlru) А что нужно сделать?
[10:52:35] <ada_ru> (reznikmm) отвечает (avkvlru) на <кстати можно тупой в…>
Компилятор в объектном коде не генерит абсолютное смещение нигде, использует только смещение относительно адреса. Как результат код можно загрузить по любому адресу в памяти и он будет работать без изменений
[10:52:53] <ada_ru> (avkvlru) Спасибо
[10:53:54] <ada_ru> (reznikmm) отвечает (avkvlru) на <А что нужно сделать?>
Да это я как-то спрашивал, кто может проверить als после серьёзных изменений в скриптах сборки...
[10:54:59] <ada_ru> (avkvlru) Да в общем-то не проблема. Могу загрузить детёныша, ему только польза.
[10:56:47] <ada_ru> (reznikmm) отвечает (avkvlru) на <Насчёт gnatmake- поч…>
Он давно в статусе "устаревший". Переделали так, что сам компилятор не шарит в файлах проекта, а вся поддержка файлов проекта теперь в gprbuild. Видимо, чтобы не тащить в GCC логику обработки проектов. А gnatmake был частью компилятора.
[10:57:27] <ada_ru> (reznikmm) Я рекомендую использовать gprbuild, это сильно упрощает разработку и сборку.
[11:01:06] <ada_ru> (reznikmm) отвечает (t91x0) на <Скажите, а вам случа…>
В каждом письме есть заголовок Message-ID:, а в ответах References: Это часть стандарта SMTP, кажется
[11:06:23] <ada_ru> (reznikmm) отвечает (avkvlru) на <кстати можно тупой в…>
gprbuild сам учитывает многие ньюансы, типа сам добавляет -fPIC, умеет строить библиотеки, которые сами выполняют инициализацию и тп
[11:14:39] <ada_ru> (t91x0) отвечает (reznikmm) на <В каждом письме есть…>
Я ни в одном клиенте не видел GUI для работы с этим. Ну кроме просмотра заголовков глазами.
[11:49:39] <ada_ru> (Oleg) отвечает (avkvlru) на <А как понять, что ле…>
Так это от ситуации зависит , например можно размер никто хранить,
[11:51:07] <ada_ru> (avkvlru) Можно. Но лучше тип и библиотеку для обработки строк. Чтобы каждому свой колхоз не городить.
[11:51:18] <ada_ru> (avkvlru) Тем более к этому в итоге и пришли)
[11:53:39] <ada_ru> (Oleg) отвечает (avkvlru) на <Можно. Но лучше тип …>
Колхоз дело добровольное
[11:54:14] <ada_ru> (avkvlru) Без библиотеки для строк врядли кто-то работает)
[12:00:59] <ada_ru> (Victor) отвечает (avkvlru) на <Можно. Но лучше тип …>
В Clarion истинная длина стороки понадобилась только когда писал с нуля специализированный текстовый редактор.
Там в подстроках были финишные значащие пробелы и пришлось в отдельных переменных хранить их длины. Т.е. эмулировать Pascal-строки.
В 99% случаев этого не требовалось. Правда, функция обрезки финишных пробелов Clip() была самой часто используемой -)
[12:26:42] <ada_ru> (I_vlxy_I) @avkvlru посмотри на стандартную либу Си - блокировок файлов там тоже нет. Посмотри на IO. стримы в с++ - это тоже тихий ужас
[12:27:40] <ada_ru> (avkvlru) В си (по крайней мере тех времён) не было понятия стандартной либы.
[12:28:03] <ada_ru> (I_vlxy_I) А смешные строки это тоже такоэ... поэтому std::string больше похожа на паскалевскую строку :-)
[12:28:13] <ada_ru> (avkvlru) По понятным причинам они пользовались библиотекой системы, в которой понятие блокировки файлов появилось очень быстро
[12:28:14] <ada_ru> (I_vlxy_I) Но конечно с учетом всех ошибок
[12:28:35] <ada_ru> (avkvlru) И к 83му году юникс уже умел блокировать файлы
[12:28:37] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <В си (по крайней мер…>
Ну, в Си89 например
[12:29:13] <ada_ru> (avkvlru) Кстати и в си89 библиотека не изолировалась от файловой системы, в отличи от ады
[12:29:15] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <И к 83му году юникс …>
Только юникс был далеко не везде. Нельзя такое в стандарт языка тащить
[12:29:27] <ada_ru> (avkvlru) Почему?
[12:29:38] <ada_ru> (avkvlru) В аде же затащили совершенно убогий ввод вывод
[12:29:47] <ada_ru> (I_vlxy_I) Понятие файловой системы, дерева каталогов, в с++ появилось в стандарте с++17
[12:30:11] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Почему?>
Потому, что это осеспецифичная штука
[12:30:26] <ada_ru> (I_vlxy_I) И где-то ее не будет
[12:30:34] <ada_ru> (avkvlru) Что специфичного в совместном доступе к файлу не понимаю. Уж точно ничуть не менее специфично, чем сам ввод-вывод
[12:30:40] <ada_ru> (Victor) отвечает (avkvlru) на <И к 83му году юникс …>
1983 - это год принятия стандарта.
Разработка же шла в 70е.
[12:30:45] <ada_ru> (I_vlxy_I) Где то оно будет работать не так и придётся эмулировать кривым образом
[12:31:10] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Что специфичного в с…>
Например наличие многозадачность и многопользовательности
[12:31:15] <ada_ru> (avkvlru) Дык ввод вывод много где эмулируется кривым образом, в чём проблема-то. Точнее в аде он везде эмулируется кривым образом.
[12:31:32] <ada_ru> (avkvlru) Оба случая никак особо не конфликтуют
[12:33:04] <ada_ru> (avkvlru) Алексей тут всё просто. Либо делаешь нормальную подсистему (насколько это возможно) либо не делаешь вообще. В аде сделали ужасный ввод вывод. Кривой до безобразия. Более того, его так и не пофиксили до сих пор. Там сама идея в корне порочная. Которая не будет работать в 99% случаев (и не работает) ради гипотетической совместимости с каким-то мифическим 1% где она тоже не нужна
[12:33:07] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Дык ввод вывод много…>
Почти везде ввод-вывод либо удобный и тормозной либо ужасный и тормозной
[12:33:37] <ada_ru> (avkvlru) Исключение Си, который и стал промышленным языком, ибо ввод вывод- неотъемлемая часть 99.99999% програм
[12:34:05] <ada_ru> (I_vlxy_I) В любом случае нет ни одного ЯП где стандартное IO было бы нормальным. Тем более с первого раза
[12:34:09] <ada_ru> (avkvlru) При этом, в аде полно прагм и функций работоспособность которых вообще не гарантируется, поэтому в принципе не понятно, что мешало сделать ещё одну...
[12:34:32] <ada_ru> (avkvlru) Алексей- я ещё раз скромно напомню о си. Он там изначально был нормальный)
[12:34:49] <ada_ru> (I_vlxy_I) То есть, на самом деле если бы в Аду IO сразу вообще не втаскивали бы, то было бы лучше
[12:34:51] <ada_ru> (avkvlru) Более того, в паскале он тоже вполне нормальный по сути был, с минимальными доделками (имя файла)
[12:34:58] <ada_ru> (Victor) отвечает (avkvlru) на <Почему?>
Потому что стандартными были OS от IBM и DEC.
А вовсе не Unix. ( Его рассвет - чуть позже)
[12:35:01] <ada_ru> (I_vlxy_I) Так как сейчас был бы в Аде нормальный IO
[12:35:13] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Алексей- я ещё раз с…>
В Си - нет
[12:35:32] <ada_ru> (avkvlru) Хм... почти всё сейчас на нём написано, или по его подобию)
[12:35:33] <ada_ru> (Vinpuh) отвечает (I_vlxy_I) на <В любом случае нет н…>
В java с второго раза получилось😎
[12:35:47] <ada_ru> (avkvlru) Да, но в аде прошло 40 лет, а всё такой же ужас-ужас
[12:36:04] <ada_ru> (avkvlru) Причём он даже на момент разработки был очень странным, и откровенно убогим решеним.
[12:38:38] <ada_ru> (avkvlru) Алексей, кстати, а что ненормального-то в Си со вводом -выводом? Я уж умолчу, что концепция файловой системы из Юникса в принципе на сегодня победила)
[12:41:42] <ada_ru> (avkvlru) Если по строкам там просто неудобное решение (но при желании допиливаемое), то по файлам - оно же вообще нерабочее было. Даже в теоретическом плане. Вплоть до появления дочерних пакетов в A95, его даже пофиксить без потери совместимости было невозможно, ибо это стандарт.
[12:42:26] <ada_ru> (avkvlru) ИМХО конечно, не будь её в стандарте- у Ады были бы на порядок лучшие шансы выжить.
[12:44:24] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Алексей, кстати, а ч…>
Где в Си блокировка файлов? Где в Си возможность хотя бы обойти дерево каталогов?
[12:44:46] <ada_ru> (Victor) отвечает (avkvlru) на <Более того, в паскал…>
Версия: затея Пентагона с Ada и выигрыш французами конкурса - для противодействия Algol-68, проекта ООН.
Заодно, и Pascal с Modula-2 "торпедировать".
Т.е. продолжение защиты Cobol и Fortran фирмой IBM от Алгола, противостояние "европейской школе" ЯП.
(
Как минимум, в "начале процесса".
Потом всё могло слегка отклониться от первоначального плана ( в лучшую сторону)
)
[12:45:02] <ada_ru> (avkvlru) Алексей, в изначальном Си эти библиотеки не были стандартными. Поэтому спокойно юзали системные.
[12:45:13] <ada_ru> (I_vlxy_I) Где в Си возможность асинхронной работы с IO?
[12:45:41] <ada_ru> (avkvlru) Алексей смотри выше. Одно дело, когда решение оставленно сторонним разработчикам библиотек, другое- когда оно вбито в стандарт нерабочее.
[12:45:51] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Алексей, в изначальн…>
Дык и в Аде юзай системные :-)
[12:46:00] <ada_ru> (avkvlru) В 83й? Нельзя)
[12:46:08] <ada_ru> (avkvlru) Там же не было поддержки других языков
[12:46:21] <ada_ru> (avkvlru) Ада же должна была всё заменить)))
[12:46:24] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <В 83й? Нельзя)>
И это - основной косяк
[12:46:42] <ada_ru> (avkvlru) Ну так я про что и говорю. Если уж делали изолированную систему- её надо делать нормальон
[12:46:51] <ada_ru> (avkvlru) А на том, что получилось- писать было просто нельзя.
[12:47:18] <ada_ru> (avkvlru) Ну только учебники, и жутко специализированные вещи, да и то, за очень дополнительные деньги)
[12:47:38] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Ада же должна была в…>
Ага. Но, думаю, стандартная либа, как и сейчас, это костыль для прототипирования
[12:48:14] <ada_ru> (avkvlru) Бога ради, но они же сделали её неизменяемой. Более того File_type сделали зачем-то limited private. Чтоб уж не дай бог)))
[12:48:32] <ada_ru> (I_vlxy_I) То есть всегда если ты занимаешься чем-то серьезным, то тебе в любом ЯП не хватает стандартной либы и ты в любом случае используешь системное
[12:48:58] <ada_ru> (avkvlru) Ну... не всегда, далеко не всегда. На перле например даже не припомню когда бы в систему лазил
[12:49:09] <ada_ru> (I_vlxy_I) Более того - для реальных приложений в юникс-подобных системах не используют unix API
[12:49:17] <ada_ru> (I_vlxy_I) Ибо он кривой и тормозной
[12:49:29] <ada_ru> (nitrocerber) Можно написать свой рантайм, с блекджеком и вот этим всем
[12:49:53] <ada_ru> (I_vlxy_I) А используют непортабельные системоспецифичные API
[12:50:26] <ada_ru> (I_vlxy_I) Например select для работы с файлами и сетью только в hello worldах юзают
[12:51:11] <ada_ru> (avkvlru) Сейчас вообще другая эпоха. Сейчас и Ада при желании позволяет себя допилить. Только поезда давно ушли...
[12:51:29] <ada_ru> (I_vlxy_I) В java изначальное IO было не удачное, потом появилось NIO. Просто рядом новое построили
[12:51:44] <ada_ru> (I_vlxy_I) В с++ вообще жесть и да, строят рядом новое
[12:52:10] <ada_ru> (avkvlru) Ну да... Вопрос в том, что в аде сразу сделали уродца, причём его ущербность была очевидна любому практику ещё на тот момент. И трогать запретили.
[12:52:31] <ada_ru> (avkvlru) Неплохую идею типизированных файлов из паскаля - довели до абсурда.
[12:52:33] <ada_ru> (I_vlxy_I) Пользоваться сторонними либами и ось-специфичными — это НОРМАЛЬНО
[12:52:47] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Ну да... Вопрос в то…>
Трогать нельзя - стандарт
[12:52:55] <ada_ru> (I_vlxy_I) Обратная совместимость
[12:53:09] <ada_ru> (Victor) отвечает (avkvlru) на <Ну... не всегда, дал…>
В Perl есть ( хотя говорят, что уже "был" ) CPAN. Т.е. библиотеки - на выбор.
И тесная интеграция с Си внутри их.
[12:53:18] <ada_ru> (I_vlxy_I) Поэтому лучше идти по пути комьюнити и аля буст в плюсах
[12:53:43] <ada_ru> (I_vlxy_I) Вначале отрабатывают там, все этим пользуются, а лет через 7-10 втаскивают в стандарт
[12:54:45] <ada_ru> (avkvlru) Ну вот это для меня вообще полной загадкой осталось. В аде 95 стали наконец-то прикручивать нормальные потоки (убей меня не понимаю, что мешало использовать эту концепцию сразу, она очевидно на порядок красивее убогих видов файлов даже на первый взгляд). Но бросили на пол-пути и это вообще жесть.
[12:55:48] <ada_ru> (I_vlxy_I) Сразу библиотечное тащить в стандарт не обкатав его в виде сторонней либы - плохо.
[12:56:03] <ada_ru> (I_vlxy_I) Поэтому alire - рулез :-)
[12:56:06] <ada_ru> (nitrocerber) Главкрестовик, сам поливавший адское ИО гумусом, на защите чести ады) Прям бальзам на душу.. Валексей, признавайся, ты таки намутил сходку адистов и тебя индоктринировали?)
[12:57:09] <ada_ru> (avkvlru) Ну так в аде83 ещё круче сотворили. Там понапридумывали что-то абсолютно бредовое и совершенно фрагментарное, при этом запретили это менять. Я не думаю, что хоть какой-то практик видел эту библиотеку до релиза, иначе бы он сразу заорал- "что Вы творите"
[12:57:30] <ada_ru> (avkvlru) Но самое интересное, что стримы там при внедрении изуродовали ровно так же.
[12:58:55] <ada_ru> (avkvlru) В общем, ада наверное навсегда останется в учебниках примером, как нельзя подходить к созданию языка.
[12:59:20] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <Главкрестовик, сам п…>
Просто я вижу в других ЯП ровно те же проблемы :-) Ада тут слабо выделяется. Более менее нормальный IO в «стандарте» языка с первого раза может быть только для совсем свежих языков.
IO — сложная тема, и сделать ее в стандарте так, чтобы оно работало хорошо и 40 лет спустя и на всех архитектурах и осях — очень сложная задача
[13:00:28] <ada_ru> (avkvlru) Да, но в аде прикол в том, что её изначально сделали нерабочей. И за 40 лет ситуацию лишь ухудшили. После введения стримов гинекологическими методами, она ещё и безумно тормозная стала. Причём это неудивительно, достаточно глянуть на её реализацию.
[13:01:36] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Да, но в аде прикол …>
Ты про IO сейчас?
[13:01:41] <ada_ru> (avkvlru) Да.
[13:02:01] <ada_ru> (I_vlxy_I) Ок
[13:04:37] <ada_ru> (I_vlxy_I) Как крестовик со стажем, я не удивляюсь тому, что пользоваться стандартной либой для реальных задач нельзя. До недавнего времени у нас, плюсовиков, даже многопоточка юзалась системная, что добавляло очень много боли.
Более того - часто и сейчас приходится ходить мимо стандартной либы к системной многопоточке.
Кстати, полагаю, что и в Аде это иногда нужно
[13:05:34] <ada_ru> (avkvlru) Причём в принципе- можно было оставить вполне рабочий подход паскаля, если уж библиотки си вызвывали такое неприятие. Хотя по иронии судьбы, именно на тот момент языку си в связке с юниксом исполнялось 10 лет, и его библиотеки уже стали стандартом
[13:05:36] <ada_ru> (I_vlxy_I) Также в любом серьезном С++ проекте старше 10-15 лет можно обнаружить собственную реализацию строк. Причём, часто, не одну
[13:05:44] <ada_ru> (I_vlxy_I) Про IO я молчу вообще
[13:06:23] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Причём в принципе- м…>
Стали стандартом где? В CP/M? В Apple II?
[13:06:27] <ada_ru> (avkvlru) Алексей, в Аде доступ к системным библиотекам, не то чтобы неудобный... а очень неудобный. Ну то есть он есть, но достаточно громоздкий...
В си (и си++) общая с системой структура типов.
[13:06:53] <ada_ru> (avkvlru) Ну собственно cp/m как и ms-dos впоследствии брали что тянули
[13:07:02] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Алексей, в Аде досту…>
Но это очень дофига геморроя добавляет - программа не переносима становится
[13:07:16] <ada_ru> (avkvlru) ну так она и в аде становится непереносимой)
[13:07:46] <ada_ru> (avkvlru) Если в той же яви библиотеки ввода вывода были неудобными (громоздкими) но хотя бы рабочими, то в аде они были ещё и нерабочими
[13:07:49] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <ну так она и в аде с…>
Дык она и в java тоже становится :-)
[13:08:35] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Если в той же яве би…>
Ну, жаба она строила свою платформу, она не кроссплатформенный язык :-)
[13:09:10] <ada_ru> (I_vlxy_I) С тем же успехом можно засунуть Аду в линуксовый докер и на винде запускать
[13:09:41] <ada_ru> (avkvlru) Можно было. Но повторюсь. Когда делались библиотеки ввода -вывода для ады- уже 10 лет как перед глазами был объективно неплохой пример, в итоге захвативший весь мир)
[13:10:00] <ada_ru> (avkvlru) И для меня дикая загадка, как и почему он был абсолютно проигнорировал в пользу совершенно дикого решения.
[13:10:08] <ada_ru> (I_vlxy_I) Короче, вопрос по делу - снимает ли озвученную боль gnatcoll и/или матрешка? @reznikmm @nitrocerber
[13:10:53] <ada_ru> (avkvlru) Про матрёшку я честно говоря не знаю. Про gnatcoll - там, имхо, натягивают сову на глобус.
[13:11:02] <ada_ru> (nitrocerber) гнаткол едва ли
[13:11:09] <ada_ru> (avkvlru) Я смотрел на их реализацию взаимодействия с питоном. и у меня был только один вопрос- что они курили)
[13:11:23] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Можно было. Но повто…>
Тогда многими Юникс все еще рассматривался как игрушка не стоящая внимания. В том числе и в нас тут. Взоры были прикованы к настоящим машинам - мейнфреймам
[13:11:36] <ada_ru> (avkvlru) Ну дык на майнфреймах тоже не так было)
[13:11:54] <ada_ru> (avkvlru) Их же тоже практики делали, и даже в коболе всё намного разумнее было сделано
[13:12:01] <ada_ru> (avkvlru) При всей его узкоспециализированности и древности
[13:12:13] <ada_ru> (avkvlru) Более того, я смотрел современный кобол- там вообще всё адекватно)
[13:12:23] <ada_ru> (avkvlru) Ну насколько можно сделать адекватным кобол
[13:12:53] <ada_ru> (avkvlru) То что сделано в аде- не имеет аналогов на практике и не может иметь ;)
[13:13:14] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Ну дык на майнфрейма…>
Ну а теперь даже вот прям сейчас, попробуй сделать такую либу, чтобы оно и на современных мейнфреймах и на макоси и на винде и на линуксе и на haiku os и на FreeRTOS и на vms работало хорошо.
[13:13:23] <ada_ru> (I_vlxy_I) И не тормозило
[13:13:33] <ada_ru> (avkvlru) Да фиг с ними тормозами...
[13:13:38] <ada_ru> (nitrocerber) очередные строки вроде как из матрёшки контора перетягивает себе
[13:13:40] <ada_ru> (nitrocerber) https://github.com/AdaCore/VSS
[13:13:53] <ada_ru> (Victor) отвечает (avkvlru) на <Причём в принципе- м…>
10 лет в 1983? Теоретически это может быть и так.
Но на практике, надо брать время, когда SUN ( из-за бесплатности, как FreeDOS теперь в notebooks на полках магазинов электроники) и другие фирмы стали использовать свои клоны Unix. ( кстати, слабо совместимые между собой)
[13:13:56] <ada_ru> (I_vlxy_I) И чтобы все возможности, привычные по системным лимбам в каждой из систем были в наличии
[13:14:03] <ada_ru> (avkvlru) Ну поэтому никто и не страдал таким идиотизмом
[13:14:22] <ada_ru> (avkvlru) Сделали решение, оговорили принципы его реализации (кроме явы, которая таки что-то сделала)
[13:15:01] <ada_ru> (nitrocerber) По части ио конеш все всё признают, но по факту оно никому не нужно. Что логично, если оно плохое, то тот, кому было нужно, сделали не на аде. А кто делает на аде - тем пофигу
[13:15:46] <ada_ru> (avkvlru) Те, кто делает на аде- делают это не по доброй воле ;)
[13:15:58] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <По части ио конеш вс…>
Да в стандартной либе любого языка есть целые разделы, которые говно и не используются
[13:16:27] <ada_ru> (I_vlxy_I) Либо сразу были говном либо со временем стали
[13:16:50] <ada_ru> (avkvlru) Да. Вот только давайте будем честными- ввод вывод, это везде почти ключевое. Интерфейсы, ввод-вывод - это настолько важные элементы, что если они удачны- язык почти всегда взлетает. Вспомните perl и php - языки построенные вокруг ввода вывода)
[13:16:55] <ada_ru> (avkvlru) Их делали любители на коленках)
[13:17:19] <ada_ru> (I_vlxy_I) При этом постепенно и реализация их становится совсем уж говном - ибо поскольку никто не использует, реализуют это чисто для галочки
[13:17:41] <ada_ru> (avkvlru) А в аде ведь и других сюпризов хватало. Вспомните запрет на изменение параметров функций.
[13:17:57] <ada_ru> (avkvlru) Или запрет на процедурные типы
[13:18:05] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Их делали любители н…>
И только для одной оси изначально, да. Если ты тащишь это в стандарт, то ты не можешь себе это позволить же
[13:18:40] <ada_ru> (avkvlru) Ну ада же себе позволила)
[13:19:02] <ada_ru> (avkvlru) Своя концепция задач, своя концепция ввода вывода, своё виденье функций)
[13:19:13] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Ну ада же себе позво…>
Вроде нет. Сделали кривое неудобное и тормозное говно, одинаково хреново работающее везде
[13:19:31] <ada_ru> (avkvlru) частицу "не" пропустили)
[13:20:09] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <А в аде ведь и други…>
Вроде как это даже несколько правильно - кажется это была попытка внести понятие чистых функций в язык. И это очень круто.
[13:20:26] <ada_ru> (avkvlru) И ненадолго.
[13:20:34] <ada_ru> (nitrocerber) прагма пюре! картеыельное
[13:20:48] <ada_ru> (I_vlxy_I) Другое дело, что нужны ещё тогда возможности возвращать туплы а не только одно значение
[13:21:00] <ada_ru> (I_vlxy_I) И нужны и не чистые функции
[13:21:11] <ada_ru> (nitrocerber) Нечистая функция на языке ада
[13:21:14] <ada_ru> (nitrocerber) зовите батюшку
[13:21:16] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <прагма пюре! картофе…>
А оно на функцию или на пакет?
[13:21:23] <ada_ru> (nitrocerber) на пакет
[13:21:28] <ada_ru> (avkvlru) Вообще ада - это фантастическое противоречие между красивыми языковыми конструкциями, и феерически убогими библиотеками
[13:21:29] <ada_ru> (I_vlxy_I) Хреново
[13:21:50] <ada_ru> (I_vlxy_I) Я вообще не понимаю чем сейчас в Аде функция от процедуры отличается
[13:21:54] <ada_ru> (avkvlru) Причём совершенно непонятно зачем прикрученными тем более в таком виде. Не будь их- она была бы на порядок юзабельнее, а библиотеки бы прижились нормальные
[13:21:56] <ada_ru> (nitrocerber) пюре - это про элаборейшн вообще так то
[13:22:02] <ada_ru> (I_vlxy_I) И зачем их там две
[13:22:25] <ada_ru> (avkvlru) процедуру нельзя использовать для переопределниея операции +
[13:22:28] <ada_ru> (avkvlru) функцию можно.
[13:22:56] <ada_ru> (I_vlxy_I) Я бы убрал процедуры вовсе :-)
[13:23:23] <ada_ru> (nitrocerber) ооо, сишная ересь пошла
[13:23:49] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <ооо, сишная ересь по…>
Расскажи это хаскеллистам и прочим функциональщикам :-)
[13:24:00] <ada_ru> (I_vlxy_I) Питонистам тоже
[13:24:04] <ada_ru> (nitrocerber) расскажите мне про боинги, летающие на хаскеле)
[13:24:47] <ada_ru> (Victor) отвечает (avkvlru) на <Да. Вот только давай…>
Вот только: какой именно ввод-вывод?
Как насчёт векторных дисплеев?
8мидюймовых дисководов?
( вот перфокарт уже на 88 год не застал)
Какие были шансы к 1983 запроектировать современный ввод-вывод?
И задача ставилась сделать ЯП на следующие 40 лет, минимум.
[13:24:49] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <расскажите мне про б…>
Ну, на С++ то летают и ничего :-)
[13:25:01] <ada_ru> (nitrocerber) Я вообще не понимаю, что у масс за проблема с функциями и процедурами.
[13:25:48] <ada_ru> (nitrocerber) Удобно жи
[13:26:01] <ada_ru> (nitrocerber) Сахар, но удобный
[13:26:10] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <Я вообще не понимаю,…>
Я хочу иметь возможность возвращать не 0 или 1 значение (при этом меняя ключевое слово до кучи), а 0,1,2,3...
[13:26:29] <ada_ru> (Victor) отвечает (nitrocerber) на <Я вообще не понимаю,…>
Да никаких...
Только потом переживают, что из-за alising-а оптимизировать сложно и Fortran обгоняет.
[13:27:10] <ada_ru> (I_vlxy_I) И точно не хочу возвращать значения через аргументы
[13:27:35] <ada_ru> (nitrocerber) создай составной тип возвращаемого значения и хоть увозвращайся)
[13:28:29] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <создай составной тип…>
Бюрократия ради бюрократии?
[13:28:36] <ada_ru> (nitrocerber) Анонимные типы параметров-то выпилили, а ты хочешь анониный да ещё и произвольносостаной тип возвращаемого значения по сути
[13:28:50] <ada_ru> (nitrocerber) ради наглядности и утверждённости верховным советом кпсс
[13:29:02] <ada_ru> (nitrocerber) а то пятон получится
[13:29:17] <ada_ru> (nitrocerber) ежли аболиш олл бюрокраси
[13:29:24] <ada_ru> (nitrocerber) или даже тупоскрипт...
[13:34:06] <ada_ru> (Oleg) отвечает (I_vlxy_I) на <Например select для …>
Не только 😊 я использовал с сетью в совсем простых вещах
[13:37:13] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <Анонимные типы парам…>
можно не тип, можно как в Го :-) там просто на уровне языка есть возможность вернуть несколько значений
[13:37:43] <ada_ru> (I_vlxy_I) func vals() (int, int) {
return 3, 7
}
[13:38:58] <ada_ru> (nitrocerber) а как выглядит вызов такой функции?
[13:39:18] <ada_ru> (I_vlxy_I) a, b := vals();
[13:40:05] <ada_ru> (I_vlxy_I) или
a, b = vals();если a и b уже были объявлены выше
[13:42:16] <ada_ru> (I_vlxy_I) https://gobyexample.com/multiple-return-values
[13:42:35] <ada_ru> (nitrocerber) брр. никогда не привыкну. уволят - в официанты пойду 100%
[13:43:35] <ada_ru> (I_vlxy_I) к чему именно? :-)
[13:44:49] <ada_ru> (nitrocerber) к птичьему языку
[13:45:53] <ada_ru> (I_vlxy_I) к которому? :-)
[13:46:00] <ada_ru> (nitrocerber) да ко всем им
[13:46:08] <ada_ru> (nitrocerber) Ну и да, переменные тебе всё равно понадобились
[13:46:23] <ada_ru> (nitrocerber) в чём отличие от out параметров процедуры-то?
[13:46:57] <ada_ru> (nitrocerber) или можно такой вызов подсунуть другой функции, ожидающей два параметра?
[13:47:17] <ada_ru> (I_vlxy_I) ну как сказать... вот у рептилий и там птиц например - все делается через анус. ну, то есть и писают и какают и размножаются. но более развитые виды, например млекопитающие, имеют все же раздельные гхм.. интерфейсы для этого
[13:47:46] <ada_ru> (I_vlxy_I) так вот - я функцию хочу кормить данными через одно место, а чтобы она свой выхлоп направляла в другое отверстие
[13:47:55] <ada_ru> (I_vlxy_I) чтобы было явным образом видно что куда и откуда
[13:50:37] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <или можно такой вызо…>
в Го, к сожалению, нет :-(
[13:51:05] <ada_ru> (I_vlxy_I) в более продвинутых языках - да
[13:51:53] <ada_ru> (nitrocerber) отвечает (I_vlxy_I) на <в Го, к сожалению, н…>
ну тогда это чисто сахар, и тот не рафинированный
[13:52:30] <ada_ru> (geniepro) в правильном языке у функции должен быть ровно один параметр и один результат, другое дело, что и параметр, и результат должны иметь возможность быть не только скаляром, но и структурой — массив, запись (в том числе анонимная — кортёж), или даже другая функция...
[13:52:36] <ada_ru> (geniepro) и да. в хаскелле так и сделано
[13:53:09] <ada_ru> (I_vlxy_I) отвечает (geniepro) на <в правильном языке у…>
Любишь курицу карри? :-)
[13:53:20] <ada_ru> (geniepro) отвечает (I_vlxy_I) на <Любишь курицу карри?…>
иногда она очень в тему
[13:54:02] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <ну тогда это чисто с…>
дофига удобный сахар, повышающий читабельность кота
[13:54:15] <ada_ru> (I_vlxy_I) а, следовательно, и надежность
[13:54:26] <ada_ru> (I_vlxy_I) когда ты знаешь, что данные лезут только вот из этого отверстия
[13:54:44] <ada_ru> (I_vlxy_I) и что игнорировать их тебе придется явным образом
[13:55:17] <ada_ru> (nitrocerber) С отверстиями аналогия такая себе, предлагаю рот, нос и глаза пересунуть на разные плоскости головы. Чтобы ненароком не съесть рассматриваемое. Ну или не увидеть запах)
[13:55:19] <ada_ru> (I_vlxy_I) ну и благодаря инновационному := это использовать совсем удобно становится. не то, что в Аде :-)
[13:59:50] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <Короче, вопрос по де…>
В чём боль-то? В том, что в Аде IO не похож на Си 80-х годов? Я этому только рад! Что в Аде не так, как в Паскаль? Я не знаю, как в Паскаль. Конкретных моментов, что не так и как сделать лучше, я не услышал. Поэтому, не знаю, что поможет выступающему
[14:04:07] <ada_ru> (I_vlxy_I) Как я понял, проблема как минимум в тормозах, отсутствии локов и регулярным желанием дописать \n в конец файла. @avkvlru что-то ещё?
[14:04:53] <ada_ru> (I_vlxy_I) у меня, например, оно ещё и флашило регулярно, насколько я помню. ну, это по статье тормозов проходит.
[14:10:54] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <Как я понял, проблем…>
Локи - не переносимая фича, в 80-х годах ее не возможно было сделать в стандарте, а сейчас хз. Для строчно-ориентированного вывода в файл вполне логично ожидать, что файл состоит из целого количества строк, разве нет? Тормоза, ну то особенность реализации. Никто не жаловался, в общем 😂
[14:13:20] <ada_ru> (I_vlxy_I) насколько я помню, там тормоза, на тему флашей, которые были у меня - они в стандарте прописаны.
про хитромудрый алгоритм добавления \n в конец файла - тоже есть в стандарте. и это даже правильно c точки зрения позикса и высоких абстракций, если только ты не пытаешься бинарный файл писать через этот стрим :-)
часто все же ожидаешь, что в файл запишется ровно столько байтиков, сколько ты туда сложил.
[14:14:51] <ada_ru> (reznikmm) Ну если ты пытаешься писать бинарный файл через строковый АПИ, то... Когда я пишу в файл байтики, я не пользуюсь строковым АПИ
[14:16:10] <ada_ru> (reznikmm) Есть Ada.Streams.Stream_IO, который больше подходит для этого. Не нужно забивать гвозди микроскопом и говорить, что он плохой, а его создатели - балбесы
[14:16:28] <ada_ru> (I_vlxy_I) дык у меня и через стримы это вылезало вроде бы
[14:19:09] <ada_ru> (I_vlxy_I) хотя, возможно, стримы были текстовые :-)
[14:19:16] <ada_ru> (reznikmm) Лишняя \n? Этого не может быть!
[14:21:51] <ada_ru> (I_vlxy_I) отвечает (I_vlxy_I) на <procedure Write_PPM(…>
Вот пример
[14:22:19] <ada_ru> (reznikmm) with Ada.Streams.Stream_IO;
procedure Main is
Output : Ada.Streams.Stream_IO.File_Type;
begin
Ada.Streams.Stream_IO.Create (Output, Name => "/tmp/aaa.txt");
Ada.Streams.Stream_IO.Write (Output, (1 .. 3 => 0));
end Main;
max@untu:/tmp$ ls -l /tmp/aaa.txt
-rw-rw-r-- 1 max max 3 июл 21 14:06 /tmp/aaa.txt
[14:22:55] <ada_ru> (I_vlxy_I) Если в моем примере последний Put_Line заменить на тупо Put, то в конец файла, после бинарных данных, запишется лишний \n
[14:28:30] <ada_ru> (reznikmm) Он не лишний. Put записывает часть строки. То, что строка оканчивается переводом строки - это логично, как по мне.
[14:29:39] <ada_ru> (I_vlxy_I) оно логично становится после того, как узнаешь про это поведение :-)
[14:30:47] <ada_ru> (I_vlxy_I) а то же ж это как если бы в Си, ты сделал fprintf(file, "hello"); а потом еще 100500 всяких write'ов не через printf, а потом, при закрытии файла у тебя бы в конец дописался бы \n
[14:31:10] <ada_ru> (I_vlxy_I) причем, подозреваю, что оно допишет \n даже если он там уже есть, просто пришел не через Put_Line, а через бинарь
[14:32:22] <ada_ru> (reznikmm) не не понятно, зачем писать бинарные данные в тесктовый файл. Нельзя писать бинарные данные в бинарный файл, а текстовые в тестовый?
[14:33:12] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <не не понятно, зачем…>
ну посмотри - это ж ppm, а ppm это текстовобинарный формат данных
[14:33:14] <ada_ru> (nitrocerber) отвечает (reznikmm) на <не не понятно, зачем…>
это ущемление по типу файла! трансфайлотипофоб!
[14:33:23] <ada_ru> (I_vlxy_I) то есть там смесь текста и бинарей
[14:34:12] <ada_ru> (I_vlxy_I) https://en.wikipedia.org/wiki/Netpbm
[14:35:11] <ada_ru> (I_vlxy_I) В моем случае это P6
[14:35:19] <ada_ru> (I_vlxy_I) Но может быть и P3
[14:35:55] <ada_ru> (I_vlxy_I) естественно мне нужен удобный способ писать текстовые данные в бинарный файл
[14:44:08] <ada_ru> (reznikmm) Естественно 😄
[14:44:36] <ada_ru> (I_vlxy_I) как мне путлайнаями в бинарный файл писать? это вообще законно? :-)
[14:45:24] <ada_ru> (avkvlru) отвечает (reznikmm) на <max@untu:/tmp/shared…>
Под виндоус на любых версиях эта конструкция выдаёт ошибку
[14:47:23] <ada_ru> (avkvlru) package body Unit1 is
function Add (A, B : Integer) return Integer is
begin
return A + B;
end Add;
end Unit1;
[14:47:44] <ada_ru> (I_vlxy_I) а если без дополнительных опций? такое ощущение, что оно рантайм не нашло
[14:48:00] <ada_ru> (I_vlxy_I) и это ж не ошибка компиляции
[14:48:02] <ada_ru> (avkvlru) да понятно, что линковки, но о ней речь и шла...
[14:48:04] <ada_ru> (Oleg) отвечает (nitrocerber) на <брр. никогда не прив…>
😊 так в плюсах уже тоже нечто подобное есть
[14:48:20] <ada_ru> (nitrocerber) так а я и на них не пишу)
[14:48:29] <ada_ru> (I_vlxy_I) отвечает (Oleg) на <😊 так в плюсах уже т…>
что именно?
[14:49:09] <ada_ru> (Oleg) отвечает (I_vlxy_I) на <что именно?>
Декомпозици
[14:49:38] <ada_ru> (reznikmm) отвечает (avkvlru) на <unit1.o:unit1.adb:(.…>
В винде для линковки ДЛЛ нужно указывать не только объектники но и зависимые либы. gprbuild это всё знает и умеет, не нужно заниматься лишним
[14:49:43] <ada_ru> (I_vlxy_I) отвечает (Oleg) на <Декомпозици>
оно на скриншотах конечно похоже, но по сути совсем другое таки
[14:49:53] <ada_ru> (avkvlru) ясно. Пошел разбираться с gprbuild)
[14:50:17] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <как мне путлайнаями …>
Put_Line - нет, но можно строкку писать через String'Write, например
[14:50:27] <ada_ru> (Oleg) отвечает (I_vlxy_I) на <оно на скриншотах ко…>
Ну применять можно похоже, auto [x, z] = chegoto();
[14:51:02] <ada_ru> (I_vlxy_I) отвечает (Oleg) на <Ну применять можно п…>
ну, типа да. но с точки зрения языка это всё же сильно другая конструкция.
[14:51:11] <ada_ru> (avkvlru) Алексей, надо через стрим работать
[14:51:16] <ada_ru> (I_vlxy_I) тут же одно возвращаемое значение все равно
[14:51:36] <ada_ru> (Oleg) отвечает (I_vlxy_I) на <ну, типа да. но с то…>
Ну да, возврат структуры и потом распаковка
[14:51:47] <ada_ru> (avkvlru) Ну или объявлять new direct_Io(character) и вручную всё конвертировать
[14:52:02] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Алексей, надо через …>
оно убого смотрится же :-(
[14:52:09] <ada_ru> (avkvlru) Это же ада)
[14:52:17] <ada_ru> (I_vlxy_I) А, ну ок тогда.
[14:52:30] <ada_ru> (I_vlxy_I) Блин. ХОЧУ ФОРМАТНЫЙ ВВОД-ВЫВОД!
[14:52:34] <ada_ru> (avkvlru) Учти, что стрим не может цепляться к бинарникам
[14:52:36] <ada_ru> (I_vlxy_I) но это наверно вообще не в этой реальности
[14:53:09] <ada_ru> (avkvlru) А если цепанешься к тестовикам- нужно хоть один путлайн сделать, иначе оно тебе само его добавит в конце)
[14:53:14] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Учти, что стрим не м…>
Э? Только к текстовым файлам? Дык оно ж мне тогда один фиг небось при close воткнет \n
[14:53:16] <ada_ru> (avkvlru) ну ты помнишь, тут разбирались
[14:53:24] <ada_ru> (I_vlxy_I) ну да
[14:53:49] <ada_ru> (avkvlru) Можно ещё чистый стимники открывать. Изначальные так сказать. Пут-лайт в них не получится, но смешивать данные сможешь
[14:53:51] <ada_ru> (I_vlxy_I) Тогда я не понимаю как в Аде вообще в принципе с бинарем работать.
[14:54:09] <ada_ru> (avkvlru) Ну если бинарь одной структуры то через директ ио)))
[14:54:22] <ada_ru> (avkvlru) а если разнародной, то через stream_io
[14:54:24] <ada_ru> (I_vlxy_I) Короче, нагородили.. абстракций. нужена, короче, своя IO либа
[14:54:32] <ada_ru> (avkvlru) а в 83м было вообще никак
[14:54:41] <ada_ru> (avkvlru) Поэтому я и говорил что язык неработоспособный был в принципе
[14:54:47] <ada_ru> (I_vlxy_I) максимально простая, тупая и позволяющая отстрелить ногу. но отстрелить её самостоятельно, а не в автоматическом режиме
[14:55:27] <ada_ru> (I_vlxy_I) но вот в аццком IO (а может и в строках - я хз куда это приткнуть), явно не хватает возможности форматного ввода-вывода
[14:55:49] <ada_ru> (I_vlxy_I) в Си - есть, в фортране - есть. где угодно есть. в Аде - нету
[14:55:56] <ada_ru> (avkvlru) да...
[14:56:00] <ada_ru> (avkvlru) а ты думаешь я зря ругался?
[14:56:09] <ada_ru> (I_vlxy_I) хотя.. возможно в java нет тоже :-)
[14:56:14] <ada_ru> (avkvlru) есть
[14:56:20] <ada_ru> (I_vlxy_I) а где там?
[14:56:25] <ada_ru> (avkvlru) ты когда начнёшь работать со стримами- там ещё пара сюрпризов тебя ждёт
[14:56:45] <ada_ru> (avkvlru) я забыл как называется библиотека но есть. Хотя возможно она неродная
[14:57:21] <ada_ru> (I_vlxy_I) А, вспомнил. В жабе ж есть System.out.printf
[14:57:24] <ada_ru> (I_vlxy_I) так что всё ок
[14:57:37] <ada_ru> (I_vlxy_I) и оно там безопасное, в отличие от сишечки
[14:57:45] <ada_ru> (avkvlru) там и покруче есть я просто забыл название
[14:58:46] <ada_ru> (I_vlxy_I) с версии 1.5 появилось. изначально то там не было
[14:59:04] <ada_ru> (I_vlxy_I) ну, мне покруче не надо. мне бы уровня принтфа что-то :-) или форматных строк в питоняке
[14:59:58] <ada_ru> (I_vlxy_I) но, поскольку в аде нема процедур с переменным числом аргументов... и рефлекшина нет... и вариадик темплейтов нет... я хз как такое может быть сделано на Аде
[15:00:57] <ada_ru> (avkvlru) Interfaces.C_Streams
[15:01:09] <ada_ru> (avkvlru) может тебе это подойдёт?
[15:02:19] <ada_ru> (I_vlxy_I) да, вполне. теплый ламповый fopen :-)
[15:02:48] <ada_ru> (avkvlru) про сюпризы сразу написать или сам насладишься?
[15:03:03] <ada_ru> (I_vlxy_I) ну, там со строками я сразу предвижу
[15:03:08] <ada_ru> (I_vlxy_I) но ты напиши лучше :-)
[15:03:49] <ada_ru> (avkvlru) лишить тебя удовольствия?
[15:03:57] <ada_ru> (avkvlru) нет у меня совесть не позволяет)
[15:04:18] <ada_ru> (I_vlxy_I) что, там даже с fopen'ом сюрпризы?
[15:05:56] <ada_ru> (avkvlru) ну не то, чтобы сюрпризы... Просто там память начинает вёдрами утекать
[15:06:07] <ada_ru> (avkvlru) Поэтому ничего большого лучше не пиши
[15:06:19] <ada_ru> (avkvlru) Хотя возможно, это проблема именно в виндоус, я в линуксе не тестил
[15:06:31] <ada_ru> (I_vlxy_I) надо глянуть.
[15:07:01] <ada_ru> (avkvlru) package Ada.Direct_IO.C_Streams - а вот этим лучше не пользуйся. Дело в том, что там close() работают своеобразно. Можно пол-файла потерять)
[15:07:42] <ada_ru> (I_vlxy_I) то есть одни при Close тебе в файл лишнего пишут, другие половину файла теряют а при третьем варианте память течет? :-)
[15:07:50] <ada_ru> (I_vlxy_I) три стула даже, не два!
[15:07:51] <ada_ru> (I_vlxy_I) есть выбор
[15:08:03] <ada_ru> (avkvlru) В теории конечно можно совмещать, direct_io и c_stream (не путать с нативным адовским стримом- с ним совмещать нельзя!!!) но как я понял, лучше этого не делать
[15:08:07] <ada_ru> (avkvlru) Да, там большой выбор
[15:08:37] <ada_ru> (avkvlru) Ну и ещё тебя ждут сюрпризы при лиинковке, но в общем, как тут правильно сказали, надо уходить с gnatmake на gprbuild
[15:09:19] <ada_ru> (avkvlru) В общем- развлекайся. Почему-то мне кажется, что тебе понравится)
[15:09:47] <ada_ru> (avkvlru) Но в любом случае нативная линуксовая библиотека работает заметно быстрее остальных, тут грех жаловаться.
[15:10:43] <ada_ru> (I_vlxy_I) хех
[15:10:58] <ada_ru> (avkvlru) а совскем забыл... там в форм- надо указать в какой кодировке ты имя написал. Это недокументированная фича, но так надо
[15:11:18] <ada_ru> (avkvlru) encoding=utf8 или encoding=8bits
[15:11:30] <ada_ru> (I_vlxy_I) я когда писал сортировку файлов на Аде воткнулся в тормоза ввода-вывода на Аде в линуксе плюс в тормоза Адского вектора и адской же сортировки из стандартной либы
[15:11:50] <ada_ru> (I_vlxy_I) ну, то есть оно все в совокупности конечно не в 100 раз проигрывало в скорости конкурентам, но значительно.
[15:12:02] <ada_ru> (avkvlru) Ну у меня оно даже питону проигрывает
[15:12:09] <ada_ru> (avkvlru) поэтому я думаю насчёт 100 раз не преувеличение
[15:12:36] <ada_ru> (I_vlxy_I) не, у меня где-то Аццкая прога прожевывала секунд за 30, а плюсовая версия за 4-5.
[15:12:48] <ada_ru> (I_vlxy_I) файлик в несколько гиг.
[15:12:58] <ada_ru> (avkvlru) Ой, совсем забыл- когда пишешь русские имена файлов- их надо обязательно в 8bit писать. В utf8- их не понимает. Не перепутай)
[15:13:22] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Ой, совсем забыл- ко…>
а это точно не виндоспецифично?
[15:13:33] <ada_ru> (avkvlru) вполне возможно что и специфично
[15:13:37] <ada_ru> (I_vlxy_I) ибо в линуксе я вообще и думать забыл о проблемах с кодировкой
[15:13:44] <ada_ru> (I_vlxy_I) абсолютно все жрет utf8
[15:13:52] <ada_ru> (I_vlxy_I) в винда вот проблемы - там не utf8
[15:13:57] <ada_ru> (avkvlru) возможно.
[15:14:17] <ada_ru> (avkvlru) кстати подскажи как маки себя ведут?
[15:14:28] <ada_ru> (I_vlxy_I) на маках utf8
[15:14:30] <ada_ru> (avkvlru) ты же вроде пробовал аду на маках? Там всё совсем грустно или ниче так?
[15:14:42] <ada_ru> (avkvlru) нет я про аду в целом. То, что gps нет я уже понял
[15:14:44] <ada_ru> (I_vlxy_I) оооой
[15:15:13] <ada_ru> (I_vlxy_I) на маке прежде всего стало грусно с gcc и вообще с любым сторонним тулчейном для разработки :-(
[15:15:38] <ada_ru> (I_vlxy_I) то есть нужно конкретно напрячься (вплоть до пересборки и подписывания руками) чтобы завести там gcc и, особенно, gdb
[15:15:50] <ada_ru> (I_vlxy_I) адаспецифичных проблем я там не помню
[15:16:16] <ada_ru> (I_vlxy_I) пока что все перекрывается gcc-специфичными
[15:17:21] <ada_ru> (I_vlxy_I) а так, когда оно ещё работало, до того как яббл начал заручивать гайки со страшной силой, работало нормуль
[15:17:25] <ada_ru> (I_vlxy_I) я бы сказал, что лучше чем в винде
[15:17:33] <ada_ru> (I_vlxy_I) где-то посередине между виндой и линуксом
[15:17:52] <ada_ru> (I_vlxy_I) но сейчас, боюсь, потихоньку начнет все разваливаться просто из за того, что будут меньше использовать и тестировать
[15:33:20] <ada_ru> (I_vlxy_I) сейчас еще весело будет как только начнут выходить армовые маки :-)
[15:33:38] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <ты же вроде пробовал…>
думаешь не переехать ли на мак? :-)
[15:35:34] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <Тогда я не понимаю к…>
http://www.ada-ru.org/sssw/chapter_09 См. "Потоки ввода-вывода" там ниже
[15:37:05] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <http://www.ada-ru.or…>
👍 Спасибо, потыкаю.
[15:38:33] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <но вот в аццком IO (…>
Изначально предполагалось, что пользователь настроит генериков для своих типов и будет использовать Put и Put_Line из этих интсансов. Ты учти, что уюзера могут быть тучи стоих примитивных типов (метры, секунды, метры_в_секунды и пр). и нужно их все уметь обрабатывать
[15:41:19] <ada_ru> (I_vlxy_I) ммм... а как тут генерики помогут?
[15:42:43] <ada_ru> (I_vlxy_I) а чем отличается распечатка метров от распечатывания секунд в общем случае?
ну и часто как именно печатать больше зависит не от типа, а от места, куда печатать и когда печатать.
[15:43:18] <ada_ru> (I_vlxy_I) те же самые метры мне в окошко нужно напечатать с одной точностью, а в лог - с другой. ну и строку вокруг значения тоже по разному сформировать
[15:52:20] <ada_ru> (reznikmm) отвечает (avkvlru) на <Ой, совсем забыл- ко…>
Да что за дичь?!
with Ada.Streams.Stream_IO;
with Ada.Strings.UTF_Encoding.Wide_Strings;
procedure Main is
Hello : Wide_String := "/tmp/привет.txt";
Output : Ada.Streams.Stream_IO.File_Type;
begin
Ada.Streams.Stream_IO.Create
(Output,
Name => Ada.Strings.UTF_Encoding.Wide_Strings.Encode (Hello));
Ada.Streams.Stream_IO.Write (Output, (1 .. 3 => 0));
end Main;
$ ls -l /tmp/привет.txt
-rw-rw-r-- 1 max max 3 июл 21 15:35 /tmp/привет.txt
[15:53:19] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <Да что за дичь?!
wit…>
а это точно винда? :-)
[15:55:16] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <ммм... а как тут ген…>
Ну ты настраиваешь ввод-вывод на конкретный тип. И компилятор проверяет, что ты ему даешь метры а не секунды, ну как и в других частях программы.
[15:56:13] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <а это точно винда? :…>
Нет конечно! 😊
[15:56:29] <ada_ru> (reznikmm) что, виртуалку поднимать чтоли? 😕
[15:56:40] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <Нет конечно! 😊>
Нет винды - нет проблем! Я всегда говорил, что эту нестандартную экзотичную ось давно закопать пора.
[16:00:15] <ada_ru> (nitrocerber) На венде жопа
[16:00:32] <ada_ru> (reznikmm) $ ./obj/main.exe
$ ls -l /tmp/*.txt
-rwxr-xr-x 1 reznik None 3 Jul 21 14:44 /tmp/привет.txt
[16:00:43] <ada_ru> (nitrocerber) картинка https://www.ada-ru.org/files/bot/2020-07-21-x13.jpg
[16:00:52] <ada_ru> (reznikmm) у меня всё работает. 👻
[16:01:29] <ada_ru> (reznikmm) cygwin:
$ echo $LANG
en_US.UTF-8
[16:02:09] <ada_ru> (nitrocerber) аналогично
[16:02:31] <ada_ru> (nitrocerber) а компилять мейн надо с чем-то особенным?
[16:02:33] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <cygwin:
$ echo $LANG…>
ЧИТЕР!
[16:02:39] <ada_ru> (reznikmm) отвечает (nitrocerber) на <>
В файле проекта ещё нужен -gnatW8:
project Default is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Main use ("main.adb");
package Compiler is
for Switches ("ada") use ("-gnatW8");
end Compiler;
end Default;
[16:02:41] <ada_ru> (nitrocerber) а ну понятно
[16:03:02] <ada_ru> (nitrocerber) во теперь збс
[16:03:09] <ada_ru> (nitrocerber) манглилось на этапе компиляции
[16:03:15] <ada_ru> (I_vlxy_I) а сам файл с сырцами то в какой кодировке? utf8, или в стандартной? :-)
[16:03:37] <ada_ru> (reznikmm) utf-8. А у вас она не стандартная?
[16:03:57] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <utf-8. А у вас она н…>
в винде - нет. там этта.. стандартных много, но ни одна из них не utf8 :-)
[16:04:08] <ada_ru> (reznikmm) Собственно -gnatW8 и говорит, что исходники в utf-8
[16:04:11] <ada_ru> (I_vlxy_I) utf16, cp1251, dos866 и еще несколько
[16:04:27] <ada_ru> (I_vlxy_I) в современных виндах всё же utf16
[16:04:40] <ada_ru> (I_vlxy_I) но консоль всё еще работает в dos866 :-)
[16:04:55] <ada_ru> (reznikmm) ну выставляешь -gnatW<X> соответсвенно исходникам кодироваки и вперёд
[16:05:29] <ada_ru> (I_vlxy_I) а виндовозно апишные функции ожидаеют либо utf16 либо OEM
[16:07:15] <ada_ru> (reznikmm) Да, да, я помню "естественно мне нужен удобный способ..." 😄
[16:07:58] <ada_ru> (reznikmm) Я вот снова libadalang сломал, а вы отвлекаете меня набросить им на вентилятор 😋
[16:09:10] <ada_ru> (nitrocerber) не надо про ололанг -_-
[16:13:22] <ada_ru> (I_vlxy_I) отвечает (nitrocerber) на <не надо про ололанг …>
больная тема?
[16:13:45] <ada_ru> (nitrocerber) перевожу свой прибор с асиса на ололанг жи
[16:15:09] <ada_ru> (I_vlxy_I) уооо!
[16:15:33] <ada_ru> (I_vlxy_I) вместо стандартизированной штуки теперь наколенный ололанг будет везде?
[16:15:44] <ada_ru> (I_vlxy_I) быстро и динамически развивающийся?
[16:25:30] <ada_ru> (Victor) отвечает (I_vlxy_I) на <но консоль всё еще р…>
Можно в UniCode переключить.
[16:42:03] <ada_ru> (Vinpuh) отвечает (I_vlxy_I) на <но консоль всё еще р…>
так cmd устарел(как sh), оставлен для совместимости, PowerShell 7 уже во всю UTF. У вас же на макоси и линюхах тоже между собой не все совместимо уж.
[16:42:57] <ada_ru> (I_vlxy_I) у павершела свои проблемы. алсо обычное консольное приложение запускается в каком окошке? вот которое int main() {} ?
[16:43:05] <ada_ru> (I_vlxy_I) и какая там кодировка?
[17:02:35] <ada_ru> (I_vlxy_I) я не знаю как в виндах, но sh это не эмулятор терминала, и sh никак не управляет тем какая там кодировка будет. sh это просто еще одно приложение которое работает с эмулятором терминала. отображением данных sh не занимается.
[17:09:14] <ada_ru> (reznikmm) Вадим протестировал мою реализацию malloc/free под gnat-llvm WebAssembly и пришёл к выводу, что она работает 😊 Теперь наш wasm ещё ближе к нормальным платформам 👍
[17:10:10] <ada_ru> (Vadim) 👍
[17:12:14] <ada_ru> (I_vlxy_I) а не думали сишный рантайм для этого юзать?
[17:15:28] <ada_ru> (avkvlru) отвечает (reznikmm) на <Да что за дичь?!
wit…>
Это не дичь. Я так понимаю старые сишные библиотеки в винде utf не любят. Хотя на 64 разрядных гнатах я это не тестил
[17:16:12] <ada_ru> (I_vlxy_I) отвечает (avkvlru) на <Это не дичь. Я так п…>
не сишные, WinAPI'шные. WinAPI что старый что новый не умеет в utf8. Оно умеет в OEM или в UTF16
[17:16:25] <ada_ru> (avkvlru) отвечает (I_vlxy_I) на <но консоль всё еще р…>
И старые бд в нем многие
[17:16:32] <ada_ru> (reznikmm) но работает же всё
[17:17:39] <ada_ru> (avkvlru) отвечает (reznikmm) на <но работает же всё>
У меня глючило хотя возможно этой беды в 64 битных реализациях уже не будет
[17:18:59] <ada_ru> (avkvlru) Как вариант - может от оси зависеть. Я то на древних тестмрую
[17:20:02] <ada_ru> (I_vlxy_I) надо еще смотреть в какой кодировке исходник же
[17:20:20] <ada_ru> (I_vlxy_I) и какие ключики компилятору/gprbuild'у давали
[17:20:58] <ada_ru> (I_vlxy_I) Повышение надежности техники! Это вам не Ада! https://www.ada-ru.org/files/bot/2020-07-21-x14.jpg
[17:25:24] <ada_ru> (avkvlru) Интересно он знает что на самолете стоит адский софт?
[17:25:50] <ada_ru> (I_vlxy_I) на этом - вроде не стоит
[17:25:54] <ada_ru> (I_vlxy_I) это ж сушка наша
[17:26:17] <ada_ru> (avkvlru) Проверил библиотеки? Есть на си утечка памяти?
[17:26:32] <ada_ru> (I_vlxy_I) неа, я до домашнего компа не добрался еще
[17:26:52] <ada_ru> (I_vlxy_I) а на каких кейсах там течет? можешь пример?
[17:28:50] <ada_ru> (avkvlru) Могу но завтра, у нас +30 я уполз на острова тут только телефон
[17:29:11] <ada_ru> (I_vlxy_I) ok, давай завтра
[17:29:46] <ada_ru> (avkvlru) При открытии закрытии файлов почему то память не высвобождается
[17:31:40] <ada_ru> (avkvlru) Если бы не эта проблема то си-стрим бы стал кардинальным решением проблем с io в аде
[17:31:56] <ada_ru> (avkvlru) К сожалению только в 2005
[17:38:01] <ada_ru> (I_vlxy_I) а сколько утекает то примерно?
[17:38:14] <ada_ru> (I_vlxy_I) файл при этом реально закрывается? fd не текут?
[17:43:25] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <а не думали сишный р…>
нет. а зачем? свои баги они как-то ближе. можно за одно в потрохах гнатского рантайма разобраться/поковыряться
[17:43:52] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <нет. а зачем? свои б…>
ну, по традиции. адский рантайм же по жизни живет поверх сишного
[17:44:20] <ada_ru> (I_vlxy_I) в отличие от гошного рантайма например, которые делают все сами и дергают ядро самостоятельно за сисколы
[17:44:37] <ada_ru> (reznikmm) отвечает (I_vlxy_I) на <ну, по традиции. адс…>
он же разный. досочный - повер досок без Си вообще
[17:44:55] <ada_ru> (I_vlxy_I) ну, я про нормальный говорю - серверный и десктопный 🙂
[17:45:00] <ada_ru> (reznikmm) полный, да, поверх POSIX
[17:45:31] <ada_ru> (reznikmm) но к чему он там, потоков нет, фалов нет
[17:46:09] <ada_ru> (I_vlxy_I) потоки там есть в сишном рантайме
[17:46:17] <ada_ru> (I_vlxy_I) с файлами - я хз
[17:46:27] <ada_ru> (I_vlxy_I) как реализованы потоки - лучше не знать 🙂 крепче спать будешь
[17:48:25] <ada_ru> (reznikmm) я так понян в ВАСМ нет потоков, т.к. там нельзя указатель стека модифицировать
[17:48:50] <ada_ru> (I_vlxy_I) нету
[17:48:54] <ada_ru> (I_vlxy_I) но есть вебворкеры 🙂
[17:48:59] <ada_ru> (I_vlxy_I) вот тебе и многопоточка
[17:49:07] <ada_ru> (I_vlxy_I) короче, пытреды там реализованы, в сишной либе
[17:50:00] <ada_ru> (reznikmm) не, ну я тоже почу потоки... но наверное не так. У вебворкера же свое адресное пространство?
[17:50:34] <ada_ru> (I_vlxy_I) эммм... не знаю
[17:50:45] <ada_ru> (I_vlxy_I) то есть не знаю что там с точки зрения васма происходит
[17:53:26] <ada_ru> (I_vlxy_I) https://emscripten.org/docs/porting/pthreads.html
[17:53:27] <ada_ru> (I_vlxy_I) вот
[17:53:48] <ada_ru> (I_vlxy_I) есть шаренная память
[18:07:15] <ada_ru> (Vinpuh) отвечает (I_vlxy_I) на <я не знаю как в винд…>
PowerShell тоже не эмулятор терминала, он спокойно работает на лтнюхах, и main ему не нужен.
[18:09:23] <ada_ru> (I_vlxy_I) тогда каким он тут боком к обсуждаемой проблеме?
[18:19:25] <ada_ru> (t91x0) отвечает (avkvlru) на <Неплохую идею типизи…>
Идея типизированных файлов - это не из паскаля. Это из типизированных файловых записей в VAX, см. https://ru.wikipedia.org/wiki/Files-11
[18:47:38] <ada_ru> (I_vlxy_I) картинка https://www.ada-ru.org/files/bot/2020-07-21-x15.jpg
[18:58:43] <ada_ru> (mister_alexander) отвечает (I_vlxy_I) на <>
картинка https://www.ada-ru.org/files/bot/2020-07-21-x16.jpg
[19:03:12] <ada_ru> (I_vlxy_I) отвечает (mister_alexander) на <>
но, вроде бы в isOdd нет никаких хитростей
[19:03:22] <ada_ru> (I_vlxy_I) https://github.com/jonschlinkert/is-odd/blob/master/index.js
[19:03:26] <ada_ru> (I_vlxy_I) вот же ж
[19:04:24] <ada_ru> (I_vlxy_I) хотя с учетом того, что integer и double у них тут не считаются разными типами, судя по типу выкидываемого исключения...
[19:04:36] <ada_ru> (I_vlxy_I) if (!isNumber(n)) {
throw new TypeError('expected a number');
}
if (!Number.isInteger(n)) {
throw new Error('expected an integer');
}
[19:27:21] <ada_ru> (I_vlxy_I) а вот, приходится на хабре в комментах немного про Аду писать https://habr.com/en/company/huawei/blog/511854/
[20:02:37] <ada_ru> (reznikmm) 👍 Кстати, про Nvidia, пыхтят, аж щёки надувают https://github.com/AdaCore/ada-spark-rfcs/blob/1e5957db36d3719c768037a6126213196d9f4ebd/considered/rfc-distributed_memory.rst
[20:03:32] <ada_ru> (I_vlxy_I) отвечает (reznikmm) на <👍 Кстати, про Nvidia…>
Круто!
[20:25:37] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <а вот, приходится на…>
> libc++ (наиболее полная реализация стандартной библиотеки C++).
Как перестать истерически ржать?
[20:25:58] <ada_ru> (I_vlxy_I) отвечает (shiz01) на <> libc++ (наиболее п…>
а у кого полнее?!?!?!?!?!?!?
[20:26:29] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <а у кого полнее?!?!?…>
libstdc++ гораздо более полно поддерживает.
[20:27:16] <ada_ru> (shiz01) Блин, да у меня 80% софта на 17 стандарте пол года назад с libc++ не собиралось.
[20:27:46] <ada_ru> (I_vlxy_I) ну, как бы то есть может у тебя шланг престарелый был/
[20:27:47] <ada_ru> (I_vlxy_I) ?
[20:28:13] <ada_ru> (I_vlxy_I) или ты юзал 17ые плюсы как-то странно и это хреновой была реализация именно в libstdc++?
[20:28:23] <ada_ru> (I_vlxy_I) то есть что именно стандартны либы были не совместимы
[20:29:14] <ada_ru> (shiz01) отвечает (shiz01) на <Блин, да у меня 80% …>
pmr до сих пор не поддерживает. Хотя это было ещё в gcc 9.
[20:29:22] <ada_ru> (shiz01) https://en.cppreference.com/w/cpp/compiler_support
[20:30:00] <ada_ru> (I_vlxy_I) хотя, судя по этой табличке, да. libstdc++ кручее
[20:31:42] <ada_ru> (shiz01) Сам шланг, как компилятор - топ. Но стандартную либу я буду бзать libstdc++. Ибо libc++ убога.
Да блин, даже сам кланг по умолчанию юзает libstdc++, если она есть. И лишь флагом компилятора можно сказать - юзай libc++.
[20:32:26] <ada_ru> (I_vlxy_I) ну, это чисто для совместимости же с остальными либами в дистрибутиве операционки!
[20:33:10] <ada_ru> (shiz01) У libc++ есть лишь два преимущества:
1. Портируемость.
2. Код легче читать.
[20:33:55] <ada_ru> (I_vlxy_I) а может оно еще и быстрее например?
[20:34:01] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <ну, это чисто для со…>
Ага, конечно.
Дело совсем не в том, что на неё почти забили и в приоритете - clang.
[20:34:30] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <а может оно еще и бы…>
Точно нет. Libstdc++ гораздо шустрее. Но трудночитаемее.
[20:34:48] <ada_ru> (I_vlxy_I) в плане компиляции шустрее, или в плане реализации?
[20:35:16] <ada_ru> (I_vlxy_I) а вот мелкософты свою стандартную либу уже на модули порезали! вахаха! правда стандарт не разрешает пока такого, но MS уже да
[20:35:36] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <в плане компиляции ш…>
Libstdc++ - шустрее в плане исполнения, libc++ в плане скорости компиляции.
[20:35:54] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <а вот мелкософты сво…>
Еинип, как год назад.
[20:36:37] <ada_ru> (I_vlxy_I) ну, теперь модули официально приняли, так что порежут еще раз 🙂
[20:36:43] <ada_ru> (I_vlxy_I) а потом еще раз 🙂
[20:36:45] <ada_ru> (shiz01) :)
[20:36:58] <ada_ru> (I_vlxy_I) MSБОЛЬ!
[20:38:50] <ada_ru> (I_vlxy_I) <прислал документ>
[20:39:55] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <>
:-)
А что за доклад?
(да, я там не был, каюсь).
[20:40:13] <ada_ru> (I_vlxy_I) Анатомия Address Sanitizer'a
[20:40:38] <ada_ru> (I_vlxy_I) рассказывал, короче, как ASAN унутре себя устроен, как работает, где у него дырки, где в компиляторе живет - всякое такое
[20:43:03] <ada_ru> (I_vlxy_I) поминал в процессе Аду 🙂
[20:44:59] <ada_ru> (I_vlxy_I) коммент на хабре про то, что klee жив, в контексте Ады стал 666 у меня 🙂
[21:17:22] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <поминал в процессе А…>
Еееее!
[21:18:02] <ada_ru> (shiz01) отвечает (I_vlxy_I) на <коммент на хабре про…>
klee?
[21:18:23] <ada_ru> (I_vlxy_I) Ага
[21:18:36] <ada_ru> (I_vlxy_I) Там ссылка есть
[21:18:41] <ada_ru> (I_vlxy_I) Что это такое
[21:20:30] <ada_ru> (shiz01) А, это именно vm.
Ясно.
[21:29:16] <ada_ru> (mister_alexander) отвечает (I_vlxy_I) на <а вот, приходится на…>
Habr вообще невозможно читать.
[22:10:20] <ada_ru> (I_vlxy_I) отвечает (mister_alexander) на <Habr вообще невозмож…>
Почему?
[22:11:51] <ada_ru> (I_vlxy_I) Я понимаю конечно, что там по русски все, это минус, но вполне терпимо таки
[22:16:07] <ada_ru> (mister_alexander) отвечает (I_vlxy_I) на <Почему?>
потому что это ресурс на котором школьники пишут для дошкольников
[22:16:24] <ada_ru> (mister_alexander) там может пару раз в год нормальные статьи появляются
[22:16:37] <ada_ru> (I_vlxy_I) отвечает (mister_alexander) на <потому что это ресур…>
Иногда школьникам за 60 или за 70 лет :-)
[22:17:04] <ada_ru> (I_vlxy_I) В частности автора этой статьи я знаю лично. Мой бывший коллега. Точно не школьник :-)
[22:48:19] <ada_ru> (geniepro) rustRustRUST!!!
yorool-gui.livejournal.com/269301.html
[22:50:46] <ada_ru> (I_vlxy_I) отвечает (geniepro) на <rustRustRUST!!!
yoro…>
ну они бы еще гуй для FreeDOS'a написали.
[22:51:13] <ada_ru> (I_vlxy_I) вот если бы они на расте гуйню на Flutter'e написали под линух - оторвал бы с руками
[22:51:30] <ada_ru> (I_vlxy_I) а так - даже попробовать негде
[23:17:29] <ada_ru> (I_vlxy_I) https://www.opennet.ru/opennews/art.shtml?num=53404
[23:53:45] <ada_ru> (Борис) отвечает (I_vlxy_I) на <https://www.opennet.…>
Задолбали уже. Щаз до них дойдёт, сколько они этих slave и прочих black заложили в свой арктический снимок... и они его откопают обратно.
[23:55:49] <ada_ru> (I_vlxy_I) массивное захоронение черных slave'ов?
[23:55:54] <ada_ru> (I_vlxy_I) в вечной мерзлоте?
[23:57:51] <ada_ru> (Борис) Вот. Ты представляешь какой акт ненависти они совершили. Срочно откопать и покаяться!
[23:58:36] <ada_ru> (I_vlxy_I) простоять на коленях в вечной мерзлоте день и ночь
[23:58:38] <ada_ru> (I_vlxy_I) полярную