The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Facebook открыл RacerD, статический анализатор для многопото..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от opennews (??) on 21-Окт-17, 10:03 
Facebook представил (https://code.facebook.com/posts/293371094514305/open-sourcin.../) проект RacerD (http://fbinfer.com/docs/racerd.html), в рамках которого открыты наработки по выявлению проблем, возникающих из-за одновременного выполнения кода в многопоточных программах на языке Java. RacerD интегрирован в систему статического анализа Infer (https://github.com/facebook/infer) и обеспечивает определение потенциальных ошибок в коде, использующем классы/методы, заявленные как @ThreadSafe, или осуществляющем блокировки при помощи ключевого слова "synchronized".


RacerD сконцентирован на выявлении состояний гонки (https://ru.wikipedia.org/wiki/%D0%A1%D0%...), возникающих между вызовом методов класса в разных потоках. Например, определяются ситуации, когда выполняется два одновременных обращения к переменной члена класса, не отделённой при помощи мьютекса, если в одном из обращений выполняется операция записи.


RacerD уже около 10 месяцев используется в Facebook и за это время помог выявить более тысячи проблем в многопоточном коде проектов для платформы Android, на стадии их разработки. Большая часть ошибок была выявлена в процессе перевода реализации ленты новостей  в Android-приложении Facebook на многопоточную модель работы.


URL: https://code.facebook.com/posts/293371094514305/open-sourcin...
Новость: http://www.opennet.ru/opennews/art.shtml?num=47426

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


4. "Facebook открыл RacerD, статический анализатор для многопото..."  –1 +/
Сообщение от Crazy Alex (ok) on 21-Окт-17, 13:04 
Эх, вот где-то здесь и жалеешь, что для плюсов такое сделать проблематично
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Facebook открыл RacerD, статический анализатор для многопото..."  –1 +/
Сообщение от . on 21-Окт-17, 19:41 
Один из симптомов шубообразной охватывающей шизофрении - страхи, и сильные сожаления без малейшей на то причины. (С) Твой доктор :-)  

.... впрочем, если нет денег на PVS-studio и иже с ними (а их - легион!) - а _самому_ "сделать проблематично", то да - пост заиграитЪ совсем другими красками :)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

22. "Facebook открыл RacerD, статический анализатор для многопото..."  +2 +/
Сообщение от nobody (??) on 21-Окт-17, 22:18 
Погугли "sanitizer" и больше не пиши тут чушь
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

25. "Facebook открыл RacerD, статический анализатор для многопото..."  +3 +/
Сообщение от pavlinux (ok) on 22-Окт-17, 03:03 
нагугли мозг (ну или хотя бы чем отличаются sanitizer от static analize), и больше вообще не пиши.  
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

26. "Facebook открыл RacerD, статический анализатор для многопото..."  +1 +/
Сообщение от Crazy Alex (ok) on 22-Окт-17, 03:12 
В данном случае дело даже не в том - в джаве есть каноничный способ описать шареные объекты языком, понятным для инструментов - вышеупомянутые классы/методы, заявленные как @ThreadSafe, или осуществляющем блокировки при помощи ключевого слова "synchronized". В плюсах этого нет, поэтому анализ становится многократно сложнее. Понятно, что это цена богатства языка и наличия выбора, но всё равно завидно.
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

38. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (??) on 23-Окт-17, 13:38 
>В плюсах этого нет, поэтому анализ становится многократно сложнее.

На самом деле нет. Разбор исходного кода настолько незначительная сторона статического анализа, что на ней можно не зацикливаться

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

42. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Crazy Alex (ok) on 23-Окт-17, 15:51 
речь не о самом разборе.

В джаве "syncronized" полностью описывает всё поведение по локам - и указывает на наличие, мьютекса и то, что он лочится строго при входе в метод и раззлочивается строго при выходе. В плюсах - придётся ещё выяснять, где на самом деле происходит блокировка и как именно она используется. Впрочем, подумав, пожалуй, соглашусь с вами - в пределах джавовской простой модели синхронизации и при условии использования std::mutex и std::lock_guard особо сложнее быть не должно.

Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

37. "Facebook открыл RacerD, статический анализатор для многопото..."  –1 +/
Сообщение от Аноним (??) on 23-Окт-17, 10:49 
Какая доброта. И что же, интересно, не так? У вас какие-то проблемы?

Thread Sanitizer - отличный инструмент, отлавливающий ошибки, которые иначе поймать было бы проблематично. В начале своей жизни умел мало, но теперь справляется со всем, что в него швыряют.

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

43. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Crazy Alex (ok) on 23-Окт-17, 15:51 
Только здесь речь вообще не о том.
Ответить | Правка | ^ к родителю #37 | Наверх | Cообщить модератору

29. "thread safety analysis and thread sanitizer"  +/
Сообщение от Ivan (??) on 22-Окт-17, 13:38 
Статик анализатор на это есть в clang с 2011 года:
https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
https://llvm.org/devmtg/2011-11/Hutchins_ThreadSafety.pdf

Проблема в том, что статик-анализ не работает в сложных случаях, поэтому на практике эти аннотации используются мало кем. Обычно используют динамический анализ (thread sanitizer):
http://www.cs.columbia.edu/~junfeng/11fa-e6121/papers/thread...
https://llvm.org/devmtg/2012-11/Serebryany_TSan-MSan.pdf
https://clang.llvm.org/docs/ThreadSanitizer.html

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

36. "thread safety analysis and thread sanitizer"  +/
Сообщение от Crazy Alex (ok) on 23-Окт-17, 03:58 
Какие-то местечковые аннотации на макросах? Действительно, и почему их никто не использует...
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

46. "thread safety analysis and thread sanitizer"  +/
Сообщение от Ivan (??) on 23-Окт-17, 16:45 
В C++03 макросы нужны, чтобы код компилировался на тех компиляторах, которые не поддерживают эти аттрибуты. Документация написана так, чтобы можно было использовать и в С++03 коде, поэтому она использует макросы.

Если используется только C++11 и выше можно использовать C++11 аттрибуты без макросов. Компиляторы будут просто игнорировать неизвестные аттрибуты.

> Какие-то местечковые аннотации на макросах? Действительно, и почему их никто не использует...

Поверь мне это связано не с этим.

Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

54. "thread safety analysis and thread sanitizer"  +/
Сообщение от Crazy Alex (ok) on 24-Окт-17, 01:34 
Насчёт макросов понял (хотя им с этого начинать надо бы - что вот так пишется на приличных плюсах, но для легаси тоже есть костыль), но есть и более серьёзные проблемы:
1) эти аннотации отделены от собственно кода синхронизации. То есть никто их соответствие реальному положению вещей не гарантирует.
2) необходимость заменять мьютекс своим типом.
3) необходимость вообще писать эти аннотации.

А теперь сравните с джавой, где анализатор натравливается на стандартный, существующий код.

А если обобщить... Я не помню ни механизма аннотирования в помощь статическим анализаторам, который бы получил повсеместное распространение. Ну, то есть вообще. Даже Страуструп свой GSL пропихнуть не смог. Почему - можно гадать, но оно так.

Ответить | Правка | ^ к родителю #46 | Наверх | Cообщить модератору

58. "thread safety analysis and thread sanitizer"  +/
Сообщение от Ivan (??) on 24-Окт-17, 15:08 
> Насчёт макросов понял (хотя им с этого начинать надо бы - что вот так пишется на приличных плюсах, но для легаси тоже есть костыль), но есть и более серьёзные проблемы

Я согласен. Я думаю это связано с тем, что документация писалась в 2011 году, когда C++11 был менее распространен.

> 1) эти аннотации отделены от собственно кода синхронизации. То есть никто их соответствие реальному положению вещей не гарантирует.

Я не понял, что имеется ввиду. Анализ проверяет, что при обращении к переменной вызывающий код удерживает мьютексы, указанные в аттрибуте guarded_by у этой переменной. Что значит "никто их соответствие реальному положению вещей не гарантирует"? Анализ как раз проверяет, что взятие мьютексов согласованно с аттрибутами guarded_by.

Или ты имеешь ввиду, что аттрибуты guarded_by могут не соответствовать реальной логике работы программы? Ну здесь ничего не поможет. Компьютер не может знать какие данные защищены какими мьютексами.

Даже в RacerD есть guarded_by: http://fbinfer.com/docs/infer-bug-types.html#anonymous_inner

> 2) необходимость заменять мьютекс своим типом.

Почему ты так считаешь? В libc++ (реализация стандартной библиотеки идущая с clang) std::mutex аннотированы: https://github.com/llvm-mirror/libcxx/blob/276a69c18b3eeb6e8... Реализации стандарных библиотек других компиляторов не аннотированы аттрибутами, которые эти компиляторы не поддерживают, это предсказуемо.

> 3) необходимость вообще писать эти аннотации.

Тогда тебе будет не нравится статик-анализ вообще. Поскольку, как правило без дополнительных аннотаций он имеет либо много false-positive, либо много false-negative. А аннотации делают статик-анализ применимым на практике.

Ответить | Правка | ^ к родителю #54 | Наверх | Cообщить модератору

5. "Facebook открыл RacerD, статический анализатор для многопото..."  –3 +/
Сообщение от YetAnotherOnanym (ok) on 21-Окт-17, 13:52 
> выявить более тысячи проблем

Это всё, что вам надо знать о проектах для платформы Android.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Facebook открыл RacerD, статический анализатор для многопото..."  +4 +/
Сообщение от Аноним (??) on 21-Окт-17, 15:18 
> Это всё, что вам надо знать о проектах

от Facebook

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Facebook открыл RacerD, статический анализатор для многопото..."  +2 +/
Сообщение от Ordu email(ok) on 21-Окт-17, 16:14 
Не надо такое знать. Не надо читать анонимов опеннета, которые целенаправленно выдирают фразы из контекста, придавая им новые оттенки смысла.
Оригинальная фраза гораздо веселее: "более тысячи проблем [...] на стадии их разработки". Надо полагать, что, всё же, это оговорка (пускай и чисто по Фрейду), что подразумевалась разработка не проблем, а софта, проблемы же возникали в процессе разработки, и отлавливались статическим анализатором. И вот тут эта "тысяча проблем" превращается в маркетинговый буллшит, это всё равно что считать как много ошибок суммарно было выдано компилятором в процессе разработки программы, когда код перекомпилировался раз десять в день, и большая часть этих компиляций была нацелена на поиск опечаток или даже на диагностику текущего состояния программы, когда программист начал какое-то изменение, затрагивающее двадцать различных файлов, часть этих изменений внёс, и теперь ему надо вернуться назад и вспомнить, что именно он уже сделал, о чём лишь подумал, и о чём он не подумал, хотя стоило бы.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

31. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Kodir (ok) on 22-Окт-17, 17:46 
Думаю, тут смысл несколько другой. "На стадии разработки" - это дилетанское отражение фразы "на стадии проектирования". Вот ты сделал десяток классов, всё соединил, раскидал на трэды и тут решил проверить анализатором - и вот когда он находил проблемы, тогда и считалось "выявил". Другой вопрос, это всё равно чертовски много - неужели при всех этих "паттернах", которым зас***али весь мозг и тырнеты, фэйспук так и не научился применять шаблонные методы для типичных задач??
В любом случае, тот зоопарк языков, что там сейчас есть (https://www.quora.com/What-programming-languages-are-used-at... ) - это гетерогенная помойка, которой уже ничто не поможет.
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

32. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Ordu email(ok) on 22-Окт-17, 20:16 
> Думаю, тут смысл несколько другой. "На стадии разработки" - это дилетанское отражение
> фразы "на стадии проектирования".

Почему ты выбираешь именно тот смысл фразы "на стадии разработки", который приписываешь дилетантам? Разработчики фейсбука могут быть кем угодно, но они не дилетанты, хотя бы уже потому, что они профессионалы, работающие за деньги и на полном рабочем дне.

> Вот ты сделал десяток классов, всё соединил,
> раскидал на трэды и тут решил проверить анализатором - и вот
> когда он находил проблемы, тогда и считалось "выявил".

Я почитал оригинал, там чётко написано о том, что речь о 10 месяцах работы этого статистического анализатора с кодом в процессе разработки. Причём с кодом, который существовал и работал и до этого.

> Другой вопрос, это
> всё равно чертовски много - неужели при всех этих "паттернах", которым
> зас***али весь мозг и тырнеты, фэйспук так и не научился применять
> шаблонные методы для типичных задач??

Основная претензия к корпоративному коду состоит в том, что он всегда использует шаблонные методы для шаблонных задач, всегда игнорирует реально существующий ТЗ и предполагает, что это ТЗ будет развиваться до тех пор, пока не станет полным описанием всей Вселенной. Из-за чего реализация hello world в корпоративном виде занимает полтысячи строк, которые ничего не делают. Эта извечная корпоративная попытка на этапе проектирования написать программу наиболее полно, так, чтобы её уже и не надо было писать никогда, как бы там не менялся ТЗ, мне кажется психическим заболеванием. Эдакой профдеформацией. Весь опыт показывает, что программы развиваются, что ТЗ меняются, и меняются они часто непредсказуемым образом. Ориентируясь на все варианты того, что может случиться через 20 лет, мы уже сегодня получаем монструозную архитектуру причём без каких-либо гарантий, что через 10 лет она всё же окажется непригодной для своих задач в их новой постановке, и её придётся переписывать с нуля.
Нет, конечно, бывает и другая крайность, когда в архитектуру программы на этапе проектирования закладывается так мало, что даже априорный ТЗ становится невозможным реализовать не подпирая его костылями.
Это всегда компромисс. И то, что фейсбук реализовал приложение "лента новостей" в однопоточном исполнении, мне кажется вполне нормальным. И я не поверю, что это не так, до тех пор пока не увижу из каких соображений исходили разработчики, когда исходно решали компромиссы проектирования.

> В любом случае, тот зоопарк языков, что там сейчас есть (https://www.quora.com/What-programming-languages-are-used-at...
> ) - это гетерогенная помойка, которой уже ничто не поможет.

Ей не нужна помощь. Они сами справляются. Пока по крайней мере. Вот когда они попросят помощи, вот тогда можно будет презрительно сказать, что здесь уже ничего не поможет, а пока этого нет, довольно странно намекать на то, что фейсбук уже весь разваливается, и вот-вот окончательно превратиться в руины.

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

41. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 23-Окт-17, 15:34 

> Это всегда компромисс. И то, что фейсбук реализовал приложение "лента новостей" в
> однопоточном исполнении, мне кажется вполне нормальным. И я не поверю, что
> это не так, до тех пор пока не увижу из каких
> соображений исходили разработчики, когда исходно решали компромиссы проектирования.

В ваших рассуждениях есть одна типичная ошибка: вы предполагаете, что если в Яве что-то пишут без учёта многопоточности, то получается нечто однопоточное. Увы, это совершенно не верный посыл -- Ява ВСЕГДА МНОГОПОТОЧНАЯ. Чтобы приложение стало однопоточным его нужно специально писать ОДНОПОТОЧНЫМ, иначе оно будет НЕПРЕДСКАЗУЕМО МНОГОПОТОЧНЫМ.
Вот в чём дело.

Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

55. "Facebook открыл RacerD, статический анализатор для многопото..."  –1 +/
Сообщение от Ordu email(ok) on 24-Окт-17, 04:47 
Может быть, я с джавой знакомился лет пятнадцать назад, через полгода потерял к ней всякий интерес, и больше никогда не возвращался. Но, что-то мне подсказывает, что, всё же, вы сейчас каким-то образом пытаетесь натянуть сову на глобус. Ну, в том смысле, что мне ни разу не приходилось сталкиваться со сколь-нибудь грамотной критикой кода, которая базировалась на использовании капса и общих представлениях об использованных инструментах. Сколь-нибудь грамотная критика всегда содержит в себе хотя бы одну цитату из кода.
Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

59. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 21:26 
О каком коде вы говорите? Caps же -- это для тех, кто может только знакомится с Явой. Им важно помнить, что они всегда пишут многопоточную программу. Вы выше предположили, что коль проект крупный и раскрученный, то только в силу этого факта он всегда пример самых актуальных компетенций. По моему опыту, это совсем не так. Программеру нужно заботиться о хорошем коде, а не об удачном маркетологе: удачного маркетолога удаётся встретить единицам, а остальным нужно писать нормальный код.
Ответить | Правка | ^ к родителю #55 | Наверх | Cообщить модератору

9. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (??) on 21-Окт-17, 16:51 
И что же нам нужно знать?
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

17. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (??) on 21-Окт-17, 20:16 
> ситуации, когда выполняется два одновременных обращения к переменной члена класса, не отделённой при помощи мьютекса, если в одном из обращений выполняется операция записи

В модели памяти это называется Data Race. И необязательно необходим мьютекс. Так вот, Data Race != Race Condition. Эти проблемы могут быть в наличии как одновременно, так и каждая по-отдельности.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

27. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от pavlinux (ok) on 22-Окт-17, 03:21 
> В модели памяти это называется Data Race. И необязательно необходим мьютекс.
> Так вот, Data Race != Race Condition.

Хвать гнать, Race Condition - это общее описание всех багов возникающих при доступе к чему-либо, двух и более кого-либо.

Есть такие баги "Time of check to time of use (TOCTOU)", тож разновидность race condition.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

28. "Facebook открыл RacerD, статический анализатор для многопото..."  –2 +/
Сообщение от Аноним (??) on 22-Окт-17, 13:01 
не гуглятся примеры dr vs rc? я помогу https://blog.regehr.org/archives/490
Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

33. "Facebook открыл RacerD, статический анализатор для многопото..."  +1 +/
Сообщение от pavlinux (ok) on 22-Окт-17, 20:41 
> не гуглятся примеры dr vs rc? я помогу https://blog.regehr.org/archives/490

Еще раз:  "Race Condition - это общее описание всех багов возникающих при доступе к чему-либо, двух и более кого-либо."
У вас в примере классический race cond."multiple threads can concurrently try to update an account balance".
В решении корявое решение в стиле Winows (с надеждой на компилятор). Отбалды делать атомарные операции
над не атомарными перемененными ну совсем не гарантирует атомарность. Linux так вообще этого не позволит.

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

45. "Facebook открыл RacerD, статический анализатор для многопото..."  +1 +/
Сообщение от Кузнец on 23-Окт-17, 15:53 
>> не гуглятся примеры dr vs rc? я помогу https://blog.regehr.org/archives/490
> Еще раз:  "Race Condition - это общее описание всех багов возникающих
> при доступе к чему-либо, двух и более кого-либо."
> У вас в примере классический race cond."multiple threads can concurrently try to
> update an account balance".
> В решении корявое решение в стиле Winows (с надеждой на компилятор). Отбалды
> делать атомарные операции
> над не атомарными перемененными ну совсем не гарантирует атомарность. Linux так вообще
> этого не позволит.

По-моему, вы немного не о том. Гонка возникает, когда есть... гонка. Т.е. непредсказуемая последовательность "приходящих к финишу" чего-то там. Вы же говорите о ложном суждении о естественной атомарности инвариантов. А атомарность инвариантов нужно описывать разрабу и описывать осмысленно. Компилятор этого не сделает.
В общем, и в литературе эту ситуацию почему-то запихивают в "гонку". Хотя тут никакой гонки нет.

Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

50. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (??) on 23-Окт-17, 20:48 
Во-первых, в статье нет решений, есть только примеры, показывающие разницу между rc и dr.
Во-вторых, приведены они в псевдокоде. "Атомарная операция" определяется нестрого, это не конструкция языка, и атомарные переменные тут не при чем. Важно лишь, что результат в блоке одновременно видим или невидим всем потокам. Реализовать можно через системный мьютекс, Linux позволит, я гарантирую.
Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

35. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от pavlinux (ok) on 22-Окт-17, 20:53 
......Пля, модыр, трахни в моск свой кревой парсер
Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

40. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 23-Окт-17, 15:29 
Это всё гонка. Т.е. когда состояние обобществлённого ресурса зависит от (псевдо)случайных факторов, а не прописано логикой алгоритма.
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

48. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (??) on 23-Окт-17, 20:22 
Race condition обязательно нарушает логику алгоритма (семантику, инварианты, или как хотите) при неблагопрятном стечении обстоятельств. Data race - совсем не обязательно.
Ответить | Правка | ^ к родителю #40 | Наверх | Cообщить модератору

51. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 01:19 
Агх. Не уверен. Гонка возникает, чаще всего, из-за неверного суждения разраба о том, что вот как поток кода следует в его описании, так он и будет исполнятся. Более того, будет исполнятся "континуумно", т.е. без gaps-ов между строками выражений. Но проблема в том, что Ява, и не только она, в этом плане совершенно обманчива -- код на стадии исполнения перемешивается непредсказуемым образом (как оптимизатор решит), если только явно не предписать его прецеденцию. А уж многопоточность усложняет картину ещё больше.
DR же возникает из-за другого заблуждения -- что компилятор каким-то немыслимым образом определить желаемые границы атомарного инварианта просто просмотрев члены экземпляры (класса). Но это тоже невозможно. Т.е. DR это и не гонка совсем, по-моему.
Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

52. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 01:24 
> Race condition обязательно нарушает логику алгоритма (семантику, инварианты, или как хотите)
> при неблагопрятном стечении обстоятельств. Data race - совсем не обязательно.

RC как раз ничего не нарушает -- нельзя нарушить то, что не предписано. Просто нужно зарубить себе на носу, что прецеденция исходного кода не будет сохранена на стадии исполнения. Если компилятору не сообщить как именно это сделать. Иначе -- будет как попало. Ява не сохраняет прецеденцию исходного кода (это так, для тех, кто не в курсе) по умолчанию.

Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

60. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 21:27 
> Это всё гонка. Т.е. когда состояние обобществлённого ресурса зависит от (псевдо)случайных
> факторов, а не прописано логикой алгоритма.

... Итак, резюмирую. Гонка всегда результат неверного суждения об исполнительной среде. А не порок языка. По крайней мере, в Яве.

Ответить | Правка | ^ к родителю #40 | Наверх | Cообщить модератору

23. "Facebook открыл RacerD, статический анализатор для многопото..."  –1 +/
Сообщение от Аноним (??) on 22-Окт-17, 00:10 
Никаких связей с растовым racer, ага.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

44. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Crazy Alex (ok) on 23-Окт-17, 15:52 
Растоманам везде раст мерещится
Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

30. "Facebook открыл RacerD, статический анализатор для многопото..."  +2 +/
Сообщение от теперь по Борщеву on 22-Окт-17, 16:52 
есть ли неигровое приложение под андроид, более нагружающее мобилку, чем фейсбук? Я серьёзно. Сбербанк-онлайн не предлагать.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

39. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 23-Окт-17, 15:24 
На мой не слишком проницательный взгляд история многопоточности в Яве это история про то, как сначала усиленно и целенаправленно делать дуршлаг, потому что дуршлаг все хотят, а потом сделав -- делать затычки для дырочек в этом друшлаге. Многопоточность в Яве "слишком гибкая", т.е. слишком много зависит от степени трезвости разработчика.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

49. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (??) on 23-Окт-17, 20:34 
как раз по части модели памяти джава всегда была очень продвинутой. актуальную модель памяти плюсов делали в том числе опираясь на джавовую, но вот, к примеру, с OoTA-значениями так и не разобрались.
Ответить | Правка | ^ к родителю #39 | Наверх | Cообщить модератору

53. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 01:27 
> как раз по части модели памяти джава всегда была очень продвинутой. актуальную
> модель памяти плюсов делали в том числе опираясь на джавовую, но
> вот, к примеру, с OoTA-значениями так и не разобрались.

Местами даже через чур. Особенно в отсутствии внятной документации.

Ответить | Правка | ^ к родителю #49 | Наверх | Cообщить модератору

56. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Ordu email(ok) on 24-Окт-17, 09:01 
чересчур
Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

57. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 13:06 
Да
Ответить | Правка | ^ к родителю #56 | Наверх | Cообщить модератору

61. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец on 24-Окт-17, 22:53 
P.S: Хотя, не совсем. "Через чур" тоже можно употреблять -- это, как раз, исконное выражение. Одно из значений "Чур" -- граница. Т.е. "через чур" это через границу. Или сверх меры. Так что, всё Ок.
Ответить | Правка | ^ к родителю #56 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру