Swift和swiftc有什么区别?

12

swift和swiftc有什么区别?

我阅读了一些资料,称swiftc是指向swift的符号链接,但在macOS Mojave 10.14.6上并非如此:

-rwxr-xr-x  1 root  wheel  18288 Jul 29 23:49 /usr/bin/swiftc

无论是 swift 还是 swiftc,它们的 --help 菜单都包含 OVERVIEW: Swift compiler,但是它们的选项虽然类似,但是不同。

1个回答

17

swift是用于Swift的交互式环境(REPL)。

swiftc是Swift编译器。

/usr/bin目录中的文件只是重定向到当前选定版本(基于xcode-select)的指针。如果您查看文件大小,您会注意到这些文件只有18kB。它们不是真正的可执行文件。

实际版本可以使用xcrun找到:

$ xcrun -f swift
/Applications/Xcode-beta7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift

如果你查看那个目录,你会看到swiftc是一个指向swift的符号链接(这是一个90MB的可执行文件)。该可执行文件只是检查它被运行时使用的名称,并相应地调整其行为。


2
Swift也可以运行Swift程序,并调用Swift包管理器。 - Martin R
@RobNapier,谢谢。swiftc怎么可能是指向swift的符号链接?这很奇怪;编译器不应该将其功能委托给REPL。我也觉得很奇怪,为什么/use/bin/swift没有实现为指向当前选择的xcrun版本的符号链接? - Shuzheng
2
编译器没有将任何内容委托给REPL。它们只是相同的二进制文件。这在Unix世界中非常普遍。 - Rob Napier
1
每次使用命令行调用时,您都会将一些项作为数组传递。有趣的是,该数组中的第一个项目是命令本身的名称。因此,如果您运行 swiftc foo.swift,那么参数数组将是 [swifc, foo.swift],正如Rob所说,它是指向 swift 二进制文件的符号链接。因此,根据第一个参数,它将以不同的方式进行处理。 - mfaani

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