All streams
Search
Write a publication
Pull to refresh
286
0
Владимир @32bit_me

Программист

Send message
В оригинале engeneering-days.
Извините, если я вас чем-то обидел, но я именно хотел бы конструктивного общения. Вы утверждаете, что книга 2000 года старовата, вот я и прошу указать, что именно нового вы добавили.
Мне кажется, в любой научной публикации важно именно выделять новизну.
А обижаться совершенно не на что.
Ну хорошо, вы можете выделить ту информацию, которая есть в вашей статье, но нет в «кратком курсе»?
Мне одному кажется, что это просто кусок из «Начального курса чёрной магии»?
Если присмотреться, то можно заметить, что внутри данного сложного условия находится проверка вида (!a || a):

d->documentLayout->changeTracker()->displayChanges() ||
!d->documentLayout->changeTracker()->displayChanges()

Такое условие является всегда истинным, из-за чего вся эта большая проверка становится бессмысленной, о чем и сообщает анализатор.


Нет же. Здесь происходит вызов 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


Ни о каком всегда истинном условии не может быть и речи.
Опять непонятно. Зачем надкусывать патрон? Почему именно кштарии должны надкусывать патроны, а другие не должны?
Ещё хочу добавить, что также есть язык SpinalHDL, также являющийся производным от Scala, на нём написано ядро VexRiscV.
1. Можно и самому написать, just for fun
2. Кроме бэкенда в релизе LLVM, есть ещё как минимум один на гитхабе, можно попробовать его.
3. Да, векторное расширение интересно.
«завод по производству микроэлектроники» — это призводство микросхем, а не вот это импортозамещение, которое вы нам показываете.
Интересные идеи, над этим стоит поразмышлять. Я не готов сейчас ответить по существу.
Интересно. Я туда не заглядывал.
Имхо, здесь имеется в виду вот что. LLVM основан на мощной концепции: языке LLVM IR, и системе классов, представляющих основные структуры компилятора. Именно эти базовые вещи спроектированы очень хорошо. А 100500 проходов оптимизации и трансформации кода могут быть написаны самыми разными людьми, и не все из них гении, увы. Но хорошая базовая структура позволяет развивать и поддерживать такой большой проект.
является самым наивным подходом, легко приводящим к багам.

Тем, не менее, этот подход успешно работает.
Так что непонятно, нафига собственная реализация, если для класса с виртуальными функциями компилятор гарантированно может реализовать все оптимальным образом?

Знаете, я прямо сейчас не готов всё сформулировать, зачем это и для чего. Предлагаю вам посмотреть исходники LLVM, там dyn_cast<> и isa<> встречаются повсеместно.
Или я могу написать отдельный пост на эту тему, но это займёт некоторое время.
Выше привёл ссылку, там общий принцип механизма изложен.
Могу написать отдельный пост на эту тему.
То, что реализация dyn_cast требует от программиста дополнительных усилий. Этот механизм не работает автоматически. Вечером выложу сюда ссылку на документ с описанием.
dyn_cast — очень лёгкий и быстрый механизм, с минимальными накладными расходами, в отличие от.
Рассуждения о «хорошей архитектуре» давайте оставим диванным теоретикам.
Это просто игра словами. Не используется стандартный механизм RTTI языка C++.
Хорошо, вечером найду.

Information

Rating
Does not participate
Date of birth
Registered
Activity