[11:35:51] <OCTAGRAM> почитываю rustbook
довольно сильная сторона — сопоставление шаблонов, уж не это ли в новую Аду собираются влить, о чём печаль
отсутствие именованных методов — лажа на ровном месте: http://rurust.github.io/rust_book_ru/src/method-syntax.html а всего-то ничего, надо было Аду посмотреть перед тем, как что-то делать
у Delphi, Ada, Rust есть общие режимы параметров функций: in (const), in out (var), в Delphi и Ada in out подразделается на in out (var) и out, подразумевая, что out может не быть инициализирован. Delphi к этой троице добавляет безымянное копирование, Ada к этой троице добавляет access, Rust не способен различить инициализированный in out и неинициализированный out, а ещё к ним добавляет режим, не похожий на то, что есть в Delphi и Ada: передача значения, которое должно быть съедено внутри, и это режим по умолчанию; сами создали проблему и сами же героически её решают
некий аналог регионов-таки присутствует, но это тогда возвращает к дискурсу о своеобразии Cyclone и Ada: в Cyclone и Rust параметризация типов регионами автоматом делается, в языке Ада можно добиваться того же эффекта явным generic от access, но обычно достаточно access discriminants, которые параметризуют время жизни указателя как меньшее, чем время жизни значения типа, на который этот дискриминант навешен, ну и, например, из контейнера вектора можно получить ссылку на элемент, а из ссылки взять access, но как ни крути, безопасными операциями пробить инкапсуляцию не получится, ни access вынести за пределы жизни ссылки, ни в вектор добавить, пока над ним итерация идёт, правда, механизм другой при этом
с бесконечным циклом loop, как выясняется, такие же «проблемы»
очень и очень на любителя отсутствие исключений, в частности, в Delphi (при подключенном SysUtils) и Ada переполнение вызывает исключение, которое можно обработать, на веб-сервере страницу 500 показать, например, записать в журнал и жить дальше, а вот в Rust исключений-то нет, значит, остаётся только паника, которая положит весь процесс

в общем, по-своему своеобразный язык, приняли где-то другие инженерные решения, получили другие возможности, но вместе с ними и другие проблемы
[13:00:22] <ada_ru> (a) Такой подробный анализ надо в дайджест
[13:10:33] <ada_ru> (I_vlxy_I) вообще, исключения в Rust есть, как и в Go
[13:23:17] <OCTAGRAM> которые Result<T, E> или другие?
[13:39:47] <ada_ru> (I_vlxy_I) panic
[13:40:01] <ada_ru> (I_vlxy_I) https://play.rust-lang.org/?gist=79c48f35bf60f0a45051dac78a27fdcb&version=stable&mode=debug&edition=2015
[13:40:17] <ada_ru> (I_vlxy_I) то что их назвали паниками, от этого оно исключениями быть не перестало
[13:41:12] <ada_ru> (I_vlxy_I) просто кроме исключений появился другой удобный механизм работы с другими ситуацияи
[14:45:09] <ada_ru> (I_vlxy_I) OCTAGRAM: а что, в аду хотят наконец добавить паттерн матчинг? как это будет выглядеть?
[14:56:32] <ada_ru> (t91x0)  отвечает (I_vlxy_I) на <OCTAGRAM: а что, в а…>
В принципе, одно из полезных свойств ПМ - компилятор ругается, если некий вариант упущен. В аде это есть в виде case на перечислимых типах, на дискриминаторах.
[14:57:18] <ada_ru> (I_vlxy_I) да даже в Си есть! в компиляторах в свичах для enum.
[14:57:22] <ada_ru> (I_vlxy_I) оно как минимум варнинг мякнет.
[15:19:40] <ada_ru> (Максим)  отвечает (I_vlxy_I) на <OCTAGRAM: а что, в а…>
Стремновато оно выглядит как-то - http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0274-1.txt?rev=1.2&raw=N
[15:20:34] <ada_ru> (Максим) !status Hold by Letter Ballot (10-0-1) - 18-05-07 не знаю, что это значит, правда
[15:20:46] <ada_ru> (I_vlxy_I) !priority Very_Low
!difficulty Hard

Кажется такое сочетание флагов может означать неясную судьбу пропосола.
[19:01:54] <ada_ru> (I_vlxy_I)  отвечает на <(OCTAGRAM) почитываю…>
конкретно на тему переполнений — это в расте решается простеньким плагином: https://github.com/llogiq/overflower
[23:25:41] <OCTAGRAM> я не вижу, чтоб этот плагин позволял превращать ошибки в io Error
[23:27:11] <ada_ru> (I_vlxy_I) думаю можно допилить чтобы оно превращало это дело в рекаверебл панику
[23:27:13] <ada_ru> (I_vlxy_I) если там уже не сделано
[23:29:26] <OCTAGRAM> https://doc.rust-lang.org/std/panic/fn.catch_unwind.html — на обработку исключений это мало похоже
[23:29:50] <ada_ru> (I_vlxy_I) почему? тот же трай-катч по сути
[23:30:05] <OCTAGRAM> > not recommended to use this function for a general try/catch mechanism
[23:30:45] <ada_ru> (I_vlxy_I) угу. так можно для любого ЯП сказать 🙂
[23:31:09] <ada_ru> (I_vlxy_I) но механизм - обычные исключения. оно выглядит крякает и ПАХНЕТ как исключение. самое обычное
[23:32:43] <OCTAGRAM> то есть, забить вообще на рекомендацию и вставлять catch_unwind везде, где ни попадя, чтоб какая-нибудь ерунда не уронила весь процесс
[23:33:41] <ada_ru> (I_vlxy_I) эмм.. ставить как обычно, в каком-нибудь одном месте выше по стеку. в общем также как и в Аде или плюсах там.
[23:34:23] <ada_ru> (I_vlxy_I) или в каждой процедуре да функции ады трай-катчем все обмазывать приходится?
[23:35:12] <OCTAGRAM> в каждом месте, которое похоже на Observer, да
[23:35:24] <ada_ru> (I_vlxy_I) я помнится в Go примерно такую же стратегию избрал. и сработало
[23:35:32] <ada_ru> (I_vlxy_I) в Go тоже говорят что исключений нет. но они есть 🙂
[23:35:38] <ada_ru> (I_vlxy_I) хотя тоже зачем-то паниками зовутся
[23:35:56] <OCTAGRAM> если один обработчик черезчур впечатлился пережитым, это надо записать и дать другим тоже посмотреть
[23:36:04] <ada_ru> (I_vlxy_I) обернул что надо, сделал рекавери как надо, веб-сервер падать перестал
[23:41:55] <OCTAGRAM> You just kinda brush over the fact that you use catch_unwind for control flow here, just want to say that this is extremely not the way to do it.  You will swallow errors that could be caught by runtime checks, such as  integer overflow and OOB indexing. Also, it means the correct behaviour  of your application relies on the panic behaviour being set to unwind,  which you cannot rely on (it is the default on x86 but there is a  compiler flag to abort on panic and it's conceivable that some  architecture will have that as default in the future). https://www.reddit.com/r/rust/comments/53ft4m/my_experience_rewriting_enjarify_in_rust/
[23:42:36] <OCTAGRAM> в общем, как-то очень суровое поведение для какого-то несчастного целочисленного переполнения
[23:42:49] <OCTAGRAM> ловить их, конечно, полезно, но не до такой же степени
[23:43:02] <OCTAGRAM> как-то у них то недолёт, то перелёт
[23:43:14] <ada_ru> (I_vlxy_I) да, это они дали большую маху
[23:43:35] <ada_ru> (t91x0)  отвечает на <(OCTAGRAM) в каждом …>
Прям как в эрланге, супервизоры над супервизорами
[23:43:37] <ada_ru> (I_vlxy_I) то есть мне не ясно почему они именно в unrecoverable panic это превращают, а не в обычную панику которая ловится
[23:44:38] <ada_ru> (I_vlxy_I) при том что ресурсы и быстродействие это ну никак не улучшает
[23:45:22] <OCTAGRAM> оттуда же: I find it surprising that narrowing casts do not check for overflow
[23:46:54] <ada_ru> (I_vlxy_I) ну утрясут еще эти мелочи. нормально
[23:47:01] <ada_ru> (I_vlxy_I) важно что язык все шире используется
[23:47:16] <ada_ru> (I_vlxy_I) больше юзают - быстрее по граблям побегают, быстрее пофиксят
[23:48:54] <OCTAGRAM> у меня очень плохие воспоминания от Gtk+ именно потому что там тоже любят весь процесс лишний раз положить
[23:49:38] <OCTAGRAM> у заказчика на ТВ приставках плеер на GStreamer был, приходилось припарки делать, чтоб видеофайлы плеер не клали
[23:51:39] <OCTAGRAM> в Gtk+ от такого поведения так ведь и не отказались
[23:53:47] <ada_ru> (I_vlxy_I) gtk та еще какашка, это да. редкая программа вообще может работать не какая в консоль как минимум ворнингами от gtk
[23:59:32] <OCTAGRAM> GPS некорректно резал UTF-8 в неадских исходниках, и кара от Gtk+ за это тоже была суровой