A course regarding computer programming has given the first impression on the normal student. Most students have some contacts for computers before such courses, such as computer games or other personal applications, have begun to realize that these applications have been working in the form of computer games or other personal applications. After obtaining a certain ability to be programmers (assuming a good course with a good data structure and algorithm), natural next step is to know how the programming language works. This book will provide an explanation for this.
In conventional teaching programs related to "System", the contents of the data structure (or plus computer organization) are classified into a batch of courses belonging to some subdomains, such as programming language, compile, computer architecture, operation. System, database management system, may have software engineering, graphics, or user interface systems. This arrangement has a disadvantage: many interesting things about computer science, many are in the boundaries of these subsequent areas. For example, the RISC revolution has driven alliance between computer architecture and compiler construction, the emergence of microenvironment makes the boundaries between the operating system and the language runtime library becomes blurred, and the Java-based system is blurred in a similar form of compilers and The distribution between the library. The powerful memory system in the supercomputer is redefining the relative role between the operating system, the compiler, and hardware. The design of the programming language has also been an important impact of implementation. More and more educators and researchers have gradually realized the importance of concern these interrelationships.
Another problem with the teaching plan of a division is to provide too many courses. Bachelor students did not have enough time to finish them. If a student wants to lay a solid foundation in theory, artificial intelligence, numerical methods or other independent fields, then there may no time to go to 5 high-level courses in the system. My understanding is that it is more meaningful to provide some basic materials across these subsequent materials compared to the in-depth discussion of two or three subsets.
The core of "The Procedure Design Language - Practice Road" is the issue of discussing how the programming language works. From a point of view, it is a mixture of programming languages and compiled traditional textbooks, coupled with some materials related to assembled architectures to meet the needs of students who have not learned computer organizations. It is not a review of language textbooks, which do not list the details of many different languages, but a batch of concepts that focus on students may encounter as all languages, and explain these concepts through examples of various languages. It is not a textbook related to the compiler structure, which does not explain how to construct a compiler (which is only a very small number of programmers, which will eventually participate in the entire participation, although many other tools will use their front-end technology) Instead, explain how the compiler works, it does something for the source program, and why do you want to do it. The design and implementation of the language is placed here, which especially emphasizes the various ways of interaction between them. When discussing iteration (Section 6.5.1), we can see semantic issues (what is the scope of the indicator variable? If the loop is to modify the loop indicator or what problem occurs?) And the actual problem ( How many branch instructions must be implemented in each iteration of the loop? How to avoid arithmetic overflows when updating the indicator, to create the evolution and development of the loop structure. When discussing object-oriented programming, we can see how tight between semantic elegance and implementation speed, see how it affects languages such as SmallTalk, Eiffel, C and Java.
In a typical undergraduate teaching plan, we want this book to be used for programming language courses. Compared with other textbooks, this book is slightly detailed, but it also covers the same broad language and concepts, and contains more information about implementation. For students with strong interest in language design, they can encourage them to learn the formal semantics, type theory or course-oriented curriculum. Students who have strong interest in language implementation should encourage them to learn to learn further courses in compiler. With this bookmaking foundation, there are more time to generate and optimize the compilers, these issues are also the interesting work of today. In the University of Rochster, the materials of this book have been used for more than ten years and used to teach a course named "Software System". This course attracts the middle-aged undergraduate and first grade graduate students. This book is also very valuable for professional programmers and other practical workers. If they want to have a better understanding of the situation "back" in the programming language of their favorite. By discussing about grammar, semantics, and actual (implementation) issues, this book attempts to provide a more complete and balanced processing of language, hoping to help students understand why all languages are Designed to look like, make programmers to choose a suitable language for specific applications, easier to learn new languages, and use any languages and efficiently.
In the final section of most chapters, we have returned to the problem of design and implementation, which especially emphasizes the interaction of the two in front of the previous sectors. In addition, Appendix B lists a table that summarizes these interactions, including discussing chapter indexes. These interactions are divided into several categories, including today's language designers think it is wrong, at least part of the reason is difficult; some of the possible features are not in some languages, mainly considering their implementation Very difficult or slow; some language features are introduced, at least partially due to their efficient and beautiful implementation, etc.
Some chapters (Chapters 2, 4, 5, 9, and 13) are more emphasized than other chapters. These chapters can be adjusted within a certain limit, but must ensure that the contents of Chapter 5 or comparable contents appear before. Many readers may have been familiar with most or all of the materials in Chapter 5, mostly from a course related to computer organizations. In this case, you can simply skip this chapter. Please note that chapters of the following are assumed to understand the compilation layer architecture of the new (ie, RISC) microprocessor. Some readers may have been familiar with some of the materials in Chapter 2, which may be from a course related to automaton. In this case, the content of this chapter can be read quickly, but it is only necessary to stay in some practical issues (eg, recovered from syntax errors).
As a self-study, or as a whole year, I suggest to use this book from head to tail. As a course of Rochster as a semester, we also cover most of this book. In the course, they concentrated on the materials selected from the following sections: Chapter 1, 1.2 to 2.2.3, Chapters 3, 4, 6, 7, 8, 9.1 to 9.3, Articles 10 to Chapter 12 . At the same time, students are required to read all the materials in this book, except for each section of the star. They also ask them to skip Chapter 5, mainly because they have already learned a course of computer organizations.
If as a more traditional programming language course, you can exclude 2.2 and clauses 4, 5, 9, reduce the importance of the material related to other chapters and implementations, and use more time to carefully examine semantics and differences. The programming model (for example, some of the theoretical base materials in Chapter 11). For those who use 4 semester, a significant option is to open a semester guidance course and two subsequent elective courses. The guiding course can cover the following sections: Chapter 1, 2.1 to 2.2.3, para. 3, 6, 7, 8.1 to 8.4. Language-oriented courses in the subsequent semester can cover 8.5 to 8.6, sections 10 to 12, and additional materials related to the formal semantics, type systems, or other related topics. The next semester can include 2.2.4 to 2.3, 4,5 (if needed), 9 and 13, and some relevant automatic code generation, more extracted code optimization, program design Tools and so on. The objection to this arrangement may be that it does not include the contents of object-oriented, functional and logical programming in the guidance. Another option is from a more widely targeted design-based point of view, moves 1.4 to 1.6 and 2.2.1 to 2.2.3 to the compiler, reduce Chapter 6 to 8 Chapter 8 is related to the relevant materials, add 10.1 to 10.4 and 10.6, and some of the theoretical foundation in Chapter 11. I assume that typical readers have had considerable experiences for at least one advanced commander programming language. What is the language is not a relationship. The examples of the book are taken from a variety of different languages, but there is always enough instructions and other discussions to make readers who are not familiar with the language can easily understand them. When needed, the algorithm is given by a self-shape pseudo code. The true programming language code is this font (Computer Modern), and the font used by pseudo code is this font.
Each chapter has some review questions and some more challenging exercises. The special value of these exercises is to guide students to understand various languages or technologies, many of which are not met elsewhere, or will not encounter. I recommend programming work with C or Java; Scheme, ML or Haskell; and ProLog. It is also very good idea to arrange an exception handling, which can be written in ADA, C , Java, ML or MODULA-3. If the course contains parallelism, the job should be given in SR, Java, ADA, or ModuLA-3, which can be selected according to local conditions. Various languages implemented resource information is given in Appendix A.