Size: a a a

Compiler Development

2020 November 26

M

MaxGraey in Compiler Development
MaxGraey
Вот такое он вряд ли развернет:

isEven(n) {
 return !n ? true : isOdd (n - 1);
}

isOdd(n) {
 return !n ? false : isEven (n - 1);
}

А вот вот IR в Impala с легкостью
источник

BD

Berkus Decker in Compiler Development
раст не любят в компиляторном чятике 🙂
источник

PS

Peter Sovietov in Compiler Development
Для вас ведь специальный отдельный чат открыли https://t.me/LanguageDev. Дайте уж людям тихо-мирно поговорить про компиляторы :)
источник

AG

Alex Gryzlov in Compiler Development
Alexander Tchitchigin
@thedeemon_lj помнится, в ЖЖ разъяснял, что трансдьюсеры в Кложе — это недоделанные свёртки инициальных алгебр. В Haskell, понятное дело, используют доделанные.
если точнее то фолды из оптик
источник

PS

Peter Sovietov in Compiler Development
Фолды-оптики! Главное — анализ потоков данных! Вот, посмотрите, как разработчик Clang разобрался в этой тематике.
Знали ли вы, что на стороне Clang осуществляется достаточно серьезный статический анализ?
Аж 4 вида: Liveness, UninitializedVariables, annotation checking, thread safety analysis. (а еще Lifetime analysis на подходе).
Любопытное чтение на тему того, что из теории полезно практику: https://lists.llvm.org/pipermail/cfe-dev/2020-October/066937.html
источник

E

EgorBo in Compiler Development
чем строже язык, тем более полные анализы можно делать во фронте 😊
источник

BD

Berkus Decker in Compiler Development
знали конечно, откуда бы там тогда взялось -Wlifetimes
источник

AG

Alex Gryzlov in Compiler Development
ну это просто вещи разных уровней абстракции, ничего не мешает написать анализатор в том числе используя оптики
источник

PS

Pavel Samolysov in Compiler Development
Peter Sovietov
Фолды-оптики! Главное — анализ потоков данных! Вот, посмотрите, как разработчик Clang разобрался в этой тематике.
Знали ли вы, что на стороне Clang осуществляется достаточно серьезный статический анализ?
Аж 4 вида: Liveness, UninitializedVariables, annotation checking, thread safety analysis. (а еще Lifetime analysis на подходе).
Любопытное чтение на тему того, что из теории полезно практику: https://lists.llvm.org/pipermail/cfe-dev/2020-October/066937.html
Это в самом clang или clang static analyzer?
источник

PS

Peter Sovietov in Compiler Development
Pavel Samolysov
Это в самом clang или clang static analyzer?
источник

PS

Pavel Samolysov in Compiler Development
Интересно, спасибо
источник

PS

Peter Sovietov in Compiler Development
Для любителей sound/unsound, выдержка из этого кода :)

  // The analysis currently has scalability issues for very large CFGs.
  // Bail out if it looks too large.
  if (cfg->getNumBlockIDs() > 300000)
    return nullptr;
источник

BD

Berkus Decker in Compiler Development
Pavel Samolysov
Интересно, спасибо
в шланге прикрутили -Wlifetime и несколько других анализов для  С++, под давлением _некоторых других языков_
источник

PS

Pavel Samolysov in Compiler Development
Berkus Decker
в шланге прикрутили -Wlifetime и несколько других анализов для  С++, под давлением _некоторых других языков_
Тех, которые здесь нельзя называть? 😊 Но это будут варнинги, а не эрроры, как я понимаю, ну только если не включать варнинги как эрроры.
источник

PS

Peter Sovietov in Compiler Development
Berkus Decker
в шланге прикрутили -Wlifetime и несколько других анализов для  С++, под давлением _некоторых других языков_
Среди "нескольких других анализов" Liveness, к примеру, появился в Clang еще в далеком 2007. То есть когда некоторых других языков еще и не существовало :)
источник

BD

Berkus Decker in Compiler Development
Pavel Samolysov
Тех, которые здесь нельзя называть? 😊 Но это будут варнинги, а не эрроры, как я понимаю, ну только если не включать варнинги как эрроры.
никто в здравом уме не компилирует без -Werror
источник

BD

Berkus Decker in Compiler Development
Peter Sovietov
Среди "нескольких других анализов" Liveness, к примеру, появился в Clang еще в далеком 2007. То есть когда некоторых других языков еще и не существовало :)
эмм, я про эти анализы и не  говорил, не надо передергивать
источник

PS

Peter Sovietov in Compiler Development
Berkus Decker
эмм, я про эти анализы и не  говорил, не надо передергивать
А о каких вариантах анализа идет речь? Lifetime еще в официальной ветке не появился.
источник

PS

Pavel Samolysov in Compiler Development
Berkus Decker
никто в здравом уме не компилирует без -Werror
Есть и другие мнения на этот счёт. Всякие диприкейты например, что ходить по всей кодовой базе того же условного кланга и переписывать, если в какой нибудь либе что-то диприкейтнули? Сам кланг и ллвм компилируются без - Werror.
источник

BD

Berkus Decker in Compiler Development
Peter Sovietov
А о каких вариантах анализа идет речь? Lifetime еще в официальной ветке не появился.
-Wdangling-gsl: Statement-local analysis (enabled by default)

-Wreturn-stack-address: Statement-local analysis (enabled by default)

-Wlifetime: Main flow-sensitive analysis

-Wlifetime-filter: Reduce the number of false-postives at the cost of additional false negatives.

-Wno-lifetime-null: Disable flow-sensitive warnings about nullness of Pointers

-Wlifetime-global: Flow-sensitive analysis that requires global variables of Pointer type to always point to variables with static lifetime

-Wlifetime-disabled: Get warnings when the flow-sensitive analysis is disabled on a function due to forbidden constructs (reinterpret_cast or pointer arithmetic)

как минимум эти
источник