Programmers should learn code compiler knowledge
All excellent computer science schools offer compiler courses, but relatively few schools make it a required part of their undergraduate courses. This article answers the question: Why do you need to learn compiler knowledge? Even if you never plan to write a compiler.
One of the reasons I wrote this post is that although I loved the compiler course as an undergrad, I could barely see it being used in practice. Most of the material seemed either straightforward or esoteric (in fact, most of the compiler material I found was boring.) Either way, I spent a few years summarizing why this type of course is so useful. actual reasons. Here’s why.
Analyzers and parsers are everywhere
Serious PHP programmers have to understand analyzers and parsers, because we will not always just write some small programs. Every time you write an extensible program or process a new type of input file, you need to know about them (analyzers and parsers). Greenspan’s Tenth Law:
“Any C or Fortran program that is complex to a certain level will contain a temporary Common that has only half functionality, does not fully meet specifications, is full of bugs, and runs very slowly. Lisp implementation."
We spend so much time doing each of these things that we can do each one of them with a one-off trick, or we use 60 years of theoretical and practical knowledge to solve the problem, and Get it right. The important thing is: when should you borrow existing code or use existing tools? When can theoretical knowledge help? What language design principles can be applied to the small languages we use every day?
You are better able to write correct code
The compiler should correctly translate the input language into a legal program. To achieve this goal, compiler developers must understand the entire input language, including some rare problems that ordinary programmers never see. This understanding process is an important step towards the essence of programming language, which is different from what we usually see when writing code. For example, my understanding of the C language completely changed after I learned the details of sequence points, undefined behaviors, and common arithmetic conversions. C compiler writers have mastered these concepts, but most junior and intermediate programmers are unaware of them. It is no exaggeration to say that once you know the nature of a language, you will think about it differently and more accurately. This applies to any language, especially languages with unclear semantics like C and C++.
You can write faster code
By understanding the compiler, you can clearly know which optimizations the compiler can optimize and which ones the compiler cannot optimize, regardless of How reasonable and simple they seem. You'll learn which types of code typically build the best blocks of code, why they do this, and what they do. You will know why some codes can have better performance, such as an FIR filter that uses half a register bank to cache filter coefficients and half a register bank to cache samples, which is different from using a normal optimizer. You and your favorite compiler are a team that creates fast code that you can use to work efficiently or modify it using pointless tricks like lookahead optimization.
Secondly, the compiler backend is closely related to the target architecture. Of course, modern architectures try to provide assembly programmer-friendly platforms, and they are not far away. By understanding the compiler backend and why it generates code the way it does, you will have a better understanding of the operation of computer architecture.
Summary
The compiler (theoretically) has three parts:
1.Language-related front-end (analysis, type detection)
2.Language and target-agnostic mid-end (optimized))
3.Target-dependent backend (generating machine code)
here In this article, I've tried to convince you that there is value in understanding every part of a compiler - even if you don't implement or modify them in the future.
Receive LAMP Brothers original PHP video tutorial CD/"Essential PHP in Details" for free. For details, please contact the official customer service:
http://www.lampbrother.net
|

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...
