Home Backend Development PHP Tutorial Programmers should learn code compiler knowledge

Programmers should learn code compiler knowledge

Jul 25, 2016 am 09:01 AM


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



Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

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,

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

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

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

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.

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

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 permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

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...

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

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? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

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

See all articles