About: Return value optimization is a research topic. Over the lifetime, 9 publications have been published within this topic receiving 83 citations. The topic is also known as: RVO.
TL;DR: The presented design and implementation of language support for lambda expressions in C++ is included in the draft specification of the forthcoming major revision of the ISO C++ standard, dubbed C++0x, and observed clear benefits, such as reduced code size and improved clarity.
TL;DR: This paper discusses two counterexamples to the well-known trailing-sync compiler mappings for the Power and ARMv7 architectures that were previously thought to be proven correct and discusses the loophole in the proof of the mappings that allowed the incorrect mappings to be proved correct.
Abstract: The C and C++ high-level languages provide programmers with atomic operations for writing high-performance concurrent code. At the assembly language level, C and C++ atomics get mapped down to individual instructions or combinations of instructions by compilers, depending on the ordering guarantees and synchronization instructions provided by the underlying architecture. These compiler mappings must uphold the ordering guarantees provided by C/C++ atomics or the compiled program will not behave according to the C/C++ memory model. In this paper we discuss two counterexamples to the well-known trailing-sync compiler mappings for the Power and ARMv7 architectures that were previously thought to be proven correct. In addition to the counterexamples, we discuss the loophole in the proof of the mappings that allowed the incorrect mappings to be proven correct. We also discuss the current state of compilers and architectures in relation to the bug.
TL;DR: In this article, a C++ program having one or more input variables to obtain bytecode of C++ programs is compiled, and a symbolic expression that if satisfied causes the program to proceed down the execution path is generated.
Abstract: Particular embodiment compile a C++ program having one or more input variables to obtain bytecode of the C++ program; compile a C++ library to obtain bytecode of the C++ library; symbolically execute the bytecode of the C++ program and the bytecode of the C++ library, comprising assign a symbolic input to each input variable of the C++ program; determine one or more execution paths in the C++ program; and for each execution path, construct a symbolic expression that if satisfied, causes the C++ program to proceed down the execution path; and generate one or more test cases for the C++ program by solving the symbolic expressions.
TL;DR: The structure of the book is illustrated with examples from C++, Java, and Eiffel, as well as some theory on Genericity and Covariance, which are discussed in more detail in the second chapter.
Abstract: Preface. Structure of the Book. About C++ Code Examples. Acknowledgments. Why Should We Be Concerned? 1. Language Principles. Programming. Communication, Abstraction, and Precision. Notation. Tool Integration. Correctness. Types. Flexibility, Correctness, and Reuse. Redundancy and Checking. Encapsulation and Implementation Hiding. Safety and Courtesy Concerns. Implementation and Deployment Concerns. Why OO? On Programming Language Evolution. The Usefulness of Mathematics. Legacy Systems. 2. Entities and Types. From Bits to Semantics. Basic Structures: The Class. Usefulness of Grammars. Classes and Types. Structs (C++). Typedefs (C++). Global Environments. Class Metadata. Obsolete (Eiffel). Invariants (Eiffel). Components. 3. Modules and Imports. Namespaces (C++). Clusters (Eiffel). Packages (Java). Header Files (C++). Import (Java). ACE Specification (Eiffel). Separate or Integrate? 4. Members and Features. Basic Structures. Members (C++ and Java). Anonymous Parameters in Class Definitions (C++). Default Arguments (C++). Local Entity Declarations (Java and C++). Inlines (C++). Pointers and References (C++). Declarations and Definitions (C++). Scope. Constants. Static (C++). Once Routines. Class Variables and Redefinition. 5. Type Extension: Inheritance and Virtuals. Basic Structures: Inheritance and Derived Classes. The Nature of Inheritance. Multiple Inheritance. Virtual Classes (C++). Nested Classes (Java and C++). Polymorphism and Inheritance. Union. Enumeration Types. Name Overloading. Virtual Functions (C++). Pure Virtual Functions (C++). Function Overloading (C++ and Java). Virtuals and Inlining. 6. Type Extension: Generics and Templates. Basic Structures. C++ Syntax. Constrained Genericity. Genericity and Code Bloat. An Alternative Form of Genericity. Java and Genericity. Some Theory on Genericity. Genericity and Covariance. 7. Interfaces and Access Control. 7.1 Basic Structures. Friends (C++). Controlled Exports vs. Friends. Multiple Interfaces. External Assignment (C++ and Java). Export Controls and Nesting. Mutable Const (C++). Generalization. 8. Constructors, Destructors, and Other Operators. Nameless Constructors (C++). Default Constructors (C++ and Java). Constructor Inheritance. Expanded Initialization (Eiffel). Constructor Initialization (C++). Destructors (C++). Dispose (Eiffel). Operator = (C++). and -> (C++). Delete and Delete [] (C++). Prefix and Postfix Operators (C++). || and && (C++). Operator Overloading (C++ and Eiffel). Implicit Conversions and Overloading (C++). Calling Parent Features. Calling Descendant Features. Conditional Expressions. 9. Casts. Type Casts (C++). RTTI and Type Casts (C++). New Type Casts (C++). Type Inference. Java and Casts. Signature Variance (Eiffel). 10. Compile Time. Global Analysis. Type-Safe Linkage (C++). Class Interfaces. 11. Run Time. Concurrency - It's about Time! Garbage Collection. Constructors and Temporaries (C++). Bad Deletions (C++). Slicing (C++). Program Execution. Dynamic Linking. Exception Handling. LinkageError (Java). 12. Other Details. Comments. Hexadecimal Literals (Eiffel). Double, Double Toil and Trouble. Class Header Declarations (C++). 13. Projects, Design, and Other Factors. Design by Contract. Preconditions, Types, and Invariants. The Software Life Cycle. CASE Tools. Reusability and Communication. Reusability and Trust. Reusability and Compatibility. Reusability and Portability. Reusability and Size. Idiomatic Programming. Low-Level Coding. Knowing the Correct Construct. Efficiency and Optimization. Standardization, Stability, and Maturity. Complexity. C++: The Overwhelming OOL of Choice? 14. General Issues. Pointers. Booleans. Logical and Bitwise Operators. Arrays. Function Arguments. void and void*. NULL vs. 0. char signed and unsigned. void fn () 340. fn (). fn (void). return. Switch Statements. Metadata in Strings. ++, --. Assignment Operator. Assignment Expressions. Defines. Case Sensitivity. Semicolons. Comments. Cpaghe++i. Bibliography. WEBliography. Bibliographic Index. Index.
TL;DR: This system reconstructs inputted C++ declarations by using information of the symbol table entered in the declaration process phase of the C++ compiler, and therefore it can verify completeness of symbol table design and correctness of information entered inThe symbol table is described.
Abstract: The existing C++ compilers are designed to translate C++ source programs into target codes and then execute them. This translation method is that a compiler that translates C++ source programs to target codes has to be available for each platform. Reusability and portability of codes will also decrease because target codes have to be different for each platform they are run under. For that reason, much research is taking place in various fields in an effort to develop a retargetable compiler and a virtual machine that execute application programs without recompiling or modifying them though processor or operating systems are changed. We have developed the C++ compiler for the SVM(Smart Virtual Machine) of the smart platform on smart systems. As a part of the C++ compiler development, we designed the symbol table that can support object-oriented languages, C++ and java. The symbol table is a data structure to keep track of scope and binding information about names (or identifiers). Various information is entered into the symbol table after visiting and analyzing the abstract syntax tree generated by syntax-directed translation, and then is used to check whether the use of names is consistent with their definition during the semantic analysis phase and generate a valid code during the code generation phase. In this paper, we describe the reconstruction technique for verifying and analyzing the symbol table designed for the C++ compiler. This system reconstructs inputted C++ declarations by using information of the symbol table entered in the declaration process phase of the C++ compiler, and therefore we can verify completeness of symbol table design and correctness of information entered in the symbol table. In addition, this system also produces debug information, and so is effectively utilized for the development of the C++ compiler.