华人澳洲中文论坛

热图推荐

    我写的scf是国际第一个彻底自主常识产权的编译器框架

    [复制链接]

    2022-10-13 09:34:09 54 0

    既然说到了科技后行者,我只能吹一吹本人了[捂脸]
    反正到当初为止,我没看到第二个国产的编译器框架,国外的llvm和gcc倒是见过。
    编译器是把初级言语代码转化成可履行顺序的工具软件,最先泛起于1970年摆布的美国。
    C言语的作者丹尼斯-里奇肯-汤普森,在1970年创造了C言语,固然也就同时创造了C言语的编译器
    同时,这两人用C言语编写了世界上第一种操作零碎,Unix零碎
    1980年后,国外对编译器的钻研曾经对比成熟,图灵奖得主阿霍(Aho)与其余3位作者著述的“编译原理”(龙书)就降生于这个年代。
    之后,“龙书”更新到了第二版。
    国际学过编译原理的顺序员得多,看过龙书的也不少,但真把龙书的实践做成一个编译器框架的,反正我没见过(除了我本人以外)[捂脸]
    编译器在IT畛域是十分首要的根底软件,并且瓜葛到根本的信息平安问题。
    C言语之父丹尼斯-里奇在贝尔试验室的时分,和共事开玩笑时就在C编译器里添加了后门代码[呲牙]
    而后,他共事编译的unix零碎,他不必明码就能进去。
    过后,他共事们查了unix源码的各种bug都没有解决这个问题,由于问题在编译器代码里。
    编译器的外部模块,根据程序能够分为:
    1,词法剖析
    这个对比简略,个别来讲大学在校生学编译原理时只学到这一步为止。
    2,语法剖析
    这个仍是对比费事的,但当初正则表白式库对比多,大少数有点功底的顺序员也写得出来。
    到了这里之后,接上去的模块就没多少人违心持续写了。
    一是编译器的技术到了深水区,写起来对比难。
    二是斟酌到生态问题,大少数人都弃坑了。
    说编译器不是做不了,而是做了也没有生态的人,大多都是浅尝辄止到这一步为止。
    3,语义剖析
    这个也不是多费事,次要针对变量类型反省和函数重载。
    假如不反对函数重载的话,只需求反省变量类型就行。
    4,两头代码生成
    这步是把顺序的树形构造变为程序构造,以婚配线性散布的内存地址。
    5,根本块的流程图
    这一步之后,顺序的运转流程就变为了一个
    图论的开创人是18世纪的大数学家欧拉,欧拉创建图论最后是为理解释“哥尼斯堡七桥问题”
    图的宽度优先搜寻深度优先搜寻,是编译器后端罕用的根本算法:在剖析变量和指针对代码块的影响、以及顺序的循环构造时,最为罕用。
    6,在对流程图进行完各种优化之后,就到了寄存器调配和生成机器码的阶段了。
    寄存器的调配要按照变量在各阶段的使用状况,机器码的生成绩对比简略了,看着CPU手写就行。
    7,最初生成elf可重定位文件,而且对外面波及的函数和全局变量进行衔接,就获取可履行顺序了。
    scf框架的源码在我的gitee上,有兴致的能够去看看:
    绝对整个vim手打,没有import python as 木兰[捂脸]
    并且python是个解释型言语,我这个是能编译成native码的。
    当初只反对x64平台和Linux零碎。
    我当初感觉编译器也不难写,但过后写的时分仍是费了不少头脑的。
    也不算吹嘘了,言语仍是很浮夸的,毕竟技术人员不怎么好吹嘘。
    我设计的语法仍是十分相似C言语的,比go言语美观多了。

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    中级会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题35

    帖子47

    积分212

    图文推荐