【问题标题】:What is the "truly-the" function?什么是“真正的”功能?
【发布时间】:2021-09-19 00:55:09
【问题描述】:

在 SBCL 2.0.1 中,(macroexpand '(dolist (x '(1 2 3)) (princ x))) 返回:

(BLOCK NIL
  (LET ((#:N-LIST385 '(1 2 3)))
    (TAGBODY
     #:START386
      (UNLESS (ENDP #:N-LIST385)
        (LET ((X (TRULY-THE (MEMBER 3 2 1) (CAR #:N-LIST385))))
          (SETQ #:N-LIST385 (CDR #:N-LIST385))
          (TAGBODY (PRINC X)))
        (GO #:START386))))
  NIL)
T

TRULY-THE 是什么?它似乎是非标准的,因为我在 Common Lisp HyperSpec 中找不到它。

TRULY-THETHE 有什么区别?

【问题讨论】:

    标签: common-lisp sbcl


    【解决方案1】:

    来自 SBCL manual

    特殊运算符:true-the [sb-ext] 值类型形式

    指定form返回的值符合value-type,并使编译器无条件信任该信息。

    如果任何结果不是声明的类型,则后果是不确定的——典型的症状包括内存损坏。小心使用。

    换句话说,the 运算符在某些情况下(例如具有高级调试)编译为测试以检查指定类型的正确性,而truly-the 指示编译器从不执行此检查.

    【讨论】:

    • truly-the的实际用途是什么?
    • 我认为除了编译器编写之外没有任何实际用途(手册清楚地说:“简而言之:不要使用它。”)或者它可以用于记录部分您非常确定变量将具有特定值的程序。
    • truly-the 帮助编译器了解表达式的类型,从而帮助类型推断和代码生成
    • @coredump,你是对的!
    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多