繁体   English   中英

找不到swift darwin文档

[英]can't find swift darwin documentation

我正在玩swift,并有以下简单的代码

在此输入图像描述

我想检查“sqrt”函数是如何实现的,所以我试图点击“Darwin.C.math”链接但没有任何反应。 我用谷歌搜索了“斯威夫特达尔文苹果文档”,但没有关于“达尔文”的消息。 那么有人可以告诉我,我如何找到“sqrt”功能的文档?

在java中,当我单击类名或方法名时,将出现源代码文件,其中包含有关如何实现方法和类的所有详细信息。 但我似乎无法对swift / xcode做同样的事情。

达尔文是Apple 开源项目的一部分 在那里,您可以查看macOS(如10.14.1 )和iOS(如11.0 )中的所有开源软件,以及有关Darwin和Apple通过BSD实现Unix的方法的文档。

此外,大多数Darwin API都是UNIX规范的实现(有一些显着的差异 ),因此只需查找许多UNIX文档站点中的任何一个,如下所示:

等🙂

您还可以使用手册页。 例如,在您的用例中,只需打开一个终端并输入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

sqrt的文档可以通过运行man sqrt 大多数Darwin函数都是桥接到Swift的C函数,它们没有记录在Xcode中。

但是你要求实现,这与文档完全不同。 为了向您提供实现,您必须拥有所有源代码,而stdlib,Foundation和Darwin之类的东西不能直接提供,因为它们是预编译的。 其中一些是开源的,所以你原则上可以找到源代码,但是仍然很难知道这正是你正在使用的代码。 这是编译语言的典型特征,因为没有简单的方法来反编译它们。

也就是说,如Ben所说,大多数源代码都可以在各个地方使用,如果你知道在哪里看的话。 sqrt(Double)是一个很好的例子,当它失败时,因为没有你可能想到的方式实现。 它由编译器通过__builtin_sqrt直接内联。 在可以直接转换为fsqrt操作的Intel处理器上,它可以是矢量化的,可以在编译时进行评估,也可以以各种其他方式进行内联。 在不同的平台上,有不同的选择。

在您的示例中,它在编译时计算并编码,就像您编写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有假的 )。

也就是说,我同意相关的手册页不会以某种方式导入到Xcode中真的很烦人。 这可能需要做很多工作,因为这些函数的文档都是用troff编写的,这可能是转换为Xcode使用的doc格式的痛苦,但即使这样也很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM