我正在使用swift,并且有以下简单的代码

我想检查"sqrt“函数是如何实现的,所以我尝试单击"Darwin.C.math”链接,但什么也没有发生。我在谷歌上搜索了“斯威夫特·达尔文苹果文档”,但没有找到任何关于“达尔文”的信息。那么,有人能告诉我,如何找到关于"sqrt“函数的文档吗?
在java中,当我单击类名或方法名时,会出现源代码文件,其中包含有关方法和类如何实现的所有细节。但我似乎不能用swift/xcode做同样的事情。
发布于 2019-01-18 05:51:12
达尔文是苹果Open Source Projects的一部分。在那里,您可以查看macOS (如11.2)和iOS (如13.5.1)中的所有开源软件,以及关于Darwin and Apple's approach to implementing Unix via BSD的文档。
此外,大多数Darwin API都是UNIX规范的实现(使用some notable differences),因此只需查找许多UNIX文档站点中的任何一个,如下所示:
接口链接
等
您还可以从CLI使用计算机上的手册页。例如,在您的用例中,只需打开终端并输入man sqrt
SQRT(3) BSD Library Functions Manual SQRT(3)
NAME
sqrt -- square root function
SYNOPSIS
#include <math.h>
double
sqrt(double x);
long double
sqrtl(long double x);
float
sqrtf(float x);
DESCRIPTION
The sqrt() function compute the non-negative square root of x.
SPECIAL VALUES
sqrt(-0) returns -0.
sqrt(x) returns a NaN and generates a domain error for x < 0.
VECTOR OPERATIONS
If you need to apply the sqrt() function to SIMD vectors or arrays, using the following functions provided by the Accelerate.frame-
work may give significantly better performance:
#include <Accelerate/Accelerate.h>
vFloat vsqrtf(vFloat x);
vFloat vrsqrtf(vFloat x);
void vvsqrtf(float *y, const float *x, const int *n);
void vvsqrt(double *y, const double *x, const int *n);
void vvrsqrtf(float *y, const float *x, const int *n);
void vvrsqrt(double *y, const double *x, const int *n);
SEE ALSO
math(3)
STANDARDS
The sqrt() function conforms to ISO/IEC 9899:2011.
BSD December 11, 2006 BSD你也可以使用在线手册页面,以防更符合你的风格:https://www.freebsd.org/cgi/man.cgi
发布于 2019-01-18 06:51:09
通过运行man sqrt可以获得sqrt的文档。大多数Darwin函数都是桥接到Swift的C函数,它们没有在Xcode中记录。
但您要求的是实现,这与文档完全不同。要为您提供实现,您必须拥有所有源代码,而像stdlib、Foundation和Darwin这样的东西不会直接提供这些,因为它们是预编译的。其中一些是开源的,所以原则上你可以找到源代码,但仍然很难知道这是不是你正在使用的代码。这是典型的编译语言,因为没有简单的方法来反编译它们。
也就是说,正如Ben指出的那样,如果你知道去哪里找,那么大多数源代码都可以在不同的地方找到。尽管如此,sqrt(Double)是一个很好的例子,因为没有您可能认为的实现方式。它是由编译器通过__builtin_sqrt直接内联的。在英特尔处理器上,可以将其直接转换为fsqrt operation,可以将其矢量化,可以在编译时对其进行评估,也可以通过各种其他方式进行内联。在不同的平台上,有不同的选项。
在您的示例中,它是在编译时计算并编码的,就像您编写了var result = 3.0一样。您可以在LLVM IR输出中看到这一点:
echo "import Darwin; var result = sqrt(9.0)" | swiftc -emit-ir -O -
...
define i32 @main(i32, i8** nocapture readnone) local_unnamed_addr #0 {
entry:
store double 3.000000e+00, double* getelementptr inbounds (%TSd, %TSd* @"$S4main6resultSdvp", i64 0, i32 0), align 8
ret i32 0
}
...因此,没有任何“实现”可以拉出来。没有真正的sqrt函数(尽管至少某些版本的macOS有a fake one)。
也就是说,我同意相关的手册页不能以某种方式导入到Xcode中,这真的很烦人。这可能有很多工作要做,因为这些函数的文档都是用troff编写的,将其转换为Xcode使用的doc格式可能会很痛苦,但即便如此,它也会很好。
https://stackoverflow.com/questions/42782988
复制相似问题