Здравствуйте, WolfHound, Вы писали:
_>>Ох, показывать обычные локфри структурки, как нечто особенное. WH>Я не показывал это как нечто особенное. WH>Просто эта штука не совместима с некоторыми методами реализации модели акторов.
А какая связь lock-free и акторов? Акторы же полностью изолированы друг от друга? Или речь об рантайме, который упрвляет ентим делом?
Здравствуйте, so5team, Вы писали:
WH>>Например С++ный SObjectizer ничего не гарантирует. Показать тебе как там гонки устроить или сам догадаешься? S>Гонки на чем?
На разделяемой памяти без синхронизации.
S>Ну и да, показать было бы интересно.
Что тебе помешает передать указатель на поле одного актора в другой актор?
Rust тебе даст по рукам. С++ промолчит.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>>>Например С++ный SObjectizer ничего не гарантирует. Показать тебе как там гонки устроить или сам догадаешься? S>>Гонки на чем? WH>На разделяемой памяти без синхронизации.
Тогда при чем здесь SObjectizer? Как и модель акторов?
S>>Ну и да, показать было бы интересно. WH>Что тебе помешает передать указатель на поле одного актора в другой актор?
То, что пользователи передают в сообщениях между акторами находится вне зоны отвественности SObjectizer-а. Равно как компилятор Rust-е не отвечает за то, что пользователь делает внутри unsafe.
Здравствуйте, Sharov, Вы писали:
WH>>Я не показывал это как нечто особенное. WH>>Просто эта штука не совместима с некоторыми методами реализации модели акторов.
S>А какая связь lock-free и акторов? Акторы же полностью изолированы друг от друга? Или речь об рантайме, который упрвляет ентим делом?
Если делать акторов на rust нам ничто не помешает использовать подобную структуру данных. Ибо rust почти ничего не навязывает. Более того интерфейс данной структуры данных просто идеально ложиться на систему типов rust.
А вот можно ли сделать такое на pony, я не уверен. Там очень хитрый сборщик мусора, который завязан на определённые гарантии, которые даёт система обмена сообщениями. А такой канал обмена информацией на эти гарантии плюёт. Так что не ясно как управлять памятью в этом случае. И я даже не уверен, может ли система типов pony выразить безопасный интерфейс. Довольно давно про него читал. Деталей не помню.
С эрлангом тоже всё плохо. Для того чтобы такое реализовать придёт очень сильно попотеть. Ибо ерланге каждый процесс имеет свою кучу. И при передаче сообщения это сообщение копируется в память процесса. Благодаря этому процессы очень легко убивать и можно убирать мусор независимо от других процессов. И в эрланге всё на этом построено. Для того чтобы сохранить эти гарантии нам нужно при каждом обращении к этой структуре копировать возвращаемые данные в память процесса. Так же критически важно удалять ставшие не нужными ссылки на данную структуру. Ибо они не только жрут память, но и тормозят запись. И что ещё важнее если ты начал читать, то ты обязательно должен сказать что ты закончил читать. Иначе запись вообще остановится.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, so5team, Вы писали:
WH>>На разделяемой памяти без синхронизации. S>Тогда при чем здесь SObjectizer? Как и модель акторов?
При том что ни он ни С++ не защищают от того что пользователь сделат это случайно.
S>То, что пользователи передают в сообщениях между акторами находится вне зоны отвественности SObjectizer-а. Равно как компилятор Rust-е не отвечает за то, что пользователь делает внутри unsafe.
Главное нужно понимать что в С++ весь код один сплошной unsafe. С++ просто не имеет инструментов для контроля изоляции акторов.
А в случае с rust тебе придётся долго объяснять на ревью кода зачем ты написал unsafe. Более того unsafe можно тупо запретить всем кроме избранных. И их заставить писать подробную объяснительную на каждый unsafe. И тогда всё будет хорошо.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>При том что ни он ни С++ не защищают от того что пользователь сделат это случайно.
Соответственно, SObjectizer вообще не причем, т.к. он не может привнести в C++ качества, которых в C++ нет и не может быть в принципе. В общем, если вам не нравится ситема, вовсе не обязательно начинать с нашей парикмахерской (c).
Тем не менее, поинт разговора был в том, что для каких-то задач модель акторов даст пользователю удобство и безопасность, которую пользователь не получит работая с разделяемыми данными вручную (пусть даже за "корректностью" этой работы "следит" компилятор). И этот поинт, вообще-то говоря, сохраняет свою актуальность. Даже не смотря на то, что в C++ (как и в Java/Scala/Kotlin или C#) компилятор не может защитить от случайных ошибок пользователя. А уж от преднамеренных действий и Rust не защищает. Как бы не сильна была вера в ревью и раздачу прав на использование unsafe отдельным небожителям.
Здравствуйте, so5team, Вы писали:
S>Тем не менее, поинт разговора был в том, что для каких-то задач модель акторов даст пользователю удобство и безопасность, которую пользователь не получит работая с разделяемыми данными вручную (пусть даже за "корректностью" этой работы "следит" компилятор). И этот поинт, вообще-то говоря, сохраняет свою актуальность. Даже не смотря на то, что в C++ (как и в Java/Scala/Kotlin или C#) компилятор не может защитить от случайных ошибок пользователя.
Эээ что? Ты вообще в курсе модели акторов? Если ей следовать, то просто гарантированно не будет одновременно разделяемых между потоками данных.
Поинт был в гарантиях. Как мы видим, никаких гарантий в большинстве языков нет.
Программисты должны всегда внимательно следить за тем, что они делают.
S>А уж от преднамеренных действий и Rust не защищает. Как бы не сильна была вера в ревью и раздачу прав на использование unsafe отдельным небожителям.
И не нужно так напирать на unsafe. Он почти никогда не нужен.
И таким образом мы имеем разницу между следить всегда и везде, и очень редко когда нам нужен unsafe.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Если ей следовать, то не будет. Передача ссылок на разделямые мутабельные данные в сообщения -- это не следование модели акторов, а нарушение ее основных постулатов.
WH>И не нужно так напирать на unsafe. Он почти никогда не нужен.
Тогда зачем приводить в пример rust-evmap, который без unsafe не реализуем?
Здравствуйте, so5team, Вы писали:
S>Если ей следовать, то не будет. Передача ссылок на разделямые мутабельные данные в сообщения -- это не следование модели акторов, а нарушение ее основных постулатов.
А как убедиться, что ты ей следуешь? Как защититься от случайностей?
S>Тогда зачем приводить в пример rust-evmap, который без unsafe не реализуем?
У него safe интерфейс. Так что использовать его можно без unsafe.
Точно так же rayon внутри использует unsafe, но имеет safe интерфейс.
Именно поэтому я и говорю, что unsafe можно очень хорошо изолировать в низкоуровневом коде.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
S>>Тогда зачем приводить в пример rust-evmap, который без unsafe не реализуем? WH>У него safe интерфейс. Так что использовать его можно без unsafe. WH>Точно так же rayon внутри использует unsafe, но имеет safe интерфейс. WH>Именно поэтому я и говорю, что unsafe можно очень хорошо изолировать в низкоуровневом коде.
Угу. Я опрашивал разных людей, которые тусят в Rust community (да и в твиттере пробегают срачи регулярно) и регулярно общаются с C/C++ коллегами. У C/C++ программистов в массе почему-то сразу какой-то защитный механизм включается и аргументы в стиле "да я все свои границы всегда проверяю", "код внимательно проверяю".
Мне особенно интересно слышать эти аргументы, работая в компании с:
1. Весь бэкенд на Rust с первого дня.
2. Я был вторым инженером, теперь нас ~35 (не все пишут Rust, впрочем), полтора года спустя.
3. Нанятые люди имеют разный опыт, включая выпускников колледжей / буткэмпов, которые кроме Javascript ничего не видели.
4. Практически все, кто писал бэкенд первые полгода-год не имели опыта Rust (включая меня).
У меня нет иллюзий относительно прикладного кода, который бы написали эти люди (включая меня) на C++ :D
Аргумент про unsafe мне непонятен. Это ж не чёрное-белое. Лучше не использовать. Да, иногда нужно. Да, иногда кажется, что нужно, но на самом деле -- нет. Да, есть сторонние библиотеки с некорректным использованием unsafe. Но одно дело, когда у тебя 5% такого, а другое -- когда, считай, 100%.
This operator does not check whether the optional contains a value! You can do so manually by using has_value() or simply operator bool(). Alternatively, if checked access is needed, value() or value_or() may be used.
Здравствуйте, Иван Дубров, Вы писали:
ИД>Угу. Я опрашивал разных людей, которые тусят в Rust community (да и в твиттере пробегают срачи регулярно) и регулярно общаются с C/C++ коллегами. У C/C++ программистов в массе почему-то сразу какой-то защитный механизм включается и аргументы в стиле "да я все свои границы всегда проверяю", "код внимательно проверяю".
Ещё я заметил очень сильную корреляцию между людьми которые считают что могут писать надёжный код на С/С++ и любителями динамической типизации.
В обоих случаях компилятор мало что контролирует и оставляет всё на внимательность программиста.
Видимо мы имеем дело с мачо-программистами, которые действительно верят в то, что они могут за всем уследить. Они реально считают, что контроль компилятора им не нужен. И все эти системы типов только мешают полёту их фантазии и заставляют писать лишние буквы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
S>>Если ей следовать, то не будет. Передача ссылок на разделямые мутабельные данные в сообщения -- это не следование модели акторов, а нарушение ее основных постулатов. WH>А как убедиться, что ты ей следуешь?
Так же, как и в случае, когда в Rust вынуждены прибегать к unsafe.
WH>Как защититься от случайностей?
В Java/Scala/C#, видимо, вообще никак. Если только не использовать какие-то структуры данных, которые реализуют иммутабельность.
В C++ помогает наличие const-а.
В D есть invariant.
S>>Тогда зачем приводить в пример rust-evmap, который без unsafe не реализуем? WH>У него safe интерфейс. Так что использовать его можно без unsafe.
Как только вы к себе в код затягивате что-то с unsafe внутри, все хваленые гарантии Rust-а, по сути, превращаются в "мамой клянусь". Т.к. корректность вашего кода оказывается в зависимости от качества тестирования того же rust-evmap.
Да, это сильно лучше, чем в большинстве мейнстримовых языков сейчас. Но о 100% гарантиях речь на практике не идет.
готовые программные продукты массового использования написанные на русте есть ?
что бы и под андроид и под иос и под винду и под линукс, как это есть у того же С++
уровня хрома или уровня линукс ядра или уровня какого то известного мессенджера, как то был скайп,вайбер
запустить, пощупать, оценить скорость работы, прожорливость памяти, компактность дистрибутива
а то дальше болтовни о том как круто и безопасно писать на русте, других пруфов — нет
оно то понятно что рустом сейчас затыкаю дыры в бизнесе когда денег нет, а работать надо
Здравствуйте, reversecode, Вы писали:
R>готовые программные продукты массового использования написанные на русте есть ? R>что бы и под андроид и под иос и под винду и под линукс, как это есть у того же С++
Mozilla Firefox, однако. На Расте написаны части движка.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, reversecode, Вы писали:
R>>уровня линукс ядра
S>Серьезно, а Торвальдс в курсе?
мы же на итшном форуме ? значит все помнят лихие 90 и как развивался линукс
такого же уровня как был линукс в 90 что бы можно было интерполировать есть ?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, reversecode, Вы писали:
R>>готовые программные продукты массового использования написанные на русте есть ? R>>что бы и под андроид и под иос и под винду и под линукс, как это есть у того же С++ C>Mozilla Firefox, однако. На Расте написаны части движка.
я об этом в курсе, к сожалению уныло и хреново
тормозилла у меня всегда тормозила
и съедает памяти на трех табах столько же сколько хром на сотне
последствия раста ?
вообщем я к чему веду, поскольку раст ни в каком крупном юзерском софте особо не засветился
что бы можно было заценить результ
то его фанатам стоило бы поумерить пыл и жар
а то что бы не оказалось в расте как с линуксом
который все долгое время считали чуть ли не эталоном безопасности и секюрности
а винду дырявой
пока за него не взялись и он начал протекать о то всюду
Вот бомбануло так бомбануло.
Ты хоть понимаешь, насколько жалко сейчас выглядишь?
Rust только появился.
Помню, когда C# только появился, про него тоже кричали ну и где написанный на нём софт?
Ну и где сейчас эти крикуны?
R>что бы и под андроид и под иос и под винду и под линукс, как это есть у того же С++
Когда С++ появился напомнить?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн