program, for example in presence of code injection defenses such as W^X, he or she can redirect the control flow to code sequences existing in memory. Examples of code-reuse attacks are return-to-libc attack, return-oriented programming, and jump-oriented programming. Components A component, in an object-oriented extent, represents a set of collaborative classes (or only one class) and its interfaces. The interfaces are responsible for enabling the replacement of components. Reusable components can also be isolated and synchronized between SCM repositories using component source code management technologies (CSCM). Outside computers The whole concept of "code reuse" can also encompass engineering applications outside software. For instance, parametric modeling in computer-aided design allows for creating reusable designs. Standardization results in creation of interoperable parts that can be then reused in many contexts. Criticism Code reuse results in dependency on the component being reused. Rob Pike opined that "A little copying is better than a little dependency". When he joined Google, the company was putting heavy emphasis on code reuse. He believes that Google's codebase still suffers from results of that former policy in terms of compilation speed and maintainability. See also Don't repeat yourself ICSR Inheritance Language binding Not invented here (antonym) Polymorphism Procedural programming Reinventing the wheel (antonym) Reusability Reuse metrics Single source of truth Software framework Virtual inheritance References External links ReNews – an information site about software reuse and domain engineering Software Reuse Tips Article Programming principles Repurposing Computer libraries