热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

dip1038,d的不丢

不丢,使忽略返回值为编译错误.作为不能用异常时的补充.避免与通过用返回值报告错误的外部函数对接时的漏洞.原理:目前,被调向调用者发送不能忽略信号,只能靠异常,但有时不想不能用异常.

@不丢,使忽略返回值编译错误.作为不能用异常时补充.避免与通过用返回值报告错误的外部函数对接时的漏洞.
原理:
目前,被调调用者发送不能忽略信号,只能靠异常,但有时不想/不能异常.如:用c/c++写代码,其他语言调用d,不想依赖d运行时,不想用异常(太贵了).不丢提供编译时保护,由于所有函数都有返回类型,所以可与任意函数一起使用.
可能的副作用函数:获取资源malloc/mmap函数,生成随机数rand/uniform,参数不同,可能有副作用filter/map.他们的副作用都在于其具体实现.
其他语言:c++[[不丢]],rust#[必须用],…
@不丢导致的错误,可用cast(void)来去除.注意不丢不是类型的一部分,且不传递.必须显式注解.对除了聚集/函数声明外的声明无影响.
当且仅当是顶级表达式/逗号式中逗号左边的赋值式,才认为是可丢的.对带@不丢的函数/非赋值表达式且类型为带@不丢的聚集(构,类,联,接口)时,丢弃会报编译错误.前者检查语法,后者检查类型,表明,如果在其他表达式(逗号表达式)中包含不丢函数的函数值,则可能丢弃了返回值了,如:

//未注解类型
struct Result { int n; }
// @nodiscard函数
@nodiscard Result func() { return Result(0); }void main()
{import std.stdio: writeln;//逗号表达式使用了不丢函数返回值(writeln("side effect"), func());
}
//而另一个是检查类型,
// @nodiscard类型
@nodiscard struct Result { int n; }//未注解不丢的函数
Result func() { return Result(0); }void main()
{import std.stdio: writeln;//错误,函数返回类型也是逗号表达式类型.(writeln("side effect"), func());
}

两种不同检查.如上,都可用cast(void)来去掉.


推荐阅读
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 本文介绍了使用Rust语言编写、保存和编译程序的简单步骤。首先,打开记事本文件并编写程序代码,然后将代码保存到一个以.rs为扩展名的文件中。接下来,使用rustc命令来编译运行程序。最后,通过命令行运行编译后的程序,得到输出结果。如果遇到编译错误,可以下载Build Tools for Visual Studio 2017来解决。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
author-avatar
yangxinhui2602905795
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有