【问题标题】:In Objective-C ARC, what are "BPTRs declared within extern "BCPL" blocks"?在 Objective-C ARC 中,什么是“在外部“BCPL”块中声明的 BPTRs”?
【发布时间】:2013-05-07 22:24:35
【问题描述】:

Clang documentation for ARC 中,它说:

ARC 适用于 Objective-C 指针类型、块指针类型和 [开始 Apple 8.0,LLVM 3.8] 在 extern "BCPL" 中声明的 BPTR 块。

这些“在外部“BCPL”块中声明的 BPTR 是什么?

【问题讨论】:

    标签: objective-c automatic-ref-counting llvm clang bcpl


    【解决方案1】:

    这是一个小笑话。

    C++ 能够使用 C 链接标记标识符,这通常意味着不会对具有相同名称但参数签名不同的函数进行名称修改,因为直到最近,C 还没有重载的概念1.

    您指定链接的方式是将标识符括起来:

    extern "C" {
        whatever ...
    }
    

    现在,BCPL 是一种甚至早于 C 的语言(它实际上是 C 谱系的一部分),它的“链接”(因为缺少更好的词)只是一个称为全局向量的地址表。

    您引用的该文档的作者只是幽默,CLang 实际上并没有提供 extern "BCPL" 的东西。您还会注意到 LLVM 的当前版本是 3.2,而 3.3 直到今年 6 月才发布。另一个迹象表明作者正在让我们继续,LLVM 3.8 评论。

    由于该句子的意图只是显示注释(在[] 内)的工作原理,因此文本的其余部分在很大程度上是无关紧要的。


    1随着 C11 中类型泛型表达式的引入,它现在具有某种重载,尽管在编译时而不是运行时完成。

    【讨论】:

      【解决方案2】:

      这行显然是从未知上下文中随机抽取的,只是为了演示修订标记,例如 [beginning Apple 8.0, LLVM 3.8],并且 BPTR 和 BCPL 并不意味着任何特定的东西。一般来说,BPTR的意思是字节指针。

      【讨论】:

      • 如果我能提供更正,BPTR 是在 AmigaOS 中声明的类型,因为 AmigaDOS 是 Tripos 的一个端口,用 BCPL 编写。 AmigaOS 使用 APTR 作为“地址指针”,使用 BPTR 作为“BCPL 指针”。 BPTR 不是字节指针,因为 BCPL 本身是一个字寻址的虚拟机,而不是像 C 那样的字节寻址的机器。因此,要将 BPTR 转换为字节地址,您将评估 ap = (APTR)(((WORD)bp) *大小(字))。大多数程序员只会做一些硬件假设并编写 ap = (APTR)(bp
      • 嗨塞缪尔,感谢您的评论 - 我不知道这一点。很棒的信息!
      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2010-12-27
      • 2013-03-09
      • 2012-12-23
      • 1970-01-01
      • 2012-03-05
      • 2010-12-30
      相关资源
      最近更新 更多