Являются ли грамматики Boost Spirit V2 Qi безопасными для использования? - PullRequest
0 голосов
/ 06 октября 2018

Читая документы Boost Spirit V2, этот SO-вопрос и этот лучший результат Google Spirit Doc для Spirit Classic / v1 Я не смог найти ни одного утверждения в темебезопасность Boost Spirit V2 грамматики и правил.Некоторые утверждают, что он больше не похож на классический, и #define BOOST_SPIRIT_THREADSAFE не будет иметь никакого эффекта, но, тем не менее, если V2 не отличается от классического в отношении безопасности потоков, упомянутый источник не очень ясен, если он говорито различных экземплярах или общих экземплярах.

Итак, мой основной вопрос:


1.Являются ли объекты грамматики различных духов V2 безопасными для потоков?

И необязательно, если известно:

2.Являются ли объекты грамматики разделяемого духа V2 безопасными для потоков?

3.Являются ли отдельные объекты правил Spirit V2 потокобезопасными?

4.Являются ли объекты правил shared spirit V2 безопасными для потоков?

Я также пометил его для Spirit x3, поскольку там тот же вопрос.

1 Ответ

0 голосов
/ 06 октября 2018

Действительно, BOOST_SPIRIT_THREADSAFE никак не относится к Qi, это было для Классики.

При этом единственное, от чего зависит безопасность потоков, это то, что Boost построен с поддержкой потоков.Все признаки, которые я обнаружил за полвека, заключаются в том, что ни одна библиотека больше не поддерживает сборку без поддержки потоков.( Что именно `threading = multi` делает при компиляции boost? ).

Нетерминалы (грамматики и правила) являются поточно-ориентированными, если вы не получили свою собственную грамматику, которая не имеет состояния иparse операция не является константой.

На практике предпочитайте писать свои синтаксические анализаторы, чтобы они могли быть явно константными:

Parser const p;

book ok = parse(f, l, p);

X3 упрощает доказательство безопасности потоковпотому что правила, как правило, являются константой глобальной статики (или даже constexpr) и по сути своей не имеют состояния.

...