dip
文章平均质量分 74
fqbqrr
这个作者很懒,什么都没留下…
展开
-
d,dip1035系统变量
dip1035系统变量原创 2022-02-21 15:47:25 · 425 阅读 · 0 评论 -
dip1000区间副本
dip1000区间副本原创 2022-10-09 15:10:22 · 255 阅读 · 0 评论 -
dip1034加底部类型
原文地址作者:丹尼斯抽象用底层类型来解决d类型系统的部分漏洞和限制.对表示运行时错误/非终止函数有用.由于用例少,已拒绝先前的dip1017.本dip来补充.内容背景纯函数,代表输入->输出,而计算机,还可能永远计算.因而加上个⊥来表示函数计算过程中,未返回/赋值成功.如:bool isPrime(int x);bool foo(int x) { return isPrime(x);}虽然bool只返回真/假,但还可能未计算完(出错了).用⊥表示无穷循环/崩溃(内存不足原创 2021-02-17 22:19:31 · 423 阅读 · 5 评论 -
d改进:参数中的引用
//1,ref,想返回的任何参数引用,必须用`中`//模板与λ可以推导,其余则必须手动加属性@safe:ref int fun(ref int a) { return a; }//错误ref int gun(return ref int a) { return a; } //好ref T hun(T)(ref T a) { return a; } //好,自动推导//2,悬挂引用,弱...原创 2019-09-26 09:55:04 · 350 阅读 · 0 评论 -
d语言的改进:默认不抛与安全
加抛为函数属性基本原理当前,默认情况下允许函数引发异常.可以通过应用不抛属性来更改此行为.但一旦不抛在模块域或块中使用,其域中的所有函数都会受到影响;因此聚合不继承从外部域的不抛属性.如需要整个模块不抛,那么该属性不仅必须在模块域内应用,而且必须在每个聚合的定义内应用:空 栏(); //可抛struct S1 { `不抛` void foo(){bar();}//错误,bar...原创 2020-02-14 14:56:11 · 294 阅读 · 0 评论 -
d结构的移动语义
勾挂D的结构移动语义概述当前语言定义禁止结构类型维护到其实例的外部/内部引用,因为D可能选择通过简单的位复制操作来移走结构实例.此DIP的目的是保留此函数,并也允许到实例的内部/外部引用.这是通过允许该结构定义类似后复制的回调(叫后移动操作)来实现的,在移动后调用它,从而允许该结构更新移动搞失效的引用.参考#17448问题:由于缺乏这种支持而引起的问题,以及有关为什么需要这种支持的讨论....原创 2020-02-14 20:17:36 · 594 阅读 · 0 评论 -
d的复制构造函数
复制构造函数概述本文档提出了复制构造函数,它是后复制函数的替代方法.复制构造函数消除了对后复制的需求,并修复了其缺陷和固有限制.还讨论了演进和向后兼容性.理由和动机本节重点介绍了后复制存在问题,并说明了为什么复制构造函数比后复制好.本(本)概述无法有意义地重载或限定后复制函数.但,编译器不会拒绝限定器应用,如下所示:构 A{本(本)常 {}}构 B{本(本)不变{}}构 C{本(...原创 2020-02-15 13:53:49 · 387 阅读 · 0 评论 -
参数所有权与共享原子
概述DIP25和DIP1000中提出的语言特征通过检测指针是否超出了函数域,大大提高了给函数传递引用和指针的内存安全.相应,如果函数不允许转义引用,则容器可以安全地传递内部引用给函数.但,如果传递多个相同容器的引用给函数,则一个引用会渲染其他引用引用的空数据.该DIP旨在纠正该问题.这是在DIP 25和DIP 1000后的自然发展,是安全实施引用计数所必需的.这项提议是迈向博客文章"所有权和借...原创 2020-02-15 22:51:45 · 379 阅读 · 0 评论 -
d语言的dip1011`外部闭包`改进翻译
添加外(闭包)作为链接类型,以创建与闭包ABI兼容的函数,将UFCS调用的地址传递给外(闭包)函数将创建一个闭包成员函数可以隐式转换为外(闭包)函数描述建议外(闭包)添加为链接类型,即外(闭包)空 bar(Foo foo);//可转成闭包这种链接类型通过使第一个参数按与将上下文指针传递给闭包函数相同的方式传递,来修改函数的ABI.如果外(闭包)函数的第一个参数是类或对构的引用,则它就像...原创 2020-02-14 12:34:56 · 410 阅读 · 0 评论 -
dip:添加抛作为函数属性与命名参数
加抛来表示不抛的逆.因为不抛作为默认更好,用在模块顶时,如果有要抛的函数,就需要这个抛了.因为异常成本大,所以默认不抛才是最经济的,即不需要异常的开销.抛属性仅对函数/闭包有用.void bar() throw;struct S1 { nothrow void foo() { bar(); } //错误,不允许抛}struct S2 { void foo() { bar(); } // 可抛}抛与不抛不能混用,但一个管区间,一个管一个时可以.void abc() thro原创 2020-11-18 16:24:31 · 333 阅读 · 0 评论 -
dip1038,d的不丢
@不丢,使忽略返回值为编译错误.作为不能用异常时的补充.避免与通过用返回值报告错误的外部函数对接时的漏洞.原理:目前,被调向调用者发送不能忽略信号,只能靠异常,但有时不想/不能用异常.如:用c/c++写代码,其他语言调用d,不想依赖d运行时,不想用异常(太贵了).不丢提供编译时保护,由于所有函数都有返回类型,所以可与任意函数一起使用.可能的副作用函数:获取资源的malloc/mmap函数,生成随机数的rand/uniform,参数不同,可能有副作用的filter/map.他们的副作用都在于其具体实现.原创 2020-12-12 10:36:33 · 229 阅读 · 0 评论 -
dip25,中与引用.
原地址参考地址作者:W.B,AA.大意:d提供了许多系统级编码的功能,如无限制指针,整数和指针转换及@系统属性.但,定义这些危险操作时,还要考虑经济性.本dip能够保证引用不指向损坏对象.总之接收并想返回引用的函数,必须用中注解.模板/λ可以推导出,但其他声明必须显式注解.如:@安全:引用 整 函数(引用 整 a){中 a;}//错误引用 整 滚(中 引用 整 a){中 a;}//好引用 T 匈牙利(T)(引用 T a){中 a;}//好,模板用推导描述:当前d对避免悬挂指针有些规定原创 2020-12-25 18:13:15 · 311 阅读 · 0 评论