deo*_*ian 14 c compiler-construction functional-programming type-inference
假设我们创建了C的重新实现,唯一的区别是推断了类型.仍然需要给出存储类和修饰符(const,static,restrict等),让我们暂时将注意力限制在单个文件C程序上.可以吗?主要障碍是什么?
关于什么可能导致类型推断问题的一些想法
演员可能需要一个"从"注释,类似于
var i = (uint32_t -> uint64_t) *some_pointer;
Run Code Online (Sandbox Code Playgroud)这些问题需要一些用户注释,但不应该太繁琐,是否有一些将这个想法从水中吹出的杀手问题?
编辑:为了澄清,我不是在谈论添加泛型或参数多态,只是对现有C类型进行类型推断.
编辑2014:任何对此概念感兴趣的人都可能想要研究Rust
Cir*_*四事件 10
GCC 5.1支持:
__auto_type 扩展,类似的C++ 11 autotypeof 扩展,类似于C++ 11 decltype
/* Same as: double j = 0.5; */
typeof(1 + 0.5) j = 0.5;
assert(j == 0.5);
Run Code Online (Sandbox Code Playgroud)
Linux内核示例:Linux内核中的类型检查宏如何工作?
_GenericC11关键字:C11 中_Generic的语法和示例用法
__auto_type i = 1;
assert(_Generic((i), int: 1, default: 0));
Run Code Online (Sandbox Code Playgroud)C会自动提升某些类型,这会使事情复杂化.但是为了可行,你需要与C存在一些额外的差异:现在,标准仍然在某种程度上支持传统的K&R C程序,并且要求以特定方式处理未指定的类型.(例如,在没有原型的情况下,参见函数参数的规则.过去也可以指定没有类型的函数和变量,它们将被默认为(int).(如何变量?仅限存储类. static foo;))在添加新的隐含类型机制之前,必须删除所有这些遗留类型处理.