析码多目标编译器 Semo Compiler

码农软件 · 软件分类 · 编译器 · 2019-12-09 11:44:15

软件介绍

析码多目标编译器

析码是由突壳开源开发的一个多目标编译器(国产编译器、产品级编译器、开源),基于独特的的架构设计使得该编译器在“语言”跟“目标机”的兼容性方面性能突出。项目在二零零八年二月发起,前后经过两年的开发其整体架构已经成型,此前,突壳以一个C99前段,跟ARM体系后段发布了一个初步的演示版本,演示版本中已经可以将C语言代码编译成可以在ARM平台运行的ELF软件包。从最初的高级语言源代码到最终二进制的产生,析码由突壳开源完全自主的一个编译平台,其中的技术与代码完全来源于狂热的开发组成员,为了保证完整性,析码的开发没有使用任何第三方代码。

架构方面,“析码”的架构被划分为“前”、“中”、“后”三个段落。首先在代码上,段与段之间没有任何关联,基于这个特性,我们可以在最大可重用前提之下,使析码支持n中语言,n种机器。语言相关的部分被划分到了“前段”,而与机器相关的部分被划分到了“后段”,中段是跟具体某个语言或某型号机器无关的部分,它被完全重用了。任意语言之间有个共同点,就是前段非常地接近,这种接近是指有对应的单位可以相互转换,例如“函数”、“循环”、“条件语句”等等,忽略掉语义层的差异,不同类型的语言之间在词法跟语法上对应的单位可以等价地转换。在析码的架构中,这些语言相同的部分,或说它的相关性被隔离在了“前段”,让其某组分析器作为组件存在,这在很大程度上提高了析码编译器的语言兼容性。后段方面,硬件体系部分也是大同小异,如果把范围缩小到最小,那些差异仅仅局限于“指令集”之上,指令集抽象出来作为后段的一部分,使析码在代码生成初期不去关心具体体系,后期只需要简单地将中间形式其映射到某体系即可,如此,在更换目标机器时,只需要替换一下映射函数,提高了机器兼容性。在中段部分,它完全独立于任意语言,任意机器,它是一个纯粹的抽象模块,由抽象语法、抽象代码构成。

析码“0.3.0”特性

  • 符合C99标准的“预处理”、“词法分析”、“语法语义分析”模块。
  • 高度通用的抽象语法,可描述多种不同类型的高级语言。
  • 基于“SSA”的抽象代码。
  • 基于“York-Town”模型的寄存器分配器,高效且设备无关。
  • 支持“stdcall”、“cdecl”、“fastcall”、“armcall”,全面兼容“VC”、“GCC”、“ARMCC/TCC”等主流编译器。
  • 兼容“ARMv6体系”的汇编器“Semo Assembler”,可以独立使用。
  • 兼容“ARMv6体系”的动态链接器“Semo Dynamic Linker”,支持可重定位式“ELF”的加载与链接。

选择析码您将收获

  • 对于在校学生,析码具有完整的文档系统,它是你最佳的学习环境。
  • 对于学术研究者,突壳社区会提供全面的技术支持,可以保证你在最短的时间内搭建试验平台。
  • 对于工程开发人员,析码编译器可以提供高效的工作效率。于此同时,突壳社区还提供前后端定制服务,降低您的生产成本。

参与项目您将收获

  • 对基础软件技术全维度认识。
  • 产品级编译器开发经验。

项目历程

  • 2008 - 2009 Semo C()mpiler 0.1.0
  • 完成了一个实验性的C语言前端。
  • 2009 - 2010 Semo C()mpiler 0.2.0
  • 基本架构完成,发布第一个可以编译版本(编译出二进制)。
  • C语言前端 15%。
  • 抽象语法 99%。
  • 第0层抽象代码 99%。
  • SSA 99%。
  • ARMv6汇编代码生成器 10%。
  • ARMv6汇编器 10%。
  • ARM-ELF动态链接器 100%。
  • 2011 - 2012 Semo C()mpiler 0.3.0
  • 完成寄存器分配模块。

开发团队

  • 王全伟 突壳开源

几个问题

  • Q:目前突壳的这个项目,对于未来的发展,团队有没有大体的计划和展望?
  • A:这是一个基于GPL协议的项目,团队也是以社区这种模式在做。其它更深远的不好说,因为项目还是比较前期的,现在说一些很不实际。
  • Q:和比较成熟的国外一些开源软件比较,析码有哪些优点?
  • A:在技术方面,析码的架构绝对称得上优良,这是重要的基础。只是这个架构还很年轻,需要慢慢发展,路子比较长。
  • Q:目前对于工具的使用上的指导文档较少,对于一个刚刚接触到这个项目的新人,如何让我们花更少的时间,对整个编译器有个直观的认识?
  • A:析码有一套非常完整的文档系统(wiki,pms,blog,bbs),部分内容以后会开放出来的。
  • Q:这个项目的发起是出于兴趣还是工作需要呢?
  • A:开源社区的组织结构是比较松散的,兴趣爱好是很关键的一点。
  • Q:已经有一些开源的编译器了,为什么要自己做呢?析码怎么跟它们竞争呢?
  • A:维护别人代码是很痛苦的,而且很难将其完全掌控。竞争现在谈不上,突壳把析码做了一个基本的原型(C前段+ARM后段),其它的就要靠社区靠大家的力量了。
  • Q:析码会考虑兼容其它语言吗?或者基于它设计一门新的语言?
  • A:C前段+ARM后段的原型会作为析码的主干版本由突壳维护下去,其它版本会放到社区去做。
  • A:析码是一个编译平台,特点在于源语言跟目标机的兼容性方面,理论上基于析码设计一门语言只需要实现一个该语言的front-para就可以,同时对于这种需求我们会提供相应技术支持的。
  • Q:目前国内MCU企业,无法独立生产的关键因素是没有编译器的支持,析码以后会有这方面的支持吗?
  • A:如果有这方面需求,我们很希望能与厂家展开深入合作。从技术上来说,让析码支持某种芯片只需要实现“back-para”:主要包含汇编器、链接器,在这方面突壳已经具备成功案例。

本文地址:https://codercto.com/soft/d/20763.html

The Art of Computer Programming, Volume 4,  Fascicle 3

The Art of Computer Programming, Volume 4, Fascicle 3

Donald E. Knuth / Addison-Wesley Professional / 2005-08-05 / USD 19.99

Finally, after a wait of more than thirty-five years, the first part of Volume 4 is at last ready for publication. Check out the boxed set that brings together Volumes 1 - 4A in one elegant case, and ......一起来看看 《The Art of Computer Programming, Volume 4, Fascicle 3》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换