Metal and C++11
Metal Shading 语言是基于C++11的标准[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf]设计的, 在这个基础之上增加了一些扩展和限制. 这些具体可以参考详细的语法描述. 本文会简单介绍Metal对C++11所做的一些修改和限制.
重载(Overloading)
Metal Shading 语言支持C++11 section 13中所定义的重载, 除此之外, 还可以支持函数参数地址空间限定描述符(qualifier)的重载. 但是Graphic 和 Kernel函数不允许被重载。 (关于Qualifier 和 Graphics, Kernel函数等, 请参看Function Qualifiers 章节,会在以后译出)
模板(Templates)
Metal Shading 语言可以支持C++11 Section 14 所定义的模板语法。
预处理指令 (Preprocessor Directives)
Metal Shading 语言可以支持 C++11 Section16 所定义的预处理指令的语法。
限制
下面的C++11的特性不被Metal Shading 语言所支持:
Lambda 表达式
函数的递归调用
dynamic_cast 操作
类型推断 (type identification)
new 和 delete 操作
noexpect 操作
goto 语法
register, thread_local 存储修饰符
虚函数
类继承
异常捕获和处理
不能使用C++标准库, Metal Shading 会提供Metal所特有的标准库。
另外, Metal Shading 语言对指针的使用也有严格限制, Graphics 和 Kernel函数中的指针参数必须使用 device, threadgoupd, 或者 constant 等地址空间修饰符, 函数指针在Metal Shading 中是不支持的。
Metal 函数不能声明为main.
Metal Pixel Coordinate System
Metal Shading 语言是基于C++11的标准[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf]设计的, 在这个基础之上增加了一些扩展和限制. 这些具体可以参考详细的语法描述. 本文会简单介绍Metal对C++11所做的一些修改和限制.
重载(Overloading)
Metal Shading 语言支持C++11 section 13中所定义的重载, 除此之外, 还可以支持函数参数地址空间限定描述符(qualifier)的重载. 但是Graphic 和 Kernel函数不允许被重载。 (关于Qualifier 和 Graphics, Kernel函数等, 请参看Function Qualifiers 章节,会在以后译出)
模板(Templates)
Metal Shading 语言可以支持C++11 Section 14 所定义的模板语法。
预处理指令 (Preprocessor Directives)
Metal Shading 语言可以支持 C++11 Section16 所定义的预处理指令的语法。
限制
下面的C++11的特性不被Metal Shading 语言所支持:
Lambda 表达式
函数的递归调用
dynamic_cast 操作
类型推断 (type identification)
new 和 delete 操作
noexpect 操作
goto 语法
register, thread_local 存储修饰符
虚函数
类继承
异常捕获和处理
不能使用C++标准库, Metal Shading 会提供Metal所特有的标准库。
另外, Metal Shading 语言对指针的使用也有严格限制, Graphics 和 Kernel函数中的指针参数必须使用 device, threadgoupd, 或者 constant 等地址空间修饰符, 函数指针在Metal Shading 中是不支持的。
Metal 函数不能声明为main.
Metal Pixel Coordinate System
在Metal 中, 纹理或者Framebuffer 像素坐标系是基于左上角的 (top-left corner)
本文译自: https://developer.apple.com/library/ios/documentation/Metal/Reference/MetalShadingLanguageGuide/cplusplus/cplusplus.html#//apple_ref/doc/uid/TP40014364-CH8-SW1