Re[36]: Безопасность Rust
От: vdimas Россия  
Дата: 03.06.19 09:15
Оценка: -1
Здравствуйте, ·, Вы писали:

V>>>>sig_atomic_t — должен гарантировать атомарность записи в эту переменную, для тех времён было достаточно, чтобы такая переменная была шириной в машинное слово.

V>>·>Понятие многопоточности появилось в языке совсем недавно.
V>>Понятие многопоточности в языке появилось давно, одновременно с ключевым словом volatile.
·>volatile не связана с многопоточностью.




V>>Скорее всего ты имеешь ввиду не в языке, а в новой стандартной библиотеке?

V>>Потому что нововведения именно в язык никак с многопоточностью не связаны.
·>Читай memory model, я ж уже несколько раз упоминал.

Ты прочесть написанное уже не в состоянии, что ле? (выделил)
Еще раз, медленно, это всё обслуживается стандартной библиотекой, а не конструкциями языка.
Т.е. аналоги можно нарисовать на любых ООП-языках через аналогичные либы.


V>>Вытеснение происходит за счёт асинхронного механизма прерывания. Но этот механизм гарантирует, что текущая исполняемая инструкция будет выполнена полностью перед тем, как текущий поток исполнения будет прерван. Именно поэтому требовалось читать и писать из/в память одной инструкцией.

·>Вот только такая многопоточность появилась на уровне оперы и железа, а сам язык "ничего не знал"

Язык Си, напомню, был разработан как замена Ассемблеру для развития Unix.
Поэтому, кое-какие "знания", хотя бы через typedef, в программу перетащить можно — потому что именно так и задумывалось, чтобы было можно.

В случае sig_atomic_t требовалось протащить то "знание", что чтение и запись в эту переменную будет выполняться одной инструкцией процессора.
Этого достаточно, чтобы асинхронный механизм прерываний работал в такой программе непротиворечиво.


·>поэтому никаких гарантий давать не мог, как карта ляжет, так себя код и поведёт, UB.


Это ты сейчас из пальца насасывать изволишь, а механизм сигналинга в Unix изначально был реализован через прерывания и этот механизм работает прекрасно.
Иначе бы ты не смог сегодян написать в коде kill(pid, SIGTERM) или в консоли kill 4242 -9.


·>Утверждать, что "в С++ была многопоточность" равноценно "в С++ есть http".



Согласно дизайну, многопоточность реализована в виде внешнего механизма.
Язык может лишь учитывать наличие такого механизма, пример с volatile уже приведён.
А через оформление механизма многопоточности в виде библиотечных примитивов такая ситуация отливается из бетона навечно, походу.
(кстате, очень жаль)


·>Нюанс в том, что многопоточность — особенная штука


Ньюанс в том, что ты применяешь много слов не по делу.
Давай ближе к теме.
Примеры, контрпримеры, разногласия, уточнения и т.д.


V>>Обе системы однопроцессорные, мультизадачные, с похожим механизмом прерываний, который (механизм) дожил практически в неизменном виде до эпохи микропроцессоров и тоже стал мейнстримовым.

·>Осталось тебе разобраться какое это отношение имеет непосредственно к ЯП С/С++.

))
Тут про молоко на губах разве что ответить можно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.