Swift中的类型推断(自动类型检测)是如何工作的?

7
var str = "string"

LLVM如何检测变量是否为字符串?

3
想知道它是如何工作的。 - riyaz
3
类型推断是编译器的一部分,这是一个非常广泛的主题。 - marosoaie
2
@marosoaie 这个没有文档或解释吗? - riyaz
2
@riyaz https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-ID457 - Sam Fischer
2
@ryiaz 这个线程有一些有趣的参考资料:https://dev59.com/LXRC5IYBdhLWcg3wFNDX - marosoaie
显示剩余2条评论
1个回答

6
The compiler在其工作中分步进行,类型推导是其中的一步。
第一步通常是进行词法分析,在此过程中编译器将输入文件字节拆分为数字和字符串等单元(注意:还不是您所指的字符串),并丢弃空格和注释。
例如,它将示例中的输入流拆分为var、str、=、"、string和"。
第二步是语法分析或解析,编译器根据语言的语法构建和验证抽象语法树
在这种情况下,它将构建一个抽象语法树,表示一个变量声明语句(请参见语言参考中的Declaration statements),格式如下:
var variable_name = expression

其中表达式是字符串字面值

var variable_name = string_literal

第三步:语义分析(带类型推断)

第三步是进行语义分析和类型推断。在这种情况下,类型推断会推断字符串字面量的类型为String,并且因为关于变量str没有其他信息,它将推断str必须是一个String,因为表达式,也就是变量声明的右侧,是String类型。

在此步骤之后还有更多步骤。作为下一步,编译器通常会生成中间代码,然后优化中间代码,最后生成汇编代码。在那之后,编译器外部的工具链通常至少有一个链接阶段,用于生成最终可执行文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接