编译原理太弱了,怎么补? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ChaselPansy
V2EX    程序员

编译原理太弱了,怎么补?

  •  
  •   ChaselPansy 2019-01-13 01:24:00 +08:00 7264 次点击
    这是一个创建于 2515 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,已毕业,自己去写编译器不现实。
    有什么好的途径或者书籍推荐。

    有感看到:
    编译原理:深入研究编译器,去钻研 llvm 当然很难,但是作为一个普通开发人员,编译器的各种选项,不同的优化级别具体优化了哪些,这些总得了解一些。最关键的,动态链接,静态链接,头文件,gcc 的 include 选项、link 选项、define 选项(-I, -L, -D)怎么用,makefile/cmake 怎么写,clang icc gcc 到底真的用起来有什么区别,这些坑作为一个开发人员迟早会遇到,越早遇到,以后碰到坑的时候就能越轻松一些。

    链接: https://www.zhihu.com/question/268886169/answer/503722555

    27 条回复    2019-01-15 21:16:06 +08:00
    agagega
        1
    agagega  
       2019-01-13 01:55:27 +08:00 via iPhone   4
    编译器这个主题其实是很尴尬的。你说你去面试,如果你能和面试官聊你对 Linux 内核的很多了解,就算你的工作和它没关系,也会对你有很多加分,因为很多面试官懂这个也觉得比较重要。但是编译的东西很多面试官自己都不懂,能把 LR 说清楚就不错了,后端优化就更别提了…很多时候从事编译器相关的工作面临的都是工程问题(我想其他领域也是一样),大的算法和框架早就有人搭好了。

    至于你说的这些其实更偏向于 Toolchain,如果你平时就是开发 C/C++ 的话,多总结总结就好了。要知道 Clang 启动部分的源码里大部分都在处理命令行参数(可以加 -### 选项看看)。ICC 不了解,GCC 和 Clang 从命令行界面来说其实挺相似的,内部结构差了不少。
    agagega
        2
    agagega  
       2019-01-13 02:00:13 +08:00 via iPhone   1
    多说两句,我觉得学习计算机的时候模型是很重要的,它会潜移默化间影响你对这个领域知识的吸取方式。在我的理解中,模型就是支撑这个领域知识的基本原则,比如操作系统,你说那么多进程调度、内存管理什么的,这些代码到底怎么运行的,在哪运行的?网络的话,在一个有若干台机器连接的小网络里, 机器之间到底是怎样的方式通信的,A 怎么连到 B ?编译原理也是一样,我最开始就是在网络什么的上面没把这个模型搞清楚,考试、面试吃了很多亏。

    另外,其实自己写一个简单的编译器还是有意思的,你可以尝试一下 Cool 语言。
    thedrwu
        3
    thedrwu  
       2019-01-13 02:06:17 +08:00 via Android
    这个年代连配置文件都不用自己解析了,直接 json/yaml 甚至绑定一个脚本语言都很普遍。上回手写个 LL 的 parser 还是在几年前,也只是因为需要兼容老程序配置文件。
    zwh2698
        4
    zwh2698  
       2019-01-13 07:35:17 +08:00 via Android   2
    楼主,不要太在意,我修改过 c 编译器的前端,写过后端,写过优化,c/c++以主写了 10 年,可我就是写不了 make file,windows 上用 studio,跨平台就用 cmake, xmake. 人生苦短,没有必要学哪些没有多少增益的事情。做 c++你花时间在 c11 和 c17 区别上比这个有价值。
    zwh2698
        5
    zwh2698  
       2019-01-13 07:44:35 +08:00 via Android
    包含微软的编译器都是要处理命令行的,编译器的输入,曾经遇到一个 bug 就是编译器命令行的字符太多,超过 os 限制,就无法获取正确信息,编译就失败了,当然这种都是极端情况,一般工具不会产生这样的情况
    oxoxoxox
        6
    oxoxoxox  
       2019-01-13 07:56:04 +08:00 via Android   3
    也许你需要买一本 《程序员的自我修养链接、装载与库》
    zwh2698
        7
    zwh2698  
       2019-01-13 07:56:57 +08:00 via Android
    对了,另外不要觉得编译器处理参数占主要部分
    oxoxoxox
        8
    oxoxoxox  
       2019-01-13 07:57:46 +08:00 via Android
    另外 不同编译器 行为并不完全一致 所以了解个大概知识点就好 具体情况具体分析
    q397064399
        9
    q397064399  
       2019-01-13 08:54:19 +08:00   1
    用编译器编译代码跟编译原理真的没什么太大的关系
    windsage
        10
    windsage  
       2019-01-13 09:20:48 +08:00 via Android
    龙书 虎书和鲸书,看完你就无敌了
    zn
        11
    zn  
       2019-01-13 09:26:55 +08:00 via iPhone
    先补补补离散数学
    bumz
        12
    bumz  
       2019-01-13 09:30:29 +08:00   1
    前面你说自己编译原理太弱了,以为是指你不会自己写编译器(但是你又说自己去写编译器不现实,矛盾 1 )

    后面你又说不懂这些参数

    然而这些参数和编译原理又有什么关系呢(矛盾 2 )
    gainsurier
        13
    < href="/member/gainsurier" class="dark">gainsurier  
       2019-01-13 09:39:27 +08:00   2
    原答主的意思是叫你了解如何有效的使用编译器,而不是去造编译器。
    如果你想要了解
    “编译器的各种选项,不同的优化级别具体优化了哪些,这些总得了解一些。最关键的,动态链接,静态链接,头文件,gcc 的 include 选项、link 选项、define 选项(-I, -L, -D)怎么用,makefile/cmake 怎么写,clang icc gcc 到底真的用起来有什么区别”,
    你应该去阅读 gcc,clang,icc 以及 make 和 cmake 的文档,而不是去学习编译原理。以及程序怎么编译、链接、装载、运行,你或许该去看#6 提到的《程序员的自我修养-链接、装载与库》。
    zhaode
        14
    zhaode  
       2019-01-13 10:01:20 +08:00 via Android
    如果是要去开发编译器的岗位,编译器知识需要补;否则看个人兴趣吧
    chinvo
        15
    chinvo  
       2019-01-13 11:07:25 +08:00 via iPhone
    黑书龙书虎书鲸书
    Rasphino
        16
    Rasphino  
       2019-01-13 11:26:19 +08:00 via Android
    动态链接、静态链接什么的真的和编译原理有关系吗(
    visonme
        17
    visonme  
       2019-01-13 11:28:17 +08:00
    如果不是从事编译器相关的工作,其实没有必要强迫自己了解的那么多,那么深,大概知道是怎么个回事就好了
    slack
        18
    slack  
       2019-01-13 12:01:12 +08:00 via Android   1
    其实楼主只是需要找一个 man(手动滑稽),再不行就上网找相关的 guide。
    rus4db
        19
    rus4db  
       2019-01-13 12:20:41 +08:00
    如果像我一样单纯是为了兴趣,可以读一读[EOPL]( http://www.eopl3.com/)和[TAPL]( http://www.cis.upenn.edu/~bcpierce/tapl/)。

    龙书这些工程性比较强,用到的时候再读也不迟。
    Mistwave
        21
    Mistwave  
       2019-01-13 12:40:31 +08:00 via iPhone
    《编程语言实现模式》
    这个书很好,我最近正在读
    abcbuzhiming
        22
    abcbuzhiming  
       2019-01-13 13:19:33 +08:00
    我曾经有段时间很沉迷这个领域,但是我后来我发现在这上面投入精力真不如把精力投入到数学上,基本上优秀的编译器的一些技术来源都来自数学上的研究和进步
    zwyc
        23
    zwyc  
       2019-01-13 13:39:32 +08:00 via Android
    楼主对编译原理有点偏差。如果你想弄懂编译原理,不是应该是去理解编译器如何做解析,做平台无关优化,做代码生成。

    不是你说的动态链接,编译选项这样的事情。除了楼上推荐的链接装载的书,我也推荐一书'深入理解计算机系统'。
    red0range
        24
    red0range  
       2019-01-13 13:51:41 +08:00
    你先说为什么要补

    目标-理论-方法

    从 c++转到 java 之后基本没碰到过 gcc 什么事,有空看龙虎鲸还不如看点 jvm
    顺便那个知乎题目的回答看看就好,你需要先搞清你是从事的基础架构还是业务,业务的话你照那个回答去学很大概率会 gg
    realpg
        25
    realpg  
    PRO
       2019-01-13 18:09:57 +08:00
    编译器优化和编译原理有啥关系……
    chenyu0532
        26
    chenyu0532  
       2019-01-13 21:15:58 +08:00
    我觉得数据结构和设计模式才是我工作中用的最多的,至于编译原理,我的工作深度还远远用不到。。
    mightofcode
        27
    mightofcode  
       2019-01-15 21:16:06 +08:00
    学这个对你现在的工作有啥用处?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3293 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:39 PVG 08:39 LAX 16:39 JFK 19:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86