岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks

对于C++一系的语言,Name Mangling主要用于同名函数,同名类型和同名变量的重载。编译器可以在编译期将同名函数的不同签名形式区分开来。Name Mangling经常用于以下场合:函数同名称不同签名(函数重载);跨编译单元的变量、函数引用;动态链接库或其他形式的函数、变量导出。

尽管现阶段SASL不打算支持Member Function等比较复杂的行为,甚至暂时不考虑函数重载。但是作为现代语言编译的基本要素,SASL在语义分析阶段,仍然提供了较为完善的Name Mangling机制,为以后的编译器特性扩充打下基础。

SASL的Mangling语法如下:
mangled_name = 'M' basic_name '@' return_value_type parameter_type_list '@' 'Z'
basic_name = string '@'
return_value_type = value_type
parameter_type_list = ( value_type )*
value_type = qualifier_code type_code
qualifier_code = "UN" | "CN" | "NN" | "UC"
type_code = buildin_typecode | struct_class_typecode | array_type_code
buildin_typecode = dimension_code basic_type
dimension_code = scalar | vector | matrix
scalar = 'B'
vector = 'V' (1|2|3|4)
matrix = 'M' (1|2|3|4){2}
basic_type =
  'S1' | 'U1' | 'S2' | 'U2' | 'S4' | 'U4' | 'S8' | 'U8' | 'F' | 'D' | 'V' | 'B'
struct_class_typecode = 'S' string '@@'
array_class_typecode = 'A' type_code size '@@'

和主流语言相比,本Mangling暂时不支持Qualifier(Class Member,Namespace Qualifiers)。以后在需要Qualifier的时候再酌情添加。也就是说暂时不会考虑现有版本和以后版本在二进制上的兼容性。

以下是一个mangling的例子:

double foo();  => Mfoo@@NNBD@Z

posted on 2010-05-24 23:00 空明流转 阅读(1511) 评论(7)  编辑 收藏 引用

评论

# re: SASL 的 Name Mangling 2010-05-24 23:59 OwnWaterloo
SASL是什么? google了一下, 好像都不是……  回复  更多评论
  

# re: SASL 的 Name Mangling 2010-05-25 00:11 空明流转
@OwnWaterloo
softart shader language...  回复  更多评论
  

# re: SASL 的 Name Mangling 2010-05-25 00:34 OwnWaterloo
@空明流转
哦, 这样……
为什么要新造一门语言呢? —— 如果这个问题过于无聊可以无视……
我只是想收集一下创造一门语言的n个理由……
谢谢……  回复  更多评论
  

# re: SASL 的 Name Mangling 2010-05-25 08:40 ccsdu2009
语法难懂!
  回复  更多评论
  

# re: SASL 的 Name Mangling 2010-05-25 11:07 空明流转
@ccsdu2009
呃,哪里难懂了。。。  回复  更多评论
  

# re: SASL 的 Name Mangling 2010-05-25 18:16 ccsdu2009
@空明流转
最基本 要让学过其他语言的程序员快速掌握
  回复  更多评论
  

# re: SASL 的 Name Mangling 2010-05-25 19:58 空明流转
@ccsdu2009
name mangling 是编译器处理的问题,和语言本身无关。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理