Learn Compiler Construction with Compilers: Principles, Techniques, and Tools (2nd Edition) - Solutions
a programmer might want to think about things (e.g. use of resources, scalability, performance, overall quality, usability, etc) while writing a program. this would involve, in general, some kind of specification (e. a specification language, a set of design criteria, a set of templates, etc). in a traditional language-based programming model, there is a (static) separation between the programmer (who generates the text) and the compiler (who analyzes the text). the latter has to do things which are very different from the former, such as following the rules of the language and optimizing the resulting code. therefore, it can be quite hard to express these specifications.
Compilers Principles Techniques And Tools Solutions Manual 2nd Edition
multicore systems are now finding their way into mobile devices, and as more of us move our computing power and data storage away from the desktop computer, we are going to need multicore systems to support computation and storage. today, we have an abundance of multicore systems both at home and in the corporate market place. if you are a programmer, it's important to understand the strengths, weaknesses, and capabilities of these systems. the upcoming pages describe such a system, and explain how to generate, analyze, and use information in a multicore system.
in a multicore system, you have at least three kinds of values in the memory: values that belong to a thread, to the scheduler, or to the operating system. the compiler cannot guarantee that a value will only be used by one thread or by the scheduler. the compiler needs to therefore access the full range of possible memory values in order to optimize the code, by eliminating those code paths that are entirely redundant. the compiler also needs to know what the memory's background state is and if it is changing, for example at startup or at program end.