Извините, если я вас чем-то обидел, но я именно хотел бы конструктивного общения. Вы утверждаете, что книга 2000 года старовата, вот я и прошу указать, что именно нового вы добавили.
Мне кажется, в любой научной публикации важно именно выделять новизну.
А обижаться совершенно не на что.
Такое условие является всегда истинным, из-за чего вся эта большая проверка становится бессмысленной, о чем и сообщает анализатор.
Нет же. Здесь происходит вызов displayChanges(), и если резутьтат равен false, то происходит вызов displayChanges() второй раз. Вообще не факт, что он также будет false. Это условие абсолютно не обязано быть истинным.
Для примера, вот код:
int cond() {
if(foo() || !foo())
{}
}
Вот результат компиляции:
cond():
sub rsp, 8
call foo()
test al, al
jne .L2
call foo()
.L2:
add rsp, 8
ret
Ни о каком всегда истинном условии не может быть и речи.
1. Можно и самому написать, just for fun
2. Кроме бэкенда в релизе LLVM, есть ещё как минимум один на гитхабе, можно попробовать его.
3. Да, векторное расширение интересно.
Интересно. Я туда не заглядывал.
Имхо, здесь имеется в виду вот что. LLVM основан на мощной концепции: языке LLVM IR, и системе классов, представляющих основные структуры компилятора. Именно эти базовые вещи спроектированы очень хорошо. А 100500 проходов оптимизации и трансформации кода могут быть написаны самыми разными людьми, и не все из них гении, увы. Но хорошая базовая структура позволяет развивать и поддерживать такой большой проект.
является самым наивным подходом, легко приводящим к багам.
Тем, не менее, этот подход успешно работает.
Так что непонятно, нафига собственная реализация, если для класса с виртуальными функциями компилятор гарантированно может реализовать все оптимальным образом?
Знаете, я прямо сейчас не готов всё сформулировать, зачем это и для чего. Предлагаю вам посмотреть исходники LLVM, там dyn_cast<> и isa<> встречаются повсеместно.
Или я могу написать отдельный пост на эту тему, но это займёт некоторое время.
То, что реализация dyn_cast требует от программиста дополнительных усилий. Этот механизм не работает автоматически. Вечером выложу сюда ссылку на документ с описанием.
dyn_cast — очень лёгкий и быстрый механизм, с минимальными накладными расходами, в отличие от.
Рассуждения о «хорошей архитектуре» давайте оставим диванным теоретикам.
Мне кажется, в любой научной публикации важно именно выделять новизну.
А обижаться совершенно не на что.
Нет же. Здесь происходит вызов displayChanges(), и если резутьтат равен false, то происходит вызов displayChanges() второй раз. Вообще не факт, что он также будет false. Это условие абсолютно не обязано быть истинным.
Для примера, вот код:
Вот результат компиляции:
Ни о каком всегда истинном условии не может быть и речи.
2. Кроме бэкенда в релизе LLVM, есть ещё как минимум один на гитхабе, можно попробовать его.
3. Да, векторное расширение интересно.
Имхо, здесь имеется в виду вот что. LLVM основан на мощной концепции: языке LLVM IR, и системе классов, представляющих основные структуры компилятора. Именно эти базовые вещи спроектированы очень хорошо. А 100500 проходов оптимизации и трансформации кода могут быть написаны самыми разными людьми, и не все из них гении, увы. Но хорошая базовая структура позволяет развивать и поддерживать такой большой проект.
Тем, не менее, этот подход успешно работает.
Знаете, я прямо сейчас не готов всё сформулировать, зачем это и для чего. Предлагаю вам посмотреть исходники LLVM, там dyn_cast<> и isa<> встречаются повсеместно.
Или я могу написать отдельный пост на эту тему, но это займёт некоторое время.
Могу написать отдельный пост на эту тему.
https://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html
Рассуждения о «хорошей архитектуре» давайте оставим диванным теоретикам.