4 dépôts
Identifying functions that do not modify state to enable aggressive dead-code and result elimination.
Distinct from Side Effect Handlers: Distinct from reactive side-effect management; this is a static analysis for compiler optimizations.
Explore 4 awesome GitHub repositories matching programming languages & runtimes · Side-Effect Analysis. Refine with filters or upvote what's useful.
Prepack is a build-time code evaluator and JavaScript bundle optimizer. It functions as a static analysis compiler that pre-evaluates static code and precalculates function results and global assignments during the build phase to accelerate startup times and reduce bundle size. The project specifically targets JSX optimization by processing syntax and node serialization to improve user interface rendering efficiency. It utilizes a partial evaluation engine and static execution analysis to replace runtime computations with precalculated constants. The tool covers a range of capabilities inclu
Performs side-effect analysis to determine which functions can be safely precalculated.
Binaryen is a WebAssembly compiler toolchain and optimizer designed to transform, validate, and shrink binary modules. It provides a comprehensive intermediate representation framework that converts binary code into a single-assignment form to enable advanced program analysis and code transformation. The project includes a specialized transformation engine that applies iterative optimization passes to increase execution speed and reduce binary size. Additionally, it functions as a transpiler that translates WebAssembly binary modules into executable JavaScript for environments that lack nativ
Computes side effects for each function to allow the optimizer to move code past non-state-modifying calls.
Carp is a statically typed Lisp compiler that compiles Lisp-like syntax directly to C source code, enabling seamless integration with existing C libraries and low-level system programming. It manages memory deterministically at compile time using ownership tracking and linear types, eliminating garbage collection pauses and runtime overhead while ensuring type safety through an inferred static type system. The language distinguishes itself through compile-time macro expansion and metaprogramming capabilities, allowing code generation and transformation before final binary output. It enforces
Provides a language construct for discarding return values and executing code solely for side effects.
Simplify est une machine virtuelle Android sandbox, un traceur d'exécution de bytecode et un framework d'analyse statique. Il sert de désassembleur de bytecode Dalvik conçu pour récupérer du code lisible à partir de binaires en simulant le comportement du programme sans appareil physique. Le projet se distingue par l'utilisation de l'analyse de graphes d'exécution pour résoudre les appels par réflexion et simplifier le code obfusqué via la propagation de constantes et la suppression de code mort. Il utilise la simulation d'exécution multi-chemins pour suivre tous les résultats possibles des branches conditionnelles et mappe le flux d'instructions pour identifier les valeurs constantes. Le système couvre un large éventail de capacités d'analyse, notamment le traçage de la propagation des exceptions, la catégorisation des effets de bord des méthodes et la simulation d'appels d'API Java. Il fournit également des mécanismes pour intercepter les exécutions de méthodes via des hooks personnalisés afin de surveiller ou de remplacer les états de la machine virtuelle.
Categorizes instructions based on their impact on external state to determine if code can be safely removed or inlined.